所有人都在说 Harness Engineering,所以它到底是啥?

0 阅读10分钟
2026-03-25

0. 太长不读

2026 年 AI Agent 圈最火的一个词:Harness Engineering(驾驭工程)。核心发现:决定 Agent 表现的不是模型本身,而是包裹在模型外面的那套系统。

两个标志性实验:

  • LangChain:模型固定,只改 Harness,Terminal Bench 2.0 得分从 52.8% → 66.5%,排名 Top 30 → Top 5
  • OpenAI:3 个工程师 + Codex Agent,5 个月零行手写代码,合并 1500 个 PR,约 100 万行代码

本文从定义、组成、实践三个维度拆解 Harness Engineering,核心结论:

  • Harness 不是一个新技术,而是把 System Prompt、Tools、Hooks、Memory、评测等散落实践整合成一个学科
  • 模型是马,Harness 是缰绳——同一匹马配不同缰绳,表现天差地别
  • 工程师的角色从"写代码"变成"设计 Agent 的工作环境"

1. Harness 是什么

一句话定义

Agent Harness 是包裹在语言模型外面的所有非模型代码:提示、工具、中间件、状态管理、反馈回路。模型提供智能,Harness 让智能变得可用。

类比

传统开发:   程序员 → 写代码 → 产出软件
Harness 时代:工程师 → 造环境 → Agent 在环境里跑 → 产出软件

就像带一个能力极强但没有背景知识的新员工入职——你不替他干活,而是准备好入职文档、编码规范、CI 流程和 Review 机制,让他自己高效产出。

和 Context Engineering 的关系

2025 年流行的词叫 Context Engineering(上下文工程),关注的是"怎么给模型提供好的输入"。Harness Engineering 是它的超集:

Context Engineering  Harness Engineering

Context Engineering:
  系统提示 + 上下文管理 + 记忆

Harness Engineering:
  系统提示 + 上下文管理 + 记忆
  + 工具编排 + 中间件 + 评测 + 反馈闭环 + 安全边界

Context Engineering 管"模型看到什么",Harness Engineering 还管"模型能做什么、怎么验证、出错怎么办"。


2. Harness 由什么组成

六大组件

┌─────────────────────────────────────────────┐
│              Agent Harness                   │
│                                             │
│  ┌─────────────┐  ┌──────────────────────┐ │
│  │ System Prompt│  │ Tools / Skills / MCP │ │
│  │ 身份、约束、  │  │ Agent 能调用什么     │ │
│  │ 行为规范     │  │                      │ │
│  └─────────────┘  └──────────────────────┘ │
│                                             │
│  ┌─────────────┐  ┌──────────────────────┐ │
│  │ Middleware   │  │ Context Architecture │ │
│  │ / Hooks      │  │ 分层上下文、         │ │
│  │ 确定性逻辑   │  │ 渐进加载、压缩策略   │ │
│  └─────────────┘  └──────────────────────┘ │
│                                             │
│  ┌─────────────┐  ┌──────────────────────┐ │
│  │ Persistent   │  │ Verification Loop    │ │
│  │ Memory       │  │ 自我验证、评测、     │ │
│  │ 文件系统状态  │  │ 反馈闭环             │ │
│  └─────────────┘  └──────────────────────┘ │
└─────────────────────────────────────────────┘
                     │
              ┌──────┴──────┐
              │   LLM 模型   │
              │  (不动这里) │
              └─────────────┘

各组件职责

组件做什么对应工具
System Prompt定义 Agent 身份、行为约束、完成标准CLAUDE.md / AGENTS.md / SOUL.md
ToolsAgent 能调用的外部能力MCP Server、Skill 脚本
Middleware / Hooks在模型调用前后插入确定性逻辑Claude Code Hooks、LangChain Middleware
Context Architecture管理上下文质量,防止 Context RotSkills 延迟加载、滑动窗口、Prompt Caching
Persistent Memory跨会话的状态持久化MEMORY.md、进度文件、git 历史
Verification Loop验证 Agent 产出是否正确单元测试、Lint、评测体系

关键认知:这些组件单独看都不新鲜,Harness Engineering 的贡献是把它们当成一个整体来设计。


3. LangChain 实验:只改 Harness,涨了 13.7 分

实验设置

  • 模型:GPT-5.2-Codex,全程固定不动
  • 基准:Terminal Bench 2.0,89 个任务(机器学习、调试、生物信息等)
  • 只改三个变量:System Prompt、Tools、Middleware

Middleware 管道

LangChain 把 Harness 设计成可组合的中间件链:

Agent Request
  │
  ├→ LocalContextMiddleware
  │    启动时扫描 cwd 及上下级目录
  │    定位 Python 安装路径等工具
  │    减少环境类报错
  │
  ├→ LoopDetectionMiddleware
  │    检测 Agent 是否在重复相同动作
  │    触发时强制换策略
  │
  ├→ ReasoningSandwichMiddleware
  │    "推理三明治":规划和验证阶段多分配算力
  │    中间执行阶段正常算力
  │    注意:xhigh 设置反而更差(53.9%),因为超时
  │
  ├→ PreCompletionChecklistMiddleware
  │    提交前强制跑验证清单
  │    告诉 Agent "你的产出会被程序化测试"
  │
  ▼
Agent Response

关键发现

改了什么效果
加 LocalContextMiddleware环境报错大幅减少
加 LoopDetection消除死循环,任务完成率上升
推理三明治(high 档)63.6%(最优)
推理三明治(xhigh 档)53.9%(超时反而更差)
自我验证提示Agent 开始主动写测试验证自己
综合以上52.8% → 66.5%,Top 30 → Top 5

最反直觉的结论:给更多算力不一定更好。推理预算分配比总量更重要——在规划和验证阶段花算力,在执行阶段省算力。


4. OpenAI 实验:零行手写代码,百万行产出

基本数据

  • 团队规模:起步 3 人,后扩至 7 人
  • 时间跨度:5 个月
  • 产出:约 100 万行代码(应用逻辑、测试、CI、文档、内部工具)
  • PR 数量:约 1500 个
  • 人均日吞吐:3.5 个 PR
  • 手写代码:零行,全部由 Codex Agent 生成
  • 效率:传统方式的约 10 倍

四条核心原则

1. Agent 看不到的内容等于不存在

知识必须存在于代码库本身。AGENTS.md 约 100 行,作为索引指向设计文档、架构图、质量评分——全部版本化,在仓库里维护。

AGENTS.md(索引,约 100 行)
  ├→ docs/architecture.md
  ├→ docs/design-decisions/
  ├→ docs/quality-grades/
  └→ docs/execution-plans/

2. 约束编码化,而非文档化

规则不写在 Wiki 里让人去看,而是编进 Linter、类型系统、CI 规则和结构测试。Agent 选择性遵守文档,但无法绕过编译器。

❌ 文档里写:"请不要跨层调用"
✅ 结构测试:依赖方向必须是 Types → Config → Repo → Service → Runtime → UI
   违反即 CI 失败

3. Agent 端到端自主完成

从问题复现 → 实现 → 测试 → 开 PR,全链路不需人介入。人只在最后做 Review(大多数 PR 一分钟内可审完)。

4. 最小化合并阻力

测试偶发失败用重跑处理,不阻塞进度。定期有后台 Codex 任务扫描偏差、更新质量评分、开重构 PR——像垃圾回收一样自动清理。

AGENTS.md 是动态反馈循环

不是写一次就丢那的静态文档:

Agent 开始 session → 读 AGENTS.md
       │
Agent 执行任务 → 遇到失败
       │
Agent 更新 AGENTS.md ← 把失败原因和解法写回去
       │
下一个 Agent session → 读到更新后的 AGENTS.md → 不再重复犯错

还有一套"黄金原则"被编码进仓库:

  • 优先用共享 utility 包,不要手写 helper(集中维护不变量)
  • 不准 YOLO 式探测数据——必须用类型化 SDK,不能靠猜
  • 定期清理任务:扫描偏差、打质量分、自动开重构 PR

5. 从 Harness 视角重新理解 Claude Code

Claude Code 本身就是一个 Harness。把它的能力映射到 Harness 的六大组件:

Harness 组件Claude Code 对应作用
System PromptCLAUDE.md项目约定、行为规范
ToolsMCP Server + 内置工具(Bash、Read、Edit...)Agent 能做什么
Middleware / HooksHooks(PreToolUse / PostToolUse)工具调用前后插入逻辑
Context ArchitectureSkills 延迟加载 + Prompt Caching上下文质量管理
Persistent MemoryMEMORY.md + 进度文件跨会话状态
Verification Loop测试运行 + Lint + 子 Agent 验证产出验证

你已经在做 Harness Engineering 了

如果你做过以下任何一件事,你就已经在做 Harness Engineering:

  • 写了 CLAUDE.md 定义项目规范 → System Prompt
  • 接了 Notion MCP Server → Tools
  • 配了 Hook 在提交前跑 lint → Middleware
  • 写了 Skill 定义代码审查流程 → Context + Verification
  • 用了 MEMORY.md 记录跨会话信息 → Persistent Memory

Harness Engineering 不是让你学新东西,而是让你意识到这些散落的实践应该当成一个整体来设计。


6. 怎么落地

四象限定位

OpenAI 提出的任务分类框架——先搞清楚你的任务在哪个象限:

                    验证可自动化
                        │
          ┌─────────────┼─────────────┐
          │             │             │
          │  需人审查    │  最适合Agent │
          │  吞吐量受限  │  ← 目标区域  │
  目标     │             │             │
  清晰 ────┤─────────────┼─────────────┤
          │             │             │
          │  Agent无用   │  高效地跑偏  │
          │             │             │
          └─────────────┼─────────────┘
                        │
                   验证靠人工

Harness 的核心工作就是把任务推向右上角——让目标更明确(System Prompt),让验证更自动化(Verification Loop)。

落地顺序

第一步:写 CLAUDE.md / AGENTS.md
        ↓ 定义 Agent 能看到什么
第二步:编码化约束
        ↓ 规则进 Linter / CI / 类型系统,不靠 Agent 自觉
第三步:接工具
        ↓ MCP 接外部系统,Skills 定义使用流程
第四步:加 Middleware
        ↓ Hook 在关键节点插入确定性逻辑
第五步:建评测
        ↓ 每个真实失败转成测试用例
第六步:闭环
        ↓ Agent 失败 → 更新文档 → 下次不再犯

一个最小可用 Harness

如果只能做三件事:

  1. 写一份好的 CLAUDE.md:项目结构、命名规范、禁止事项、常用命令。Agent 看不到的等于不存在。
  2. 把验收标准变成可执行的:不是"代码要干净",而是 npm run lint && npm test 通过。
  3. 记录失败并更新:每次 Agent 犯错,把原因和解法写回 CLAUDE.md。这就是最小版的反馈闭环。

这三件事做到位,你的 Agent 表现会有明显提升——不需要换更贵的模型。


7. 常见误区

误区事实
"换更好的模型就行"LangChain 实验证明:同一模型,只改 Harness,涨 13.7 分
"Harness 就是写好 Prompt"Prompt 只是六大组件之一,还有工具、中间件、评测、记忆
"多给算力就能解决"xhigh 推理档位反而更差,算力分配比总量更关键
"AGENTS.md 写一次就行"它是动态反馈循环,Agent 失败时要更新,不是静态文档
"把规则写清楚 Agent 就会遵守"文档化的规则会被忽略,必须编码进 CI / Linter / 类型系统
"Harness 是个新技术要从头学"你已经在做了——CLAUDE.md、MCP、Hooks、Skills 都是 Harness 的一部分

8. 工程师角色的变化

这可能是 Harness Engineering 最深远的影响。

之前

工程师的一天:
  读需求 → 设计方案 → 写代码 → 写测试 → 提 PR → 等 Review → 合并

现在

工程师的一天:
  分解目标 → 写清楚验收标准 → 配好 Agent 环境 → 启动 Agent
  → 审查 PR(大多数一分钟搞定)→ 遇到失败更新 AGENTS.md → 循环

核心转变:从"我来写"变成"我来定义什么算对,让 Agent 去写"

OpenAI 给出的数据:3 个工程师,人均每天审查合并 3.5 个 PR。这意味着工程师的瓶颈不再是写代码的速度,而是:

  • 能不能把目标描述清楚
  • 能不能把验收标准自动化
  • 能不能设计好反馈闭环

这三项,恰好就是 Harness Engineering 的核心。


9. 划重点

  1. Harness Engineering 是 2026 年 Agent 领域最重要的工程范式:模型不动,只改 Harness,性能就能大幅提升。
  2. Harness 由六大组件构成:System Prompt、Tools、Middleware、Context Architecture、Persistent Memory、Verification Loop。单独看都不新鲜,整体设计才是关键。
  3. LangChain 用中间件管道(环境扫描 → 循环检测 → 推理分配 → 提交验证)把得分从 52.8% 拉到 66.5%。最反直觉的发现:推理预算分配比总量更重要。
  4. OpenAI 用 AGENTS.md 作为动态反馈循环 + 约束编码化 + 端到端自主 + 后台清理任务,3 人团队 5 个月产出百万行代码。
  5. 核心工作是把任务推向"目标明确 + 验证自动化"的象限。做不到这一点,换什么模型都没用。
  6. 落地可以从三件事开始:写好 CLAUDE.md、把验收标准变成可执行的、每次失败更新文档。
  7. 工程师角色从"写代码"变成"设计 Agent 的工作环境"——定义什么算对、怎么验证、出错怎么更新。

参考资料

  1. OpenAI, Harness engineering: leveraging Codex in an agent-first world
  2. LangChain, Improving Deep Agents with harness engineering
  3. LangChain, The Anatomy of an Agent Harness
  4. Martin Fowler, Harness Engineering
  5. OpenAI, Unlocking the Codex harness
  6. InfoQ, OpenAI Introduces Harness Engineering
  7. NxCode, Harness Engineering Complete Guide
  8. Tw93, 你不知道的 Agent:原理、架构与工程实践