跳转至

AI Harness Engineering

概述

2026 年 5 月 13 日,arxiv 上发表了一篇论文 AI Harness Engineering: A Runtime Substrate for Foundation-Model Software Agents,论文的核心阐述了一个观点:

软件工程 Agent 的能力,不应该只归因于模型本身,而应该看成 模型 + Harness + 软件环境 这个组合系统的能力。

论文把 AI Harness Engineering 定义为:围绕 foundation-model software agents 的一个 runtime substrate,负责管理上下文、工具、项目记忆、任务状态、可观测性、失败归因、验证、权限和维护状态,让模型潜在的代码能力转化为可审计的软件工程行为。

解决的问题

基础模型已经很会生成代码、修改文件、解释代码、写测试、调用工具,但在真实软件开发任务中,自治软件工程 Agent 仍然不可靠。

作者认为不能将 Agent 失败的主要原因归咎于模型能力不够,这种解释不完整。软件工程师是一个长期、状态化、工具介导、反馈驱动的活动,需要上下文管理、项目记忆、工具接口、执行轨迹、验证信号、权限、回滚和维护纪律;这些支持在人类开发环境中很多是隐形的,但对于模型来说必须显式暴露、结构化和记录。

核心公式可以压缩为:

软件工程 Agent 能力
= F(模型能力,Harness 能力,环境能力,任务分布)

中心命题

自治软件工程能力不是模型单独的属性,而是 Model-Harness-Environment system 结合的涌现属性。

  • Model 提供潜在的编码、推理、规划和指令跟随能力;
  • Environment system提供仓库、测试、工具、日志、构建系统和依赖;
  • Harness位于二者之间,调解 Agent 如何观察项目、采取行动、接收反馈并证明任务完成。

Harness 的理解

这里 Harness 不是:

一套 prompt 模板
一个 LangChain 应用
一个 benchmark 脚本
一个 CI/CD pipeline

Harness 是一个复合体,更接近:

Agent Runtime + Context Manager + Tool Layer + Memory + Trace + Verification + Permission + Maintenance Control

AI Development 场景下的 Harness 设计

组件职责

论文将 AI Development Harness 拆成 11 个组件职责:

1. Task interface
   明确任务目标、需求、约束、成功标准。
   缺失时:目标不清、做错任务。

2. Context manager
   选择并暴露和任务相关的项目内容。
   缺失时:看错文件、漏掉约束。

3. Tool registry
   声明可用工具、允许命令和使用协议。
   缺失时:工具调用失败、不安全命令、重复超时。

4. Project memory
   提供 Agent 可读的架构、测试、已知失败知识。
   缺失时:重复探索、修错架构层。

5. Task state
   维护假设、已检查文件、开放问题、下一步。
   缺失时:任务漂移、重复工作、执行不连贯。

6. Observability layer
   暴露日志、trace、输出、运行时错误。
   缺失时:成功不可验证、失败不可诊断。

7. Failure attribution
   区分观察结果、期望行为、诊断结论。
   缺失时:失败后随机打补丁。

8. Verification protocol
   将任务需求映射为确定性证据。
   缺失时:未验证的成功、虚假的信心。

9. Permission boundary
   限制高风险动作,暴露审批门。
   缺失时:不安全或无效的执行 episode。

10. Entropy auditor
    检测 Agent 引入的维护负担。
    缺失时:文档过期、依赖膨胀、代码残留。

11. Intervention logger
    记录人类协助以及这种协助是否可避免。
    缺失时:人类支撑被隐藏,系统自治能力被高估。

Harness 设计原则

论文提出 Harness 应满足五个设计原则:

  1. 运行时资源必须显式化,不能假设 Agent 自己能推断上下文、工具、项目记忆、验证证据、人类注意力、权限边界和维护状态;
  2. Harness 的中介行为必须可追踪,包括 Agent 如何选择上下文、调用工具、尝试验证、从失败恢复以及何时需要人工介入;
  3. 任务完成必须绑定到需求级证据,而不是自然语言自称“我完成了”;
  4. 失败后应该先归因再恢复,不能一失败就乱改;
  5. 维护熵必须纳入循环,不能把文档滞后、依赖频繁变动、生成物残留、测试效力减弱、边界违规等长期隐患排除在 Agent loop 之外

四级 Harness 阶梯

论文提出了一个四级 Controlled Harness Ladder:

H0:Minimal baseline
Agent 只拿到任务描述和仓库文件。
没有工具注册表,没有项目记忆,没有验证协议。

H1:Tool harness
在 H0 基础上增加工具注册表、测试命令注册表、工具使用协议。
作用是让行动面显式化、可追踪。

H2:Context–memory harness
在 H1 基础上增加 Agent 可读的项目记忆、架构说明、测试约定、已知失败、任务状态文件、上下文选择协议。
作用是让上下文和项目知识显式化、可追踪。

H3:Observability–verification harness
在 H2 基础上增加确定性行为检查、bug 复现协议、失败归因协议、验证协议、验证报告模板。
作用是把“完成任务”变成一个证据对象,而不是一句自我声明。

论文特别强调 H3 的验证流程:

1. Reproduce
   先复现失败,观察实际输出与期望输出。

2. Attribute
   对失败进行归因,判断问题属于哪一类、发生在哪一层。

3. Fix
   根据归因结果做有针对性的修复。

4. Verify
   用确定性检查验证修复行为和保留行为。

5. Report
   输出验证报告,说明证据和限制。

泛化

论文是以 AI development 场景作为论述起点的,其中涉及到的架构设计并不能原封不动的搬到所有 Agent 场景。

核心

我们可以将论文抽象成一个通用公式:

可靠的 Agent 能力
= Model 能力
+ Harness 运行时支撑
+ Environment 可观测/可操作/可验证程度

如果是邮件 Agent,就是:

可靠的邮件 Agent 能力
= 模型理解能力
+ 邮件 Harness
+ 邮箱 / 日历 / 联系人 / 审批 / 审计环境

如果是数据分析 Agent,就是:

可靠的数据分析 Agent 能力
= 模型分析能力
+ 数据分析 Harness
+ 数据库 / BI / notebook / 指标口径 / 校验规则环境

如果是客服 Agent,就是:

可靠的客服 Agent 能力
= 模型对话能力
+ 客服 Harness
+ 工单 / 知识库 / CRM / 权限 / 质检环境

职责

1. Task Interface:任务接口

通用 Agent 里是:

用户目标、业务目标、约束条件、成功标准、禁止事项

例如邮件 Agent:

任务:总结昨天重要的邮件,并为张三生成回复草稿
成功标准:
- 总结包含紧急邮件
- 回复生成草稿,不直接发送
- 实际发送信号必须请求确认

2. Context Manager:上下文管理

通用 Agent 里是:

选择相关业务数据、历史记录、知识库、用户偏好、权限范围、当前会话状态

例如客服 Agent 需要上下文:

客户历史订单
当前工单内容
相关知识库
服务政策
历史沟通记录
可执行动作权限

3. Tool Registry:工具注册表

泛化后的实践要求:工具必须有 schema、权限、风险等级、超时、重试、审计。不能模型想调什么工具就调什么工具。正确的做法:

Harness 决定:
- 这个 Agent 能看到哪些工具
- 这个用户能用哪些工具
- 这个任务能否触发工具
- 参数是否合法
- 是否需要人工确认
- 调用结果如何记录

通用 Agent 里是:

邮箱 API
日历 API
CRM API
数据库查询
RAG 检索
浏览器
工单系统
支付系统
审批系统
文档系统
...

4. Memory:记忆

通用 Agent 里:

Domain Memory / Business Memory / User Memory / Organization Memory

例如销售 Agent:

产品价格策略
客户分层规则
历史报价记录
合同模板
不能承诺的条款

5. Task State:任务状态

通用 Agent 里是:

任务阶段、已完成的动作、待确认事项、失败记录、中间产物、下一步计划

例如工单 Agent:

已识别问题类型
已查询设备状态
已尝试解决方案
客户是否确认
是否升级人工

6. Observability:可观测性

通用 Agent 里是:

模型调用记录
工具调用记录
上下文来源
检索命中
权限判断
审批记录
错误日志
成本
延迟
用户反馈

任何 Agent 场景都应该有事件追踪:

这个 Agent:
- 收到了什么任务
- 看到了哪些上下文
- 调用了哪些工具
- 每个工具的参数是什么
- 哪些步骤失败了
- 如何恢复
- 哪些动作被拦截
- 是否需要人工确认
- 完成凭证

7. Failure Attribution:失败归因

通用 Agent 里是:

失败是意图理解错误、上下文缺失、工具调用失败、权限不足、数据过期、业务规则冲突、还是模型推理错误?

不能无诊断地盲重试/盲改,要先归因再重试。

8. Verification Protocol:验证协议

对于不同场景的 Agent,需要针对其功能设计特有的验证协议。

例如邮件 Agent:

验证:
- 是否读取了正确日期范围的邮件
- 是否覆盖重要发件人
- 是否没有直接发送邮件
- 是否创建了草稿
- 草稿收件人是否正确
- 草稿内容是否符合用户要求

9. Permission Boundary:权限边界

通用 Agent 里是:

能读取什么数据
能调用什么 API
能否写入业务系统
能否发送消息
能否下单
能否删除
能否代表用户承诺
哪些动作需要审批

例如邮件 Agent 里:

读邮件:中风险,允许但审计
创建草稿:中风险,允许
发送邮件:高风险,需要人工确认
删除邮件:禁止
读取附件:视文件类型决定

10. Entropy Auditor:熵审计

泛化后的 Entropy Auditor 检查:

Agent 是否在完成当前任务的同时,给系统留下长期混乱、错误状态或维护负担

通用 Agent 里是:

副作用审计 / 操作熵审计 / 业务污染审计 / 长期状态污染审计

例如邮件 Agent 的熵:

生成了太多草稿
重复创建待办
错误标记邮件
污染联系人备注
留下无意义标签

11. Intervention Logger:人工介入记录

这个记录用来区分:

  • Agent 真正自主完成
  • Agent 靠人类不断纠偏完成

是评估 Agent 能力的关键要素。

通用 Agent 里是:

人类是否补充了信息
是否批准了高风险动作
是否纠正了 Agent 判断
是否手动处理了失败
是否覆盖了 Agent 决策

提炼

对于论文中提到的 Harness 职责,可以提炼成下面 11 个模块:

T: Task Contract          任务契约
C: Context                上下文
T: Tools                  工具
M: Memory                 记忆
S: State                  状态
F: Failure Attribution    失败归因
V: Verification           验证
P: Permission / Policy    权限与策略
O: Observability          可观测性
E: Entropy Audit          熵审计
I: Intervention           人工介入

完整结构:

Agent Harness = Ta + C + To + M + S + F + V + P + O + E + I

每做一个 Agent,都问这 11 个问题:

1. Task:
   任务目标和成功标准是什么?

2. Context:
   Agent 需要看什么?不能看什么?上下文来源如何记录?

3. Tools:
   Agent 能调用哪些工具?参数如何校验?失败如何处理?

4. Memory:
   Agent 在执行时应该知道的记忆是哪些?

5. State:
   任务状态如何保存?能不能暂停、恢复、取消?

6. Attribution:
   失败的原因是什么?

7. Verification:
   凭什么证明任务完成?证据是什么?

8. Permission
   哪些动作低风险?哪些需要审批?哪些禁止?

9. Observability:
   如何追踪模型调用、工具调用、上下文、成本和错误?

10. Entropy:
    Agent 是否制造长期混乱、副作用、错误记忆或脏数据?

11. Intervention:
    人类何时介入?介入是否被记录?下次能否减少介入?

总结

Harness 最早不是由 AI 圈提出,而是软件测试里的 test harness;它最初用于隔离、驱动和验证软件模块。

后来 AI 评测领域把它扩展为 evaluation harness,用于标准化评测模型。

再后来 coding agent 需要工具、状态、权限、反馈、测试和可观测性,于是 harness 被扩展为模型外部的运行控制层。

OpenAI 的 Codex 实践把 “Harness Engineering” 作为方法论推到台前。

arXiv 的论文是对 foundation-model software agents 的 runtime substrate 进行形式化。

从 arXiv 论文中可以抽取出一套工程认知:

AI Harness Engineering 要做的不是“写一个 Agent”,
而是构建 Agent 的运行时底座:

任务接口
上下文管理
工具注册
项目记忆
任务状态
可观测性
失败归因
验证协议
权限边界
维护熵审计
人工介入记录