Harness 五子系统模型

Published 2026-08-21 14:05 527 words 3 min read

This post is not yet available in English. Showing the original.
"harness"这个词在 AI coding agent 的圈子里被用得越来越多了,但大部分人说 harness 的时候,其实指的是一个 prompt 文件。一个 prompt 文件不是 harness。

指令子系统:创建 AGENTS.md(或 CLAUDE.md),内容包括项目概览和目的、技术栈和版本、首次运行命令、不可违反的硬约束、指向更详细文档的链接。

工具子系统:确保 agent 有足够的工具访问权限。不要因为”安全考虑”把 shell 给禁了,agent 连 pip install 都跑不了,还怎么干活?但也别什么都开放,按最小权限原则来。

环境子系统:让环境状态自描述。用 pyproject.tomlpackage.json 锁定依赖,用 .nvmrc.python-version 指定运行时版本,用 Docker 或 devcontainer 让环境可重现。

状态子系统:长任务必须有进度跟踪。用一个简单的 PROGRESS.md 文件记录:哪些做完了,哪些在做,哪些被阻塞。每个会话结束前更新,下一个会话开始时读取。

反馈子系统:这是投入产出比最高的子系统。在 AGENTS.md 里显式列出验证命令:

验证命令:
- 测试:pytest tests/ -x
- 类型检查:mypy src/ --strict
- Lint:ruff check src/
- 完整验证:make check(包含以上全部)

五个子系统缺一个,harness 就不完整,agent 用起来总会别扭。

量化 harness 组件价值的方法:用”控制变量排除法”。保持模型不变,逐个移除五个子系统,看哪个子系统缺失时性能下降最多。下降最多的组件,说明它在当前任务里边际贡献最大,值得优先保留;是否要加强它,取决于失败归因,而不是只看下降幅度。几乎没有影响的组件,也不能直接判定为无用:它可能是冗余、设计失效,或还没有被这个任务充分触发。这个实验回答的是”当前哪个组件最有价值”,不能单独证明”瓶颈在哪里”。真正定位瓶颈,要先看失败记录和归因:任务没说清楚、上下文不足、环境不可复现、验证反馈缺失,还是状态管理断裂;组件拆除结果只能作为辅助证据。