这一篇写给谁
上一篇我讲了 AI Agent 是什么——模型会想、工具会做、循环会坚持。这篇我想把视角拉低一层,看看那个循环本身是谁在驱动。它就是 Harness。
如果你还没看过上一篇,强烈建议先读《AI Agent 是什么:从聊天机器人到会干活的程序》。这篇是它的续集,同样面向零基础。
用一句话理解 Harness
Harness 是让 Agent 的「循环」转起来的那套引擎。
没有它,模型只是「一个很会说话的 API」;有了它,模型才变成「一个会自己动手的 Agent」。
你可以把它想成 Agent 的操作系统:模型是 CPU,Harness 是操作系统——负责调度、管理资源、处理那些「CPU 本身不管」的杂事。
为什么光有模型不够
假设你只想用模型做一个很简单的事:让它「读一个文件,总结内容」。
你直接调用模型 API,模型说:「好的,我总结如下……」——但等等,它读不了文件,因为读文件需要工具。模型只能「说话」,不能「读」。
于是你要自己写程序:
1. 读文件 -> 得到文件内容
2. 把文件内容放进请求里,发给模型
3. 模型返回总结
这看起来还行。但如果是多步任务呢——比如「读三个文件、对比、找出不一致」:
1. 读文件A
2. 读文件B
3. 读文件C
4. 把A、B、C全塞进请求
5. 模型分析
6. 模型可能说「我要再读一下第4个文件」
7. 你又去读第4个文件,再塞回去……
8. 循环……
你发现麻烦了吗?每一步「模型说要做什么 → 你去做 → 结果塞回去 → 再问」的循环,都要你手写。 任务越复杂,这个「塞来塞去」的样板代码就越繁琐。
Harness 就是把这个循环自动化了:你告诉它「模型能调用这些工具、目标是这个」,它自己一遍遍帮你跑这个循环,直到完成。
Harness 具体帮你做了哪些事
展开说,一个 Harness 通常负责这些事:
1. 跑循环
一遍遍「模型思考 → 调用工具 → 把结果给模型看 → 再思考」,直到任务完成。这是它的本职工作。
2. 管上下文
模型的「记忆」有限。对话越长,它越可能忘记开头。Harness 负责在上下文快满时压缩、精简、决定哪些保留哪些丢掉,让 Agent 保持「清醒」。
3. 执行工具
模型说「我要调用某个工具」,Harness 真的去调用,然后把结果格式化好还给模型。它把工具和模型之间「翻译」通了。
4. 管记忆
让 Agent 跨任务记得东西——比如项目的规范、之前的决定。这样它「越用越懂你」。
5. 设护栏
高危操作(删文件、发请求)要不要拦一下?Harness 做权限校验,防止 Agent 乱来。这一条最容易被忽略,但最要命。
6. 接生态(MCP)
现在有个标准叫 MCP,让 Agent 能统一地接入各种现成的工具和数据源。Harness 负责实现这个接口,Agent 就能即插即用地接别人做好的工具,不用为每个工具写私有协议。
一个类比帮你记住
把 Agent 想象成一辆自动驾驶车:
- 模型 = 车的大脑,负责「判断」
- Harness = 底盘 + 控制系统 + 仪表盘
- 循环 = 发动机转起来
- 上下文管理 = 油箱容量管理
- 工具调度 = 方向盘控制车轮转向
- 权限 = 刹车系统
大脑再聪明,没有底盘和控制系统,车也动不了。Harness 就是那个让「大脑」真正驱动「行动」的底盘。
你需要理解 Harness 吗
很多人会问:我不用 Harness,我用 Claude Code 或 Agent SDK 这种现成的工具不就行了?
答案是:你当然可以只用现成的,但理解 Harness 有几个实打实的好处:
- 知道自己站在哪:用现成工具时,你至少明白「是它在跑那个循环」,出了问题知道从哪儿查。
- 判断要不要自建:当你的需求超出现成工具(比如特殊的多 Agent 协作),你要知道自建的代价在哪里。
- 做正确的取舍:上下文给多给少、循环放不放开、权限设多严——这些设计决策,理解了 Harness 你才能做对。
两种选择
| | 用现成(Claude Code / Agent SDK) | 自己造 Harness | |---|---|---| | 上手 | 快 | 慢 | | 稳定 | 高 | 低 | | 可定制 | 受限 | 完全可控 | | 适合 | 大多数人 | 特殊需求 / 学习 |
我的建议:先用熟现成的,理解它的工作方式;除非有明确需求,否则别轻易自己造轮子。
一句话总结
Harness 是把「会说话的模型」变成「会干活的 Agent」的引擎。 它跑循环、管上下文、执行工具、设护栏。理解了它,你就理解了 Agent 是「怎么活起来的」。
想深入看 Harness 内部到底有哪些零件、怎么设计,可以看我的另一篇《解剖 Agent Harness:驱动 AI 代理运行的引擎》。