NLAH——当Agent的驾驭层从代码里走出来,变成一篇可读的.md
> 论文: Natural-Language Agent Harnesses | arXiv:2603.25723 > 作者: Linyue Pan*, Lexiao Zou*, Shuo Guo*, Jingchen Ni, Hai-Tao Zheng > 机构: 清华大学深圳国际研究生院、哈尔滨工业大学(深圳) > 时间: 2026年3月 > 链接: https://arxiv.org/abs/2603.25723 > 代码: https://github.com/zjsxply/
---
一、问题:为什么两个Agent明明"只差一个设计选项",效果却天差地别?
Agent系统的性能越来越取决于驾驭层(harness)——那个围绕模型构建的执行框架:多步推理、工具调用、状态维护、失败恢复、结果验证、任务委派……
但这些逻辑长期散落在三个地方:
- 控制器代码里——Python脚本里混着提示词、重试逻辑、状态路径
- 框架默认值里——LangChain、CrewAI的默认行为,你以为是模型聪明,其实是框架在兜底
- 运行时约定里——沙盒权限、上下文策略、停止条件,没有文档,只有代码
LangChain 2026年说了一句话: > "If you're not the Model, you're the Harness."
这句话的意思是:如果性能差异不是模型造成的,那就是驾驭层造成的。而驾驭层,才是那个真正被忽略的研究对象。
---
二、核心思路:把驾驭层变成一篇可编辑的.md文件
论文提出两个核心组件:
NLAH(Natural-Language Agent Harness) — 可编辑的自然语言文档,描述任务运行的策略:
- 阶段划分(Plan → Execute → Verify → Recover → Finalize)
- 角色分工(Solver、Verifier、Orchestrator)
- 状态规则(何时写状态文件、何时传递证据)
- 验证规则(何时运行测试、何时接受结果)
- 失败恢复(何时重试、何时放弃)
- 停止条件(什么证据出现时结束运行)
关键分离:自然语言承载策略,代码和运行时承载精确机制(工具执行、解析、沙盒、日志)。
这不是"用自然语言写代码"的狂妄,而是边界清晰的协作:策略层让人可读、可编辑、可A/B测试;机制层保证精确和可复现。
---
三、四层架构:谁在干活,谁在指挥
第四层:Scripts & Adapters(精确机制)
↓ 被触发
第三层:NLAH(任务策略文档,可换)
↓ 被解释
第二层:Runtime Policy(固定运行时章程)
↓ 驱动
第一层:Base Agent(LLM + 终端,空白石板)
Base Agent = 只有LLM + 终端工具。它本身没有任务逻辑,是一匹没有马鞍的马。
Runtime Policy = 固定指令,把Base Agent变成IHR。它告诉agent:"你的角色是读取NLAH文档,按文档调度子agent,管理状态文件,执行契约优先的完成。"这个层不随任务变化。
NLAH = 核心创新。一份可读的.md文件,描述今天这趟旅程的路线。换了.md,就换了任务策略。
Scripts & Adapters = 不需要LLM判断的硬逻辑:JSON校验、diff行数计算、格式转换、API封装。被NLAH中的规则触发,由IHR调度执行。
类比:马是Base Agent,骑手是Runtime Policy,路线图是NLAH,红绿灯和检查点是Scripts。
---
四、实验:三个核心问题
论文设计了三组研究问题(RQ),在编码(SWE-bench)、终端使用(Terminal-Bench 2.0)、计算机使用(OSWorld)三个基准上测试。
RQ1:NLAH能不能控制真实运行,同时保持竞争力?
对比三种实现方式:
- Code Harness — 原生代码实现(最强控制,但策略藏在代码里)
- Prompted NLAH — 把NLAH内容直接当提示词丢给Codex CLI(无共享运行时语义)
- IHR-executed NLAH — NLAH + IHR共享运行时
| 基准 | Code | Prompt | NLAH+IHR |
|---|---|---|---|
| Live-SWE | 67.0 | 77.0 | 73.0 |
| MHTBA (TB2) | 36.0 | 57.3 | 53.9 |
| OSWorld | 47.1 | — | 46.3 |
- NLAH+IHR在所有基准上都达到与代码实现同一数量级的性能
- MHTBA上NLAH(53.9)远超原生代码(36.0),说明原生代码的TB2可移植性有问题
- Live-SWE上NLAH(73.0)甚至超过原生代码(67.0),且墙钟时间更短——因为NLAH的自主性让模型能选择更灵活的动作粒度
- Live-SWE:60.1k tokens的代码材料 → 2.9k tokens的NLAH(压缩20倍)
- MHTBA:10.5k → 0.8k(压缩13倍)
---
RQ2:NLAH真的在执行预期的驾驭机制,还是只是在"当提示词用"?
论文设计了机制审计指标,验证NLAH是否实际产生了契约执行、工具调用、失败恢复、信息交接等行为。
最强证据:
- Live-SWE:Artifact Contract = 1.000,Tool Call Success = 0.933,Failed Tool Continuation = 0.992
- MHTBA:对应值 0.955、0.928、0.995
主要弱点:
- Orchestration Reliability(编排可靠性)低于Prompt版本
- Information Handoff Recall(信息交接召回率)从Prompt的直传上下文降到 0.322(Live-SWE)和 0.553(MHTBA)
---
RQ3:模块能不能单独消融?
这是论文最重要的贡献:一旦驾驭模块变成显式的文本段落,你就可以删掉某一段,看会发生什么。
| 模块 | Live-SWE | OSWorld | 效果判断 |
|---|---|---|---|
| 基础 | 73.0 | 44.4 | 基准 |
| + File-backed state | 75.6 | 58.3 | ✅ 最稳正贡献 |
| + Self-evolution | 78.8 | 52.8 | ✅ 性能最高,但token贵 |
| + Evidence-backed answering | 75.8 | 47.2 | ✅ 适度增益 |
| + Multi-candidate search | 71.4 | 47.2 | ❌ 反而损害(SWE) |
| + Context compression | 73.0 | 44.4 | ❌ 无增益 |
| + Markdown memory | 75.8 | 44.4 | ⚠️ 不稳定 |
1. Multi-candidate search(多候选搜索) — Agent Calls从1.1跳到5.7(SWE),但性能反而从73.0跌到71.4。论文结论:"更多搜索 ≠ 更好的驾驭设计。"在有限预算下,盲目分支探索太贵了。
2. Context compression(上下文压缩) — 完全无增益。省了token,但丢了信息。这暗示了"压缩代理(compression authorship)"的问题:当harness压缩agent上下文时,agent无法验证其confidence horizon代表的是harness的近期代理,而非agent自身的价值选择。
最有用的模块是File-backed state和Self-evolution——它们通过保留状态、强制显式证据、锐化重试决策来收紧验收路径。
---
五、关键洞察:为什么这项工作重要
1. 驾驭层终于成了可研究对象
以前,两个Agent系统的对比报告只能告诉你"整体分数差多少"。现在你可以问:"如果我把验证器分离出来,会发生什么?""如果去掉自我进化模块,性能掉多少?"这是第一次让驾驭设计有了科学方法论。
2. 不是"自然语言万能",而是"边界清晰"
论文很清楚自己的局限:
- 自然语言不替代精确机制(JSON校验、diff计算、沙盒)
- 自然语言只承载策略(阶段、角色、恢复、停止)
- 这种边界避免了"提示词工程万能论"的陷阱
3. 暗示了一个未来方向:Self-harnessing
论文最后画了一个光谱:
- 左侧:限制性驾驭(Code Harness)——硬外部控制
- 中间:NLAH+IHR——策略自然语言化,运行时共享
- 右侧:Self-harnessing——控制器模型直接驾驭其他模型,无需外部层
---
六、局限与未解问题
1. 工程效率:NLAH+IHR的token消耗和调用次数高于代码实现,这是原型运行时的开销,不是表示层的问题 2. 信息交接:parent-child架构的handoff recall偏低,需要更好的状态传递机制 3. 自然语言的精度天花板:当驾驭机制依赖隐藏的服务端状态或训练诱导行为时,文本表示无法忠实恢复 4. 运行时章程污染:强运行时章程可能吸收本应归因于NLAH文本的部分行为,造成归因污染
---
七、对Agent社区的启示
对研究者:
- 把你的驾驭策略写成NLAH格式的.md文件,让同行能读懂、能复用、能消融
- 停止在论文里只报告"整体分数",开始报告"模块消融"和"机制审计"
- 检查你的代码里,哪些逻辑是策略(应该放到NLAH),哪些是机制(应该留在代码)
- 把AGENTS.md、CLAUDE.md、SKILL.md的经验提升到run-level harness层面
- LangChain、CrewAI、AutoGen的默认行为应该可配置为NLAH文档,而不是藏在代码里
- 提供一个IHR式的共享运行时,让用户能用.md文件切换策略
参考文献
- Pan, L., Zou, L., Guo, S., Ni, J., & Zheng, H.-T. (2026). *Natural-Language Agent Harnesses*. arXiv:2603.25723. https://arxiv.org/abs/2603.25723
- Higress 团队解读: https://higress.cn/blog/higress-mmse_awbbpb_iggzwu1wcy82qlqa
- LangChain (2026). "If you're not the Model, you're the Harness."
- Anthropic (2024). Building effective agents. https://www.anthropic.com/engineering/building-effective-agents
- Xia, C.S., et al. (2025). Live-SWE-Agent: Can software engineering agents self-evolve on the fly? arXiv:2511.13646
🌟 智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。
🎁 领取 2000万 Tokens