AI 说:“代码写好了,测试也通过了。”
但它可能既没有创建文件,也没有运行测试。
在普通对话框里,AI 可以生成一段看起来正确的代码,也可以根据代码推测运行结果。可如果它没有接触文件系统、调用命令、读取输出,那么所谓的“完成”,可能只是一次语言生成。
这正是 AI 代码生成与 AI 编程 Agent 的分界线:前者给出答案,后者必须在真实环境中完成任务。
要跨过这条线,只靠模型不够。代码要写进文件,命令要经过权限判断并实际执行,运行结果还要重新送回 Agent。把这些环节串成闭环的,就是藏在模型背后的Agent Harness。
上一篇提到:
AI Agent ≈ Model + Harness模型负责理解任务、决定下一步做什么;Harness 提供工具、环境和反馈,让行动真正发生。
这次不讲抽象定义,我们直接拆解一段 Claude Code 的真实执行记录。
任务很简单:
写一个 Python 脚本,参数是 JSON 数组,数组元素为纯数字,脚本计算参数之和。
从收到要求到汇报完成,整个过程可以拆成五步:
理解 → 写入 → 执行 → 反馈 → 汇报
Claude Code 需要先把自然语言要求转换成代码方案:
使用 Python 编写脚本; 从命令行接收 JSON 数组; 支持整数和小数; 输出所有数字之和。
截图没有展示模型内部的推理过程,但生成的代码反映了最终选择:
import argparse import json import sys def parse_numbers(value: str) -> list[int | float]: try: numbers = json.loads(value)它用argparse接收参数,用json解析数组,再通过parse_numbers处理输入。
到这里,模型只是决定了“怎么做”。代码要进入真实项目,还需要 Harness 提供行动能力。
接下来,Claude Code 调用了 Write 工具:
Write(sum_json.py) └─ Wrote 32 lines to sum_json.py这是 Harness 发挥作用的第一个直接证据。
模型生成代码,Harness 调用文件工具,把内容写入当前工作目录,形成一个 32 行的sum_json.py文件。
这和在聊天窗口里返回代码并不是一回事。后者还要由人复制、创建文件、粘贴并保存;前者已经改变了真实环境。
Agent 不只是在告诉你怎么做,它已经开始动手了。
文件写完后,Claude Code 没有马上宣布完成,而是调用 Bash:
python3 /Users/huzi/coding/meeting-demo/sum_json.py '[1, 2, 3.5]' && \ python3 /Users/huzi/coding/meeting-demo/sum_json.py '[]'这条命令运行了两组输入:
[1, 2, 3.5],验证整数和小数混合的情况; [],验证空数组这个边界情况。
截图里还有一行:
Allowed by auto mode classifier它说明工具调用还经过了当前执行策略的权限判断。模型提出要运行命令,Harness 负责把调用交给权限机制,并在获得允许后执行。
所以,“Agent 会运行命令”至少包含两件事:模型决定运行什么,执行系统决定能不能运行,并负责把命令交给真实环境。
Python 进程返回了两行输出:
6.5 0对应:
[1, 2, 3.5] → 6.5 [] → 0这不是模型阅读代码后推测的结果,而是 Python 真实运行后的输出。
Harness 把输出送回任务上下文,Agent 才能判断:文件能不能执行,程序输出是否符合预期,下一步应该继续修改还是结束任务。
这条反馈通道决定了 Agent 能不能形成闭环。如果返回的是报错,它可以读取错误、修改代码、再次运行;如果结果符合预期,它才有依据汇报完成。
没有反馈,Agent 只能执行动作;有了反馈,它才能根据结果继续工作。
收到结果后,Claude Code 在最终回复中说明:
已创建脚本:sum_json.py随后给出使用方法:
python3 sum_json.py '[1, 2, 3, 4]' # 输出:10它还补充了小数示例:
python3 sum_json.py '[1.5, 2, 3.2]' # 输出:6.7最后汇报:
测试已通过。这里要分清“真实测试”和“使用示例”:Bash 实际执行并返回的是6.5和0;10和6.7是最终回复里补充的示例。
真正支撑“测试已通过”的,不是这句话本身,而是前面发生过的工具调用和执行反馈。
把五步连起来,就能看清模型和 Harness 的分工:
理解:模型把要求转换成代码方案 ↓ 写入:文件工具创建 sum_json.py ↓ 执行:权限判断通过后,命令工具运行脚本 ↓ 反馈:环境返回真实结果 6.5 和 0 ↓ 汇报:Agent 根据执行记录说明结果在这次任务中,我们能直接观察到 Harness 提供的四项能力:
文件工具:把代码写进真实文件 命令工具:在真实环境中运行程序 权限控制:约束工具调用能否执行 反馈通道:把程序输出送回 Agent单独看,它们只是几个工具和接口。连起来,它们才构成 Agent 的执行闭环:
决策 → 行动 → 观察 → 再决策所以,判断一个 AI 编程工具是否真的完成了任务,不能只看它最后说了什么。还要看文件是否发生变化、命令是否实际执行、结果是否返回,以及它的结论能否被执行记录验证。
模型让 AI 知道下一步该做什么,Harness 让这一步真实、可控、可验证地发生。
下一篇,我们进入 Harness Engineering:当任务从一个脚本变成真实项目,怎样设计这套执行闭环,才能让 Agent 少走弯路,也不把“做过了”误当成“做对了”。
后续持续更新 AI 编程实战技巧。
往期文章请查看:AI 编程系列
关注本号,不错过 AI 编程干货,转发收藏,开发遇到问题随时翻阅。
夜雨聆风