Harness Engineering:让 AI Agent 从会回答到能可靠做事
Harness Engineering 入门:是什么、为什么、怎么做
先说结论
Harness Engineering 可以译作“驾驭工程”或“智能体运行时工程”。它关注的不是“怎么把提示词写得更漂亮”,也不是“怎么训练一个更强的模型”,而是:当 AI Agent 真的要使用工具、读写文件、调用 API、提交代码、执行长任务时,外部系统应该怎样约束它、观察它、纠正它、恢复它。
一句话:
Harness Engineering 是围绕 AI Agent 构建的一套运行环境、约束系统、反馈回路和恢复机制。
如果把大模型比作发动机,Agent 是一辆能自己开一点的车,那么 Harness 就是方向盘、刹车、仪表盘、护栏、导航、维修站和交通规则。

一、它是什么
在 Agent 系统里,模型本身只负责生成下一步想法或动作。但一个能落地的 Agent 还需要很多模型之外的东西:
- 上下文:当前任务、历史决策、项目规则、相关代码、文档、约束。
- 工具:Shell、浏览器、数据库、搜索、代码编辑器、测试框架、CI。
- 状态:任务进度、失败记录、当前工作区、预算、权限、已完成和未完成事项。
- 控制流:先规划还是先执行,失败后重试几次,什么时候交给人类。
- 反馈:测试失败、lint 错误、日志、监控、评审意见、用户确认。
- 安全边界:哪些命令能执行,哪些文件能改,哪些操作必须审批。
- 可观测性:每一步为什么做、调用了什么工具、花了多少 token、产物是什么。
这些东西合起来,就是 Harness。
菜鸟教程的文章把 Harness Engineering 描述为围绕 AI 智能体构建约束、反馈与控制系统的方法论,并强调“人类掌舵,智能体执行”。这个说法适合入门理解,但工程上还可以再精确一点:Harness 不是一句理念,而是一层真实的软件系统。它把模型输出变成可执行动作,又把环境反馈变成模型可理解的信号。
近年的几篇论文也在用类似定义。比如 Harness-Bench 将 harness 描述为管理上下文、工具、状态、约束、权限、追踪和恢复的系统层;HarnessBridge 则把 harness 看作连接 Agent 与环境的交互控制器。这说明一个趋势:评价 Agent 能力时,不能只看底层模型,也要看外部 harness 怎么设计。
二、它和 Prompt Engineering、Context Engineering 有什么区别
可以按三个层次理解:

| 层次 | 主要问题 | 优化对象 | 典型手段 |
|---|---|---|---|
| Prompt Engineering | 怎么把话说清楚 | 单次输入 | 角色、格式、示例、约束语句 |
| Context Engineering | 怎么给模型提供正确材料 | 信息选择与组织 | RAG、文档索引、AGENTS.md、历史摘要 |
| Harness Engineering | 怎么让 Agent 稳定完成任务 | 整个运行系统 | 工具封装、权限、测试、回滚、追踪、恢复 |
举个写代码的例子:
- Prompt Engineering:告诉模型“请用 Java 写一个线程安全计数器”。
- Context Engineering:把项目的编码规范、已有 Counter 类、测试目录结构提供给模型。
- Harness Engineering:限制它只能改指定文件,要求先写测试,执行
mvn test,失败后把错误回传,连续失败三次后停止并请求人工介入。
所以 Harness Engineering 不是替代前两者,而是把它们放进一个可运行、可验证、可恢复的系统里。
三、为什么需要 Harness Engineering
1. Agent 的失败不是“回答错”这么简单
普通聊天机器人回答错,最多是文本质量问题。Agent 错了,可能会:
- 改错文件。
- 删除数据。
- 调错接口。
- 生成半成品代码但声称完成。
- 反复执行无效步骤,浪费 token 和时间。
- 把测试改到能通过,而不是把代码修对。
- 在长任务中忘记最初目标。
这类问题不是简单换一个更强模型就能彻底解决的。模型越强,能执行的动作越多,错误后果也越大。
2. 长任务会放大不确定性
Agent 做一个两分钟任务时,提示词可能够用。但如果任务需要几十步,比如:
- 理解需求。
- 修改多处代码。
- 补测试。
- 跑测试。
- 修 lint。
- 写文档。
- 提交 PR。
任何一步的小偏差都会累积。Harness 的作用就是把长任务拆成可检查的阶段,让每一步都有输入、输出、验证和恢复策略。
2026 年论文 Harnesses for Inference-Time Alignment over Execution Trajectories 提到,harness 的设计会影响长轨迹任务表现,其中任务分解、执行引导、重试预算都会改变最终成功率。它也指出,更复杂的 harness 并不总是更好,过度分解和过度约束可能反而降低成功率。
3. Agent 能力不是“模型能力”单独决定的
同一个模型,放在不同 harness 里,表现可能完全不同。
一个没有工具反馈的 Agent,只能猜。一个能读日志、跑测试、查看 diff、回滚失败修改的 Agent,就可以迭代修正。Harness-Bench 的研究也强调,Agent 的完成率、过程质量、效率和失败行为会随“模型 + harness 配置”显著变化,因此不能把结果只归因于底层模型。
4. 工程团队需要可审计,而不是“相信它”
企业里真正难的不是让 Agent 生成一段代码,而是回答这些问题:
- 它为什么这么改?
- 它改了哪些文件?
- 它有没有跑测试?
- 它失败过几次?
- 它有没有越权?
- 它的输出能不能复现?
- 出问题后能不能回滚?
Harness Engineering 的核心价值,就是让 Agent 从“黑箱助手”变成“受控执行系统”。
四、Harness Engineering 怎么做
下面是一套从简单到复杂的落地路径。
第一步:明确任务边界
不要一上来就让 Agent “帮我优化整个项目”。应该定义清楚:
- 目标是什么。
- 哪些文件能读。
- 哪些文件能改。
- 哪些命令能运行。
- 什么条件算完成。
- 什么情况必须停止。
示例:
任务:修复登录接口在 token 过期时返回 500 的问题。
允许修改:src/auth/**、tests/auth/**
禁止修改:数据库迁移、支付模块、部署脚本
完成标准:新增回归测试,所有 auth 测试通过,错误码返回 401
停止条件:连续三次测试失败仍无新线索,或需要修改公共认证协议
这一步看似简单,其实是在给 Agent 画施工区域。
第二步:把隐性规则写成显性规则
人类工程师脑子里有很多默认规则,Agent 没有。比如:
- Controller 不能直接访问数据库。
- 领域层不能依赖 UI 层。
- 测试不能 mock 掉真正要验证的逻辑。
- 错误信息不能暴露敏感字段。
- 迁移脚本必须向后兼容。
这些规则不要只写在聊天里,最好落到代码库中:
AGENTS.mdCONTRIBUTING.md- 架构决策记录 ADR
- 自定义 lint 规则
- 单元测试和集成测试
- CI 检查
- pre-commit hook
文档是软约束,测试和 CI 是硬约束。对 Agent 来说,硬约束更可靠。
第三步:设计工具接口,不要直接暴露所有能力
Agent 能调用工具,但工具越强,风险越高。Harness 应该把工具封装成“安全、可观察、可撤销”的接口。
不推荐:
给 Agent 一个无限制 shell,让它自己想办法。
更推荐:
提供受控命令:运行测试、搜索文件、读取日志、应用补丁、生成报告。
危险操作:删除文件、修改生产数据、联网下载、提交发布,必须审批。
工具设计的原则:
- 最小权限:只给当前任务需要的能力。
- 明确输入输出:工具返回结构化结果,而不是一大段难解析文本。
- 可审计:记录调用参数、结果、耗时、失败原因。
- 可回滚:修改类工具最好能生成 diff 或 patch。
- 可限流:避免死循环调用和成本失控。
第四步:建立反馈循环
一个简单但有效的循环是:
计划 -> 执行 -> 验证 -> 读取反馈 -> 修正 -> 再验证

软件开发场景可以这样做:
1. Agent 先提出计划。
2. Harness 检查计划是否越界。
3. Agent 修改代码。
4. Harness 自动运行测试和 lint。
5. 失败信息回传给 Agent。
6. Agent 基于错误修复。
7. 通过后生成变更摘要。
8. 人类做最终 review。
这里最重要的是“验证结果必须回到 Agent”。如果测试失败只停在终端里,Agent 不知道自己错在哪里;如果错误信息被结构化回传,它就有机会修正。
第五步:把失败当成资产
Harness Engineering 的一个关键思想是:Agent 每次失败,都应该沉淀为系统改进。
比如 Agent 曾经犯过这些错:
- 忘记更新文档。
- 修改了不该改的模块。
- 写了只验证 happy path 的测试。
- 遇到权限错误后反复重试。
- 误把日志警告当成测试失败。
对应的 harness 改进可以是:
- 在完成标准中加入“相关文档已更新”。
- 增加路径级权限限制。
- 增加测试覆盖要求。
- 对权限错误设置停止规则。
- 结构化区分 warning、error、failed test。
好的 harness 不是一次设计出来的,而是从真实失败中长出来的。
第六步:控制任务粒度
不要让 Agent 一口气做完整个项目,也不要把任务拆得过碎。
过粗的问题:
- 上下文太长。
- 中间状态不可控。
- 最后很难判断哪里出错。
过细的问题:
- Agent 失去整体目标。
- 协调成本变高。
- 过多流程控制反而降低成功率。
更好的做法是“阶段性自主”:
人类定义目标和边界。
Harness 定义检查点和停止条件。
Agent 在每个阶段内自主执行。
每个阶段结束时验证和汇报。
这也呼应了近期研究中的一个观察:有效 harness 不一定要规定完整路径,有时只规定初始步骤和关键约束,让 Agent 在中后段保持适度自主,效果可能更好。
第七步:加入恢复和升级机制
Agent 失败时不要只会“再试一次”。恢复策略应该分层:
轻微失败:自动重试。
可诊断失败:把错误回传给 Agent 修正。
重复失败:切换策略或缩小任务。
高风险失败:停止执行,请求人类确认。
不可恢复失败:回滚工作区,输出诊断报告。
CAX-Agent 这类领域 Agent 的研究也体现了类似思想:在工具执行失败后,可以从规则修复、模型再生成、补充上下文、人类介入等层级逐步升级。虽然它的场景是 MAPDL 仿真自动化,但这个恢复思路适用于大多数工程 Agent。
五、一个最小可用 Harness 长什么样
如果你要给代码 Agent 做一个最小 Harness,可以从下面这个清单开始。
1. 输入层
- 任务说明。
- 允许修改范围。
- 完成标准。
- 禁止事项。
- 相关文档入口。
2. 上下文层
AGENTS.md作为入口。- 按任务检索相关文件。
- 自动摘要历史尝试。
- 保存关键决策。
3. 工具层
- 文件搜索。
- 文件读取。
- patch 修改。
- 测试运行。
- lint 运行。
- diff 查看。
- 日志读取。
4. 控制层
- 最大步数。
- 最大 token。
- 最大重试次数。
- 危险操作审批。
- 失败停止条件。
5. 验证层
- 单元测试。
- 集成测试。
- 类型检查。
- lint。
- 架构规则。
- 安全扫描。
6. 观察层
- 工具调用日志。
- 修改文件列表。
- 测试结果。
- 失败原因。
- 成本统计。
- 最终报告。
7. 恢复层
- 重试。
- 回滚。
- 缩小任务。
- 切换模型。
- 请求人工介入。
这个版本不复杂,但已经比“给模型一个大 prompt 然后祈祷”可靠得多。
六、常见误区
误区一:Harness 越复杂越好
不对。Harness 太复杂会带来新的失败模式,比如过度分解、规则冲突、上下文污染、流程僵化。好的 harness 应该只增加必要约束。
误区二:有了 Harness 就不需要人
不对。Harness 的目标不是取消人类,而是把人类从低价值盯梢中解放出来,让人负责目标、边界、价值判断和高风险决策。
误区三:文档越多越好
不对。上下文窗口是稀缺资源。更好的策略是“小入口 + 按需检索 + 活文档”。把所有规则塞进一个超长文件,Agent 反而更容易忽略重点。
误区四:测试通过就一定正确
不对。Agent 可能写出很弱的测试,也可能修改测试来适配错误实现。Harness 需要关注测试质量、覆盖边界和验收标准,而不只是“绿了没有”。
七、实践模板
可以直接使用下面这个模板设计一次 Agent 任务:
## 任务
说明要解决的问题,不超过 5 句话。
## 范围
允许读取:
允许修改:
禁止操作:
## 背景
相关文档:
相关模块:
历史失败:
## 执行规则
先读相关代码再修改。
修改前给出简短计划。
每次只做一个小步。
失败时先解释原因,再修复。
## 验证
必须运行:
可选运行:
完成标准:
## 停止条件
连续失败 N 次。
需要越权操作。
发现需求与现有架构冲突。
测试结果无法解释。
## 输出
修改了什么。
为什么这么改。
验证结果是什么。
剩余风险是什么。
八、最终理解
Harness Engineering 的本质,是把“让 AI 做事”升级为“设计一个能让 AI 可靠做事的系统”。
它解决的不是单次回答质量,而是长期执行可靠性。它关心的不是模型会不会说,而是 Agent 在真实环境里能不能:
- 找到正确上下文。
- 选择正确工具。
- 遵守工程边界。
- 接受环境反馈。
- 修复自身错误。
- 在不确定时停止。
- 留下可审计记录。
未来工程师的价值会越来越多地体现在这件事上:不是亲手写每一行代码,而是设计规则、工具、反馈和验证机制,让 Agent 在可控范围内高效工作。
参考资料
- 菜鸟教程:Harness Engineering(驾驭工程)
- arXiv:Harness-Bench: Measuring Harness Effects across Models in Realistic Agent Workflows
- arXiv:Harnesses for Inference-Time Alignment over Execution Trajectories
- arXiv:HarnessBridge: Learnable Bidirectional Controller for LLM Agent Harness
- arXiv:CAX-Agent: A Lightweight Agent Harness for Reliable APDL Automation
- arXiv:AI Agents That Matter
更多推荐



所有评论(0)