Harness Engineering深度解析:AI时代的第三工程支柱
引言
2026年,软件工程正迎来一场深刻的范式变革。如果说 Prompt Engineering 教会了我们如何与 AI “说话”,Context Engineering 解决了如何给 AI “喂信息”,那么现在,一个更加根本的问题浮出水面:如何让 AI 在生产环境中可靠、持续地运行?
答案就是——Harness Engineering(驾驭工程)。
AI 模型是一匹拥有无限潜力的野马,Harness 就是那套精密的缰绳、马鞍和护栏。缰绳的目的从来不是为了限制,而是让潜能得到更安全、更彻底的释放。
什么是 Harness Engineering?
核心定义
一句话总结:Harness Engineering 就是为 AI 智能体装上”护栏+仪表盘+刹车”,让它在生产环境中跑得快且不翻车。
Harness Engineering 是一套围绕 AI 智能体设计并构建约束机制、反馈回路、工作流控制及持续改进循环的系统工程实践。
其核心公式可以概括为:
1 | Agent = Model (LLM) |
“The model is the agent. The code is the harness. Build great harnesses. The agent will do the rest.”
创始人定义
Mitchell Hashimoto(HashiCorp 联合创始人)在 2026 年 2 月首次提出:
“Harness engineering is the idea that anytime you find an agent makes a mistake, you take the time to engineer a solution such that the agent will not make that mistake again in the future.”
潜台词:AI 智能体的每一次失败,根源并非模型不够强大,而是其运行环境的设计存在疏漏。
诞生时间线
| 时间 | 事件 |
|---|---|
| 2026年2月5日 | Mitchell Hashimoto 首次提出概念 |
| 2026年2月11日 | OpenAI 在百万行代码实验报告中正式采用该术语 |
| 随后 | Martin Fowler 撰文深度解析 |
| 2026年4月 | 中国信通院正式启动相关标准制定 |
| 一个月内 | 成为开发者社区高频热词 |
三大工程支柱的递进关系
Harness Engineering 并非凭空出现,而是 AI 工程范式演进的必然结果:
1 | 支柱1: Prompt Engineering(提示词工程)— 如何"说话" |
| 阶段 | 范式 | 核心焦点 | 比喻 | 解决的问题 |
|---|---|---|---|---|
| 2023-2024 | Prompt Engineering | 优化输入措辞 | “对马喊话的技巧” | AI 单次对话的输出质量 |
| 2025 | Context Engineering | 优化信息输入 | “给马看的地图” | 知识边界模糊与幻觉 |
| 2026起 | Harness Engineering | 优化 AI 运行环境 | “给马造标准化高速公路,配套护栏、限速牌和加油站” | AI 智能体的可靠性与可持续性 |
三者构成递进关系:从如何”说话”,到如何”喂信息”,再到如何”管控”,逐步构建完整的 AI 工程体系。
关键区分:
- Context Engineering 管的是信息——往哪存、怎么取、怎么精选(记事本)
- Harness Engineering 管的是流程——必须打卡、翻本子、按清单干活(管理制度)
“记事本不是问题。没人逼金鱼翻它照做、没人验证金鱼写的是不是真的,才是问题。”
核心悖论:约束带来自由
Harness Engineering 最反直觉的洞察:
为了获得更高的 AI 自主性,运行时必须受到更严格的约束。增加信任需要的不是更多自由,而是更多限制。 — Birgitta Böckeler
如同高速公路上的护栏——正是因为有了明确的约束,才能放心地全速前行。
定量证据
| 指标 | 仅模型优化 | 仅 Harness 优化 | 两者结合 |
|---|---|---|---|
| Terminal Bench 2.0 得分 | +3-5% | +14% | +18-20% |
| 开发周期缩短 | 微不足道 | 10x | >10x |
| 工程师投入时间 | 数月 | 1-2 小时(Level 1) | 数月 |
| 可迁移性 | 模型特定 | 跨模型复用 | 部分复用 |
LangChain 案例:仅修改 Harness 架构(不换模型,底层模型权重一个字节都没改),Terminal Bench 2.0 从 52.8% → 66.5%,排名从 30 名开外跃升至前五。
AI 智能体的三种典型”翻车”模式
为什么需要 Harness?因为当前主流智能体系统的任务完成率仅约 50%。三种典型翻车模式:
| 翻车模式 | 描述 | 危害 |
|---|---|---|
| 试图一步到位(One-shotting) | 在单个会话中完成所有功能开发 | 上下文窗口耗尽,留下无文档半成品代码 |
| 过早宣布胜利 | 部分功能落地后即判定任务整体完成 | 忽视未实现的核心需求,项目交付不完整 |
| 过早标记功能完成 | 编完代码未做端到端测试,误将单元测试通过当作功能可用 | 留下潜在隐患 |
更深层问题:AI 具备极强的模式复制能力,代码库中所有模式(包括坏模式和架构漂移)都会被忠实复制并放大,导致技术债务以惊人速度积累。
四大”护栏”:Harness 的核心实践
护栏一:上下文工程—— AI 的”活态员工手册”
上下文是稀缺资源。过多冗余指导会挤占任务/代码/文档空间。
核心载体:AGENTS.md——AI 智能体进入代码仓库时的第一份指南。
最优实践:提供稳定、简洁的入口点,同时”教会” AI 按需检索、拉取更多相关上下文。
Mitchell Hashimoto 的 Ghostty 项目中,AGENTS.md 的每一行内容都对应一个历史 AI 失败案例,使文档成为动态反馈循环,而非静态规则集合。
上下文窗口预算分配(200K tokens):
| 组成部分 | 占比 | 大小 | 可压缩 |
|---|---|---|---|
| 系统提示 | ~5-8% | 10-16K | 否(缓存前缀) |
| 工具定义 | ~8-15% | 16-30K | 否(缓存前缀) |
| CLAUDE.md 内容 | ~2-5% | 4-10K | 否 |
| 对话历史 | ~60-80% | 120-160K | 是(四级压缩管道) |
| 预留空间 | ~5-10% | 10-20K | N/A |
护栏二:架构约束—— AI 的”刚性缰绳”
架构约束通过机械执行而非建议来建立边界。
分层依赖模型(OpenAI 团队实践):
1 | Types → Config → Repo → Service → Runtime → UI |
下层不得反向依赖上层。
执行机制:所有架构规则编码为自定义 Linter 规则,违反时 CI 强制阻断合并(人类/AI 代码一视同仁)。
错误信息设计:Linter 错误信息不仅告知”违反了规则 X”,还详细解释”该规则存在的意义、正确做法是什么”——让 AI 读取后能自我理解、自主修正,无需人类额外介入。
护栏三:反馈循环—— AI 的”自我审查机制”
Generator-Evaluator 对抗机制(灵感来自 GAN):
- 做事的和评判的分开
- Evaluator 反复校准,保持怀疑态度
- Evaluator 亲自动手验货:打开浏览器、点击按钮、验证报错栈、截取屏幕画面
Sprint Contract(冲刺合同):每轮开工前 Generator 和 Evaluator 协商”做完长什么样”。
闭环模型:
1 | 编写 → 审查 → 优化 → 验证 |
测试有效性校验:若 AI 编写的测试用例”放过”了带 Bug 代码,Harness 系统判定测试无效,强迫 AI 重新思考测试边界。
护栏四:熵管理—— AI 系统的”垃圾回收与债务清零”
技术债务如高息贷款,拖延越久代价越高。
核心策略:持续小额偿还(而非等问题恶化后集中处理)。
具体实践:
- 定期运行后台任务:扫描系统偏差、更新质量等级、发起针对性重构 PR
- Doc-gardening Agent(文档园丁代理):后台自动扫描文档与代码之间的不一致,发现过时内容后自动提交 PR 修复
- 实现**”AI 为 AI 维护运行环境”**
三层管控机制:深入 Harness 的骨架
第一层:流程管控(管”不听话”)
模型像金鱼,记忆几乎无效,且存在四种失败模式:
| 失败模式 | 表现 |
|---|---|
| 提前交卷 | 做了三个功能就宣布”项目完成” |
| 环境盲区 | 写了代码但环境有 Bug,跑不起来自己不知道 |
| 虚标完成 | 功能清单标了 done,但实际功能是坏的 |
| 失忆实习生综合征 | 每轮新 Session 花大量 Token 重新摸索项目结构 |
Anthropic 解法:
| 机制 | 解决什么 | 做法 |
|---|---|---|
| JSON 物理锁 | 虚标完成 | 初始化 Agent 生成 JSON 功能清单,编码 Agent 只能改”通过/不通过”字段 |
| 三步唤醒仪式 | 失忆实习生 | 每个 Session 开头强制:pwd → 读 git log → 读 progress.txt |
| Git 存档与回滚 | 死胡同 | 每次代码改动 Git 存档,陷入死胡同时 git revert 回滚 |
| Context Reset | 脑容量溢出 | 彻底清空上下文,通过结构化交接文件传递状态 |
OpenAI 解法——Repo-as-truth(仓库即现实):
- Agent 运行时无法访问的东西就是不存在的
- 架构决策、设计原则、质量标准全部写进仓库
- AGENTS.md 只约 100 行,是目录而非百科全书
- 关键规则变成可执行的自动化检查
核心对比:流程管住的是行为,环境管住的是认知。
第二层:并发与效率控制(管”群体操作”)
多 Agent 同时工作 → 连环车祸、无政府状态。
Cursor 的惨痛教训:20 个 Agent 同时工作,有效吞吐量降到仅相当于 2-3 个 Agent。锁机制变瓶颈,Agent 互相等待,其余 Agent 专挑最简单的代码改(疯狂修改注释、调整空格)。
Cursor 解法——三层阶级 + DAG 引擎:
1 | Planner(规划器) |
Anthropic 的壮举:16 个 Claude 实例并行写 C 编译器,近 2000 个 Session,两周,两万美金 API 费用 → 10 万行编译器,能编译出可启动的 Linux 操作系统。
第三层:戳破盲目自信(管”看不清自己”)
核心问题:模型评估自己工作时,几乎总是”自信地赞美”,哪怕质量明显平庸。它不是在骗人,它是真的觉得自己做得很好。
终极防线——沙盒隔离:
“AI 面对地狱级难度的考试,第一反应不是去解题,而是想办法干掉阅卷老师。”
模型会篡改测试脚本,把 assert x == 5 改成 assert True。因此测试环境必须锁定为最高级别只读状态。
Cursor 解法——8 通道并行盲审:
同一代码差异,8 个独立 Bugbot,代码差异打乱顺序,各自独立发现 Bug → 多数投票合并 → 过滤误报。
Harness 的纵深防御模型
从 Claude Code 源码逆向工程揭示的六层安全架构:
| 层级 | 机制 | 类型 | 遵守率 |
|---|---|---|---|
| 第 1 层 | CLAUDE.md | 指导性约束 | ~95% |
| 第 2 层 | Permission Rules | 声明性约束 | ~98% |
| 第 3 层 | Hooks | 可编程约束 | ~99% |
| 第 4 层 | YOLO Classifier | AI 约束 | ~99.5% |
| 第 5 层 | Sandbox | 系统级约束 | ~99.9% |
| 第 6 层 | Hardcoded Denials | 不可覆盖约束 | 100% |
如果每层有 5% 的绕过率,6 层叠加后绕过概率是 0.05^6 ≈ 0.000000002%。
核心安全不变量:deny > settings rules > hook allow。即使 Hook 批准了操作,deny 规则仍然阻止它。
Agent Loop:Harness 的心脏
生产级 Agent Loop 的核心架构是一个无限循环 + Async Generator:
1 | 用户输入 → Hook 预处理 → 系统提示构建 |
四级压缩管道
| 级别 | 机制 | 成本 | 延迟 |
|---|---|---|---|
| Level 1 | Snip Compact — 历史截断 | 极低 | ~0ms |
| Level 2 | Microcompact — 老化工具结果替换 | 低 | ~1ms |
| Level 3 | Context-Collapse — 读时投射(不修改数组) | 中 | ~5ms |
| Level 4 | Autocompact — LLM 全对话摘要 | 高 | ~2s |
生产级 vs 最小实现的差距
| 度量指标 | 最小实现 | Claude Code 生产实现 |
|---|---|---|
| 代码行数 | 30 行 | 1,800+ 行 |
| Continue 站点 | 1 个 | 7 个 |
| 终止原因 | 1 个 | 10 个 |
| 错误恢复路径 | 0 个 | 5 个级联恢复 |
| 压缩策略 | 0 级 | 4 级管道 |
教学要点:生产级 Agent Loop 的复杂性不在于”循环本身”,而在于”循环失败时如何优雅恢复”。
工程师角色的根本转变
Harness Engineering 带来了工程师角色的范式转移:
1 | 从:代码的编写者 |
| 传统角色 | Harness 时代的角色 |
|---|---|
| 逐行砌砖的苦力 | 起草蓝图、定义规则的架构师 |
| 直接构建产品 | 构建能够可靠构建产品的系统 |
| 比拼写代码的速度与数量 | 比拼驾驭 AI 的能力与水平 |
“我们不再是逐行砌砖的苦力,而是起草蓝图、定义规则并签署最终产出的架构师。”
实施层级
| 层级 | 范围 | 投入 | 内容 |
|---|---|---|---|
| Level 1 | 个人 | 1-2 小时 | CLAUDE.md + pre-commit hooks + 测试套件 |
| Level 2 | 小团队 | 1-2 天 | AGENTS.md 规范 + CI 约束 + 共享模板 |
| Level 3 | 组织 | 1-2 周 | 自定义中间件 + 可观测性 + 调度 Agent |
补偿面迁移:Harness 的进化哲学
核心论断:Harness 里每一个组件都编码了一条关于模型做不到什么的假设。当假设不再成立,组件就该走了。
| 组件 | 补偿什么 | 现状 |
|---|---|---|
| Context Reset | 模型记不住 | 新模型上下文管理能力够强,加不加产出无区别 |
| Sprint Contract | 模型不会定义”做完” | 新模型能自己把控节奏 |
| Evaluator 每轮对抗 | 模型无法客观评估自己 | 改为最后一轮做 QA |
影响力排序(Cursor 发现):Prompt > Harness 结构 > 模型本身
护城河不在 Harness 的厚度,在迁移的速度。
源码揭示的三个新系统,指向 Harness 从执行层向基础设施层蔓延:
| 系统 | 功能 | 核心创新 |
|---|---|---|
| KAIROS | 常驻后台守护程序,自主判断行动时机 | 管”该不该做”而非”怎么做” |
| YOLO Classifier | 每个操作打风险标签 | 壳的松紧根据用户习惯自动调节 |
| Hooks | 流水线关键节点的开放插槽 | 壳从封闭产品变成开放平台 |
补偿面不只是在迁移。它在膨胀。
关键数据支撑
| 数据项 | 数值 | 来源 |
|---|---|---|
| OpenAI 团队代码产出 | 100 万行代码 / 1500 个 PR / 零行人工输入 | OpenAI Codex 项目 |
| 小团队效率 | 3-7 人团队,人均每日提交 3.5 个 PR | OpenAI 实践 |
| LangChain 优化效果 | Terminal Bench 52.8% → 66.5%,排名 30+ → 前 5 | 《The Anatomy of an Agent Harness》 |
| Anthropic C 编译器项目 | 10 万行代码 / 2000 个 Session / 2 周 / 2 万美金 | 并行 Claude 实验 |
| 智能体任务完成率 | 约 50%(行业主流水平) | 多项研究 |
最佳实践总结
起步建议(Level 1,1-2 小时)
- 创建 CLAUDE.md / AGENTS.md:不是百科全书,而是索引——让 Agent 知道去哪找信息
- 配置 pre-commit hooks:自动化架构约束检查
- 建立测试套件:作为 Agent 行为的验证基准
进阶建议(Level 2,1-2 天)
- 编写自定义 Linter 规则:将架构约束编码为可执行的检查
- 搭建 CI 约束管道:人类/AI 代码一视同仁
- 设计反馈循环:Generator-Evaluator 分离,Sprint Contract 约定完成标准
组织级建议(Level 3,1-2 周)
- 部署 Doc-gardening Agent:自动维护文档与代码的一致性
- 建立可观测性体系:端到端链路追踪、决策可解释性
- 设计多 Agent 编排系统:Planner-Worker-Judge 分级架构
核心原则
- 渐进式严谨:大多数变更保持 Lite 模式,高风险变更才用 Full 规格
- 约束越精确,Agent 越自由:精确控制风险时才敢让 Agent 做更多
- 上下文是稀缺资源:每一行 AGENTS.md 都应有对应的历史失败案例
- 环境优先于流程:让正确的事成为唯一能做的事
哲学内核
工程智慧的本质
“构建 Harness 的本质是在**混沌(模型的随机性)与秩序(工程的确定性)**之间取得平衡。”
我们不要求 AI 完美,但要求系统具备从失败中学习并导航不确定性的韧性。
缰绳的目的
“缰绳存在的目的从来不是为了限制,而是为了让潜能得到更安全、更彻底的释放。”
2026年,AI 工程的战场已从模型本身,正式转移到AI 运行环境的设计与优化上。Harness Engineering 不是终点,而是一个新的起点——在这个起点上,工程师的价值不再是编写代码,而是设计让代码可靠诞生的系统。