转载:小红书 AI产品赵哥
前言🔖
今天咱要来聊一个比较新的概念 —— Harness Engineering(驾驭工程),有多新呢?今年 2 月 11 号 OpenAI 才提出的一个新概念,虽然新,但是对 AI 圈的推动性却不容小觑!
你们有没有发现,现在 AI 写代码已经很强了,但光有 AI 不够啊!真正让 AI 能帮我们干活的关键,是怎么让 AI 可靠地工作。这就是 Harness Engineering 要解决的问题。
先说几个令我很震撼的例子:
- OpenAI 的团队用 AI,五个月写了 100 万行代码,三个工程师平均每天合并 3.5 个 PR,没有一行是工程师手写的;
- Anthropic 的 Claude Code 能连续工作好几天,帮你构建完整应用;
- LangChain 的 Coding Agent 换个 “马甲”(harness),性能直接从 52.8% 飙升到 66.5%,模型本身没变!
这就是 Harness Engineering 的魅力 —— 设计一个环境,让 AI 能可靠地完成复杂任务。
一、到底啥是 Harness Engineering?🔖
先打个比方:想象一个原生的大语言模型(LLM),它就像一匹拥有无穷力量、速度极快,但野性未驯的神话级野马 —— 日行千里的那种。

这匹马(AI 模型)能力强大,有海量知识;速度快,问之即答。但它也野性难驯,会遗忘,会幻觉(即一本正经地胡说八道),甚至会不听指挥。
🔹1.1 初级玩家的做法,就是我们熟悉的 Prompt Engineering(提示词工程)。
这就像你跑到马跟前,通过精心设计口令来引导它。比如,你不再是简单地喊 “去 B 点!”,而是用更精确的指令:“请你扮演一匹最棒的信使马,沿着河边小路,把货物送到 B 点的红色房子里。” 这能大大提高任务的成功率。
这就是提示词工程的本质 —— 通过精心设计的语言(缰绳),来引导和控制 AI 的行为。
但是,这还不太够用!如果路途很长,马会忘记目的地吗?遇到岔路口,它知道怎么选吗?需要查询外部信息时(比如地图),它能做到吗?
你会发现,只靠你一次次的喊话(Prompt),是无法建立一个稳定、可靠、可扩展的系统的。
🔹1.2 Harness Engineering(驾驭工程)闪亮登场!

Harness,本意是 “马具”。就是给马套上的那一整套装备:缰绳、嚼子、眼罩、马鞍,以及连接马和马车的挽具。
驾驭工程,就是围绕着这匹强大的 AI 野马,构建一整套完整、精密的 “马具系统”,从而让它的强大力量能够被稳定、可靠、高效地利用。它不再是单点的 “对话”,而是系统化的 “工程”。
💡 一句话总结:Prompt Engineering 教你如何与马对话,而 Harness Engineering 教你如何为马打造一套定制的 “作战装备”,并指挥它完成复杂的系统性任务。
🔹1.2 人话版定义
官方解释是这样的:
👨💼 "An agent harness is the system that enables a model to act as an agent: it processes inputs, orchestrates tool calls, and returns results."
翻译成人话就是:Harness 就是给 AI agent 配套的操作系统,帮它处理输入、安排工具使用、返回结果。是不是有点抽象?我来举个具体的🍂
🔹1.3 一个小例子看看 Harness 厉不厉害就完了
场景:让 AI 帮你重构一个 10 万行的代码库
❌ 裸 AI(没有 Harness):
直接把代码扔给 AI,说:“帮我重构”
→ AI 看了 1000 行就开始瞎改,3 小时后代码库彻底崩溃
✅ 有 Harness 的 AI:
- 先给 AI 注入架构文档(相当于给它一张地图)
- 限制每次只能改一个模块(不让它乱跑)
- 强制改完后必须跑测试(检查做对了没)
- 检测到失败时自动回滚(错了能撤回) → AI 花了 2 天,成功重构了 80% 的代码
有 Harness 和没有 Harness,差别就是这么大!!!

二、Harness Engineering 的三个核心维度🔖
很多人以为 harness 就是 “给 AI 接工具的胶水层”,实际上它包含三个核心维度:
🔹2.1 Context Engineering(上下文工程)
核心:不是把所有信息都塞给 AI,而是给它一个地图,让它按需检索。
- OpenAI 的 AGENTS.md 只有 100 行,但它指向完整知识库。AI 需要什么自己去查,而不是一次性全塞进去。大白话:就像导航软件,不是把所有地图数据一次性显示,而是你在哪里,就给你显示附近的路。
🔹2.2 Tool Engineering(工具工程)
核心:设计受控的高效工具,不是让 AI 直接操作数据库,而是提供封装好的、带约束的 API。
- 比如 Hightouch 的 Agent 不能执行任意 SQL,只能调用预定义好的查询函数。这样 AI 就不会因为权限太大而闯祸。大白话:就像给小孩一把安全剪刀,刀刃是钝的,只能剪纸,不能伤人。
🔹2.3 Workflow Engineering(工作流工程)
核心:构建信任的验证循环,不让 AI 自己判断做完了,而是用外部标准验证来验证 AI 是否做完、做好。
- LangChain 的 middleware 会强制 Agent 在退出前必须跑测试,没通过就不让走。
大白话:就像考试,不是学生说 “我写完了” 就行,得有标准答案检验你对了没有。
三、为什么我们需要 Harness Engineering?🔖
这个问题特别重要,因为理解了 “为什么”,你才能真正理解这个概念的价值。
🔹3.1 核心挑战:AI 的 “失忆症”
👨💼 先问大家一个问题:AI 模型有记忆吗? 答案是:没有!
LLM(大型语言模型)每次推理都是独立的,类似于 f(context) → output。你给它一段文字,它预测下一个 token,然后就没了。下一次调用是完全独立的。
但是!复杂工作是有状态的。你得记住:
- 我已经做了什么
- 为什么要做这些
- 下一步该做什么
- 目标是什么
这就尴尬了:AI 是无状态的,但工作是有状态的。
Anthropic 用了一个特别形象的比喻:这就像一个软件项目由工程师轮班完成,每个新工程师来的时候都不记得上一班发生了什么。 你说尴尬不尴尬?
🔹3.2 三个具体瓶颈
在生产环境中,这个挑战表现为三个具体的瓶颈:
瓶颈一:从 “单步智能” 到 “长时程可靠性” 的鸿沟
各种 Benchmark 刷榜制造了一个幻觉:模型在单轮任务上的准确率已经很高(>85%),但这无法预测它在第 50 步、第 100 步之后的表现。
"A 1% difference on a leaderboard cannot detect the reliability if a model drifts off-track after fifty steps." 排行榜上 1% 的差异无法检测出模型在第 50 步之后是否会偏离轨道。
Anthropic 在构建 Claude Code 时,发现了两个典型的失败模式:
- “All-or-nothing” 模式:Agent 试图一次性完成所有功能,导致 context 耗尽,下一个 session 接手时发现代码写了一半、没有文档、无法继续
- “过早胜利” 模式:Agent 看到一点进展就宣布任务完成,实际上核心功能还没实现
💡 这两个失败模式的共同点是:Agent 缺乏 “我在做什么” 的持续认知。
瓶颈二:Context 爆炸与 Attention 的限制
现在的 Agent 应用动辄需要处理 10 万 + token 的 context。但问题是 ——**Lost in the Middle(中间丢失)** 现象是 Transformer 架构 Attention 机制的数学特性。
这意味着:把 100 页文档全部塞进 context,效果还不如给 AI 一个 100 行的 “地图”,让它按需检索。
OpenAI 的 Codex 团队在构建 100 万行代码的 Agent 维护系统时,核心策略就是 “渐进式披露“:
- 不是把整个 codebase 塞进 context
- 而是给 AI 一个 AGENTS.md(100 行),作为稳定的入口点
- AI 从这个地图出发,通过工具调用按需检索详细内容
"Context engineering is not about compression, it's about architecture."
— Harrison Chase, LangChain
💡 关键洞察:Context 工程的核心不是压缩,而是架构设计。
瓶颈三:从 “能跑” 到 “可维护” 的工程化 Gap
OpenAI 的 Codex 团队用 5 个月构建了一个 100 万行代码的应用,完全由 AI 生成和维护。但他们遇到的最大挑战不是 “让 AI 写代码”,而是 “让 AI 写的代码可维护”。
他们的核心发现是:
"Our most difficult challenges now center on designing environments, feedback loops, and control systems."
我们现在面临的最大挑战集中在设计环境、反馈循环和控制系统上。
— OpenAI Codex Team
这里有一个非常重要的数据:
- GPT-5.2-Codex 在不同 harness 配置下,分数从 52.8% 到 66.5%(26% 的相对提升)
- 模型从 GPT-5.2-Codex 升级到 GPT-5.3-Codex,在 SWE-Bench Pro 上只提升了 0.7%(56.4% → 56.8%)
💡 这说明:当模型能力达到一定水平后,系统设计成为效果的主要瓶颈。
四、四家大厂的 Harness Engineering 实践🔖
🔹4.1 OpenAI:渐进式披露(解决信息量超出 context window)
主要挑战:
- Agent 需要理解 100 万行代码,但 context window 只能装下约 20 万 tokens
- 传统 “压缩” 方案(summarization、RAG)会丢失结构关系
解决思路:
- 不要压缩信息,而是构建 “地图”
- 给 AI 一个 100 行的 AGENTS.md 作为入口,让它按需检索
具体方法:
- 知识库作为目录:AGENTS.md 指向编目的设计文档和架构地图,AI 按需检索
- 为 Agent 优化代码库:所有关键信息必须在代码库内可检索,偏好 “无聊” 的技术
- 强制约束条件而非具体实现:要求 Codex 在边界解析数据,但不规定如何实现
- 自动偏差修复:后台任务定期扫描偏差,打开重构 PR
为什么有效:每次检索的内容都位于 Attention 的高效区域(前 20% 和后 20%),而非被困在 “注意力黑洞” 中。
🔹4.2 Anthropic: Initializer + Coding Agent(解决跨会话状态丢失)
主要挑战:
- Agent 必须在多个会话中工作,每个新会话开始时都 “失忆”
- 导致 “All-or-nothing” 和 “过早胜利” 两种失败模式
解决思路:
- 既然 AI 无法 “记住”,就让它每次启动时都能 “读取记录”
- 把 “记忆” 从 AI 的内部状态外化为可读取的文件系统
具体方法:
- 阶段 1: Initializer Agent — 构建 “记忆基础设施”:
init.sh(环境初始化)- 功能需求文件 (200 + 个功能,全部标记 “失败”)
claude-progress.txt(进度追踪)- 初始 git 提交
- 阶段 2: Coding Agent — 每个会话遵循严格流程:
- a. 读取状态
- b. 做一件事 (一次只处理一个功能)
- c. 验证 (端到端测试)
- d. 记录状态 (git commit + 更新 progress notes)
- e .如果写错代码,下个会话用 git 回滚
为什么有效:这个方法把有状态任务分解为一系列无状态操作。每个 Coding Agent 会话转换成了纯函数:
f(功能列表 + git history + progress notes) → 完成一个功能 + 更新记录
AI 不需要 “记住”,因为所有信息都在输入中。
🔹4.3 LangChain:强制验证循环(解决 Agent 不会自我验证)
主要挑战:
- Agent 不会自然地验证自己的工作
- 写了代码 → 重新阅读 → 确认 “看起来没问题” → 停止
- 但实际上代码根本跑不通
为什么会有这个问题?
这不是 “模型不够聪明”,而是训练数据偏差:LLM 的训练数据主要是 “写代码”(GitHub commits),而非 “写代码 – 测试 – 修复” 的完整循环。模型学会了 “生成看起来正确的代码”,但没学会 “验证代码是否真的正确”。
解决思路:
- 不依赖 prompt,而是用确定性机制强制验证循环
- 在 Agent 退出前用 middleware 拦截它,强制运行验证
具体方法:
- PreCompletionChecklistMiddleware: Agent 准备退出时拦截它,检查是否运行测试、测试是否通过
- LocalContextMiddleware: 启动时自动映射工作目录、查找可用工具、注入环境信息
- LoopDetectionMiddleware: 跟踪每个文件的编辑次数,编辑 N 次后添加上下文提醒
为什么有效: 把软约束(prompt)变成硬约束(代码逻辑)。Prompt 可能被忽略,但 Middleware 用确定性逻辑保证验证循环,Agent 无法绕过。
🔹4.4 Hightouch: 动态子 Agent(解决单个 Agent 处理不了的复杂任务)
主要挑战:
- 单个 Agent 的 context 装不下复杂任务的所有中间步骤
- 典型场景:分析 1000 个客户的购买行为
- 需要查询 1000 次(每次 500 tokens)= 50 万 tokens
- 远超 context window
解决思路:
- 不要压缩 context,而是隔离 context
- 用 “分层处理” 替代 “线性压缩”
具体方法:
- 规划与执行分离: 通过特殊工具调用(
make_plan、execute_step_in_plan、update_plan),Agent 管理自己的思维过程 - 文件缓冲: 工具返回大量数据时,Agent 调用
write_file缓冲到磁盘,context 中只保留指针(文件名 + 描述) - 动态子 Agent: 主 Agent 识别复杂子任务,生成独立 LLM 线程(子 Agent)处理,只有摘要返回主 Agent
- 扇出模式: 对非结构化数据,主 Agent 生成数百个并行调用到小模型(Haiku),每个处理一个,主 Agent 汇总结果
为什么有效: 主 Agent 的 context 只存储 “地图”(计划 + 摘要),详细信息在子 Agent 的独立 context 中,系统总 “工作记忆” 可远超单个 context window。
💡 关键洞察:用分层抽象替代线性压缩,因为压缩是有损的,但分层抽象可以无损。
五、如何选择适合你的方案?🔖
这四种方案共同策略是:构建信息检索 + 状态管理 + 验证循环的系统。区别在于侧重点:
| 方案 | 侧重点 | 适用场景 |
|---|---|---|
| OpenAI 渐进式披露 | 重信息检索 | 信息量超出 context window |
| Anthropic 外部化状态管理 | 重状态管理 | 任务跨多个会话 |
| LangChain 强制验证循环 | 重验证 | Agent 不会自我验证 |
| Hightouch 动态子 Agent | 三者都重 | 任务太复杂 |
💡 怎么借鉴?先诊断瓶颈,再选择设计思路:
- 信息量超出 context window → 渐进式披露
- 任务跨多个会话 → 外部化状态管理
- Agent 不会自我验证 → 强制验证循环
- 任务太复杂 → 动态子 Agent
实际项目中的瓶颈可能是多个,需要组合多种设计思路。
六、未来会怎样?🔖
Harness Engineering 目前处于 “百花齐放” 阶段,各大厂都在积极探索不同方向。这三个演化方向相对清晰:
🔹趋势一:模型与 Harness 的协同演化
通常的假设是:更强的模型 → 更简单的 Harness。但实际可能相反。
未来更可能是:基础模型变得越来越 “通才”,而 Harness 变得越来越 “专业”。不同场景需要不同的 Harness 设计。
🔹趋势二:Harness 本身成为可优化的 “代码”
现在 Harness 主要是手工设计,未来可能会:
- 从实际运行数据中自动学习最优的 Harness 配置
- 用强化学习等方法自动优化
- Harness 变成真正的 “工程化” 产物
🔹趋势三:Harness 成为 AI 应用的 “基础设施”
就像操作系统是硬件和软件之间的桥梁,Harness 可能成为 AI 模型和应用之间的标准层。
未来可能出现:
- 通用的 Harness 框架和工具库
- 开源的 Harness 最佳实践