作者:Vivek Trivedy / LangChain Blog(2026年3月10日) 译/编:意译整理
一个公式,看透 Agent 的本质
如果你今天在构建 AI Agent,有一个公式值得刻在脑子里:
Agent = Model + Harness
"Model"是大家熟悉的部分——GPT、Claude、Gemini,那个会推理、会写代码、会回答问题的神经网络。
但 Harness 是什么?
简单说:除了模型本身,其他所有东西都是 Harness。
系统提示(System Prompt)、工具定义、文件系统、代码执行环境、浏览器、子 Agent 的调度逻辑、上下文管理策略……这些都是 Harness 的组成部分。
文章作者 Vivek Trivedy 给出了一个很直白的结论:
"If you're not the model, you're the harness."(如果你不是模型,你就是 Harness。)
模型为什么"不够用"?
理解 Harness 的价值,先要理解原始模型的局限。
一个裸模型,本质上只能做一件事:把文本输入映射成文本输出。它天然不具备:
- 持久化记忆:每次对话从零开始,上一轮说了什么?不知道。
- 执行代码:它可以写代码,但不能运行代码,更不能看到运行结果。
- 获取实时信息:训练数据有截止日期,昨天发生的事它一概不知。
- 搭建环境:安装依赖、创建文件、访问网络——这些对裸模型来说都是幻觉。
Harness 就是填补这些空白的基础设施。它把模型的智能从"纸上谈兵"变成"真正干活"。
用文章的原话来说:
"The model contains the intelligence, and the harness is the system that makes that intelligence useful."
模型负责智能,Harness 负责让智能有用。
Harness 的五大核心能力
1. 文件系统:Agent 的"工作台"
文件系统是 Harness 里最基础、也最容易被低估的组件。
它的作用远不止"存文件":
- 跨会话持久化:Agent 今天做了一半的任务,明天可以继续
- 上下文卸载:当对话窗口快满了,把不重要的内容写到文件里,释放 context 空间
- 多 Agent 协作:几个 Agent 并行工作时,文件系统是它们共享信息的"公告板"
- 知识沉淀:像
AGENTS.md、CLAUDE.md这类约定文件,让 Agent 积累跨任务的经验
文件系统让 Agent 拥有了真正意义上的工作记忆,而不是每次都从白板重新开始。
2. Bash 与代码执行:把"写代码"变成"用代码"
大模型写代码的能力已经很强,但如果没有执行环境,写出来的代码只是"建议",而非"行动"。
Harness 提供 Bash 和代码执行能力后,Agent 可以:
- 写一段 Python 脚本来处理数据,然后直接运行,看到结果
- 遇到报错,根据错误信息自动修正,再次运行
- 通过写代码+执行的循环,自己解决自己不会的问题
这个能力的本质是:Agent 不再依赖预设的工具,而是可以按需创造工具。
3. 沙箱:在隔离环境里安全地"折腾"
代码执行很强大,但也很危险——Agent 可能安装奇怪的包、产生副作用,甚至破坏系统。
沙箱(Sandbox)是解法:
- 提供隔离的执行环境,Agent 在里面怎么折腾都不影响外部
- 可以安全地安装依赖、运行不可信代码
- 支持并行扩展——同时运行几百个沙箱,各自独立
- 通过命令白名单和网络隔离控制风险边界
沙箱让"大规模、高并发、安全可控"的 Agent 部署成为可能。
4. 记忆与搜索:突破"知识截止日期"
模型训练有截止日期,但现实世界每天都在变化。
Harness 通过两种方式帮 Agent 保持"新鲜感":
- 持久化记忆文件:Agent 把重要学习成果写入文件,下次任务可以直接读取,实现跨任务学习
- 实时搜索与 MCP 工具:通过 Web Search、API 调用等,获取训练数据之外的最新信息
这让 Agent 具备了持续学习的能力,而不是被冻结在某个历史时间点。
5. 上下文管理:对抗"Context 腐化"
这是 Harness 里最容易被忽视、但工程上最有挑战性的一块。
随着对话轮次增加,上下文会逐渐"腐化"(Context Rot):
- 重要信息被淹没在长长的历史对话里
- 过多的工具调用结果塞满 context 窗口
- Agent 开始"健忘",前面说过的事后面忘了
成熟的 Harness 通过以下策略应对:
- 智能压缩(Compaction):快到 context 上限时,自动总结历史,腾出空间
- 工具输出卸载:把长篇的工具返回结果写到文件,只在 context 里保留摘要
- 技能的渐进式披露(Progressive Disclosure):不一次性把所有工具都塞给模型,根据当前任务动态加载相关工具
上下文管理的好坏,直接决定 Agent 能否完成长时间、多步骤的复杂任务。
让 Agent 跑得更远:长时任务的关键设计
上面五个能力解决了"Agent 能干活"的问题,但要让 Agent 完成真正复杂的工作——比如独立完成一个多天的研究项目——还需要一套长时任务架构。
Git 集成:给工作加上"存档点"
文件系统 + Git,让 Agent 可以:
- 在任务的不同阶段提交进度
- 出错时回滚到之前的稳定状态
- 多个 Agent 通过 Git 协作,各自负责不同的分支或模块
Ralph Loop:突破单次 Context 窗口限制
这是文章里最有意思的工程设计之一。
问题是:即使有了 compaction,一个足够复杂的任务可能就是无法在一个 context 窗口里完成。Agent 会"累了",想退出。
Ralph Loop 的做法是:
通过一个 Hook,拦截 Agent 的退出行为,在新的干净 context 里重新注入原始任务目标,强制 Agent 继续工作。
就像给马拉松选手在终点线前30米竖起一块"终点在那边"的牌子,让它继续跑。
这是一个典型的"Harness 能做、模型自己做不到"的事情——模型本身不知道自己已经走了多远、接下来还需要做什么,但 Harness 有这个全局视角。
规划与自我验证
成熟的 Harness 还会引导 Agent 进行:
- 任务分解:把大目标拆成可执行的步骤
- 自我验证:通过跑测试、检查输出,判断自己是否完成了目标
- 错误驱动的迭代:测试失败 → 修改 → 再测试,形成闭环
这套机制让 Agent 具备了类似"研发工程师"的工作方式。
模型与 Harness 的共同进化
文章提到了一个很有深度的观察:现代 Agent 系统(比如 Claude Code)在训练时,已经把 Harness 纳入训练循环。
这意味着:
- 模型被训练来善用特定的 Harness 能力,比如知道什么时候该写文件、什么时候该调工具
- Harness 里被验证有效的设计模式,会反哺下一代模型的训练数据
这是一种协同进化:好的 Harness 让模型更强,更强的模型又让 Harness 的设计边界不断推进。
但这里也有一个风险:过度耦合。
如果模型在训练时只见过某种特定 Harness 的工具逻辑,它可能对其他 Harness 配置表现不佳。最优的 Harness 未必是模型训练时搭配的那个——不同任务场景需要不同的 Harness 设计。
Harness 的未来:会被模型"吸收"吗?
随着模型越来越强,有些 Harness 功能可能会逐渐被内化到模型本身。但文章认为,Harness 工程不会消失,它的价值会转移到更高层次的问题上:
- 大规模多 Agent 编排:如何调度几百个并行 Agent,分工协作完成复杂任务
- Agent 自我分析:让 Agent 回顾自己的执行轨迹,识别失败模式,自我改进
- 动态工具装配:不再预设所有工具,而是根据当前任务即时组装所需的工具和上下文
LangChain 正在用 deepagents 库探索这些方向。
总结:智能靠模型,有用靠 Harness
回到最初的公式:
Agent = Model + Harness
如果用一句话总结这篇文章的核心观点:
模型决定了 Agent 能有多聪明,Harness 决定了这份聪明能产生多少实际价值。
一个没有 Harness 的模型,就像一个天才困在一个空房间里——有想法,但什么都做不了。
好的 Harness 给模型配上了文件柜、代码运行机、搜索引擎、记事本、时间管理工具,最终让它能够真正地、持续地、安全地完成现实世界的工作。
如果你在构建 AI Agent,与其一味追求更大的模型,不如认真思考:你的 Harness 设计得足够好了吗?
原文:The Anatomy of an Agent Harness by Vivek Trivedy, LangChain Blog, 2026-03-10