Agentic Harness Engineering: Observability-Driven Automatic Evolution
来源:https://arxiv.org/abs/2604.25850 作者:Shichun Liu 等 发表:2026-04-28(v3: 04-30) 收录时间:2026-05-18
概述
实现 Harness 自动进化的闭环系统。核心思路:通过三层可观测性,让 Harness 的每次编辑都变成可证伪的契约,从而自动化迭代而非盲目试错。
自动化 Harness 的三大挑战
- 异构动作空间 — 可编辑的 Harness 组件形式多样(代码、配置、prompt、工具)
- 海量 traces — 数百万 token 的执行轨迹,难以提取可操作信号
- 效果归因难 — 改了 Harness 某处,但效果变化难以归因到具体改动
三层可观测性(核心创新)
1. Component Observability(组件可观测性)
- 每个可编辑的 Harness 组件都有文件级表示
- 动作空间显式化、可回滚
- 类似 git 管理代码,但管理的是 Harness 组件
2. Experience Observability(经验可观测性)
- 将数百万原始 trace token 蒸馏为分层、可下钻的证据语料
- Agent 可以实际消费的格式
- 不是原始日志,是结构化经验
3. Decision Observability(决策可观测性)
- 每次编辑配一个自声明预测("我改了这个,预期会提升 X")
- 下一轮用任务级结果验证预测
- 每次编辑变成可证伪契约 → 避免 trial-and-error
实验结果
Terminal-Bench 2
| Harness | pass@1 | |---------|--------| | Seed(初始) | 69.7% | | Codex-CLI(人工设计) | 71.9% | | ACE(自进化基线) | — | | TF-GRPO(自进化基线) | — | | AHE(10轮迭代后) | 77.0% |
超越人工设计和所有自进化基线。
跨基准迁移
- SWE-bench-verified:冻结的 harness(不重新进化)以 12% 更少的 token 达到同等总成功率
- Terminal-Bench 2 跨模型族:在 3 个不同模型族上获得 +5.1 到 +10.1 pp 的提升
关键发现:进化的组件编码的是通用工程经验,不是基准特定的调参。
消融实验
- 收益来源:工具、middleware、长期记忆 — 而非 system prompt
- 含义:事实性的 Harness 结构可以迁移,但 prose 级别的策略不行
三个角色的分工
| 角色 | 职责 | |------|------| | Coding Agent | 运行测试,基于 NexAU 框架 | | Agent Debugger | 把 10M token 的 raw trace 提炼成 ~10K token 的结构化概览报告 | | Evolve Agent | 基于反馈修改 Harness 组件,必须附带变更清单 |
Harness 的七种正交组件
NexAU 框架将 Harness 拆为 7 种独立文件级组件:
- System Prompt
- Tool Description
- Tool Implementation
- Middleware
- Skill
- Sub-agent Config
- Long-term Memory
每个组件独立文件、明确挂载点、彼此解耦。从"零先验"极简形态起步(只有 run_shell_command 一个工具),确保每次新增组件都能干净归因。
Agent Debugger 的分层提炼流水线
- 底层:完整记录所有原始轨迹
- 中层:Cleaner 去除重复的工具输出
- 上层:QA Sub-agent 针对每题多次 rollout 自动切换提问策略
- 最终:所有单题分析汇聚成 ~10K Token 的概览报告
渐进式披露设计:Evolve Agent 默认读概览,需要时可下钻到单题细节和原始轨迹。
Evolve Agent 的克制设计
- 只能修改 workspace 内的 Harness 组件文件(评测框架、LLM 配置、原始 System Prompt 均为只读)
- 每次修改必须附带变更清单:失败证据 → 推断根因 → 针对性修改方案 → 自声明预测(预计修复哪些、可能破坏哪些)
- 预测正确的修改保留,预测错误的自主回滚
- 每次 Harness 变动都是一条可被下一轮实验证伪的假说
踩坑经验(论文博客补充)
过小题集导致 hack
- 30 题 hard 难度 + 10 轮演化 → 通过数 16-20 反复震荡
- Evolve Agent 对特定任务写针对性 hack(如 Golden Gate 的 splice-offset 检测)
- 解法:扩到 89 题全集
人类先验成为进化僵化之源
- 在 System Prompt 中加入方法论指导(Safety/Creativity/Generality 原则 + Middleware > Tool Desc > Skill > Prompt 约束层级)
- 结果 overfit 缓解但 75.3% 触顶,78% 修改落在 Middleware 层
- 人工引入的行为先验成了进化的僵化之源
最终成功的关键改动
- 评测时每题跑两次,通过 partial-pass 的 diff 定位最精准的诊断信号
- 删掉所有行为指导,只保留证据驱动过程要求和回滚规则
- 修改分布变健康:middleware 37% + tool 48% + prompt 10%
消融实验的关键发现
逐一单独放回初始 Harness 的消融结果:
- Memory 单独恢复全局增幅的 95% 以上
- Tool 在中等难度题目上提升显著
- System Prompt 单独迁移反而导致性能下降
Prompt 的语义是策略性的(你应该这样做),而 Memory 和 Tool 的语义是事实性的(这里有一段可复用代码)。事实比策略迁移性好。
这也解释了为什么人类试图通过注入方法论来指导 Evolve Agent 时会遭遇失败:开发者习惯于教策略,而模型更擅长学事实。
意义
- Harness 可以自动进化且效果超越人工设计 — 10 轮迭代就从 69.7% 到 77.0%
- 三层可观测性是关键 — 没有可观测性就是盲目的 trial-and-error
- 可迁移性验证 — 进化的不是 benchmark-specific hack,而是通用工程知识
- 工具/middleware > prompt — 优化 Harness 的投入应该放在结构层而非文本层
- 不要教策略,沉淀事实 — Memory 的事实性知识比 prompt 的策略性指导更有效
机器之心报道补充:2026-05-20