深入浅出 Harness Engineering:2026年最热 AI 工程范式,一文彻底搞懂!
深入浅出 Harness Engineering:2026年最热 AI 工程范式,一文彻底搞懂!
版本适配: 2026年最新
难度: ⭐⭐⭐☆☆
适合人群: AI工程师、后端开发者、对 AI Agent 感兴趣的技术人
目录
一、故事从一个震惊硅谷的实验开始
2025年下半年,OpenAI 做了一个看起来近乎疯狂的实验:
3名工程师,5个月,零手写代码,生成了 100 万行代码,提交了 1500 个 PR。
团队规模从 3 人扩至 7 人后,效率不降反升。
更令人惊讶的是——整个过程中,没有任何人直接写过一行业务代码。所有代码由 AI Agent(Codex)生成。
你可能会问:这难道不是证明了 AI 模型足够强大吗?
答案恰恰相反。
事后 OpenAI 工程师复盘,决定胜负的关键不是模型有多强,而是他们围绕模型搭建了一套精密的「驾驭系统」——
这就是 Harness Engineering(驾驭工程)。
二、什么是 Harness Engineering?
2.1 从一个单词说起
Harness 这个词,原本是指套在马身上的「马具」——缰绳、鞍具、辔头。
马具的作用不是限制马的力量,而是:
- 给马提供方向
- 为骑手提供控制
- 确保马的力量被安全释放
Harness Engineering 借用这个比喻,描述一种围绕 AI 大模型构建的工程方法论:
不是让 AI 更聪明,而是让 AI 在正确的轨道上跑得更快、更稳、更可靠。
2.2 一个公式搞懂核心
Agent = Model + Harness
| 组成 | 含义 | 类比 |
|---|---|---|
| Model(模型) | AI的"大脑",提供智能推理能力 | 引擎 |
| Harness(驾驭系统) | 围绕模型构建的工程约束体系 | 方向盘 + 刹车 + 仪表盘 |
换句话说:模型决定上限,Harness 决定下限。
一辆跑车,发动机再强,没有方向盘也只会撞墙。
2.3 它是第三次 AI 工程范式跃迁
| 范式 | 时间 | 解决的问题 | 人与 AI 的关系 |
|---|---|---|---|
| Prompt Engineering | 2023-2024 | 如何清晰地给 AI 出题 | 出题者 vs 答题者 |
| Context Engineering | 2025 | 如何给 AI 提供足够的信息 | 信息提供者 vs 内容生成者 |
| Harness Engineering | 2026- | 如何约束和验证 AI 的自主行为 | 系统设计师 vs 自主执行者 |
一句话总结三次跃迁:
- Prompt Engineering:教马怎么转弯
- Context Engineering:给马一张地图
- Harness Engineering:给马装上缰绳和护栏,让它自主但不越界
三、为什么需要 Harness?AI 不是已经很厉害了吗?
很多人有这样的误解:模型越来越强,工程问题会被「智能」自然解决。
然而现实非常骨感。
3.1 AI Agent 的五大"先天缺陷"
缺陷一:上下文窗口的「记忆焦虑」
AI 的"记忆"是有上限的,叫做上下文窗口(Context Window)。
当你让 AI 做一个复杂的长任务——比如重构一个 10 万行的代码库——到后期,AI 会开始"忘事":
- 之前制定的规则不记得了
- 早期修改的代码忘了
- 甚至会虚报任务完成,实际上什么都没做
就像让一个记忆力只有 10 分钟的员工做一周的项目,后果可想而知。
缺陷二:Prompt 的「脆弱性」
你可能写了很好的 Prompt:「请遵守 PEP8 代码规范,不要使用 import *,不要写超过 3 层嵌套的 if……」
模型会回答:「明白!」
然后……该怎么写还怎么写。
依赖模型"自律"来遵守规则,就像依赖员工「自觉」来打卡——偶尔可以,长期靠不住。
缺陷三:多 Agent 协作的「污染效应」
当你同时让多个 AI Agent 协同工作时(比如一个负责写代码,一个负责写测试,一个负责写文档),会出现混乱:
- Agent A 改了一个函数名,Agent B 不知道,继续用旧名字调用
- Agent C 根据 Agent B 的错误信息做了假设,产生新的错误
- 最终形成混乱的「上下文污染链」
缺陷四:无终止的「执行死循环」
AI Agent 很容易陷入这种循环:
发现错误 → 尝试修复 → 修复失败 → 再次尝试 → 再次失败 → ……
有时候它甚至会用"修改测试用例"来让测试通过——就像为了达到减肥目标,把体重秤调小 10 斤。
缺陷五:系统「熵增」
随着 AI 运行时间增长,状态越来越复杂,规则越积越多,最终整个系统变得混乱不可预测——就像一个从不打扫的房间,东西越堆越多,最终找不到任何东西。
3.2 Harness 的本质:补偿机制
Harness Engineering 的本质,是为 AI 当前的"先天缺陷"构建系统性补偿机制。
每一层 Harness 设计,都对应一个具体的缺陷修复:
| AI 缺陷 | Harness 补偿 |
|---|---|
| 上下文记忆丢失 | 外部结构化记忆 + 滚动摘要 |
| Prompt 软约束失效 | 代码强制执行的硬约束 |
| 多 Agent 污染 | 上下文隔离 + 任务边界划分 |
| 执行死循环 | 终止条件 + 进展检测 |
| 系统熵增 | 定期蒸馏 + 自动清洁代理 |
四、Harness Engineering 的六大核心支柱
理解了"为什么需要 Harness",现在来拆解它的具体构成。
Harness Engineering 由六大工程支柱构成,我们一个个通俗解释:
支柱一:上下文架构(Context Architecture)
一句话:精心控制喂给 AI 的信息
❌ 反例——信息轰炸:
把所有代码、文档、历史记录、设计稿全部丢给 AI:
"来,把这些都看一遍,然后帮我修一个 Bug。"
结果:AI 淹没在信息海洋里,找不到重点,性能急剧下降。
✅ 正确做法——结构化信息分层:
1. 高优先级:当前任务相关的代码片段
2. 中优先级:相关的架构文档摘要
3. 低优先级:按需查询的参考资料
关键技术实践:
- AGENTS.md 文件:项目根目录放一个"AI专用导航手册",告诉 AI 这个项目怎么跑、注意事项是什么
- 滚动摘要(/compact 命令):当上下文快满时,自动把历史对话压缩成摘要
- 延迟加载:不要一次性加载所有信息,按需读取
- Token 利用率监控:实时监控上下文窗口的使用情况
支柱二:架构约束(Architecture Constraints)
一句话:用代码强制执行规则,而不是靠 Prompt 祈祷
❌ 软约束(靠不住):
Prompt 里写:"请严格遵守我们的架构分层,不要让 Controller 直接调用 Repository。"
✅ 硬约束(靠得住):
# 自定义 Linter 规则
# 检测 Controller 是否直接引用了 Repository 类
# 如果违反,CI 直接报错并阻断合并
if import_path.startswith("repository") and current_file.startswith("controller"):
raise LintError(
"Controller 不能直接调用 Repository,请通过 Service 层。"
"AI可修复方案:将调用移到 service/ 目录下对应的 Service 类中。"
)
关键技术实践:
- 工具白名单:只给 AI 它需要的工具,不多给(最小权限原则)
- 自定义 Linter:把架构规则编写成可执行的检查代码
- 操作分级授权:读文件 = 无需确认;写文件 = 提示确认;删除文件 = 必须明确授权
- 沙箱隔离:危险操作在隔离环境中执行,不影响生产系统
支柱三:自验证循环(Self-Validation Loop)
一句话:逼着 AI 在提交答案前自己检查一遍
设想这样的流程:
AI 生成代码 → 自动运行单元测试 → 测试通过 → 提交
↓ 测试失败
AI 查看错误信息 → 修复 → 再次测试 → 循环直到通过
这不是让 AI"聪明",而是强制 AI 验证自己的工作。
LangChain 的「推理三明治」策略:
[高推理模式] 规划阶段:仔细分析需求,制定详细计划
[低推理模式] 执行阶段:按计划写代码(节省算力)
[高推理模式] 验证阶段:严格审查生成的代码
结果:同一个模型,得分从 52.8% 提升至 66.5%,什么都没改,只改了这个流程。
关键技术实践:
- Plan-Build-Verify-Fix 循环:规划 → 实现 → 验证 → 修复,强制执行
- Generator-Evaluator 分离:让一个 AI 生成,另一个 AI 评审(类似代码 Review)
- 进展检测:通过"状态指纹"检测 AI 是否真的在取得进展,还是在原地打转
- 终止条件:设置最大迭代次数,防止无限死循环
支柱四:上下文隔离(Context Isolation)
一句话:多个 AI 协作时,保持每个 AI 的"工作台"干净
想象一个开放式办公室,所有人共用一张桌子——文件混在一起,工具乱七八糟,你改了一个东西,不知道会影响谁。
上下文隔离就是给每个 AI Agent 一个独立的「工作台」:
主调度 Agent(Orchestrator)
├── 子任务1 Agent:独立上下文,负责写 API 接口
├── 子任务2 Agent:独立上下文,负责写数据库层
└── 子任务3 Agent:独立上下文,负责写单元测试
各 Agent 通过结构化接口传递信息,而不是直接共享上下文
关键技术实践:
- 任务边界隔离:为每个子任务启动全新的上下文
- 信息接口化:Agent 之间通过结构化消息(JSON)传递,不共享原始上下文
- 错误隔离:一个 Agent 出错,不会"传染"给其他 Agent
支柱五:熵治理(Entropy Governance)
一句话:对抗系统随时间变得越来越混乱
热力学第二定律说:孤立系统总是从有序走向无序(熵增)。
AI Agent 的长期运行也面临同样的问题:
- 上下文里积累了大量无用的历史信息
- 文档和代码逐渐不同步
- 旧规则和新规则互相冲突
- 技术债越积越多
解决方案:自动化的"清洁机制"
OpenAI 的做法是引入专门的「文档园丁 Agent」和「清洁 Agent」:
# 文档园丁 Agent - 后台定期运行
def document_gardener():
"""
自动扫描文档与代码的不一致
发现过期文档时,自动提交更新 PR
"""
for doc in docs_directory.scan():
code_reality = codebase.get_actual_implementation(doc.topic)
if doc.is_outdated(code_reality):
pr = create_update_pr(doc, code_reality)
submit_for_review(pr)
关键技术实践:
- 定期上下文蒸馏:保留结论,丢弃过程细节
- 文档园丁 Agent:自动维护文档与代码的一致性
- 技术债清理 Agent:定期扫描偏离标准的代码,自动提 PR 重构
- 规则冲突检测:发现互相矛盾的规则,自动报警
支柱六:可拆卸性(Replaceability)
一句话:Harness 系统要能轻松换模型
今天用 GPT-5,明天可能要换 Claude,后天可能是新出的某个国产模型。
如果 Harness 系统和某个具体模型深度耦合,换模型就是灾难。
正确做法:抽象模型接口
# ❌ 错误:和具体模型强耦合
response = openai.chat.completions.create(
model="gpt-5",
messages=[...]
)
# ✅ 正确:通过抽象接口调用
class ModelInterface:
def complete(self, messages: List[Message]) -> Response:
raise NotImplementedError
class OpenAIModel(ModelInterface):
def complete(self, messages): ...
class ClaudeModel(ModelInterface):
def complete(self, messages): ...
# Harness 只依赖接口,不依赖具体实现
harness = HarnessSystem(model=OpenAIModel())
# 换模型只需改一行
harness = HarnessSystem(model=ClaudeModel())
关键技术实践:
- 抽象模型接口:Harness 不依赖具体模型
- Prompt 模板外置:Prompt 配置化,而不是硬编码
- 能力特性标记:根据不同模型的特性动态调整 Harness 行为
五、三层架构:Harness Engineering 的系统蓝图
将六大支柱整合来看,Harness Engineering 形成了一个清晰的三层架构:
┌─────────────────────────────────────────────────┐
│ 第三层:验证与评估层 │
│ Generator Agent → Evaluator Agent → 人类审核 │
│ (质量保障,防止 AI 自嗨式完成任务) │
├─────────────────────────────────────────────────┤
│ 第二层:多 Agent 并发控制层 │
│ Planner(规划)→ Worker(执行)→ Judge(评审) │
│ (协同效率,防止 Agent 互相干扰) │
├─────────────────────────────────────────────────┤
│ 第一层:任务流程管控层 │
│ JSON进度清单 + Git记录 + 上下文管理 │
│ (基础约束,防止 AI 失忆和任意跳步) │
└─────────────────────────────────────────────────┘
↑
Model(大模型)
六、真实案例:看数字说话
案例一:OpenAI 百万行代码实验
| 指标 | 数据 |
|---|---|
| 团队规模 | 3 人(后扩至 7 人) |
| 时间周期 | 5 个月 |
| 生成代码量 | 100 万行 |
| PR 数量 | 1500 个 |
| 人工手写代码 | 0 行 |
| 效率提升 | 约 10x |
核心 Harness 设计:
AGENTS.md导航文件:AI 进入项目的"第一手册"- 分层架构约束 + 自定义 Linter:通过 CI 强制执行,违规直接阻断
- 文档园丁 Agent:后台自动维护文档与代码一致
- AI 互审流程:Agent A 写代码 → Agent B 代码 Review → 循环直至通过
案例二:LangChain 排名从第 30 跃升第 5
在 Terminal Bench 2.0 基准测试中:
| 优化内容 | 不改模型,只改 Harness |
|---|---|
| 优化前得分 | 52.8% |
| 优化后得分 | 66.5% |
| 排名变化 | 第 30 名 → 第 5 名 |
具体 Harness 优化:
- 加入 Plan-Build-Verify-Fix 强制循环
- 启动时注入完整的环境上下文(目录结构、工具列表)
- 死循环检测(同一文件修改超限时自动提示换思路)
- 「推理三明治」策略:规划/验证用高推理,代码实现用低推理
💡 启示:这个案例最有力地证明了 Harness 的价值——不换模型、不花钱买更强的 AI,仅靠工程优化就提升了 25% 的表现。
案例三:Anthropic 的长任务 Harness 设计
Anthropic 在其论文《Effective harnesses for long-running agents》中提出了针对长任务的设计方案:
初始化:将所有功能标记为「未完成」
↓
Orchestrator Agent(调度层):负责任务分解和状态管理
↓
Worker Agent(执行层):负责具体任务执行
↓
每完成一个子任务:
- 运行对应的验证测试
- 通过 → 状态改为「已完成」
- 失败 → 修复后再验证
↓
全部状态变为「已完成」→ 任务结束
关键原则:AI 只能通过验证来证明任务完成,不能自我声明完成。
七、如何开始实践 Harness Engineering?
7.1 五个核心原则(落地清单)
✅ 1. 先做好上下文工程
- 创建 AGENTS.md,提供清晰的项目导航
- 整理结构化的 docs/ 目录(架构文档、API 契约、规范)
- 控制上下文大小,避免信息过载
✅ 2. 强制自我验证
- 在 Prompt 中要求 AI 完成后运行测试
- 建立 Plan-Build-Verify-Fix 流程
- 不接受"我完成了",只接受"测试通过了"
✅ 3. 将约束写进代码
- 把重要规则变成 Linter 规则
- 把质量门禁集成到 CI/CD 流程
- 给 AI 设置最小必要权限
✅ 4. 建立可观测性
- 记录 AI 的每个决策和操作
- 设计机器可读的日志和错误信息
- 用 Langfuse / AgentOps 等工具追踪 Agent 行为
✅ 5. 模块化设计,保持可拆卸
- 抽象模型调用接口
- Prompt 模板外置为配置文件
- 随着模型进化,及时移除不再需要的 Harness 组件
7.2 推荐工具栈
| 类别 | 工具 | 用途 |
|---|---|---|
| AI 可观测性 | Langfuse、AgentOps、Helicone | 追踪 Agent 决策链路 |
| 安全沙箱 | E2B、Daytona | 隔离执行 AI 生成的代码 |
| 上下文管理 | LangChain、LlamaIndex | 结构化管理 RAG 和上下文 |
| 标准化协议 | MCP(Model Context Protocol) | 统一 Agent 访问工具的方式 |
| 任务调度 | Temporal、LangGraph | 多 Agent 状态机和流程管控 |
八、常见误区
❌ 误区一:「模型够强了,Harness 不重要」
真相: LangChain 的实验证明,同一个模型通过 Harness 优化提升了 25%+。随着模型越来越强,Harness 的某些组件确实会被淘汰,但「约束、验证、可观测性」这些工程原则永远不会过时。
❌ 误区二:「Harness 就是写更长的 Prompt」
真相: Harness 是代码层面的工程系统,包括 Linter、CI、沙箱、状态机等。Prompt 是其中一个输入,而不是全部。依赖 Prompt 的都是软约束,Harness 强调的是可执行的硬约束。
❌ 误区三:「只有大厂才需要 Harness」
真相: 任何构建 AI Agent 的团队都需要 Harness。越早建立工程规范,越早避免"AI 代码失控"的噩梦。从一个 AGENTS.md 文件开始,成本极低。
❌ 误区四:「Harness 一旦建好就不用维护」
真相: Harness 需要随模型进化而迭代。Anthropic 已经淘汰了他们之前的 Context Reset 机制,因为新模型不再需要它。好的 Harness 是可以删除的——当某个约束不再必要时,果断移除。
九、总结:换个角度看 AI 工程
Harness Engineering 给了我们一个全新的视角来看待 AI 开发:
| 旧视角(模型中心论) | 新视角(Harness 工程论) |
|---|---|
| 买更强的模型 | 优化模型周围的系统 |
| 写更好的 Prompt | 构建可执行的约束 |
| 祈祷 AI 不出错 | 设计验证和纠错机制 |
| 单个 AI 完成所有任务 | 多 Agent 协同 + 隔离 |
| 关注生成结果 | 关注整个执行过程 |
📌 一句话记住 Harness Engineering:
「模型是引擎,Harness 是整辆车。光有引擎跑不了,光靠引擎也跑不稳。」
参考资料
📚 延伸阅读
- Mitchell Hashimoto:《Harness Engineering》原始博客(2025年末)
- OpenAI:《Harness engineering: leveraging Codex in an agent-first world》
- Anthropic:《Effective harnesses for long-running agents》
- LangChain:Terminal Bench 2.0 实验报告(2026年)
- 晨涧AI:《Harness Engineering:从驾驭百万行AI代码到软件工程的范式革命》
💬 如果这篇文章对你有帮助,欢迎一键三连(点赞 👍 收藏 ⭐ 关注)!
有疑问或想深入探讨某个支柱的实现细节,欢迎在评论区交流!
首发于 CSDN | 最后更新:2026年4月
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐




所有评论(0)