不改模型权重改外壳:Harness-R1 训出 9B 工程师,靠真实成败给 agent 提 9.3 个点

Harness-R1: Learning to Edit Executable Runtime Harnesses from Agent Failure Trajectories

Shuai Shao, Kangning Zhang, Qingyao Li, Shijian Wang, Hao Wang, Wenxiang Jiao, Yuan Lu, Yi Guo, Weiwen Liu, Weinan Zhang

cs.AI

2026-08-03

训出一个 9B「外壳工程师」读 agent 失败轨迹、写可执行补丁套住冻结的目标模型,把 Qwen3.5-9B 在 WebShop/ALFWorld/DBBench 的平均成功率从 44.3% 提到 53.6%。

这篇在解决什么

LLM agent 上线后会不断积累交互轨迹,但行为基本是定死的。要变好通常两条路:改模型权重,或者改套在模型外面的那层「harness」,也就是组装上下文、调工具、校验动作、出错时恢复的脚手架代码。改权重贵,改 harness 看着便宜,却一直没个靠谱的自动化办法。

现有的改法要么是固定规则(比如让 agent 自我反思的 Self-Refine),要么直接拿一个强模型当编辑器。作者先把这两条都证伪了:在 WebShop、ALFWorld、DBBench 三个 agent benchmark 上,固定的 Self-Refine 规则把奖励全面拉低;让 GLM-5.2、GPT-5.5 这类前沿模型来编辑外壳,它们能把补丁写得语法正确、看着合理,可因为从不把目标 agent 重跑一遍,根本不知道补丁到底有没有把成功率提上去。换句话说,编辑器本身从来没人拿真实结果训练过。

方法

Harness-R1 的核心想法是把「编辑 harness」变成一个可学习、按真实成败优化的能力。它不动目标 agent 的权重,而是单独训一个 9B 的「harness 工程师」模型。

流程分两步。先冷启动:用 GPT-5.5 当老师,针对一批目标 agent 失败的轨迹生成候选补丁,再真的把补丁装上去、把冻结的目标 agent 在整批任务上重跑,只留下能跑通、没让别的任务退步的那条。这样筛出 877 条样本(WebShop 381、ALFWorld 248、DBBench 248)做监督微调,给工程师一个「什么是合法补丁」的先验。

再上在线强化学习(GRPO)。对每个失败批次,工程师采样 K=8 个候选补丁,逐个解析、装上、把同一个冻结目标在整批任务上重跑,用补丁前后整批平均奖励的差值当奖励;解析不出来、没动静、跑不完的候选一律给 0。8 个候选在批内做 group-relative 归一化得到 advantage,只更新工程师参数,目标 agent 始终冻结。奖励在同批计算、不留跨批记忆,也不针对单条轨迹反复打磨。

补丁本身是套在 agent 主循环上的可执行 overlay,挂在四个生命周期点:回合开始(oninit)注入开场提示和工具说明、决策前(makeprehint)塞状态相关的提示、动作执行前(onbeforeaction)挡住或改写明显有问题的动作、收到环境反馈后(onpoststep)触发恢复。这套接口让工程师能在不碰权重的前提下,从上下文、动作、恢复三个层面干预 agent 行为。

结果

主表,目标 agent = Qwen3.5-9B:

方法ALFWorldWebShop 成功率DBBench 成功率平均
原始 harness40.631.261.044.3
ReAct43.437.461.747.5
Self-Refine39.029.057.341.8
GLM-5.2 当前沿编辑器45.036.065.348.8
只做监督微调的工程师39.438.661.346.4
Harness-R153.242.265.353.6
目标 agent 微调后 + Harness-R184.043.065.764.2

几个关键读数。Harness-R1 把原始目标平均成功率从 44.3% 拉到 53.6%,三个 benchmark 全涨;比只做监督微调的工程师高 7.1 个点,说明涨是在线 RL 的功劳,而不是单纯模仿老师;比拿来当编辑器的前沿模型 GLM-5.2(48.8%)还高。即使先把目标 agent 自己微调强(平均 59.2%),再为这个更强的目标重训一个工程师,还能再提 5.0 个点到 64.2%。

泛化是这篇更扎实的部分。换 20 个没见过的目标配置(不同模型、不同尺寸),基准平均涨 7.06 个点,每个目标的平均都为正,63 个「目标×benchmark」组合里 56 个改善、3 个小幅退步(都 ≤2.0 点)。换成留出任务泛化:工程师只看同一批 10 条失败、生成一个补丁套到其余 1270 个任务上,Harness-R1 仍 +8.9±1.5 个点,而 Qwen3.5-397B 和 DeepSeek-V4-Pro 当编辑器分别是 −4.3±2.5 和 −0.4±3.6。把少量失败变成广泛管用的改法,不是模型大就行。

消融把四个生命周期点逐个拆掉:去掉动作执行前的干预掉 3.9 个点,去掉反馈后的恢复掉 3.3 个点,而去掉回合开始或决策前的改动只掉 0.9 和 0.6 个点。哪个位置最关键随环境变:WebShop 上动作前的干预最重要,ALFWorld 上反馈后的恢复最重要。

为什么重要

对做 agent 的人来说,这条路比继续微调模型便宜得多,也现实得多。目标模型可以冻结,改的是外面那层脚手架,不需要动权重、不用重训整个模型,一个 9B 的小模型就能当工程师;而且因为它靠的是真实结果而非模型规模,反而比 GLM-5.2 这种大模型当编辑器更准。同一套训练配方能跨模型族迁移,意味着给一个新 agent 装外壳工程师的成本是可控的。

但别把它当成银弹。它是给一个固定目标 agent 配一个工程师,样本来自那个具体 agent 的失败;换 agent 就得重新挖失败、重新训。

局限与存疑

作者自己点了几条。一是只研究了从原始目标到微调目标这一轮适配,真正的工程师和目标 agent 多轮共同进化还没做。二是奖励只来自同批任务的结果,信号绑死在挖失败用的那批任务上,没把「在没见过的任务上别退步」写进奖励。三是没把推理开销算进去,有些补丁可能是用更多运行时换来的收益。

读完仍存疑的地方:三个 benchmark 都偏封闭、可控(购物、模拟家务、跑 SQL),补丁挂的四个 hook 也都假设确定性强的环境;到了开放网页、长程多轮、不确定性大的真实场景,「重跑同一批任务拿干净奖励」这个前提能不能成立,论文没给证据。另外 877 条冷启动样本靠 GPT-5.5 老师筛选,老师本身的偏见会进到工程师里。

术语

原文与代码

社区讨论

相关论文

全部论文解读