乐于分享
好东西不私藏

把 AI 协作做成一套 Agent Harness

把 AI 协作做成一套 Agent Harness

最近我越来越强烈地感觉到一件事:

AI 的上限,不只取决于模型有多聪明,也取决于你把它放进什么样的工作系统里。

以前我用 AI,更多是把它当成一个很强的个人助手。给它一个需求,它理解、规划、执行、自查,最后告诉我完成了。

这个模式当然有用,但它也有一个很明显的问题:同一个 Agent 从头做到尾,最后还要自己判断自己做得好不好。

这就像让一个人写方案、做执行、当评委、再给自己打分。它不是不会发现问题,而是天然容易放过自己。

尤其在复杂任务里,问题会更明显:需求一开始没展开,执行中范围漂移,自评时又过于乐观。最后结果看起来完整,但真正一用,核心流程可能是坏的。

所以我开始思考:我们是不是不应该只追求一个更强的 Agent,而是应该给 Agent 设计一套更好的协作结构?

这就是我整理 Agent Harness 这套方法的原因。不是召唤更多 Agent,而是建立制衡关系

很多人一听多 Agent,第一反应是:那是不是开三个 Agent,让它们一起想方案?

但我觉得这不是重点。

如果三个 Agent 都在写答案,那它们只是三个写手。你最后可能得到三份相似但互相冲突的结果,还要自己来合并。

真正有价值的不是“人数变多”,而是“角色变清楚”。

在我的设计里,有三个核心角色:

Planner,规划者。

Generator,生成者。

Evaluator,评估者。

还有一个隐藏角色:Coordinator,协调者。

Coordinator 不算在三个 Agent 里面,它更像项目经理,负责保存用户意图、分配任务、组织文件交接、控制边界,以及决定什么时候继续迭代,什么时候结束。

这套结构的关键不是并行,而是制衡。

Planner 不负责写。

Generator 不负责最终验收。

Evaluator 不负责生产。

每个角色只做自己该做的事。Planner 只定义“要什么”,不要急着规定“怎么做”

我以前很容易犯一个错误:让 AI 一开始就把方案拆得很细,甚至让它提前决定技术实现。

后来我发现,上游规划太细反而危险。

因为如果 Planner 一开始做了一个错误的技术判断,这个错误会一路传导到后面。Generator 会按错的方向实现,Evaluator 也可能沿着错的框架验收。

所以 Planner 应该克制。

它要做的是把一句模糊需求展开成高层规格:目标是什么,用户是谁,范围是什么,什么不做,有哪些约束,什么情况算完成。

但它不要抢着写实现方案。

好的规划不是把路径定死,而是把方向说清楚。Generator 不能直接开干,它要先签合同

这套方法里,我最喜欢的机制是 iteration contract,也就是迭代合同。

很多 AI 任务失败,并不是因为模型不会做,而是因为“完成”的定义太模糊。

用户觉得完成是核心流程可用。

Generator 觉得完成是页面写完、代码跑起来。

Evaluator 如果没有标准,也只能凭感觉判断。

所以在每一轮真正生成之前,Generator 和 Evaluator 要先协商一份合同。

这份合同要写清楚:

本轮做什么。

交付物是什么。

验收标准是什么。

怎么验证。

哪些东西本轮不做。

如果失败,怎么进入下一轮。

默认一轮只做一个功能、一个用户流程,或者一个可验收的 vertical slice。

这一步看起来慢,但它其实是在避免后面更大的浪费。

不要等做完之后才发现,大家对“做好了”的理解完全不同。Evaluator 是整套系统里最重要的角色

我现在越来越觉得,评估器比生成器更重要。

因为生成能力会越来越强,但判断质量的能力,不一定会自然变强。

尤其是 AI 生成的东西,经常有一种迷惑性:表面很完整,语言很流畅,结构也好看,但细看会发现核心判断不稳,功能没有真跑,设计很模板,或者证据不可靠。

所以 Evaluator 必须独立,而且必须严格。

它不能只听 Generator 说“我已经检查过了”。它要自己看,自己跑,自己点,自己验证。

如果是代码,就跑测试、看 diff、查日志。

如果是前端,就打开页面、点流程、看截图。

如果是文档,就检查结构、事实、引用和一致性。

Evaluator 的输出也不能只是“不错”或“有待优化”。它要 findings first,先列问题,再给结论。

我给它保留了四个默认维度:

设计质量。

原创性。

工艺。

功能性。

这四个维度特别适合评估那些“看起来不错但可能很 AI”的结果。

比如一个页面用了漂亮渐变、白色卡片、很多圆角,看起来很完整,但如果它和业务无关、没有真正的视觉判断,那就不应该得高分。

AI 最容易产出的是“精致的通用答案”。Evaluator 的任务,就是把这种表面完整性拆穿。评估器也需要训练,不是写一句 prompt 就够了

一个独立 Evaluator 并不会天然严格。

它也可能过于礼貌,也可能被表面完成度骗过去,也可能漏掉真正重要的问题。

所以 Evaluator 本身也要被校准。

我的做法是给它示例、反例、评分维度和惩罚项。然后看它的评估日志,找出它和人类判断不一致的地方,再修改 rubric 和 prompt,再重跑。

这个过程很像训练一个 QA 同事。

你不能只说“你要严格一点”。你要告诉它,什么叫好,什么叫勉强可以,什么叫失败,哪些问题是阻塞项,哪些只是 polish。

只有评估信号稳定,Generator 才有明确的改进方向。文件交接比长聊天更可靠

另一个重要设计是:角色之间尽量通过文件交接,而不是一直聊天。

比如:

10-product-spec.md

20-evaluation-rubric.md

25-iteration-contract.md

30-generation-report.md

40-evaluation-report.md

50-final-summary.md

文件的好处是清楚、短、可追踪。

Planner 写规格,Generator 读规格。

Generator 写生成报告,Evaluator 读报告但不盲信。

Evaluator 写评估报告,Coordinator 决定下一轮。

这比一个长长的共享聊天记录稳定得多。

长聊天很容易污染角色边界,也很难复盘到底是哪一步出了问题。文件则让每一步都留下证据。上下文不够时,不只是压缩,而是重置

长任务里还有一个很常见的问题:模型工作到后面,会开始丢状态,甚至提前收尾。

很多人的直觉是做上下文压缩,把前面的内容总结一下继续给它。

但我更喜欢另一种方式:上下文重置。

也就是启动一个新的 Generator,用一份结构化交接文档告诉它:当前目标是什么,已经做了什么,改了哪些文件,当前合同是什么,哪些检查失败,下一步要做什么。

这相当于给模型一块干净的白板。

不是让它背着越来越重的历史继续跑,而是让它接手一个清晰的工作状态。Harness 也不能迷信,组件要能拆

我不认为这套系统应该永远保持复杂。

每个组件都代表一个假设:

Planner 存在,是因为模型可能低估需求。

Evaluator 存在,是因为生成者自评不可靠。

迭代合同存在,是因为任务边界容易漂移。

上下文重置存在,是因为长任务里模型可能失去状态。

但模型会进步。今天必要的脚手架,明天可能变成负担。

所以 harness 也要定期做消融:一次只移除或简化一个组件,然后比较结果有没有变差。

如果模型已经能连续稳定工作很久,也许不需要每个小功能都做一轮合同。可以保留 Planner,提前冻结最终验收合同,让 Generator 连续完成更大范围任务,最后由 Evaluator 做一次严格总评。

但底线不能变:生成和评估必须分离。我真正想复用的是一套工作协议

我把这套方法整理成 skill,不是为了绑定某一个工具。

它可以在 Claude 用,也可以在 Codex 用,甚至可以在任何支持角色提示词、文件交接、子 Agent 或顺序角色模拟的环境里用。

对我来说,它真正有价值的地方,是把 AI 协作从“一个模型努力完成任务”,变成“一个系统稳定地产出结果”。

这也是我最近对 AI 工具最大的认知变化:

不要只问模型能不能做。

要问你给它搭了什么工作系统。

单个 Agent 很强,但它仍然会自信、会偷懒、会误判、会提前结束。

一个好的 harness,不是让 AI 更像人,而是让 AI 更像一个有流程、有质检、有交接、有复盘的团队。

这才是我认为 Agent 工作流真正值得探索的地方。

我也把这套方法整理成了一个开源 skill,放在 GitHub 上,包含中英双语 README、可安装的 SKILL.md、中文阅读版和文章稿。

GitHub 地址:

https://github.com/samwang0041-star/agent-harness-skill

欢迎直接安装、改造,或者把它迁移到你自己的 AI 工作流里。