Harness 工程与 Agent 解剖

一句话:Agent = Model + Harness。大模型是”引擎”,Harness 是”引擎周围让它能真正干活的一整套基础设施”。随着开源模型追平闭源模型,护城河正在从模型本身迁移到 Harness


目录


1. 什么是 Harness Engineering

Harness(马具 / 挽具):一个形象的比喻——马(大模型)再强壮,没有缰绳、鞍、马车的连接,也无法把力气变成有用的工作。

官方定义(Martin Fowler / Thoughtworks):

“Harness” 指 AI Agent 中除模型本身以外的所有东西。Harness Engineering 就是围绕模型搭建应用与基础设施的工程学科。

它管的事:

  • 什么时候加载什么上下文
  • 有哪些工具可以调用
  • 哪些动作被允许、哪些被拦截
  • 失败了怎么恢复
  • 会话如何持久化
  • 多轮交互里的状态如何管理

一句话判断法:如果你把这个模块里的 LLM 从 Claude 换成 GPT-5 再换成本地 Qwen,它还能工作——那这个模块就是 Harness 的一部分。


2. 三层工程的递进关系

业界已经形成共识的三层划分,每一层都包含前一层

层次管什么生活类比
Prompt Engineering(提示词工程)怎么写指令、怎么问问题教一个员工”怎么说话”
Context Engineering(上下文工程)什么内容何时进入上下文窗口管理员工”每次看到的信息”
Harness Engineering(脚手架工程)整个应用与基础设施:工具、记忆、权限、错误恢复搭建员工”工作的整个公司”
Harness Engineering
└── Context Engineering
    └── Prompt Engineering
        └── 原始 API 调用

这也解释了为什么提示词工程不够用:单靠调整 prompt,解决不了”工具失败要重试”、“上下文爆掉要压缩”、“并发调用要编排”这些工程问题。


3. 为什么这个概念一夜爆红:Claude Code 泄露事件

2026 年 3 月,Anthropic 在发布 Claude Code v2.1.88 npm 包时,因打包错误意外泄露了约 51.2 万行 TypeScript 源码(1900 个文件,完整未混淆的 source map)。几小时内相关镜像仓库飙到 5 万星。

人们打开一看,震惊整个 AI 圈——这根本不是”LLM 的薄壳调用层”,而是一整套工程精密的系统:

组件规模 / 做法
权限受控工具约 40 个(文件操作、Bash、网络、LSP 集成)
Query Engine46,000 行,负责 API 调用、token 缓存、上下文管理、重试逻辑
动态上下文管理上下文快爆时自动压缩消息
静默故障恢复工具失败后走一套恢复策略,用户完全感觉不到
编译时特性剔除防止内部实验工具流到外部用户

几天后,OpenAI 跟进公布:一个 3 人团队用”harness engineering”方法,产出了百万行代码库,人均每天 3.5 个 PR,零手动敲代码

关键影响:这个泄露让 “Harness Engineering” 这个术语一夜之间成为行业通用词汇——它只是给开发者早已在做的事命了一个名。


4. Agent 五层解剖图

目前入门课件里最主流的切法(中文社区常见版本):

┌─────────────────────────────────────────────────┐
│                    编排层                        │
├──────────┬────────────────────────┬────────────┤
│          │                         │            │
│  记忆层   │      大模型 LLM          │   执行层    │
│          │                         │            │
├──────────┴────────────────────────┴────────────┤
│                    反馈层                        │
└─────────────────────────────────────────────────┘
                     AI Agent

4.1 每一层对应到 Harness 世界里的什么

图中层级Harness 世界里的对应Claude Code 里的具体体现
编排层Control Loop / Query Engine(调度大脑)泄露代码里那 46,000 行的 query engine——决定何时调用工具、何时停止、怎么重试
记忆层Memory + Context Engineering会话持久化、自动消息压缩、MEMORY.mdCLAUDE.md、Prompt Caching
大模型Model(唯一不属于 Harness 的部分)Claude / GPT / Gemini 本身
执行层Tools + MCP + Sandbox~40 个权限受控工具(Read、Write、Bash、LSP…)+ MCP servers
反馈层Sensors(反馈控制)测试失败回灌、lint 报错 → 模型自修复、错误恢复循环

一句话:去掉中间那块”大模型”,剩下的四层框架结构就是 Harness 的全部

4.2 这个五层图的优点

  1. 干净地把模型和基础设施分开,避免初学者把”Agent 智能”全归功于模型
  2. “反馈层”单独拎出来——很多简化图会漏掉,但它恰恰是 Agent 质量翻倍的关键
  3. “编排层”在顶部覆盖整个系统——准确,它确实是全局调度者
  4. 结构对称,适合入门讲解

4.3 这个五层图的局限

入门图没有展开的关键机制:

缺失的部分为什么重要
Guides(前馈引导)五层图只画了反馈控制,但 Harness 更关键的是事前引导:system prompt、Skills、工具描述都属于 Guides
权限闸门Claude Code 的工具是 permission-gated 的。执行层不应该是”直通”,中间必须有权限判定。安全攻防的具体战术见 Agent 安全攻防
Skills / 渐进式披露现代 Harness 的核心优化——按需加载指令,而不是塞满 system prompt
子代理(Sub-agents)编排层实际可以派生子 Agent 跑并行 / 便宜任务
观测 / 日志反馈层只体现了”自修复”,生产级 Harness 还需要给人看的日志与回放

5. 核心设计原则:Guides + Sensors

Thoughtworks 的 Birgitta Böckeler 提出的 Harness 设计框架:

5.1 Guides(前馈控制)——事前引导

预判 Agent 可能做错什么,在它行动前就引导它走对路。

  • 目标:提高”首次做对”的概率
  • 手段:system prompt、Skills、工具描述、example few-shot、角色设定
  • 类比:员工入职手册、SOP、岗位说明书

5.2 Sensors(反馈控制)——事后纠正

在 Agent 行动之后观察结果,让它自我纠正。

  • 目标:即便第一次做错,也能自动收敛到正确结果
  • 最强形式为 LLM 消费优化的信号——例如 linter 报错里直接包含”修复指令”(一种正向的 prompt injection)
  • 类比:测试反馈、代码评审、监控告警

5.3 两条反直觉的洞见

洞见 1:Agent 并不讨厌被微观管理

和人类开发者不同,约束越多、检查越多、结构越清晰,Agent 表现越好——而不是更差。对人类团队奏效的”lean & minimal”直觉,在 Agent 身上反而是减分项。

洞见 2:自我验证是最强杠杆

Boris Cherny(Claude Code 作者)说:给模型一种验证自己工作的方式(跑测试、看 lint、调 API 验证返回),质量直接提升 2–3 倍

5.4 两种控制手段的成本光谱

类型示例特点
Computational(计算型)静态类型检查、单元测试、lint确定、快、便宜
Inferential(推断型)AI 驱动的语义 review、LLM-as-judge慢、贵,但能抓住语义层面的问题

原则:先用便宜的计算型控制尽可能多的情况,把贵的推断型控制留给真正需要语义判断的部分。

5.5 实操速查:常见 Harness 错误与正确做法

借鉴自社区「六层架构」视角(来源 B 站「code 秘密花园」+ LINUX DO @bushishisan 整理稿,资料日期 2026-04-08,作者声明含 AI 生成内容;原稿与本文五层架构约 60% 重叠,本节只吸收 3 处与本文真正互补的实操内容。)

5.5.1 Guides 的具体化:上下文的三层组织

把 § 5.1 Guides 进一步切成三类信息分类隔离——Agent 出错时也容易定位是哪一层的问题:

职责典型内容
规则层不可逾越的硬边界技术红线、安全约束、架构原则
状态层当前任务的进度追踪完成了什么、阻塞是什么、下一步
证据层支撑结论的外部依据文档、测试结果、日志、用户反馈

反例:200 条对话混在一起,规则 / 状态 / 证据全纠缠 → Agent 抓不住重点,幻觉率上升。 正例:分清”别动数据库(规则)/ 正在修 bug(状态)/ 错误日志(证据)“。

5.5.2 记忆与状态:3 类生命周期不要混用

§ 6 补强版架构图里的「记忆层」可以再细分成三类,不同生命周期不能用同一存储:

分类生命周期示例
当前任务状态任务结束即销毁任务进度、当前阶段、已完成步骤
会话中间结果会话结束即销毁用户需求记录、已生成代码片段
长期记忆跨会话持久化用户偏好、项目背景、技术栈

4 大踩坑

错误做法后果正确做法
不保存中间结果相同问题要重复查 / 重复算每轮对话结束前保存到会话状态
三种状态混用用户偏好被任务数据覆盖用独立存储区隔三类
长期记忆不更新用过时偏好导致答非所问每次交互后更新长期记忆
状态丢失无感知任务中断后无法恢复定期检查状态完整性,断点可查

5.5.3 失败类型 → 恢复策略对照表(Sensors 的工程化)

§ 5.2 Sensors(反馈控制)落到工程上,需要按失败类型选不同的恢复策略——不是所有失败都该重试

失败类型检测方法恢复策略
超时失败执行时间超阈值指数退避重试,最多 3 次
资源不足内存 / CPU 超限等待资源释放后重试,或降级处理
工具调用失败工具返回错误码检查工具状态,可切换备用工具
逻辑错误输出校验不通过记录错误模式,尝试替代方案
不可恢复错误权限不足、参数非法直接返回错误,不重试

关键洞察:双重校验(执行前 + 执行后)成本不对称——前置校验防无效执行浪费资源,后置校验保输出质量;便宜的前置校验能省下 90% 的事后清理工作。


6. 补强版 Harness 架构图

把前面五层图扩展成一个更贴近真实生产级 Harness 的结构图:

┌─────────────────────────────────────────────────────────┐
│                  编排层 (Orchestrator)                   │
│         · 调度循环   · 子代理派生   · 并发管理             │
├───────────┬──────────────────────────────────┬──────────┤
│           │                                    │          │
│           │         Guides (前馈控制)          │          │
│           │   System Prompt · Skills · 模板   │          │
│           │                                    │          │
│  记忆层    │      ┌────────────────────┐       │  执行层   │
│ Context   │      │                    │       │  Tools   │
│ + 压缩    │      │    大模型 LLM       │◄──────┤ +权限闸门 │
│ + Cache   │      │                    │       │ + MCP    │
│           │      └────────────────────┘       │          │
│           │                                    │          │
│           │        Sensors (反馈控制)          │          │
│           │   测试 · Lint · 错误回灌 · 重试     │          │
│           │                                    │          │
├───────────┴──────────────────────────────────┴──────────┤
│              反馈层 + 观测 / 日志 / 回放                   │
└─────────────────────────────────────────────────────────┘
                         AI Agent

补强版架构图把五层图缺失的三个关键部分补上了:

  1. Guides / Sensors 的二分显式化
  2. 权限闸门作为执行层的必经通道
  3. 观测层作为反馈层的生产级配套

7. Harness 的典型组件清单

7.1 Skills(技能 / 渐进式披露)

要解决的问题:把所有指令都塞 system prompt,上下文会被提前消耗完。

做法

  • 把知识、指令、工具打包成”技能单元”
  • Agent 只在判断需要时才加载对应技能
  • 类比:人类的专业知识不是全部记在脑子里,而是”知道什么时候查什么书”

7.2 Sub-agents(子代理)

要解决的问题

  • 成本:不是所有任务都值得调用 Opus
  • 上下文污染:子任务的中间过程不应该占用主会话窗口

做法

  • 主会话用贵模型(Opus)做规划、编排
  • 派生子代理用便宜模型(Sonnet / Haiku)做具体活儿
  • 子代理返回摘要结果给主会话,中间过程不回流

7.3 MCP Servers(Model Context Protocol)

作用:用标准协议把外部服务接进 Agent。

两种形态

  • 本地 MCP:运行在本机,操作本地文件、执行命令
  • 远程 MCP:HTTP 连接,对接 Linear、Sentry、GitHub、Notion 等 SaaS

机制要点:MCP 把工具描述、参数 schema 注入到 Agent 的 system prompt,Agent 自动学会何时调用。

7.4 Error Correction Loops(错误纠正循环)

标准模式:

测试失败 → 模型读取错误 → 分析根因 → 生成修复 → 重跑测试
     ↑                                                │
     └────────────────────────────────────────────────┘
                 循环直到通过 或 达到重试上限

关键点:错误信息要以 LLM 能高效消费的方式呈现(结构化、带上下文、带建议),否则循环效率很低。

7.5 工具层的”有主见”

反例:直接给模型裸 bash 访问。

  • 噪声大、结果不可预测
  • 难以并发
  • 危险操作无保护

正例(Claude Code 的做法):

  • 提供 40 个经过验证、语义明确的工具
  • 工具内部做并发安全处理
  • 每个工具有明确的权限等级(read / write / destructive)

8. 为什么 Harness 是新的 AI 护城河

同一个 Claude API key
    │
    ├─── 开发者 A:简单 prompt-response 循环 → 玩具级 demo
    │
    └─── 开发者 B:工具 + 自动测试 + 错误纠正 + 持久记忆 → 生产力工具

差距的全部来源于 Harness 的工程深度,和模型本身无关

商业逻辑

  • 开源模型正在快速追平闭源模型(性能差距在缩小)
  • 多家厂商提供智力接近的模型
  • 下一个差异化的战场是”模型周围的一切”

这就是为什么 Anthropic 对 Claude Code 源码被泄露反应那么剧烈——那 51 万行代码是真正的护城河,不是模型权重。


9. 未来:Harness 会被模型吞并吗

常见疑问:模型越来越强,Harness 里做的事(工具调用、上下文管理、自修复)会不会被模型内置掉,以至于 Harness 变得不必要?

LangChain 的 Harrison Chase 的反向观点

Claude Code 现在已经 51 万行代码,这是一个随着模型变强而持续增长的 Harness,不是缩小的

更强的模型会扩展 Harness 需要做的事,而不是取代 Harness 的必要性。

为什么:

  • 模型越强 → 能被委托的任务更复杂 → Harness 要管理的状态/工具/约束更多
  • 模型越强 → 用户对质量要求更高 → 需要更多的 Guides 和 Sensors
  • 模型越强 → 和外部系统的集成需求越多 → MCP / 工具层越厚

结论:Harness Engineering 是一个随 AI 能力一起增长的长期工程学科,不是过渡方案。


10. 与本知识库其他章节的关联

相关章节关联点
上下文窗口与Token计费Harness 的”记忆层”核心就是上下文工程;Prompt Caching 是降低 Harness 运行成本的关键
02_提示词工程Prompt Engineering 是 Harness Engineering 的最内层——这篇笔记解释了为什么提示词工程是”必要但不充分”的
RAGRAG 本质是”记忆层”的一种具体实现——把外部知识喂进上下文
软件架构设计详解.mdHarness Engineering 本质是”软件架构”在 AI 时代的新分支——分层、关注点分离、可替换性等原则同样适用
Multi-Agent 工程实战与 Persona 设计五层架构的多 Agent 落地案例:记忆层对应”共享真相源”,编排层对应”R&D 流水线”,执行层对应”任务二分法”(脚本 vs AI)
Function Calling 与 MCP 工程指南执行层的具体实现——工具调用协议、御三家差异、MCP “USB 化”工具生态

11. 延伸阅读

权威一手资料

Claude Code 泄露事件分析

中文深度解读


附录:关键术语速查

术语中文一句话解释
Harness脚手架 / 挽具模型之外让 Agent 能工作的一切
Agent智能体Model + Harness 的整体
Orchestrator编排层调度循环的大脑
Guides前馈控制事前引导(system prompt、Skills、工具描述)
Sensors反馈控制事后纠正(测试、lint、错误回灌)
MCP模型上下文协议Agent 接入外部工具/服务的标准协议
Skills技能 / 渐进式披露按需加载指令,不把所有东西塞进 system prompt
Sub-agent子代理派生的、运行小任务的子 Agent
Permission Gate权限闸门工具执行前的权限判定点

最后更新: 2026-04-22 归属模块: 06_Agent工程