Harness Engineering 入门:Agent = Model + Harness
有没有过这种经历:
arduino
别人用 Claude Code:
说一句"按这个规范重构整个模块"
→ AI 自动读代码、改文件、跑测试、提交 PR
→ 回来收结果
你用 Claude Code:
说一句"帮我重构一下"
→ AI 改了三个文件,把别的模块搞坏了
→ 你:停!不是这样改的
→ AI:好的,我改回来
→ 你:......
同一个模型,差距在哪?不在模型,在 Harness。
这篇讲的东西,叫 Harness Engineering ------它回答的问题是:同样的模型,为什么有人能让它稳定可靠地干活,有人却只能逐句补救?
一、一句话定义
LangChain 的 Vivek Trivedy 在 2026 年 3 月给了一个最精炼的公式:
Agent = Model + Harness。如果你不是模型,你就是 Harness。
拆开说:
- Model:原始智能。负责"生成文本"、"推理"、"决策"。
- Harness:包裹在模型外面的所有东西------系统 Prompt、工具、文件系统、沙箱、编排逻辑、Hook、可观测性。负责让模型生成的文本变成"真实的行动"。
打个比方:模型是发动机,Harness 是整辆车------油箱、轮子、方向盘、刹车、仪表盘。发动机再强,没有车壳它哪也去不了。
Claude Code 就是一个 Harness ------它是包裹在 Claude 模型外面的执行环境。而你在 Claude Code 里写的 CLAUDE.md、Skills、Hooks、MCP 服务器,是你自己的 Harness,建在 Anthropic 官方 Harness 之上。
二、为什么 Harness 比你想的更重要
大多数 Agent 失败,不是模型太笨,而是 Harness 太薄------缺上下文、缺工具、缺反馈、缺护栏。这是好消息:模型你训不了,但 Harness 你就能重建。
错误认知:
Agent 不行 → 换更大的模型 → 还是不行 → 再换更大的
正确认知:
Agent 不行 → 检查 Harness 哪层薄了 → 补那一层 → 立刻变好
三、Harness 的七层解剖(概览)
把各家的组件列表汇总,一个 Harness 由七层组成:
objectivec
① Instructions(指令)
系统 Prompt / CLAUDE.md / AGENTS.md / Skill 定义 / 编码规范
→ 告诉 AI "按什么规矩干"
② Knowledge(知识)
记忆存储 / 上下文压缩 / 检索 / 进度文件
→ 告诉 AI "之前干了什么、该参考什么"
③ Tools(工具)
文件读写 / Shell / 搜索 / MCP 集成
→ 给 AI "能动手的能力"
④ Infrastructure(基础设施)
文件系统 / 沙箱 / 浏览器 / 执行环境
→ 给 AI "在哪干活的空间"
⑤ Orchestration(编排)
子 Agent 生成 / 模型路由 / 交接 / 上下文防火墙 / 权限门
→ 决定 "谁干什么、谁能碰什么"
⑥ Hooks / Middleware(钩子/中间件)
确定性生命周期脚本,由 Harness 运行而非模型
→ 在关键节点 "强制插入规则"
⑦ Observability(可观测性)
日志 / 追踪 / 成本计量 / 事件总线
→ 让你 "能看见发生了什么"
这七层,后面会逐个详解。你现在只需要记住一个判断标准:你的 Agent 出了问题,从第一层往下排查,问"哪一层失败了"。
四、和 Loop Engineering 的关系:一层之差
如果你读过之前写的 Loop Engineering 系列,你可能会问:Harness 和 Loop 什么关系?
用一句话区分:
vbnet
Harness Engineering:这一次尝试怎么可靠地执行?
→ 工具、沙箱、上下文组装、权限
Loop Engineering:下一步干什么?什么时候停?
→ 重试策略、终止条件、任务队列、步骤预算
一个具体的例子------Agent 修一个失败的测试:
vbnet
Loop 层决策:
"队列里下一个要修的测试是登录失败,去修它"
→ 这是 Loop Engineering(决定干什么)
Harness 层执行:
给 Agent 读对应文件的权限、沙箱里跑测试、
工具 schema 允许编辑代码、记录日志
→ 这是 Harness Engineering(怎么执行)
两者不是互斥的,是上下层关系。 一个好的 Loop 配一个薄的 Harness,就是"自信地反复重试不可靠的执行";一个好的 Harness 没有 Loop,就是"一次干净的执行,但没人决定什么时候再跑一次"。
五、一个需要提前知道的坑
刚开始关注 Harness 时犯了一个错------以为写好 CLAUDE.md 就是在做 Harness Engineering。
后来才明白:CLAUDE.md 只是 Harness 七层中的第一层(Instructions),而且它有一个致命局限------
CLAUDE.md 是作为上下文加载的,不是作为配置强制执行的。
CLAUDE.md 里的规则,模型读了、通常会遵守,但永远不保证遵守。上下文窗口塞满时,它就会忽略规则。
这意味着:任何合规、安全、硬性规则,不能只靠 CLAUDE.md。你需要 Hook------确定性执行的 Shell 脚本,模型无法幻觉绕过。
arduino
不成熟的 Harness:靠模型"记住"纪律
→ 模型心情好就遵守,心情不好就忘
成熟的 Harness:让纪律成为环境的一部分
→ 不管模型怎么想,环境强制它遵守
六、真正需要记住的
markdown
1. Agent = Model + Harness,不是模型的就是 Harness
2. 模型是发动机,Harness 是整辆车(工具/沙箱/规则/反馈/观测)
3. decent model + great harness > great model + bad harness
4. 大多数 Agent 失败是 Harness 太薄,不是模型太笨
5. Harness 七层:Instructions / Knowledge / Tools / Infrastructure /
Orchestration / Hooks / Observability
6. Loop 坐在 Harness 上一层:Loop 决定干什么,Harness 决定怎么执行
7. CLAUDE.md 是建议不是强制,硬规则需要 Hook