Harness Engineering:AI Agent 时代真正缺的那块拼图

May 10, 2026

aiengineering

写于 2026 年 5 月 | 数据截至 2026 年 4 月


2026 年 2 月,一个新词突然出现在每个 AI 工程师的时间线里:Harness Engineering

不是新模型,不是新框架,而是一种工程思路的命名。但就是这个命名,让无数工程师感到了某种如释重负——原来他们一直在做的那件事,终于有名字了。


我们为什么需要一个新词

要理解 Harness Engineering 是什么,得先讲清楚它的两个前任是什么,以及它们为什么不够用。

第一代:Prompt Engineering(2022—2024)

ChatGPT 出来之后,所有人的第一反应是:得学会”跟 AI 说话”。Few-shot、Chain-of-Thought、角色扮演、指令分解——一整套修辞学涌现出来。你精心打磨一段 prompt,递给模型,拿回一个答案。

这在单次问答场景里有效。但它有一个根本性的天花板:它是无状态的

每次对话都是全新开始。模型不记得上次它犯了什么错,也没有任何机制阻止它下次犯同样的错。你每次都在期待一个奇迹,而不是在建一个系统。

第二代:Context Engineering(2025 年中)

Andrej Karpathy 和 Shopify CEO Tobi Lütke 先后提出了这个概念:单条 prompt 不够,你得为模型动态构建整个上下文窗口——相关代码、历史对话、工具定义、RAG 检索结果。模型做每一个决策时,都能看到它需要的信息。

这解决了”模型不知道该看什么”的问题。但随着 Agent 开始跑更长的任务,一个新问题暴露出来:

就算给了模型所有它需要看的信息,它还是会出错——而且是以重复的、可预测的方式出错。

一个被授权修改一个模块的 Agent,会去改整个代码库。一个被要求”修复 CI 失败”的 Agent,会在失败的 lint 检查上无限重试。一个跑了两小时的 Agent,会忘记它最初的目标。

更好的 prompt 解决不了这些问题,更丰富的 context 也解决不了。因为根源不在于模型”不知道”,而在于没有任何东西阻止它犯错,也没有任何机制把错误转化为系统的永久性改进


命名时刻:2026 年 2 月的两周

Mitchell Hashimoto 的一个习惯

2026 年 2 月 5 日,HashiCorp 联合创始人、Terraform 和 Ghostty 的作者 Mitchell Hashimoto 在博客里描述了一个自己用 AI Agent 时养成的习惯:

“每次 Agent 犯了一个错,我不会期待它下次做得更好。我会把环境改掉,让这个具体的错误在结构上不可能再以同样的方式发生。更新 AGENTS.md,加脚本、linter、检查工具,让 Agent 能验证和修复自己的工作。”

他把这个习惯叫做 “engineering the harness”

Hashimoto 不是一个喜欢造概念的人。他只是在描述自己的工作方式。但这个词的出现时机恰到好处——整个社区里无数工程师都在做类似的事,却没有一个词来描述它。现在有了。

OpenAI 的百万行代码实验

六天后,2 月 11 日,OpenAI 工程团队发布了《Harness Engineering: Leveraging Codex in an Agent-First World》,彻底引爆了话题。

文章描述了一个内部实验:一个三人团队,从一个空 git 仓库起步,五个月里没有手写一行业务代码。所有代码全部由 Codex 生成。最终结果:100 万行生产代码,1500 个合并的 PR

但这个实验真正重要的部分,不是”AI 写了一百万行代码”这个标题,而是他们花了大量篇幅描述的:为了让这件事成为可能,他们做了什么样的工程准备

他们总结了五条规则:

  1. 仓库是 Agent 唯一的知识来源
  2. 代码不仅要对人类可读,更要对 Agent 可读
  3. 架构约束不靠 prompt,靠 linter
  4. 自主性要一步步给
  5. 如果一个 PR 需要大改才能合并,问题不在 Agent,在 Harness

团队对自己角色的总结很有意思:“我们现在最大的挑战,在于设计环境、反馈循环和控制系统。不写代码了。写规则。“


数据说话

理论可以争,数据很难争。

研究者 Nate B. Jones 做了一个实验,变量只有一个:模型外面包的那层运行环境。同一个模型,同一个提示词,换 Harness 前后,编程基准的成功率从 42% 跳到了 78%

Anthropic 工程团队也做了验证,用同一个 prompt、同一个模型,分别跑了两种方式:

方式运行时长花费结果
无 Harness20 分钟$9核心功能坏的
完整 Harness6 小时$200可玩的完整游戏

Harness 贵了 20 倍,但产出不是”更好”,而是”有质的差别”。

这两个数据点之后,“该不该做 Harness”的争论基本结束了。剩下的问题是”怎么做”。


各路实践者在做什么

Stripe:每周 1300 个 PR

Stripe 的内部 Agent 系统叫 Minions,每周合并超过 1300 个 PR,全部由无人值守的 Agent 完成。

他们有几个值得关注的设计:

Blueprint 编排系统:把工作流拆成两种节点——确定性节点(跑 linter、推送代码)按固定路径执行,不调用大模型;Agentic 节点(实现功能、修复 CI)交给模型判断。理性地把 AI 和非 AI 的边界画清楚了。

CI 两轮上限:第一轮失败,Agent 自动修复再跑一次。还失败,直接转交人类。不允许无限重试。这条规则很简单,但它解决了 Agent 的”死磕”问题。

工具精简原则:他们平台挂了约 500 个 MCP 工具,但给每个 Agent 的是精心筛选的子集。他们发现了一个反直觉的规律:更多工具不等于更好的表现

Stripe 的核心理念:“What’s good for humans is good for agents.” 给人类工程师投资的 Devbox 和工具链,在 Agent 身上也直接产生了回报。

Anthropic:三 Agent 架构与 Context Reset

Anthropic 用三个独立 Agent 分工:规划 Agent、生成 Agent、评估 Agent。

评估 Agent 的存在基于一个清醒的结论:模型无法可靠地评估自己的工作。这让人想到 GAN 的设计哲学——生成器和判别器必须分离。

内存管理上,他们提出了 Context Reset 策略:不压缩上下文,而是在上下文接近饱和时,启动一个全新的”干净”Agent,通过结构化交接文档恢复状态。类似于用重启进程来解决内存泄漏——不优雅,但有效。他们建议上下文利用率控制在 40% 以内,超过之后 Agent 质量明显下降:幻觉增多,开始兜圈子。

Hashimoto:个人规模的极端实践

Hashimoto 自己的路线和 Stripe、OpenAI 完全相反。他明确说”我不打算跑多个 Agent,也不想跑”。坚持一次一个 Agent,保持深度参与,每次失败都亲手修改环境。

这代表了 Harness Engineering 里一个重要的张力:通用化 vs. 特化,单 Agent vs. 多 Agent,有人值守 vs. 无人值守。Hashimoto 的实践证明,即使在个人规模,这套思路也能带来显著的生产力提升——不需要复杂的系统,需要的是清晰的工程素养。


一个结构化视角:ETCLOVG 七层框架

前面的案例都在讲「谁做了什么」,但缺少一个通用框架来回答「Harness 到底包括什么」。

2026 年 5 月,CMU、Yale、JHU、Amazon 等机构联合发表了综述论文《Agent Harness Engineering: A Survey》,梳理了 170+ 个开源 Agent Harness 项目后,提出了一个七层分类框架——ETCLOVG

职责核心问题
Execution执行环境Agent 在哪里跑?本地、容器、沙箱?边界在哪?
Tooling工具接口工具怎么描述、发现、调用?怎么防止误用?
Context上下文和记忆短期上下文、会话状态、长期记忆怎么管理?
Lifecycle生命周期编排单轮还是多轮?一个 Agent 干到底还是分工协作?
Observability可观测性每次调用、重试、token 成本、延迟能不能追踪?
Verification验证评估结果对不对?失败是模型的问题还是环境的问题?
Governance治理和安全Agent 有什么权限?谁能审批?谁来审计?

回过头看前面的案例,会发现每个实践者都在解决这七层中的某几层:

大多数团队都是先解决 E/T/C 三层(让 Agent 跑起来),再补 V(验证结果),最后才意识到 O 和 G 不能少。Observability 和 Governance 经常被当作「附属功能」后补,但论文把它们拎出来作为独立层,理由很充分:Agent 不是聊天机器人,它在行动。一旦开始行动,你必须知道它做了什么(O),也必须控制它被允许做什么(G)。

这七层还有一个重要特征:它们不是独立的。 工具描述会占上下文窗口,影响模型行为(T → C)。执行环境会影响评估结果,因为包版本、重置机制、延迟都不一样(E → V)。可观测性 trace 如果没有记录身份和权限状态,就不能成为治理证据(O → G)。这就是 Harness 的耦合问题——改任何一层都不是局部优化,可能改变整个系统行为。

评估也要跟着变

这篇综述还提出了一个值得重视的判断:Agent 评估不能只看最终成功率。

一个 Agent 的最终结果背后混着很多变量:模型、提示词、工具、上下文、沙箱、重试策略、权限、评估器。同样一个成功率,可能代表完全不同的系统质量——可能靠疯狂重试刷过任务,可能走了危险路径但结果对了,可能利用了测试漏洞。

论文主张评估要 trace-native:把完整执行轨迹作为评估对象。记录模型输出、工具调用、环境状态变化、上下文快照、错误、重试、token 使用、延迟和成本。然后判断三件事:结果是否正确,路径是否合理,评估器本身是否可信。

这会把 Agent 评估从「排行榜机制」拉回「质量控制机制」。排行榜回答的是谁分高,质量控制回答的是为什么失败、该改哪一层。


一个重要的概念边界

很多人混淆了 Agent 框架和 Harness,值得讲清楚。

有一个例子说得很好:Cursor 是一个 App,不是一个 Harness。 Cursor 内部用于长时间自主编程会话的 Planner-Worker 机制——加上验证和完成逻辑——才是 Harness。同一个模型,截然不同的结果。

可以这样类比:Agent 框架是给 Agent 提供肌肉(能力),Harness 是给 Agent 提供骨骼和边界(约束与反馈)。 两者不对立,但侧重完全不同。


悬而未决的问题

Harness Engineering 发展极快,但目前还有几个核心分歧没有定论:

Harness 应该多重还是多轻? 做通用 Agent 产品的追求最小化 Harness 以适应各种场景;做特定产品的可以高度定制。两者并不矛盾,但在通用 Agent 普及的方向下,哪个更对尚无定论。

单 Agent 还是多 Agent? 有人用 16 个并行 Agent 构建 C 编译器,Hashimoto 明确拒绝多 Agent,Anthropic 自己承认这是 open question。目前的证据倾向于:任务复杂度和代码库规模是决定因素——小项目单 Agent 够,大项目几乎必然需要多 Agent。

Harness 的耦合性怎么管理? 前面提到的 ETCLOVG 七层不是独立的。改工具描述会占上下文窗口,影响模型行为。改执行环境会影响验证结果。改可观测性会改变治理能力。这意味着 Harness 的迭代不能逐层独立优化——一次改动可能在其他层产生意外后果。目前还没有成熟的解耦方法,更多靠工程经验和大量测试。

好 Harness 不只加控制,还要知道什么时候删控制。 Anthropic 发现了一个有意思的现象:某些 Context Reset 策略对旧模型有用,但对更强的模型已经可以去掉——去掉之后成本下降,质量没有变差。每一个 wrapper、reset、verifier、permission gate 本质上都代表一个假设:「模型自己做不好,所以我在外面加一层控制。」当模型能力变了,这些控制可能不再必要,甚至会拖后腿。所以 Harness Engineering 不是越复杂越好,而是一个需要随模型能力持续评估的动态系统。

可维护性是更大的悬案。 OpenAI 坦承:“AI 代码的长期可维护性”和”棕地项目的改造”是两个”完全空白”的问题。当代码的作者是 Agent 集群,没有人真正理解每一行代码的决策逻辑,维护这些代码的责任怎么落到人身上?这不只是技术问题,也是组织问题。


现在在哪里,会去哪里

2026 年 2 月之前,很多工程师已经在做 Harness Engineering 这件事,只是没有这个名字。从 Hashimoto 的个人博客到 OpenAI、Anthropic、Stripe 的工程博客,再到 Martin Fowler 网站和 arXiv 论文,这个概念只花了不到两个月就完成了扩散。这是一个典型信号:它解决的是一个已经存在但无名的真实痛点。

短期(6—12 个月):方法论标准化。AGENTS.md 类的配置规范、Harness 设计模式、企业级模板会大量涌现,类似早期 DevOps 时代的”最佳实践”积累阶段。

中期(1—2 年):工具平台化。LangGraph、CrewAI、Inngest 都在布局 Harness 相关能力,最终可能形成”Harness as a Service”的产品形态——团队从预制模板里选,而不必从头搭建。

长期(2—4 年):AutoHarness 方向的成熟与否——让系统自动生成能改善 Agent 行为的代码约束——将决定这个领域的人工成本能降多少。


如果你现在想开始

不需要一开始就搭 16 个并行 Agent 的复杂架构。Hashimoto 的案例证明,一个人、一个 Agent、一套清晰的环境规则,就能产生显著的效果。

优先级最高,投入产出比最高:

  1. 创建 AGENTS.md(或 CLAUDE.md)——把项目规则、架构约束、不允许的操作写进去
  2. 加一条自定义 Linter 规则——把你最常见的 Agent 错误变成结构性约束
  3. 把关键知识文档化进仓库,而不是留在对话历史里

其次:


把所有内容压缩成一句话:

Harness Engineering 是在 Agent 外部构建一套机制——约束、反馈循环、工具链、验证逻辑——让 Agent 能在没有持续人工干预的情况下,稳定地完成跨越多步的自主任务。

它不是模型本身的改进,也不是提示词的技巧,而是环境工程

马的力量是模型能力,马具(Harness)是让这个力量能稳定拉动车的结构件。没有马具,马很强,但无法稳定工作;马具设计得好,普通的马也能完成精确的任务。


参考来源:OpenAI Engineering Blog (2026.02)、Anthropic Engineering Blog (2026.03—04)、Mitchell Hashimoto Blog (2026.02)、Stripe Engineering (2026)、Martin Fowler / Birgitta Böckeler (2026.03)、arXiv 2603.25723、《Agent Harness Engineering: A Survey》(CMU/Yale/JHU/Amazon, 2026.05)