Agent Harness:让 AI 从聊天机器人变成真正的智能体
Whole Picture
乔木这篇是一篇综述 + 词汇表。它把 2026 年初由 Anthropic、OpenAI、LangChain 三家共同确立的术语「Agent Harness」——也就是包裹 LLM 的完整软件基础设施——系统梳理了一遍。核心论点:Agent = Harness + Model;用户看到的”agent 行为”是涌现,产生这种行为的”机械装置”是 harness。LangChain 的实验是标志性证据:模型权重不变,仅改 harness,TerminalBench 2.0 排名从 30+ 跳到第 5。
文章借用 Beren Millidge 2023 的类比把概念坐标钉死:LLM = CPU / 上下文窗口 = RAM / 外部 DB = 硬盘 / 工具 = 设备驱动 / Harness = 操作系统。这个类比非常耐用,因为它解释了后面所有设计决策的”为什么”——上下文就是稀缺的 RAM,所以要压缩、遮蔽、延迟加载;工具失败要被 harness 捕获,就像 OS 要处理 syscall 错误。
三层工程模型
- 提示词工程:雕字(指令本身)
- 上下文工程:雕模型看到什么、何时看到
- Harness 工程:前两者 + 工具编排 + 状态持久化 + 错误恢复 + 验证循环 + 安全执行 + 生命周期管理
关键澄清:Harness 不是提示词的 wrapper,是让 agent 成为 agent 的完整系统。
12 个生产级组件(浓缩版)
| # | 组件 | 一句话本质 |
|---|---|---|
| 1 | 编排循环 | 思考-行动-观察的 while 循环;Anthropic 叫”哑循环” |
| 2 | 工具 | 模式定义 + 注册 + 沙盒执行 + 结果格式化 |
| 3 | 记忆 | 短期(会话内)+ 长期(跨会话,三层层次) |
| 4 | 上下文管理 | 压缩 / 遮蔽 / 即时检索 / 子代理委托——对抗 “lost in the middle” |
| 5 | 提示词构建 | 分层优先级栈:系统 > 工具定义 > 开发者 > 用户 > 历史 |
| 6 | 输出解析 | 原生 tool_calls > 文本解析 |
| 7 | 状态管理 | LangGraph 用图 + checkpoint;Claude Code 用 git commit + 进度文件 |
| 8 | 错误处理 | 10 步 × 99% = 90.4%,错误会复合 |
| 9 | 防护栏 | 输入 / 输出 / 工具三级;Anthropic 架构上把权限与推理解耦 |
| 10 | 验证循环 | 规则 / 视觉 / LLM-as-judge;给模型验证手段,质量 ×2-3 |
| 11 | 子代理编排 | Fork / Teammate / Worktree 三种执行模型 |
| 12 | —(并入上面 11 条) |
七个架构决策
- 单 vs 多 agent —— 先最大化单 agent,工具>10 或明显独立域才拆
- ReAct vs Plan-Execute —— ReAct 灵活但贵,LLMCompiler 快 3.6×
- 上下文策略 —— 时间清除 / 总结 / 观察遮蔽 / 结构笔记 / 子代理委托
- 验证循环设计 —— 计算验证(确定性)vs 推理验证(语义性)
- 权限架构 —— 宽松 vs 限制性,看部署环境
- 工具范围 —— 更多工具 = 更差性能;Vercel 删 80% 工具后变好
- Harness 厚度 —— Anthropic 押”薄 harness + 模型变强”,LangGraph 押”显式控制”
关键洞察:Harness 协同进化
- 建筑脚手架隐喻:模型变强 → harness 该删减而非堆复杂度
- Manus 六个月重建 5 次,每次都在删东西:复杂工具定义 → 通用 shell 执行;管理 agent → 结构化交接
- 协同进化:Claude Code 的模型训练时带着 harness 一起后训练,换 harness 可能降性能
- 未来验证测试:性能随更强模型扩展、而 harness 复杂度不增加,设计就是合理的
亮点 / 槽点
亮点: - “如果你不是模型,你就是 harness” —— Vivek Trivedy 这句公式化断言,把整个生态切成两半 - “哑循环”命名精准:所有智能都在模型里,循环只管理回合 - 协同进化那段是全文最有力的观点——它解释了为什么 harness 设计不能追求”完备”
槽点: - 12 组件清单是综述性的,每条落地细节浅 - 引用大量 Anthropic / OpenAI / LangChain 文档但没给链接,验证成本高 - 对 Claude Code 的描述偏粉丝视角,对 LangGraph 的描述则略贬(“图 DSL”隐含批判) - Ralph Loop 两阶段模式值得展开,这里只写了两行
延伸
- Beren Millidge《Scaffolded LLMs as Natural Language Computers》(2023) —— 冯·诺依曼类比的源头
- Chroma 的上下文腐烂研究 + 斯坦福”Lost in the Middle”
- Thoughtworks / Martin Fowler “guide vs sensor” 框架化验证循环
- ACON research:推理轨迹优先可减 26-54% token,保持 95%+ 准确性
Discussion 补充(2026-04-21)
核心洞察:两种不同类型的 Harness
Justin 的立场:模型能力未到完美、复杂任务需要厚 harness;他的 hub skill “需求越细致越丰富,越需要一定厚度”。
讨论产出的区分(Claude 提出、Justin 认同):
- 通用能力编排层(Anthropic 的 Claude Code / OpenAI 的 Codex harness)——面对单一深领域(如代码编辑),押”模型会内化该领域的规划能力”,所以定期删 harness 步骤
- 个人化偏好注入层(Justin 的 hub skill)——捕捉的是”个人化的、非通用的”偏好(精读要讨论 / 投资要反问 / 写作要中立 lens),模型再强也内化不了
关键推论:Justin 的 skill 永远不会变薄到 Claude Code 那种程度——它的厚度不在”等模型变强”的时间轴上,而在”捕捉个人偏好粒度”的另一个轴上。两者是两种不同类型的 harness,逻辑起点相似但演进方向不同。
→ 这条满足 mental model 准入条件(命名 / 跨 case / 应用锚点 / 来源 /
自包含),候选回写到 mental-models.md。
上下文腐烂:已观察到
Justin 确认自己日常用 Claude Code 能感觉到 context rot,通过改进 memory 机制(分层记忆 + vec-search + handoff.md 多时间尺度)在缓解。印证文章第 4 条”上下文管理”是生产级 harness 的关键组件之一。
Git-as-Checkpoint 的技术澄清
讨论中 Justin 追问了 /rewind 和 commit
的关系,厘清了三层区分:
- Session 内:
/rewind独立于 git,可回滚文件 + 对话 - 跨 session:新 Claude 只能通过
git log+handoff.md+ 进度文件反推意图,working tree 里的 uncommitted diff 它”看得到代码、读不懂上下文” - 跨 compact:
/rewind不保证能穿越压缩点,真正跨 compact 安全的只有 commit / handoff / 进度文件
实操启示:Justin 当前习惯是小事和实验性工作不跑 session-end、直接 exit——最低成本补救是”exit 前花 10 秒往 handoff.md 加一行说明”。
Teammate 模式评估与延后
文章提到 Claude Code 支持三种子代理执行模型(Fork / Teammate / Worktree)。Justin 现在几乎都是 Fork 模式。
讨论中验证了 Teammate 模式(Agent Teams)当前可用但仍
experimental: - 需要
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 - 已知 bug:session
恢复 / 任务协调 / 关闭行为;subagent 内部不能主动
SendMessage(architecture 是平的)
决定:延后 2 周再评估(已入 GTD,见
GTD/briefs/2026-04-21-teammate-mode-trial.md)。
判别原则沉淀:Worker 之间不需要聊 → subagent;需要互相挑战 / 验证证据 → teammate;需要嵌套层级 → subagent(teammate 不支持)。