三个数字:同一个模型,harness 不同,端到端性能可以差 6 倍(Jung & Son, 2026);LangChain 的 DeepAgents 在 Terminal-Bench 2.0 上从 52.8% 提到 66.5%,只改了 harness,一行模型没动(Agent Harness Engineering Survey);SWE-agent 用同一个 GPT-4,比裸 Shell 基线相对提升 64%(Yang et al., NeurIPS 2024)。
模型是所有人都在谈论的那一半,harness 是决定成败却很少被认真讨论的另一半。先给定义:harness 是包裹着模型的那个有状态的程序——它决定模型每一步看见什么,也决定模型的输出能对世界做什么。 工具定义、控制循环、权限、沙箱、上下文管理、验证门,全是它。
如果你只带走一句话,就带走这个:
好的 harness 只做一种分工:判断归模型,物理归代码。提示词里的规则是恳求——“请不要删除文件”;harness 里的规则是物理法则——“你无法删除文件”。该是物理的做成物理,该是判断的留给判断,harness 的所有设计问题都是这一句的展开。
这是本系列第三篇。第一篇讲设计时的减法(删掉 80% 提示词规则),第二篇讲运行时的减法(上下文管理)。这篇回答一个自然的追问:从提示词里删掉的规则去哪了? 答案是——好的那部分没有消失,它们从自然语言搬进了代码,从恳求变成了物理。
下面按三件本职工作展开,每一件配上论文证据。
本职一:把世界翻译成模型好用的接口(ACI)
这条线的开山之作是 SWE-agent(NeurIPS 2024)。它提出了一个当时反直觉、如今已成共识的主张:LM agent 是一类新的用户,有自己的需求和能力边界——就像人类程序员需要 IDE,agent 需要专门为它设计的 Agent-Computer Interface(ACI)。
这篇论文的消融实验,是我见过的关于”接口设计有多重要”最干净的证据(SWE-bench Lite,同一个 GPT-4 Turbo):
| 接口改动 | 解决率 |
|---|---|
| 完整 ACI | 18.0% |
| 文件查看器从 100 行窗口改成 30 行 | 14.3% |
| 文件查看器直接展示整个文件 | 12.7% |
| 去掉专用编辑工具 | 10.3% |
| 没有搜索工具 | 15.7% |
| 有搜索工具,但是”翻页式”的(像 Vim 那样一条条看) | 12.0% |
最后两行值得盯着看十秒:一个设计糟糕的接口,比没有这个接口更糟。 翻页式搜索给了 agent 逐条查看的能力,agent 就真的会去逐条查看每一个匹配——把上下文和轮数烧在穷举上。换成一次性返回摘要列表(且上限 50 条、超了就提示你把查询写得更具体),性能立刻回来。接口的形状,直接塑造 agent 的行为。
从这些实验里可以蒸馏出 ACI 的几条设计法则:
- 动作要简单紧凑。人类可以消化 Vim 的一百个快捷键,agent 更适合少量、文档简短、一次完成一件事的命令;
- 反馈要有信息量但克制。整个文件是噪声,100 行窗口刚好;这与上一篇讲的 context rot 是同一个问题——接口是上下文的第一道供给侧;
- 护栏要在动作发生时拦截,而不是事后补救。SWE-agent 的编辑命令内置 linter:语法不过,编辑直接被拒绝、要求重试。论文明确说这防止了”一次坏编辑引发的连环错误”——他们试过让模型用
sed改文件,频繁把代码改到语法崩溃。
第一篇里 Anthropic 说”别给例子,设计接口”(Todo 工具用状态枚举本身表达用法),你现在能看出那句话的学术源头就在这里:接口即提示词,而且是比自然语言更硬的提示词。
本职二:把确定性的活从模型手里拿走
2026 年 4 月有一篇标题就很挑衅的论文:《How Much Heavy Lifting Can an Agent Harness Do?》。它做了一件少有人做的事:把 harness 拆成层,逐层消融,量化每一层贡献了多少性能——在一个带噪声的协作海战棋规划任务上,把 harness 外化成四层(后验信念追踪、声明式规划、符号反思、LLM 复核门)。
结果扎眼:
- 贡献最大的一层是声明式规划:胜率 +24.1 个百分点——零次 LLM 调用;
- LLM 复核门只在 4.3% 的回合里被触发,且效果有界、非单调;
- 作者的结论措辞很克制但杀伤力十足:一旦 harness 各层可以被独立度量,“LLM 的贡献就可以被量化为残差,而不是被默认为核心”。
这不是说模型没用,而是说:在这个任务里,大部分”智能”其实是确定性计算,从一开始就不该由模型来做。 贝叶斯更新、约束求解、状态追踪——这些活代码做得又快又准又免费,让模型做纯属用世界上最贵的随机数发生器算加法。
同一个分工原则,在上一篇讲的 Self-GC 里是显式的架构:planner(模型)负责提议,harness(代码)负责执行——沙盘推演、合法性校验、安全提交边界,全是确定性代码。模型的提案要过 harness 的关卡才能生效。而 Code as Agent Harness(2026.05 综述)把这个方向推到极致:让代码成为 agent 推理、行动、环境建模和验证的操作基底——行动表达成可执行的程序,正确性靠运行验证而不是靠模型自评。
由此得到一个反直觉的健康指标:好 harness 的标志之一,是单位任务的 LLM 调用在变少。 每一次调用都应该在做真正需要判断的事。如果你的 agent 在用模型解析 JSON、做格式转换、数数——那不是 agent 能力强,是 harness 在偷懒。
本职三:让错误变便宜
Agent 循环里错误是复利的:一次坏编辑污染后续所有轮次的上下文,一个错误的删除毁掉整个任务。好的 harness 不追求模型不犯错(做不到),而是让每个错误的爆炸半径尽可能小。这有三道递进的防线:
第一道:动作时拦截。 SWE-agent 的 lint 护栏是原型——非法编辑根本不落盘。注意它和提示词护栏的本质区别:写在提示词里的”请确保语法正确”是恳求,写在编辑命令里的 linter 是物理。
第二道:隔离探索。 2026 年 2 月的 Fork, Explore, Commit 干脆把这件事做进了操作系统层:提出 Branch Context 原语——每条探索路径拿到写时复制(copy-on-write)的独立文件系统视图和进程组,fork → explore → commit/abort 的结构化生命周期,先提交者胜、兄弟分支自动作废,支持嵌套。他们的 BranchFS 实现分支创建耗时低于 350 微秒。上一篇里 AgentSwing 并行试三种上下文策略、跑三轮真实环境再选赢家——那种玩法之所以敢做,前提就是 harness 能提供廉价的隔离与回滚。能便宜地撤销,才敢大胆地探索。
第三道:提交前验证。 Self-GC 的每个压缩计划要先在本地沙盘物化、校验、估算收益,才允许在安全边界提交;Anthropic 2026 年 3 月的工程博客把长时程开发的 harness 归纳为 planner/generator/evaluator 三角色加验证门——工件不过门,流程不前进。
三道防线合起来是一个原则:模型的每个输出都是提案,harness 决定提案何时、以何种代价成为现实。
全景校验:13 个开源脚手架的解剖报告
以上三件事是不是我挑论文挑出来的幸存者偏差?2026 年 4 月的 Inside the Scaffold 提供了一次难得的全景校验:作者把 13 个开源编码 agent 的脚手架钉死在具体 commit 上做源码级解剖,建了一个 12 维、三层(控制架构 / 工具与环境接口 / 资源管理)的分类学。两个发现值得记住:
发现一:收敛的地方,是共识已经形成的地方。 工具能力类别、编辑格式、执行隔离——这些维度上 13 家高度趋同。注意这三样恰好对应本文的三件本职工作:接口、分工、错误控制。趋同说明这些问题的答案已经被工程实践投票选出来了。
发现二:发散的地方,是仍然开放的问题。 上下文压缩策略有 7 种互不相同的做法(这正是上一篇五篇论文还在混战的领域)、状态管理、多模型路由——各家各玩各的。另外,13 家里有 11 家组合多种循环原语(ReAct、生成-测试-修复、计划-执行、多次重试、树搜索),而不是押注单一控制结构——“用哪个 loop”是个伪问题,好 harness 是原语的组合。
该泼的冷水:harness 会不会也被苦涩的教训吃掉?
第一篇的核心论证是”提示词规则是给弱模型打的补丁,模型变强就该删”。一个诚实的读者必须追问:harness 不也是补丁吗?模型再强一代,这些脚手架会不会也该删了?
会,但只删一半。关键是区分 harness 里两种成分:
- 替模型思考的部分——会持续变薄。强制的计划模板、手写的任务分解流程、替代模型判断的启发式路由,这些和提示词规则同构,模型的判断力长上来就该让位。DeepAgents 那 13.7 个百分点的提升里,相当一部分恰恰来自放松过度约束的控制流。
- 替世界把关的部分——不会变薄,反而会变厚。沙箱、权限、隔离、验证门、审计日志,这些东西的存在理由不是”模型笨”,而是世界不可逆。模型再聪明,一次误删生产数据库也不可接受;而且 agent 能力越强、被授权做的事越多,物理护栏的价值越高。看 Claude Code 自己的演化就很说明问题:删掉 80% 提示词的同时,工具搜索、hooks、沙箱、权限系统这些代码层的机制在加厚。
所以苦涩的教训的正确应用是一个筛子,不是一把火:问 harness 里的每个组件”你存在是因为模型不行,还是因为世界危险?“前者有保质期,后者是基础设施。
收束:四个问题,体检你的 harness
- 接口测试:模型犯的错里,有多少是接口诱导的?(翻页式搜索诱导穷举、整文件展示诱导迷失——先改接口,再怪模型)
- 分工测试:随便抽 10 次 LLM 调用,有几次在做真正需要判断的事?解析、转换、计数、校验——凡是能写成代码的,写成代码。
- 爆炸半径测试:模型最坏的一个动作,损失是多少?能不能在动作发生时拦截(linter)、在隔离里发生(branch)、在提交前验证(gate)?
- 恳求测试:把你所有的行为约束列出来,问每一条——它现在是提示词里的恳求,还是代码里的物理?所有你无法承受被违反的规则,都不配只活在提示词里。
模型每一代都在变,harness 的这三件本职——翻译世界、分配分工、控制爆炸半径——不会变。发动机的马力翻十倍,你需要的不是拆掉底盘,而是配得上它的底盘。
论文与资料清单
- SWE-agent: Agent-Computer Interfaces Enable Automated Software Engineering(Yang et al., NeurIPS 2024)——ACI 开山之作
- How Much Heavy Lifting Can an Agent Harness Do?(Jung & Son, 2026-04)——逐层量化 harness 贡献,LLM 作为残差
- Inside the Scaffold: A Source-Code Taxonomy of Coding Agent Architectures(Rombaut, 2026-04)——13 个开源脚手架的源码级分类学
- Code as Agent Harness(2026-05 综述)——代码作为 agent 的操作基底
- Fork, Explore, Commit: OS Primitives for Agentic Exploration(Wang & Zheng, 2026-02)——探索隔离的操作系统原语
- Agent Harness Engineering: A Survey——领域综述,含 DeepAgents Terminal-Bench 数据
系列:① 删掉 80% 系统提示词之后(设计时的减法)→ ② 遗忘是一种能力(运行时的减法)→ ③ 本篇(承载减法的确定性机器)。