type
Post
status
Published
date
Apr 3, 2026
slug
Harness-Engineering-001
summary
原理与概念
tags
Agent
category
Harness Engineering
icon
password
本文聚焦 Claude Code / Codex / Cursor 这类 AI 编程产品背后那套共同的工程系统——驾驭工程(Harness Engineering)。它是Agent = Model + Harness公式的右半部分,也是 2025-2026 年 AI 工程社群共同识别出的新学科。明明底层都是 Anthropic 或 OpenAI 的模型,为什么有的 Agent 能持续跑 30 分钟不失败,有的三轮就失控?为什么同样是 Sonnet 4.6,裸 API 调用和 Claude Code 的产出质量差了一个数量级?答案全部收敛到这套系统上。📅 时效性说明:本文全部数据与引用截止 2026 年 4 月。
Harness Engineering 驾驭工程:原理与概念
一、驾驭工程是什么
1.1 三层次能力对比
很多人认为 ChatGPT、ChatGPT + Code Interpreter、Claude Code 三者的差距在于"模型越来越强"。这是一个典型误解。下面这张表用六个维度逐条比对:
表 1-1 三层次能力对比
维度 | ChatGPT(裸对话) | ChatGPT + Code Interpreter | Claude Code |
能写代码吗 | 能 | 能 | 能 |
能真跑代码吗 | 否 | 能(沙箱内) | 能(你本地) |
能读写你的文件系统吗 | 否 | 否(只能沙箱临时文件) | 能(整个项目目录) |
能跨工具编排吗(git/pytest/shell) | 否 | 部分(Python 内) | 能 |
能持续 30 分钟不失败吗 | 否 | 否(context 溢出) | 能(机制保护) |
任务失败时会自己补救吗 | 否 | 部分(在同一回合内) | 能(跨回合 + 跨 session) |
前两行三列几乎没有差距(都能写代码、都能在沙箱里跑),但从第 3 行开始三列几乎跨了三个时代。而三列用的模型——GPT-5 / GPT-5 / Sonnet 4.6——都是当前最前沿的旗舰,能力基础在同一梯队。造成巨大落差的只有一个变量:模型外面那一层,也就是 harness。
换个更直接的说法:把 Claude Code 里的 Sonnet 4.6 换成 GPT-5,它还是比裸的 GPT-5 强;把裸 ChatGPT 的模型升级到 Sonnet 4.6,它也追不上最朴素的 Claude Code。因为一次裸 API 调用没有文件系统、没有 git commit 能力、没有跨 session 的进度文件——这些差异不在模型权重里,在调用模型的那套系统里。
1.2 Agent = Model + Harness
Agent = Model + Harness—— Vivek Trivedy 在首篇 HaaS 博文(2025-09-23)中给出这一公式化表达;Birgitta Böckeler 于 2026-04-02 在 martinfowler.com 整理传播。
这个公式可以类比成 F1 赛车:Model 是引擎,Harness 是底盘、变速箱、空气动力学、刹车、方向盘。引擎再强,没有底盘和刹车,跑不过 100 公里就失败;引擎差一点,但底盘调校好了,能在一个赛季跑满二十几个大奖赛。
先记住一个数字作为公式的第一块硬证据:同模型只改 harness,Terminal Bench 2.0 从 52.8% → 66.5%,+13.7 个百分点。
1.3 同任务三模式
同一个任务"帮我实现一个待办应用,包括前端 HTML 和后端 Python + pytest",三种模式的表现截然不同:
- 裸 API:返回三块代码,但永远不会真的创建文件、运行测试、看到测试失败后自己改。它只是在对话框里写字。
- Code Interpreter:真的创建 .py 文件、运行 pytest、看到失败。但没有访问本地项目的能力,没有 git,关闭窗口所有进度清零。
- Claude Code:在本地创建完整项目结构,写完代码跑 pytest,失败了就改,最后 commit 到 git,下次打开从进度文件接着跑。
三个画面的差距,不是"模型变聪明了",是"模型外面被加了一层肉眼看不到的工程系统"。
二、承认抵触——为什么驾驭工程不是新瓶装旧酒
2.1 你的软件工程师直觉没有错
听到"Harness Engineering"这个新词,很多工程师的第一反应是抵触:
"这不就是 feedback control 吗?控制系统搞了几十年了。" "换个名字就能发博客涨粉。" "LangChain 三年前就在做这件事,只是现在包装成新概念。"
这些工程直觉都是对的。对新术语保持怀疑,是一个成熟工程师该有的态度。但怀疑不等于否定——接下来用四条硬数据说话。
2.2 四条来自一手源的证据
表 2-1 硬数据反击表
数据 | 出处 | 含义 |
同模型仅改 harness,Terminal Bench 2.0 从 52.8% → 66.5%,+13.7pp,排名 Top 30 → Top 5 | LangChain 博客 2026-02-17,Vivek Trivedy:Improving DeepAgents with Harness Engineering | harness 是可测量的工程变量 |
OpenAI 内测产品:5 个月、约 100 万行代码、约 1500 个 PR、全程零人工编码、开发时间约为传统方式的 1/10 | OpenAI 工程团队 2026-02-11:Harness engineering: leveraging Codex in an agent-first world | harness 可承担生产级工程强度 |
Manus 团队 6 个月内重构 harness 5 次,每次都是删掉过时的复杂逻辑 | Phil Schmid 2026-01-05:The importance of Agent Harness in 2026 | harness 是活的工程系统 |
2026-04-02 Birgitta Böckeler 在 martinfowler.com 发表 "Harness engineering for coding agent users" | 业界权威博客正式纳入 |
第一条告诉我们——harness 是可以被 benchmark 量化的。第二条告诉我们——harness 可以承担生产级强度。feedback control 没人给它发 +13.7pp 的 benchmark 证明,也没有公司敢说"用它写了约 100 万行零人工代码"。这不是换皮,是一个已经能拉硬数据的新工程学科。
2.3 译名锁定
本文主术语锁定为 "驾驭工程"。"驾驭工程"指代 Harness Engineering,"harness"(小写原词)指代具体的一套机制组合。
三、三代工程的包含关系与术语边界
3.1 三代工程:包含关系而非替代关系
你可能已经被"上下文工程取代提示词工程"这类标题党文章荼毒过。事实是——没有谁取代谁,只有谁包含谁。
三代工程是同心圆式的包含关系:
- 提示词工程(2022-2023):管单轮 LLM 对话里如何把问题问得更好。
- 上下文工程(2024-2025):管多轮对话里喂给 LLM 的信息如何更精准——包括 RAG、tool calling schema、对话历史管理、instruction caching。
- 驾驭工程(2025-2026):管多轮工具调用 + 长时间运行时,整个系统如何不失败——包括循环刹车、状态持久化、验证闭环、子代理分治。
以 Claude Code 处理"写登录功能"为例:一次会话同时运行着三代工程的所有机制——Prompt Engineering 层的 system prompt、Context Engineering 层的 CLAUDE.md 读取和 tool schema 注入、Harness Engineering 层的 max_iterations 硬刹车和 progress 文件持久化。没有哪一层被"替代",只有层层叠加。
3.2 术语边界
表 3-1 术语边界对照
术语 | 是什么 | 与 Harness 的关系 |
Agent | 一个"会用工具完成任务"的软件实体 | Agent 是目标,Harness 是让目标能持续运行的工程系统 |
Scaffolding | prompt 到达模型前的组装层 | Scaffolding 是 Harness 的一部分(偏 context 装配层) |
Framework | 提供类库和抽象的开发工具包(LangChain 等) | Framework 是积木,Harness 是用积木搭出来的整车 |
Runtime | 负责执行 agent 逻辑的运行时引擎(LangGraph 等) | Runtime 是发动机,Harness 是发动机 + 底盘 + 传动 |
⚠️ 常见误区:把 scaffolding 当 harness 的同义词。很多博客把 "prompt scaffolding" 和 "harness" 混用,让读者低估 harness 的工程复杂度。真正的 harness 必须覆盖:(a) 循环终止刹车、(b) 跨 session 进度持久化、(c) 真机功能验证——三者缺一就不是完整 harness。
3.3 LangChain 三层架构
LangChain 创始人 Harrison Chase 在 2025-10-25 博文 Agent Frameworks, Runtimes, and Harnesses - oh my! 里把产品线切成了三层:
表 3-2 LangChain 三层产品架构
层 | LangChain 对应产品 | 角色 | 类比 |
Framework | langchain-core / integrations | 提供 LLM / tool / retriever 的抽象基类 | 积木 |
Runtime | LangGraph | 提供状态机 / checkpoint / interrupt 的执行引擎 | 发动机 |
Harness | DeepAgents | 把 LangGraph 组装成"能跑长任务"的完整系统 | 整车 |
2026 年之后 LangChain 的主推产品从 AgentExecutor 转向 DeepAgents——前者是 Runtime 级别的抽象,后者本身就是一个 Harness 成品。大多数工程师需要的不是 runtime,是一个能直接跑的 harness。
四、为什么此刻是驾驭工程的拐点
4.1 Karpathy 的判断:2025 Q3 是分水岭
"Agents basically didn't work before December [2024]. Now they just barely work. And this is the window where harness engineering becomes real engineering." —— Andrej Karpathy(YC AI Startup School 2025-06-17 主题演讲)
关键词是"勉强(barely)"——不是说模型变神了,而是模型终于跨过了某个基准线,让"在模型外面围一层系统让它长时间运行"从不可能变成可行。
那个基准线大致可以用 SWE-bench 60% 通过率来标。当 Claude 3.5 Sonnet 在 2025 Q3 把 SWE-bench Verified 带到 60% 量级,模型已经能"完成多数简单任务",在外面加 harness 才有边际收益。模型只有 30% 通过率时,harness 设计再好也救不了;模型 90% 通过率时,harness 要做的事反而变少。60-90% 这个区间,是驾驭工程的黄金窗口——恰好从 2025 Q3 开始。
4.2 8 节点时间轴
表 4-1 驾驭工程术语演化时间轴
# | 日期 | 事件 | 作者 |
1 | 2025-09-23 | 博文首次使用 "Agent Harness" 术语 | Vivek Trivedy |
2 | 2025-10-25 | 博文引用并传播该术语 | Harrison Chase (LangChain) |
3 | 2025-11-26 | 官方首篇系统化博文 | Anthropic, Justin Young |
4 | 2026-01-05 | 提出 Bitter Lesson 三原则 | Phil Schmid |
5 | 2026-02-11 | 用生产实证定型术语 | OpenAI 工程团队 |
6 | 2026-02-17 | +13.7pp 实证证据 | Vivek Trivedy @ LangChain |
7 | 2026-02-18 | 三分框架推向大众 | Ethan Mollick |
8 | 2026-03-24 | GAN 启发的三角色架构 | Anthropic, Prithvi Rajasekaran |
规律很明显:前 4 个节点是社群博客驱动的概念孵化;后 4 个节点是大厂用实证数据 + 官方架构博文把它钉成学科。六个月完成了一门学科从诞生到定型的完整周期。
4.3 两个决定性证据
证据一(LangChain 2026-02-17):同模型、同 benchmark、只改 harness,Terminal Bench 2.0 从 52.8% → 66.5%,+13.7 个百分点。证据二(OpenAI 2026-02-11):一个内测产品,5 个月、约 100 万行代码、约 1500 个 PR、全程零人工编码、开发时间约为传统方式的 1/10。
决定模型能不能上线的是模型本身,决定能不能稳定交付的是 harness。前者是 2023 年之前 AI 工程的核心问题,后者是 2026 年及以后的核心问题。
五、Naive Agent 的八大故障模式
5.1 ~50 行 Naive Agent 完整代码
下面是一段手写的 ~50 行 naive agent——它没有任何 harness 保护,所有 LLM + tool calling 就是教科书式的
while True + JSON schema。代码里用 # 故障 ①~⑧ 注释标出了主要失效点。这段代码是一个诚实的 "tool-calling 教科书实现"——100 行左右完成了所有"必要的事"。如果你是刚学 Agent 的人,这就是你会从 OpenAI cookbook 里抄来的版本。它的罪不在写得差,在太朴素——朴素到完全没有防御性设计,也就完全没有 harness。
⚠️ 踩坑预警:subprocess.run的returncode被丢弃。run_pytest函数只返回result.stdout,而result.returncode被直接丢掉——这意味着即使 pytest 失败,agent 拿到的也只是一段普通字符串,它会以为任务成功。正确做法:显式保留 returncode——return {"passed": result.returncode == 0, "output": result.stdout + result.stderr}。
5.2 八大故障模式清单
表 5-1 八大故障模式清单
# | 故障名 | 症状 | 在 naive agent 中的表现 |
① | 循环失控 | Agent 无限循环,永远不停止 | while True 无上限 |
② | Context 溢出 | messages 列表无限增长,超出 token 上限 | messages.append(msg) 无清理 |
③ | Cache Miss | system prompt 每轮变化,prompt cache 全部失效 | [session_iter={i}] 破坏前缀 |
④ | Tool 错误吞 | 工具失败返回空字符串,agent 以为成功 | except: result = "" |
⑤ | 状态丢失 | 进程挂掉后进度全丢,无法续传 | 无任何持久化 |
⑥ | 缺权限闸 | Agent 可以执行任何危险操作 | 无危险命令拦截 |
⑦ | 缺自动化评审 | Agent 自报完成即退出,无独立验证 | else: break |
⑧ | 成本失控 | 无 token/cost 预算,跑多少烧多少 | 无 budget 控制 |
六、八大机制——逐一击破故障模式

6.1 Agent Loop 四相循环(解 ① 循环失控)
一句话定义:把一次 agent 迭代拆成 Gather Context(收集上下文)→ Take Action(执行动作)→ Verify(验证结果)→ Iterate(迭代改进)四个阶段,并硬性加上 max_iterations 和显式终止条件。
类比:驾校教练的四步口诀——"看路况 → 踩油门 → 看前方 → 调整方向",跑 10 圈就必须停。
解哪条故障:故障 ① 循环失控——naive agent 的
while True 在这里被替换成 for i in range(MAX_ITER),每轮还有显式的 verify 阶段做"能不能停"的判断。最关键的一行是
for i in range(MAX_ITER) 取代了 while True。这个计数器背后的工程思维是:agent 不该完全信任模型的自我终止判断,系统必须有一个强制出口。官方出处:Building agents with the Claude Agent SDK(Anthropic,2025-09-29)
6.2 Tool Use 工具编排(解 ④ tool 错误吞)
一句话定义:所有工具调用包裹在结构化 schema 里,失败时返回
{"status": "error", "error": "..."} 这样的结构化回传,而不是空字符串或异常被吞。类比:USB-C 接口——任何设备插上都能通过标准协议读到身份、能力、故障码。
解哪条故障:故障 ④ tool 错误吞——naive agent 里
except: result = "" 是典型症状,修复方式是把 error 变成结构化 return,而不是字符串或异常。对比 naive agent 的
except: result = ""——前者是"失败了装作没事",后者是"失败了把失败本身当作第一公民返回"。agent 下一轮看到 status: error 才会触发修复路径。结构化错误是 agent 能跑长任务的第一块基石。官方出处:Building agents with the Claude Agent SDK(Anthropic,2025-09-29);MCP(Model Context Protocol)官方规范进一步标准化了这种 schema 契约。
6.3 Progress Tracking 进度追踪(解 ⑤ 状态丢失)
一句话定义:把每一步的进度写到一个持久文件 + 在完成里程碑时打 git commit,这样即使 session 断了,重启时能读取进度文件从断点续传。
类比:游戏存档——开放世界游戏每过一个小任务自动存档,断了能"读档"接着跑。
解哪条故障:故障 ⑤ 状态丢失——naive agent 里 session 关掉进度全丢,修复方式是把进度写磁盘 + 用 git 历史作为额外的 checkpoint。
没有它,agent 跑 30 分钟失败一次就得从零开始。Anthropic 官方的最佳实践更强:progress 文件 + git commit 双重 checkpoint——前者记录 agent 的思考过程,后者记录代码的物理改动。
官方出处:Effective Harnesses for Long-Running Agents(Anthropic,2025-11-26,Justin Young)
6.4 Context Management 上下文管理(解 ② context 溢出 / ③ cache miss)
一句话定义:持续监控当前 messages 的 token 数,超过阈值时触发压缩(compaction)或重置(reset),同时保持 system prompt 前缀稳定不变以命中 prompt cache。
类比:工位清理——文件堆到爬不动时,要么压缩(归档成一页摘要),要么重置(从空桌开始)。
解哪条故障:一次救两条——故障 ② context 溢出(压缩能降维度)和故障 ③ cache miss(保持前缀稳定才能命中 cache)。
最容易被忽略的是
messages[0] 这一行——system prompt 永远不动。prompt cache 是按前缀匹配的,前缀一变整个 cache 作废,延迟翻倍、费用翻倍。⚠️ 踩坑预警:在 system prompt 里加时间戳、用户名、当前任务。很多开发者把当前任务状态写进 system prompt,以为"让模型知道当前在做什么"更好——实际上这会让每轮的 system prompt 前缀都不同,prompt cache 全部失效。正确做法:system prompt 只放固定的"角色定义",当前任务全部放进 user 消息。
官方出处:Automatic Context Compaction Cookbook(Claude Agent SDK 官方)
6.5 Feature List 任务拆解(解 ② context 溢出的源头)
一句话定义:把大任务拆成独立的子任务清单(JSON 文件存在磁盘上),强制 agent 单次只做一件事,从源头控制 context 膨胀。
类比:待办清单——早上不会一口气处理 10 件事,而是列清单、做完一件划掉一件。
解哪条故障:故障 ② context 溢出的源头——naive agent 一次把 "读文件 + 修 bug + 跑 pytest" 全塞进去,context 自然爆。Feature List 把它切成 3 个独立子任务,每个子任务 context 小得多。
这张清单以 JSON 文件形式存在磁盘上,而不是放在 context 里——这样它不会随 messages 一起被压缩掉。
6.6 Verification Loop 验证闭环(解 ④ tool 错误的下游)
一句话定义:每个 feature 完成后,用 pytest / Playwright 等真机工具去实际验证功能,而不是只看 LLM 自己说"我觉得做好了"。验证失败就回退重做。
类比:QA 验收测试——开发说"我修好了"不算数,得 QA 真的点按钮、真的跑场景才算数。
解哪条故障:故障 ④ tool 错误吞的下游——光在工具调用层面返回
error 不够,任务层面必须有"真机验证"才能确认功能真的跑通。对比 naive agent 的
run_pytest(丢掉了 returncode),这里显式保留 result.returncode == 0 作为 passed 判定——"通过"必须来自外部真实反馈,而不是 agent 自己说通过了。Anthropic 官方还额外约束:"不可接受删掉或修改测试,因为这会导致功能缺失或带 bug"——如果 agent 发现测试在报错,正确路径是"去修实现",错误路径是"把测试改成能过"。
官方出处:Effective Harnesses for Long-Running Agents(Anthropic,2025-11-26)
6.7 Subagents 子代理分治(解 ② context 溢出的另一种解法)
一句话定义:把特定子任务派发给一个独立 context 的子 agent,子 agent 在自己的 messages 列表里工作、完成后只把结果返回主 agent,主 agent 的 context 完全不受子任务中间过程污染。
类比:外包给顾问——CEO 把专业问题外包给咨询顾问,顾问自己开独立项目,几周后只交一份结论。CEO 的主 context 没有被中间文档污染。
解哪条故障:故障 ② context 溢出的另一解法——主 agent context 保持干净,所有"脏活"(多轮试错、大量工具调用)都在子 agent 的独立 context 里消化。
sub_messages = [...] 不是从主 agent 的 messages 复制过来的,而是全新的独立列表。主 agent 拿到的只有子 agent 的最终 return 值,中间子 agent 跑了 20 轮工具调用主 agent 一无所知——正因为"一无所知",主 context 才能保持干净。官方出处:Building agents with the Claude Agent SDK(Anthropic,2025-09-29)
6.8 Generator-Evaluator(GAN 启发的三角色架构,解 ⑦ 缺自动化评审)
一句话定义:借鉴 GAN 的思路,把一个任务的处理流拆成三个独立角色的 agent——Planner(规划者)拆任务、Generator(生成者)写代码、Evaluator(评价者)独立评审。Evaluator 不看 Generator 的中间过程,只看最终产出,以"怀疑者"视角打分,不通过就打回。
类比:论文评审制度——作者写论文,审稿人不看写作过程只看论文本身,按评分标准打分;编辑在作者和审稿人之间做协调。三个角色分离才能保证质量。
解哪条故障:故障 ⑦ 缺自动化评审——naive agent 里没有任何独立评审角色,agent 自己说做完就做完;Generator-Evaluator 架构把"评审"作为一个独立 agent 机械执行的步骤,打破"生成者自评偏见"。
Evaluator 的 docstring 强调——"不看生成过程"。这是整个机制的精髓:如果让同一个 LLM 既做生成又做评审,它会倾向于为自己辩护;但如果把评审单独抽成一个 agent,给它一个"怀疑者"角色的 prompt,它就会认真挑刺。这就是 GAN 的核心——通过架构性约束制造对抗,而不是靠单 agent 的自我反思。
官方出处:Harness Design for Long-Running Application Development(Anthropic,2026-03-24,Prithvi Rajasekaran)
6.9 机制 × 故障模式对照表
表 6-1 八大机制 × 八大故障模式对照
机制 | 主解故障 | 辅解故障 |
Agent Loop 四相循环 | ① 循环失控 | ⑥ 缺权限限闸
⑧ 成本失控 |
Tool Use 工具编排 | ④ tool 错误吞 | — |
Progress Tracking 进度追踪 | ⑤ 状态丢失 | — |
Context Management 上下文管理 | ② context 溢出
③ cache miss | ⑧ 成本失控 |
Feature List 任务拆解 | ② context 溢出(源头) | ⑧ 成本失控 |
Verification Loop 验证闭环 | ④ tool 错误吞(下游) | — |
Subagents 子代理分治 | ② context 溢出(另一解法) | ⑧ 成本失控 |
Generator-Evaluator生成 - 评估对抗 | ⑦ 缺自动化评审 | — |
注:⑥ 缺权限闸和 ⑧ 成本失控的完整解决方案(Permission Gate 权限闸 / Token Budget 成本预算)后面讲解。
七、三支柱正交视角

7.1 三支柱定义
除了按"故障→机制"的视角看 harness,还可以从三个工程维度——三支柱——来正交切分:
表 7-1 三支柱核心问题与判断规则
支柱 | 核心问题 | 判断规则 |
Context Engineering | Agent 能看见什么信息?看见的信息是否准确精简? | 如果一个机制在"整理 agent 接下来输入的信息",它属于这一柱 |
Architectural Constraints | Agent 能做什么、不能做什么?动作空间在哪里有边界? | 如果一个机制在"约束 agent 的能力或交互边界",它属于这一柱 |
Garbage Collection | Agent 能跑多久?成本和资源怎么回收? | 如果一个机制在"清理过期状态 / 限制成本 / 回收资源",它属于这一柱 |
来源说明:三支柱是本课程综合 Martin Fowler 系博客(Böckeler 2026-04-02)、Anthropic Rajasekaran(2026-03-24)、Phil Schmid(2026-01-05)多来源抽象的工程维度框架。
7.2 三支柱视角的价值
以 Claude Code 为例走一次三支柱归类:
- Context Engineering (输入端:怎么在第一时间把对的资料喂给它):Claude Code 读取你项目目录里的 CLAUDE.md(相当于 RAG 系统 prompt)、在长会话时触发 session 压缩(compaction)、把进度写进 progress 文件——这三项都在"整理 agent 看见的信息"。
- Architectural Constraints (控制流:它发疯的时候,你怎么硬生生把它按住):Claude Code 提供 27 种 hook 让你约束工具行为、内置 Permission Gate 控制危险操作、通过 Task tool(subagent 机制)做分治隔离——这三项都在"约束 agent 能做什么"(设红线、拉电闸)。
- Garbage Collection (状态流:内存快被撑爆时,怎么有策略地遗忘):Claude Code 有 token budget 防爆预算、做 session compaction 回收过期上下文;Anthropic 2025→2026 的工程路线注释也在从 compaction 逐步转向 reset——这条支柱核心是容错与动态收敛。
看到一个新的 Agent 产品,可以立刻问两个问题:
- 按机制视角:它解了八大故障模式里的哪几条?
- 按支柱视角:它主要投资在哪一柱?
7.3 八大机制 × 三支柱对照表
表 7-2 八大机制 × 三支柱归属
机制 | Context Engineering | Architectural Constraints | Garbage Collection | 归属判断说明 |
1 Agent Loop 四相循环 | 辅 | 主 | - | 循环每轮都要整理 context;四相结构本身是架构约束 |
2 Tool Use 工具编排 | - | 主 | - | 工具 schema 本身就是一个动作空间的约束 |
3 Progress Tracking | 主 | 辅 | - | 跨 session 的状态持久化属于 context 延展 |
4 Context Management | 主 | - | 辅 | 本柱的核心;compaction 也有 GC 属性 |
5 Feature List | 主 | 辅 | 辅 | JSON 清单是 context 的规划层 |
6 Verification Loop | - | 主 | - | 事件驱动的错误显性化属于架构约束 |
7 Subagents | 主 | 辅 | 辅 | 分治隔离是架构性的边界划分 |
8 Generator-Evaluator | - | 主 | - | 三角色分离是架构约束的典型实现 |
9 Permission Gate(待补) | - | 主 | - | 危险操作拦截属架构约束;第二节课补 |
11 Token Budget(待补) | - | - | 主 | 成本控制属 GC;第二节课补 |
八、生态地图——坐标系的实战运用
8.1 10+ 主流 Harness 产品全景
表 8-1 主流 Harness 产品清单
# | 产品 | 开发方 | 一句定位 |
1 | Claude Code | Anthropic | CLI-first 驾驭工程参考实现 |
2 | Codex CLI | OpenAI | CLI-first,OpenAI 官方 harness 参考 |
3 | Cursor | Anysphere | IDE-native harness,VS Code 深度集成 |
4 | Windsurf | Codeium | IDE-native,体验对标 Cursor |
5 | Cline | VS Code 社区 | IDE-native 开源插件,autonomous agent |
6 | Aider | 开源社区 | CLI-first 开源,git commit 深度集成 |
7 | Amp | Sourcegraph | CLI-first,代码搜索 + agent 结合 |
8 | Roo Code | 开源社区 | IDE-native VS Code 扩展 |
9 | DeepAgents | LangChain | SDK-harness,基于 LangGraph 的 harness 组件库 |
10 | Devin | Cognition | Cloud-sandbox,完全托管的 autonomous agent |
11 | JetBrains Junie | JetBrains | IDE-native,JetBrains 系 IDE 集成 |
8.2 四系家族树
11 个产品可以归成四个"家族":
表 8-2 四系家族特征对比
家族 | 主要特征 | 典型代表 | 适用场景 | 局限性 |
CLI-first | 命令行为主入口,跑在本地 terminal | Claude Code / Codex CLI / Aider | 后端开发、系统工程 | 需要命令行习惯,无 GUI |
IDE-native | IDE 内置集成,UI 优先 | Cursor / Windsurf / Cline / Junie | 前端开发、IDE 生态依赖者 | 重依赖特定 IDE 生态 |
Cloud-sandbox | 云端完全托管,无需本地环境 | Devin | 团队协作、远程长任务托管 | 成本较高、数据隐私顾虑 |
SDK-harness | 提供 SDK 自建 harness | DeepAgents (LangChain) | 定制化场景、嵌入自家产品 | 集成复杂度高 |
九、三句官方警示——harness 不是银弹
9.1 警示一:harness 会过时
"A harness encodes assumptions that go stale. What works for Claude 3.5 may not work for Claude 4.5." ——Anthropic 官方博文(2025-11-26,Justin Young)
harness 固化了一组关于模型的假设,这些假设会过期。不要把 harness 当成一次性架构写死,要像管理软件一样持续迭代。
判断 harness 是否过时的信号:同样任务的成功率下降 5pp 以上、需要频繁手动干预、新模型版本上线后 benchmark 反而退步。
9.2 警示二:Build to Delete(建造以便删除)
"The best harness is the one you're most willing to throw away and rewrite. The dataset of failures from your current harness is more valuable than the harness itself." ——Phil Schmid(2026-01-05,Bitter Lesson 三原则之一)
最好的 harness 是最愿意扔掉重写的那个。当前 harness 的失败样本比 harness 本身更有价值。不要给 harness 加舍不得删的复杂度。Manus 团队 6 个月重构 5 次的故事,本质就是这句话的实战演绎——每一次重构,都是因为上一版"舍不得删的设计"成了下一版的瓶颈。
9.3 警示三:三大开放争议还没定论
驾驭工程作为新学科,有三个核心设计选择社群仍在争论:
- 多 Agent(Subagents 分治)vs 单 Loop(Feature List 拆分):多 Agent 隔离性更好但协调开销更大;单 Loop 简单可控但 context 膨胀压力全在一个 loop 里。
- Compaction(压缩旧 context)vs Reset(重置 context 重来):compaction 保留历史但引入摘要噪声;reset 干净但丢失跨 session 推理链,强依赖 Progress Tracking 做外置记忆补救。
- CLI-first vs IDE-native:CLI-first 擅长长任务自主运行 + 脚本化编排;IDE-native 擅长行内交互式修改 + 视觉反馈。两种哲学尚未分出胜负。
如果有人告诉你"正确答案就是 X",保持警惕——这门学科还在演化中。
十、总结
- Agent = Model + Harness(Vivek Trivedy 原创;Böckeler @ martinfowler.com 传播)
- 八大故障模式——①循环失控 ②context 溢出 ③cache miss ④tool 错误吞 ⑤状态丢失 ⑥缺权限闸 ⑦缺自动化评审 ⑧成本失控
- 八大机制——Agent Loop / Tool Use / Progress Tracking / Context Management / Feature List / Verification Loop / Subagents / Generator-Evaluator
- 三支柱正交视角——Context Engineering / Architectural Constraints / Garbage Collection
- 四系家族树——CLI-first / IDE-native / Cloud-sandbox / SDK-harness
驾驭工程不是"feedback control 换皮",它是一套被八大故障模式逼出来、由八大机制实现、在三支柱坐标系下工作、在 10+ 个真实产品上落地、但注定会过时所以必须准备随时删除的工程学科。
📌 信息源归属:
- Agent = Model + Harness 公式:Vivek Trivedy(2025-09-23 首篇 HaaS 博文)/ Birgitta Böckeler @ martinfowler.com(2026-04-02)
- Terminal Bench +13.7pp 实证数据:LangChain 博客 2026-02-17,Vivek Trivedy(原文链接)
- OpenAI 约 100 万行 / 零人工编码 / 1/10 时间:OpenAI 工程团队博文 2026-02-11
- 八大机制主要出处:Claude Agent SDK 博文(2025-09-29)+ Anthropic Effective Harnesses(2025-11-26)+ Anthropic Harness Design(2026-03-24)
- 术语首用节点:Vivek Trivedy(2025-09-23)
📌 术语:
术语 含义 pp percentage point,百分点。例 "+13.7pp" 即"提升 13.7 个百分点" Terminal Bench 2.0 Stanford 推出的终端任务基准,考核 Agent 在真实 shell 环境完成复杂任务的通过率 SWE-bench / SWE-bench Verified Princeton 提出的 GitHub issue 修复基准;Verified 是经人工复核的高质量子集 prompt cache LLM 按输入前缀命中的缓存机制,前缀不变可复用,前缀被改写则缓存全部作废 HaaS Harness-as-a-Service,由 Vivek Trivedy 在 2025-09-23 首篇博文中创造 GAN Generative Adversarial Network,生成对抗网络,核心思路是"生成者 vs 鉴别者"对抗提升质量 Bitter Lesson Rich Sutton 2019 年 AI 经典论文——简单通用方法最终胜过复杂领域知识
📎 参考文章
欢迎您在底部评论区留言,一起交流~
Loading...
