The Anatomy of an Agent Harness (LangChain / Vivek Trivedy)
来源:https://www.langchain.com/blog/the-anatomy-of-an-agent-harness 作者:Vivek Trivedy (LangChain) 收录时间:2026-05-18
核心定义
Agent = Model + Harness. 如果你不是模型,你就是 harness。
Harness 是模型之外的每一块代码、配置和执行逻辑。原始模型不是 Agent——harness 给它状态、工具执行、反馈循环和可执行的约束后才成为 Agent。
Harness 组件推导(从行为反推设计)
1. 文件系统 — 持久存储 & 上下文管理
行为需求: Agent 需要持久存储、与真实数据交互、跨 session 持久化工作。
文件系统是最基础的原语:
- 工作空间:读写数据/代码/文档
- 上下文卸载:不必把所有东西放在上下文里
- 协作面:多 Agent 和人类通过共享文件协调
- Git 加上版本控制:跟踪进度、回滚、分支
2. Bash + 代码执行 — 通用工具
行为需求: Agent 自主解决问题,不需要人类预设计每个工具。
ReAct 循环(推理→工具调用→观察→重复)需要工具。与其为每个动作预建工具,不如给 Agent bash:
- Agent 可以按需设计自己的工具
- "给一个人厨房,而不是教他用一个厨房小工具"
3. Sandbox & 工具 — 安全执行 & 验证
行为需求: Agent 需要安全环境执行代码、观察结果、验证工作。
- 隔离执行环境,可按需创建/销毁
- 预装语言运行时、Git、测试 CLI、无头浏览器
- 浏览器/日志/截图/测试运行器 → Agent 可以自验证
4. 记忆 & 搜索 — 持续学习
行为需求: Agent 记住所学的,访问训练后出现的信息。
- AGENTS.md 每次 start 注入 → Agent 编辑 → 持续学习
- Web 搜索 & Context7 等工具桥接知识截止
5. 对抗上下文腐烂
行为需求: Agent 长时间工作不降质。
| 策略 | 说明 | |------|------| | Compaction | 上下文快满时智能总结卸载 | | Tool-call offloading | 大工具输出只保留头尾,完整版存文件 | | Skills (Progressive Disclosure) | 按需加载,不一次全塞进上下文 |
6. 长时间自主执行
行为需求: Agent 完成复杂工作,自主,正确,跨长时间。
多个原语组合:
- 文件系统 + Git — 跨 session 跟踪工作
- Ralph Loop — Hook 拦截 Agent 退出,注入原始 prompt 到干净上下文,强制继续
- 规划 & 自验证 — 分解目标为步骤,每步后验证正确性
模型训练与 Harness 设计的耦合
今天的 Agent 产品(Claude Code、Codex)在 posttraining 时 harness 在循环中:
- 模型特别擅长 harness 设计者认为它应该擅长的动作
- 这创造了反馈循环:有用原语被发现 → 加入 harness → 用于训练下一代模型
- 副作用:改工具逻辑可能导致模型性能下降(如 Codex 的 apply_patch)
但这不意味着最佳 harness 就是模型训练时的那个:
- Terminal Bench 2.0 上,Opus 4.6 在 Claude Code 中得分远低于在其他 harness 中
- LangChain 团队仅通过改 harness 从 Top 30 跳到 Top 5
Harness Engineering 的未来方向
- 编排数百个并行 Agent 在共享代码库上工作
- Agent 分析自己的 traces 来识别和修复 harness 层的失败模式
- Harness 动态组装正确的工具和上下文 — 按需而非预配置
关键引用
"The model contains the intelligence and the harness is the system that makes that intelligence useful." 模型包含智能,harness 是让智能有用的系统。