复旦团队可观测闭环十轮改 harness,Terminal-Bench 2 从 69.7% 升到 77.0%

Agentic Harness Engineering: Observability-Driven Automatic Evolution of Coding-Agent Harnesses

Jiahang Lin, Shichun Liu, Chengjun Pan, Lizhi Lin, Shihan Dou, Zhiheng Xi, Xuanjing Huang, Hang Yan, Zhenhua Han, Tao Gui, Yu-Gang Jiang

cs.CL, cs.SE

2026-04-29

复旦、北大与上海 Qiji Zhifeng 把 coding-agent 的 harness 做成可观测闭环,十轮把 Terminal-Bench 2 的 pass@1 从 69.7% 做到 77.0%,超过人工 Codex(71.9%);冻结后还能迁到 SWE-bench 并跨家族模型。

这篇在解决什么

Coding agent 在长程修仓库、跑终端工作流上的成绩,并不只取决于底座模型。真正卡住上限的,经常是外面那层 harness:system prompt、工具、middleware、技能、子 agent、长期记忆。底座换一代,这层往往要重做。眼下这活靠人翻轨迹、改配置,模型迭代比人快,缺口会越拉越大。

自动化也卡着。ACE 一类方法蒸馏一份给模型读的 playbook,Training-Free GRPO 强化成功工具序列,两者都不打开周围脚手架。整套组件一起动会撞上两件事:原始轨迹几百万 token,有用信号埋在里面;组件互相耦合,改一处容易把别处弄坏,归因也说不清。

方法

AHE 把瓶颈定在可观测性,不指望换一个更强的进化 agent。三个支柱配成闭环,底座模型全程冻结,只改显式 harness。

组件可观测落在 NexAU 上。七类可编辑件做成工作区里的文件:system prompt、工具描述、工具实现、middleware、skill、子 agent 配置、长期记忆。失败模式尽量映射到单一组件;每次逻辑改动是一次 git commit,能按文件回滚。种子 harness 故意极简,只有一条 shell 工具,没有 middleware、skill、子 agent,避免种子已经针对 benchmark 做过拟合,后面每加一个组件都得靠 rollout 成绩说话。

经验可观测交给 Agent Debugger。原始 rollout 大约千万 token 量级,debugger 把轨迹当成可导航的文件系统,写成按任务的根因报告,再汇总成一份 benchmark 级总览。进化 agent 先读总览,需要核对时再下钻原始 trace,用分层披露压 token。

决策可观测落在 Evolve Agent 的 change manifest 上。每条改动写明证据、根因、预期修好哪些任务、可能伤哪些任务。下一轮用任务级 delta 验收,对不上就按文件回滚。进化 agent 只能改 harness 工作区,不能关 verifier、换模型、加推理预算,避免走捷径把增益算到换模型头上。

三角色共用同一个底座 GPT-5.4 high,把增益钉在 harness 上。外层循环:rollout、清洗、验收上一轮并回滚、蒸馏证据、编辑、commit。每任务至少两条 rollout,好算 pass-rate,部分通过的题也能拿来对照诊断。

结果

进化目标是 Terminal-Bench 2 全量 89 题(easy 4、medium 55、hard 30),每题超时放到 1 小时,十轮大约 32 小时。

方法全体EasyMediumHard
OpenCode47.2%75.0%52.7%33.3%
Terminus-262.9%75.0%74.5%40.0%
Codex71.9%75.0%80.0%56.7%
NexAU0 种子69.7%87.5%78.2%51.7%
ACE68.9%91.7%78.2%48.9%
TF-GRPO72.3%100.0%79.4%55.6%
AHE77.0%100.0%88.2%53.3%

Hard 档 AHE 略低于 Codex。单独把 AHE 的长期记忆塞进种子,Hard 能到 63.3%,已经超过 Codex。增益主要不在 prompt:只换 system prompt 掉到 67.4%;只换 memory、tool、middleware 分别到 75.3%、73.0%、71.9%。三个正向单件增益加起来 +11.1 个点,完整 AHE 只有 +7.3。memory、middleware 和 system prompt 都在推同一类收尾式核对,叠在一起会在长程预算里浪费回合。进化目标被 55 道 Medium 主导,循环会吐回一部分 Hard 上的 memory 收益。

冻结 harness、不再进化,迁到 SWE-bench-verified 500 题:总体 75.6%,种子 75.2%,token 比种子少 12%(461k 对 526k)。ACE、TF-GRPO 总体低于种子,还多花 11% 到 29% token,Terminal-Bench 上蒸出来的文案到另一类任务上只加成本。跨家族底座都是正向:deepseek-v4-flash 从 51.7% 到 61.8%(+10.1),qwen-3.6-plus 从 56.2% 到 62.5%(+6.3),gemini-3.1-flash-lite-preview 从 36.5% 到 41.6%(+5.1)。同家族 GPT-5.4 的 medium 和 xhigh 都只有 +2.3,进化时的步数预算和超时是按 high 档拟合的,xhigh 更多 trial 超时,按官方口径算失败。

自归因方面,修对任务的 precision 33.7%、recall 51.4%,大约是随机基线的 5 倍;回归预测 precision 11.8%、recall 11.1%,只比随机高约 2 倍。环能解释为什么该修,几乎看不见下一轮会弄坏谁。

为什么重要

给做 coding agent 产品的人一个清楚信号:底座不动,把工具、middleware、记忆做成可回滚文件,再用轨迹证据驱动改动,比继续堆 prompt 更划算。ACE、TF-GRPO 只动文案层,在 Terminal-Bench 2 上几乎没超过种子,迁到 SWE-bench 还倒退。

这是渐进工程,不是新模型。适合已经有可复现评测、愿意把 harness 拆成文件的团队。跨模型增益在离饱和更远的底座上更大,弱模型更吃这套写进工具和记忆里的协调结构。SWE-bench 上总体只多 0.4 个点,真正带得走的是 token 下降和 django、sphinx-doc 这类多步改-验循环。

局限与存疑

作者写了三条。评测只覆盖 Terminal-Bench 2 进化加 SWE-bench-verified 探测,更广语言、仓库级部署、人在环工作流没测。步数预算和超时绑在 GPT-5.4 high 上,同家族非单调增益把可迁移性和工作点耦合搅在一起。治理只限制工作区编辑,长程清理和防误用还不完整,论文把它定位成受控研究原型。

读下来还有两处要打折。全体 89 题、Hard 只有 30 题,单件消融里 Easy 只有 4 题,百分比会抖。进化目标被 Medium 主导,Hard 上 memory-only 比完整 AHE 高 10 个点,当前循环在为 Medium 做权衡。回归几乎看不见,进化曲线上的非单调台阶就是这个病。下一步如果只加一个能力,应该是回归预见,不是再堆组件。

术语

原文与代码

社区讨论

相关论文

全部论文解读