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 的三大挑战

  1. 异构动作空间 — 可编辑的 Harness 组件形式多样(代码、配置、prompt、工具)
  2. 海量 traces — 数百万 token 的执行轨迹,难以提取可操作信号
  3. 效果归因难 — 改了 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 种独立文件级组件:

  1. System Prompt
  2. Tool Description
  3. Tool Implementation
  4. Middleware
  5. Skill
  6. Sub-agent Config
  7. 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 层
  • 人工引入的行为先验成了进化的僵化之源

最终成功的关键改动

  1. 评测时每题跑两次,通过 partial-pass 的 diff 定位最精准的诊断信号
  2. 删掉所有行为指导,只保留证据驱动过程要求和回滚规则
  3. 修改分布变健康:middleware 37% + tool 48% + prompt 10%

消融实验的关键发现

逐一单独放回初始 Harness 的消融结果:

  • Memory 单独恢复全局增幅的 95% 以上
  • Tool 在中等难度题目上提升显著
  • System Prompt 单独迁移反而导致性能下降

Prompt 的语义是策略性的(你应该这样做),而 Memory 和 Tool 的语义是事实性的(这里有一段可复用代码)。事实比策略迁移性好。

这也解释了为什么人类试图通过注入方法论来指导 Evolve Agent 时会遭遇失败:开发者习惯于教策略,而模型更擅长学事实。

意义

  1. Harness 可以自动进化且效果超越人工设计 — 10 轮迭代就从 69.7% 到 77.0%
  2. 三层可观测性是关键 — 没有可观测性就是盲目的 trial-and-error
  3. 可迁移性验证 — 进化的不是 benchmark-specific hack,而是通用工程知识
  4. 工具/middleware > prompt — 优化 Harness 的投入应该放在结构层而非文本层
  5. 不要教策略,沉淀事实 — Memory 的事实性知识比 prompt 的策略性指导更有效

机器之心报道补充:2026-05-20