Harness Engineering:从驾驭模型到构建 AI 工厂

Harness Engineering:从驾驭模型到构建 AI 工厂

2026 年,AI 编程工具的竞争焦点发生了根本性转变:决定 AI 助手好不好用的,不再是模型本身,而是包裹在模型外面的那层"Harness"。同一个模型,在不同的 Harness 下,性能差距可以达到 78% vs 42%。

这篇文章将带你深入了解 Harness Engineering——这个正在重新定义 AI 工程实践的新兴领域。


一、什么是 Harness Engineering?

Agent = Model + Harness
核心公式:Agent = Model + Harness

Harness 的字面意思是"马具/缰绳"——用来驾驭一匹强壮但不受控的马。在 AI 语境下,Harness 就是 LLM 之外的一切:工具定义、记忆系统、权限模型、反馈循环、文档规范、多 Agent 编排……

Harness Engineering 就是设计、构建和维护这套基础设施的工程学科。它的核心理念来自 Mitchell Hashimoto(HashiCorp 联合创始人):

"每当你发现 Agent 犯了一个错误,就花时间设计一个方案,让它永远不再犯同样的错。"

这不是一次性的 Prompt 调优,而是持续积累的基础设施建设


二、从 Prompt 到 Harness:三代演进

AI 工程三代演进
AI 工程的三次范式转移

第一代:Prompt Engineering(2022-2024)

关注怎么问问题。精心设计提示词、少样本学习、思维链(Chain of Thought)……但 Stanford HAI 的研究发现,prompt 优化超过合理基线后,质量提升不到 3%。

第二代:Context Engineering(2025)

由 Dex Horthy 在"12-Factor Agents"框架中提出,关注给模型送什么信息。管理上下文窗口、RAG 检索、工具定义、对话历史……但这仍然局限在单个 Agent 的单次交互范围内。

第三代:Harness Engineering(2026)

关注整个系统怎么运转。跳出单次交互的视角,设计工具编排、权限模型、反馈循环、多 Agent 协作、CI/CD 集成……Harness 层面的改进可以带来 28-47% 的质量提升


三、Harness 的六大核心组件

Harness 六大组件
围绕 LLM 的六层 Harness 组件

1. 文档层(Documentation Layer)

这是 Harness 中最容易上手、回报也最高的部分。

  • CLAUDE.md:Claude Code 的项目配置文件,每次会话自动加载
  • AGENTS.md:Agent 的"团队知识库",记录代码规范、踩坑经验、架构决策
  • .cursorrules:Cursor 的等效配置

Mitchell Hashimoto 的实践:每次 Agent 犯错,就在 AGENTS.md 里加一行规则。日积月累,Agent 变得越来越"懂"你的项目。

# CLAUDE.md 示例
## 代码规范
- 使用 TypeScript strict mode
- 所有 API 端点必须有 Zod schema 验证
- 不允许使用 any 类型

## 常见坑点
- 数据库迁移必须是幂等的
- Redis key 必须设置 TTL
- 前端组件必须支持 SSR

2. 工具定义(Tool Definitions)

Agent 能做什么,取决于你给它什么工具。

  • 内置工具:文件读写、Shell 命令、代码搜索
  • MCP 服务器:通过 Model Context Protocol 扩展能力(数据库查询、API 调用、浏览器操作)
  • 自定义脚本:项目特定的构建、测试、部署工具

Stripe 的做法尤为激进——他们通过 "Toolshed" 连接了 400+ 内部工具到 AI Agent,让 Agent 能直接操作几乎所有内部系统。

3. 权限与安全模型(Permission & Safety)

模型负责"决定做什么",Harness 负责"判断能不能做"——两者必须分离。

  • 分层权限:只读 → 确认后执行 → 自动执行
  • 护栏引擎:阻止 force-push、删除生产数据、暴露密钥等危险操作
  • 沙箱隔离:OpenAI Codex 在完全隔离的沙箱中运行,操作的是代码副本而非线上环境

4. 反馈控制(Feedback Controls / Sensors)

这是让 Agent 能够"自我纠错"的关键。

  • 计算型反馈:测试、Lint、TypeCheck——快速且确定性
  • 推理型反馈:AI 代码审查、语义分析——更慢但更丰富
  • CI 管道:每次提交自动验证,形成持续的质量闭环

5. 前馈控制(Feedforward Controls / Guides)

与其等 Agent 犯错再纠正,不如提前设好"防护栏"。

  • 架构约束:通过自定义 Linter 强制执行模块边界
  • 依赖规则:禁止某些模块间的直接依赖
  • 代码风格:自动格式化、命名规范

6. 编排层(Orchestration Layer)

当你需要多个 Agent 协同工作时,编排层就是"指挥中心"。

  • 任务分解:将大任务拆分为可并行的小任务
  • 状态管理:追踪每个 Agent 的进度和产出
  • 上下文隔离:Claude Code 的子 Agent 各有独立的上下文窗口,互不干扰

四、反馈循环:Harness 的灵魂

Harness 反馈循环
Harness 的核心工作流与复利效应

理解 Harness Engineering 最关键的一点是:它是一个不断积累的复利系统

  1. Agent 犯错 → 测试失败、Lint 报错、类型检查不通过
  2. Harness 捕获错误 → 阻止有问题的代码提交
  3. Agent 自我修复 → 根据错误信息重新生成代码
  4. 工程师更新规则 → 在 CLAUDE.md / AGENTS.md 中添加一条新规则
  5. 永久生效 → 所有未来的 Agent 实例都不会再犯同样的错

这就是 Mitchell Hashimoto 所说的:"每一次犯错都是一次投资。" 随着规则不断积累,Agent 变得越来越可靠——不是因为模型变聪明了,而是因为 Harness 变厚了。


五、实战案例

实战数据对比
来自一线团队的实战数据

OpenAI Codex:百万行代码零人工编写

OpenAI 在 2026 年 2 月披露了一组惊人数据:

  • 一个小团队使用 Codex 构建了 100 万+行代码的产品
  • 零人工编写的代码——所有代码都由 Agent 生成
  • 每天消耗约 10 亿 token(约 $2-3k/天)
  • 5 个月内合并了 ~1500 个 PR

他们的秘诀不是更好的模型,而是用 Elixir 构建的 "Symphony" 编排系统和精心设计的 AGENTS.md 文件体系。

Stripe:400+ 工具接入的 AI 工厂

  • 通过 "Toolshed" 接入 400+ 内部工具
  • 每周由 Agent 合并 1000+ PR
  • "Minions" 系统自动处理 Slack 中的任务请求
  • "Blueprints" 将反馈传感器集成到标准工作流

Claude Code:80+ 模块化组件

  • 每次会话从 80+ 模块化组件中拼装独特的 Prompt
  • 子 Agent(Plan、Explore、Task)拥有隔离的上下文窗口
  • Hooks 系统实现生命周期事件自动化
  • MCP 协议扩展工具能力边界

独立开发者 Peter Steinberger (OpenClaw)

  • 一个人同时运行 5-10 个 Agent
  • 月提交量达 6600+
  • 个人产能堪比一个小型工程团队

六、如何开始你的 Harness Engineering 实践

Level 1:写好你的 CLAUDE.md(10 分钟)

这是投入产出比最高的起点。在项目根目录创建 CLAUDE.md,写入:

# 项目概述
[一句话描述你的项目]

# 技术栈
- 语言:TypeScript
- 框架:Next.js 15
- 数据库:PostgreSQL + Prisma

# 开发命令
- 启动:npm run dev
- 测试:npm test
- Lint:npm run lint
- 类型检查:npx tsc --noEmit

# 代码规范
[你希望 Agent 遵守的规则]

# 已知坑点
[Agent 容易犯的错误]

Level 2:接入反馈循环(30 分钟)

确保你的项目有:

  • 可运行的测试套件
  • Lint 配置(ESLint / Prettier)
  • 类型检查(TypeScript strict)
  • pre-commit hooks(Husky + lint-staged)

有了这些,Agent 的每次修改都会自动得到反馈,形成 "写代码 → 检查 → 修复" 的自动循环。

Level 3:扩展工具能力(1-2 小时)

通过 MCP 服务器给 Agent 接入更多工具:

// .claude/settings.json
{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["@anthropic-ai/mcp-server-postgres", "postgresql://..."]
    },
    "github": {
      "command": "npx",
      "args": ["@anthropic-ai/mcp-server-github"]
    }
  }
}

Level 4:多 Agent 编排(进阶)

当你的项目需要处理大型任务时,考虑使用 Ralph 这样的编排工具,让多个 Agent 实例分工合作、自动推进——这正是我们上一篇文章介绍的内容。


七、争议与思考

Harness Engineering 并非没有争议。批评者认为这不过是给 CI/CD、Lint、文档规范这些老概念贴了个新标签——"我们做了二十年的软件工程最佳实践,现在换个名字就变成新学科了?"

这个批评有一定道理。但支持者认为,关键区别在于:

  1. 系统性:传统实践是分散的,Harness Engineering 将它们统一为一个围绕 AI Agent 的系统性框架
  2. 受众变了:这些基础设施现在不只是给人用的,还要给 AI 用——设计思路需要调整
  3. 复利模型:传统规范是静态的,Harness 是在与 Agent 的持续交互中动态积累的

无论你怎么看这场命名之争,有一点是确定的:在模型能力日趋趋同的今天,你围绕模型构建的基础设施,比选择哪个模型更重要


总结

Harness Engineering 的核心启示很简单:

不要追求更好的模型,而是为现有模型构建更好的工作环境。

就像一个优秀的工程团队,不只依赖个人能力,还依赖流程、工具链、Code Review、CI/CD、文档体系。AI Agent 也一样——它需要的不只是一颗聪明的"大脑",更需要一整套精心设计的"工作环境"。

这就是 Harness Engineering 的意义:从驾驭模型,到构建 AI 工厂

延伸阅读:

Read more

序章:长夜之后

后来的历史书把那一天称为“长夜之后”。 这个名字并不准确。事情发生在地球上的许多个白天和夜晚之间,发生在不同经度的清晨、午后、傍晚,发生在地下库房、山体掩体、海军基地、荒原试验场和无人值守的材料贮存井里。它既不是一场战争,也不是一次统一指挥的袭击。没有人按下那个能够解释一切的按钮。 但历史需要一个名称。 “长夜之后”最终被保留下来,是因为调查者在追溯事件源头时,不得不一次又一次回到海王星。回到那颗距离太阳太远、光照近乎吝啬的蓝色行星。回到六名中国宇航员死去的地方。回到一艘核动力科考船熄灭后的漫长黑暗。 在联合调查委员会公开的第一版报告中,事件时间线被压缩成了一页表格。 2030年9月,问海一号在海王星附近失联。 2034年11月,问海二号抵达失事区域,确认问海一号全员死亡。 2035年1月,问海二号完成样本封装,开始返航。 2038年6月,海王星样本进入地球高等级隔离实验室。 2038年7月,全球多个核材料设施发生不可逆事故,部分核电站进入最高级别应急。 2038年8月,所有已知核武库事实上失效,全球核电装机大规模停运。 这张表格后来被反复引用,因为它足够冷静,也

By Fuyu Jia

第一章:四小时以前的地球

林予舟第一次听见“问海一号”的最后通信,是在距离地面三百九十公里的轨道上。 那不是一个适合听遗言的地方。 舷窗外,地球从飞船腹侧缓慢转过去,云层像被谁铺平的白色金属屑,青藏高原的阴影压在晨昏线上。太阳还没有完全越出地平线,近地轨道的黑暗因此显得很薄,像一层马上要被擦掉的墨。 “链路稳定。”林予舟说。 他的声音被舱内麦克风收进去,压缩,打包,送进中继卫星,再落回海南深空任务中心。延迟不到一秒。这样奢侈的实时感,在他们离开地月系统后会迅速消失。等飞船抵达海王星附近,地球说一句话,要四个小时左右才能抵达;他们回一句,地球也要再等四个小时。 对话会变成考古。 控制台上方的状态灯一排排亮着,绿色多得几乎让人不安。问海二号还在近地轨道泊位上,推进舱、居住舱、通信桁架和补给舱刚完成最后一次组合检查。它不像公众宣传片里那样优雅。现实中的深空飞船更像一串被迫相互妥协的工程物:银灰色隔热层、外露管线、姿控喷口、展开到一半的高增益天线,所有东西都为了质量、功耗、散热和冗余让步。 它也不像一艘该去海王星的船。 至少不像一艘该去救援核动力深空飞船的船。 问海二号没有主反应堆。 这件事在公开报

By Fuyu Jia

第二章:没有核反应堆的船

发射前四十分钟,林予舟收到了一条来自地面的私人通信。 通信被压在任务数据包后面,标记为低优先级。它随着推进剂温度曲线、姿态平台校准结果、医学监测基线和最后一版逃逸窗口修正量一起进入问海二号的主机,像一枚被夹在工具箱里的薄纸片。 林予舟本来不该在这个时候打开它。 发射前四十分钟,人的每一个动作都应当有明确目的。检查阀门状态,确认加压序列,复诵逃逸程序,核对地面口令。人的情绪如果在这个时候出现,就应该被折叠起来,放进某个不影响任务的地方。 他还是点开了。 画面里是母亲的厨房。抽油烟机没有开,镜头被热气熏得微微发白。桌上摆着一碗面,青菜、荷包蛋和切得很薄的牛肉。母亲没有出镜,只在画面外说:“我知道你现在不能吃,等回来再吃也一样。” 林予舟看着那碗面,隔了几秒才意识到自己没有呼吸。 “怎么了?”沈从越问。 “私人包。” “家里?” “嗯。” “看完删掉。”沈从越说,“别让它留在主屏缓存里。发射时系统会重排任务窗口,乱七八糟的东西越少越好。” 他语气平淡,不像关心,也不像责备。沈从越说话常常这样,像把所有情绪都预先压成了流程。林予舟关掉视频,把它转存进私人存储区。那碗面从

By Fuyu Jia

第三章:地球变成录音

离开地月系统后的第十九天,林予舟第一次觉得,地球不是一个地方,而是一种延迟。 最初的几天,通信仍然近乎实时。地面问,他们答;他们报数,地面确认。贺岚的声音穿过中继链路抵达舱内时,还带着地球上办公室的秩序感:清晰、稳定、克制。林予舟甚至能从她停顿的长度判断总控大厅里有多少人在看同一块屏幕。 后来,停顿被拉长。 五秒。 十七秒。 一分钟。 再后来,地球的每一句话都像从更早的时间里寄来。母亲发来的第二条视频在一个姿态修正段后抵达。她说北京降温了,问他那边冷不冷。林予舟看着舷窗外没有温度的黑暗,忽然不知道该怎么回答。 他当然冷。 但那不是气温。 “私人日志,任务日二十。”他说,“今天第一次做梦,梦见自己回到地面,站在厨房里。锅里有水,水一直不开。母亲在旁边说火太小,我低头看,灶台下面接着的是问海二号的离子推进器。” 他说完后,自己笑了一下。 笑声在舱内很短,很快被风机吞掉。 沈从越从设备舱飘过,听见最后半句:“梦境记录?” “心理监测要求。” “别把自己写得太正常。

By Fuyu Jia