论文精读

精读:Co-Evolving Harnesses and Models —— 同一份专家轨迹,换个脚手架符号就反过来

在为弱模型进化出的 agent 脚手架上做专家轨迹模仿,七项任务全部退化、平均 −14.9 分;论文把病因定位为模型–脚手架适配被打破,并改用只重写失败那一轮的 on-policy 单轮纠正把两条杠杆重新拼回去

论文: Co-Evolving Harnesses and Models: On-Policy Correction Helps Weaker Models Catch Up Where Imitation Fails
作者: Zhou Yu, Bin Bi, Shiva Kumar Pentyala, Shubham Mehrotra, Sougata Chaudhuri, Shilpa Bhagavath, Zeyuan Chen, Ran Xu, Phil Mui, James Zhu, Sitaram Asur
arXiv: 2609.09134
Model-Harness Fit Agent Harness On-Policy Correction LoRA-SFT Distillation GEPA cs.AI

1 论文概览

一句话总结:在为弱模型进化出来的 agent 脚手架(harness)上,让弱模型模仿更强专家的完整成功轨迹,七项企业任务全部退化 4–30 分;论文把病因定位为「模型–脚手架适配」(model–harness fit)被打破,并改用「只重写失败那一轮」的 on-policy 纠正把两条杠杆重新拼回去。

核心问题:一个 agent 的能力由两样东西共同决定——底层模型的权重,以及包在模型外面的脚手架(系统提示、工具集、执行钩子、上下文管理)。已有工作证明自动搜索脚手架能把小模型顶到接近前沿模型的水平。那么这两条杠杆该怎么合起来用?最自然的配方是「先进化脚手架,再让强专家教弱模型」,而这篇论文发现该配方会把前一步的收益抹掉。

主要贡献

  1. 给出一个可复现的反直觉现象:脚手架进化完成后再用专家完整轨迹做 LoRA-SFT,七项任务无一例外退化,平均 −14.9 分,最差的工资审计掉 −29.9 分。换到未进化的基线脚手架上,同一批专家轨迹、同一套训练配方反而涨 +6.3 分。
  2. 把「教学信号本身有问题」这个解释排除掉。Ablation I 用基线脚手架做对照,Ablation II 换掉学生模型(Qwen3-Coder → Gemma 4)复现同一退化,说明病因在「模仿 × 脚手架进化」的交互项上,而非弱强模型配对或输出风格。
  3. 用六类失败本体给出机制证据:模仿之后失败构成里只有两类明显移动——隐含知识类微降,规划类从 1.1% 蹿到 14.6%,成为一个几乎全新的失败模式。弱模型学会了专家的知识,也学来了专家的规划节奏,却没有执行该节奏的能力。
  4. 提出 on-policy 单轮纠正流水线:从弱模型自己的失败 rollout 出发,定位出错的那一轮,只让专家重写这一轮,前后步骤原样保留。约 500 条训练数据把七项任务全部拉回或超过进化脚手架的基线,规划类失败占比只从 1.1% 动到 1.8%。
  5. 整条流水线由一个 meta 级 MLE agent 端到端驱动,单次训练一小时内跑完,可以叠进脚手架与权重交替演进的循环里。

论文来自 Salesforce AI,11 位作者,通讯作者 Zhou Yu。任务套件、环境与脚手架优化框架沿用 Yang et al. (2026)。

2 方法详解

2.1 两条杠杆与实验骨架

七项企业任务都可客观判分:工资审计、预算审批、库存告警、IoT 异常检测、浏览器自动化(Playwright)、网站管理、代码重整(code refactoring)。

脚手架一侧用 GEPA 式搜索:弱模型当执行器,gemini-3.1-pro-preview 当反思模型,每轮在一个 minibatch 上反思、提出一次脚手架编辑,只有在该 minibatch 上涨分才保留,保留下来的进 Pareto 池。可编辑对象以系统提示为主,提议者也能增删工具与钩子。每任务三个随机种子、$20 预算、单 rollout 600 秒上限,取验证集最高分的候选作为 h∗h^*。

模型一侧用 LoRA-SFT:Qwen/Qwen3-Coder-30B-A3B-Instruct(30B 总参 / 3B 激活),rank 16 或 64 取更优者,2 epoch,学习率 1e-4,bf16,等效 batch 8,序列长度 49,152(若超过 5% 数据被截断则再加一版 98,304)。适配器合并成约 57–61 GB 的稠密检查点,两张 H200 张量并行推理,单次训练一小时内完成。

论文对原环境做了两处改动:需要 MCP 工具时 agent 不得直接改任务数据库;工具调用错误暴露给优化器。它自己提示了这会让部分绝对数值与 Yang et al. (2026) 不可直接比较。

2.2 关键创新点:把纠正粒度压到一轮

模仿臂(SFT-imit.)的做法是常规配方:收集在 h∗h^* 下判分为 1.0 的轨迹,先取 gemini-3.1-pro-preview 专家的,再混进基座模型自己通过的 rollout,转成 Qwen 的对话与工具调用格式直接训。

纠正臂(SFT-corr.)换了起点和粒度:

  • 起点是弱模型自己在 h∗h^* 下的 rollout,不是专家的轨迹。
  • 粒度是单轮。自动失败定位步找出失败 rollout 走错的那一轮,专家只重写这一轮——一句纠正后的策略陈述,加上纠正后的工具调用——前后每一步原样不动。
  • 规模很小:约 500 行,其中约 400 行来自单轮纠正,约 50 行是模型自己通过的 rollout,优先挑「有的 rollout 过、有的不过」的能力边界样本。
  • 质量控制:每个失败轮采样 N=3 个候选纠正,用一个质量裁判取最优。

这套设计的目标函数不是「让弱模型的轨迹像专家」,而是「让弱模型的轨迹分布尽量不动,只把错的那一步换掉」。论文对机制的表述很直接:

imitation successfully transfers the expert’s knowledge, but also transfers the expert’s planning style, which the weaker model cannot follow faithfully after a lightweight LoRA fine-tune.

—— §3.3.3

2.3 与常规做法的区别

常规的强到弱蒸馏把「专家轨迹」当成中性的训练数据,隐含假设是轨迹的价值独立于它将被灌进哪个运行环境。这篇论文给出的反例说明该假设在脚手架被针对性进化过之后就不成立了:脚手架是围绕弱模型的原生规划风格搜出来的,专家轨迹携带的规划风格与它冲突。

论文对基线脚手架为何不受影响给了一句很干净的解释:

that harness was never fit to the model’s native planning in the first place, so there is no planning fit to lose

—— §3.3.3

3 实验结果

3.1 主要指标

Table 1 的七行是全文的骨架。测试集任务成功率(%),三次运行均值:

#模型脚手架工资审计预算库存异常浏览器网站代码重整平均
1Qwen3-Coder-30B-A3B(基座)h0h_013.967.516.70.638.40.067.229.2
2Qwen3-Coder-30B-A3B(基座)h∗h^*81.787.676.789.497.343.370.078.0
3gemini-3.1-pro-previewh0h_097.497.251.7100.088.771.185.084.4
4gemini-3.1-pro-previewh∗h^*97.093.294.4100.0100.085.685.093.6
5Qwen(SFT-imit.)h∗h^*51.977.062.685.281.323.060.963.1
6Qwen(SFT-imit.)h0h_027.869.528.321.136.80.065.035.5
7Qwen(SFT-corr.)h∗h^*81.387.078.991.198.548.972.279.7

三个关键落差:

  • 脚手架进化 29.2 → 78.0,+48.8 分,七项任务全涨。
  • 模仿专家轨迹 78.0 → 63.1,−14.9 分,七项任务全跌,区间 −4.2(异常检测)到 −29.9(工资审计)。跌幅最大的三项是工资审计(−29.9)、网站管理(−20.3)、浏览器自动化(−16.0)。
  • 单轮纠正 78.0 → 79.7,+1.7 分,五项涨(网站 +5.6、库存 +2.2、代码重整 +2.2、异常 +1.7、浏览器 +1.2),两项在噪声内微降(预算 −0.6、工资审计 −0.4)。

Table 1 有个容易读错的地方:第 4 行括号里的变化量是相对第 2 行(弱模型在 h∗h^* 上)算的,得到 +15.6;而正文说的「专家从 84.4 涨到 93.6,+9.2」是第 3 行到第 4 行。两个数都对,基线不同。

3.2 与对照的对比

这篇论文没有外部 SOTA 榜单可比,对照全在内部条件之间。它建立的核心对比是同一批专家轨迹在两个脚手架上的相反效果:

训练配方脚手架平均成功率变化
专家完整轨迹 SFTh0h_0(未进化)29.2 → 35.5(+6.3)
专家完整轨迹 SFTh∗h^*(已进化)78.0 → 63.1(−14.9)
单轮 on-policy 纠正h∗h^*(已进化)78.0 → 79.7(+1.7)

Ablation II 换学生模型做交叉验证:进化脚手架把弱 Gemma 从 46.7% 抬到 55.6%(+8.9),也向上传递给专家(Gemini 在同一脚手架上 71.1% → 81.1%,+10.0);而弱 Gemma 模仿专家轨迹后掉到 41.1%,比它的进化脚手架基线低 14.5 分,比它连脚手架都没进化的默认基线还低 5.6 分。Gemma 本身是推理型模型、原生风格更接近 Gemini 专家,退化依旧发生。

有个容易被忽略的细节让这个负结果更硬:附录 B 写明 LoRA 的 rank 16 与 64 都跑了、报告更优者。也就是说 −14.9 是两个超参里更好的那个,退化不是没调参调出来的。

3.3 消融关键发现

Table 2(脚手架编辑采用率):所有模型都跑在同一个为 Qwen 进化的 h∗h^* 上,统计每条编辑至少被触发一次的 rollout 占比。

脚手架编辑Gemini 专家Qwen 基座Qwen(SFT-imit.)
新建工具99.398.791.2
工具用法示例93.693.589.6
提示内静态强化100.096.491.7
钩子强制拦截99.0100.099.0
环境/API 约定99.198.297.5
领域计算配方94.230.876.1

论文用这张表论证「模仿确实把知识传过去了」:基座只有 30.8% 的 rollout 用到领域计算配方,模仿后升到 76.1%,接近专家的 94.2%。

Table 3(硬失败构成):按失败 rollout 分类,各类占该条件失败总数的百分比。

失败类型基座 h0h_0SFT-imit. h0h_0基座 h∗h^*SFT-imit. h∗h^*SFT-corr. h∗h^*
缺乏知识61.054.4(−6.6)46.244.5(−1.7)43.2(−3.0)
规划缺陷0.911.5(+10.6)1.114.6(+13.5)1.8(+0.7)

论文的读法是:知识轴上模仿有帮助(占比降),规划轴上模仿造出一个新的失败模式(占比从 1.1% 蹿到 14.6%),而单轮纠正把规划轴按在地板上(1.1% → 1.8%),知识轴继续下降(46.2% → 43.2%),总硬失败率 28.9% → 26.8%。

附录 D 的病例把机制讲得比表格清楚。工资审计任务上,进化脚手架给的节奏是「算、验一次、交」,基座模型按这个节奏三次 rollout 全部 1.0,用 14–20 步完成。模仿微调之后,模型算出的部门聚合值是对的,评分器都承认,但它把那一步验证变成了没有出口的循环:同一个视图重发 29 次,提示重读约 20 次,攒了一堆工具错误,78 步里始终没有触发 finish,判 0 分。知识在手上,交不出去。

Gemma 那个病例是另一种坏法:进化脚手架给了「先按状态列筛选、再读筛选后总数」的流程,基座模型照做,把 Approved 评论数答对(真值 346)。模仿后的 Gemma 学会了专家那种简短、早给答案的风格,却没有支撑该风格的能力——它进到评论列表就直接读了未筛选的 351 条总数交差。

4 个人分析

4.1 亮点

负结果做得比正结果扎实。 这篇论文真正的贡献是那个 −14.9,以及围着它搭的三层证据:换脚手架(Ablation I,同样的数据变成 +6.3)、换学生模型(Ablation II,Gemma 掉 14.5)、换分析视角(Table 3 的失败构成移动集中在两类里)。三层都指向同一个交互项。这种把「配方失效」收敛成「某个具体变量的交互效应」的做法,比再报一个涨点方法有用得多。

纠正粒度的设计动机来自诊断,不是来自直觉。 诊断结论是「规划风格被换掉了」,那么处方就该是「保住规划风格、只换错的那一步」。Table 3 里规划类占比 1.1% → 1.8% 是这条因果链的验收指标,不是事后找的解释。约 500 行数据、一小时训练完,成本结构也支持塞进交替演进的循环。

把脚手架当成有状态的资产,而不是提示词模板。 「h∗h^* 是围着弱模型的原生规划风格长出来的」这个视角,意味着脚手架里沉淀了对特定模型行为的假设。换权重就等于换掉了假设的一半。这个观点对任何在生产里把提示工程和微调两条流水线一起维护的团队都成立。

4.2 局限性

(一)Table 3 的知识轴结论是占比归一化造出来的,绝对量方向相反。

这是我认为全文最需要修正的一处。Table 3 报的是「占该条件失败总数的百分比」,而模仿把失败池本身撑大了。用 Table 1 的成功率反推:h∗h^* 下失败池从 22.0% 涨到 36.9%,放大 1.676 倍。

这个反推站得住脚,因为论文给了一对可校准的数据:base h∗h^* 与 SFT-corr h∗h^* 的总硬失败率是 28.9% 与 26.8%,比值 0.927;同两条件在 Table 1 上的 (100 − 成功率) 是 22.0 与 20.3,比值 0.923。两者吻合到 0.5% 以内,说明失败池规模与 (100 − 成功率) 成正比。

按这个比例把 SFT-imit 的失败池放大 1.676 倍后重算绝对量(下表为本专栏推算,非论文数据):

量基座 h∗h^*SFT-imit. h∗h^*变化
硬失败率(总)28.9%≈48.4%×1.68
缺乏知识(占全部 rollout)≈13.4%≈21.6%×1.61(+61%)
规划缺陷(占全部 rollout)≈0.3%≈7.1%×22.2

也就是说,「缺乏知识」类失败在绝对数量上涨了六成,占比之所以掉了 1.7 点,只是因为规划类涨得更快、把分母抬高了。论文写「知识轴上模仿有帮助」,绝对量给出的是反向结论。

把同样的重算套到 h0h_0 这个对照上,结论完全不同:h0h_0 下失败池是缩小的(0.911 倍),知识类占比又从 61.0% 降到 54.4%,两项相乘得到绝对量下降 19%。所以模仿在基线脚手架上的知识改善是真的,在进化脚手架上不是。

论文「模仿传递了知识」这个判断本身仍然成立,但支撑它的证据只有 Table 2 的采用率(30.8% → 76.1%),Table 3 撑不起这句话。这个区别不小:一个说「知识学会了、只是规划坏了」,另一个说「规划坏得太厉害,连知识类失败都跟着变多了」。后者对「轻量 LoRA 能不能在一个适配器里装下知识和风格」这个问题更悲观。

(二)Table 2 与摘要的措辞对不上。 摘要说模仿让弱模型「makes greater use of the harness scaffold」。查 Table 2 的六条编辑,只有领域计算配方一条上升(30.8 → 76.1),另外五条全部下降:新建工具 98.7 → 91.2、静态强化 96.4 → 91.7、工具用法示例 93.5 → 89.6、钩子拦截 100.0 → 99.0、环境约定 98.2 → 97.5。准确的说法是「模仿显著提高了一条编辑的采用率,轻微降低了其余五条」,而不是整体用得更多。

(三)「专家把脚手架用得更好」这个前提有同源混淆。 脚手架搜索的反思模型是 gemini-3.1-pro-preview,专家模型也是 gemini-3.1-pro-preview。h∗h^* 里的每一条编辑都由这个模型撰写。论文把「专家在 h∗h^* 上表现更好」读作「存在模型侧的富余空间」,但一个由 Gemini 写出来的脚手架天然贴合 Gemini 自己的表述约定与流程假设,这条推论至少有一部分是自我适配。要拆开这个混淆,需要一个由第三个模型担任反思模型的对照臂,全文没有。

(四)+9.2 这个平均值由单项任务撑起来。 把第 3 行到第 4 行逐项拆开:库存告警 +42.7、网站管理 +14.5、浏览器自动化 +11.3、异常检测 0.0、代码重整 0.0、工资审计 −0.4、预算审批 −4.0。库存一项就贡献了平均值的 66.6%,库存加网站两项贡献 89.2%。七项里两项变差、两项持平。「专家把进化脚手架用得更好」在多数任务上并不成立。

(五)「脚手架已饱和」这个解释与自己的表冲突。 §3.4 把纠正臂在两项任务上的微降解释为「the harness has likely already saturated」,指预算审批(−0.6)与工资审计(−0.4)。但把第 2 行按绝对分数排序:浏览器自动化 97.3、异常检测 89.4、预算审批 87.6、工资审计 81.7。分数最高、最该饱和的浏览器自动化涨了 +1.2,掉下去的两项分数反而更低。这两处微降都在 SEM 范围内、论文称其为噪声是合理的,但用「饱和」解释哪两项会掉,与表里的排序对不上。

(六)真正能证伪「适配假说」的那条臂缺席。 如果病因确实是模型权重变了、脚手架没跟着变,那么最直接的检验是:拿模仿微调后的模型重新跑一遍脚手架进化,看退化能否被收回。这条实验不在论文里。作者把它写进了未来工作:

We also want to make harness evolution aware that the model will later be fine-tuned, so the two arms can be jointly optimized rather than run in sequence.

—— §4

缺了这条臂,「适配被打破」与「轻量 LoRA 装不下专家的规划能力」这两种解释无法分离。附录 D 那个 78 步不收敛的病例其实更像后者:模型不是在执行一套不匹配的计划,是根本没有终止条件。

(七)作者自陈的收益上限。 论文对纠正臂的收益幅度是坦诚的:

It does not fully close the gap between the weaker and the expert model, likely due to a limit of the lightweight LoRA approach

—— §3.4

把这句话换成数字:§3.2 认定的模型侧富余空间是 +15.6(78.0 → 93.6),纠正臂拿回 +1.7,占 10.9%。论文自己识别出来的空间,方法收回了约十分之一。

4.3 对大模型领域的影响

两条杠杆的边际收益差了近 30 倍,而论文的叙事把它们摆成平级。 把 Table 1 重新归档成「每条杠杆值多少分」:

杠杆增量
脚手架进化(h0→h∗h_0 → h^*)+48.8
权重微调(在 h0h_0 上)+6.3
权重微调(在 h∗h^* 上)+1.7

脚手架臂是 h∗h^* 上权重臂的 28.7 倍,权重臂只占脚手架臂的 3.5%。两条杠杆的成本都不高——脚手架搜索每任务 $20 预算,LoRA 一小时——但回报差了一个多数量级。标题把这篇论文卖成「co-evolving」的配方,它自己的数字给出的建议是:先把预算压在脚手架上。

更值得警惕的是权重臂的边际收益随脚手架变强而萎缩。 同一套专家轨迹、同一套训练配方,在 h0h_0 上值 +6.3,在 h∗h^* 上只值 +1.7,缩了 3.71 倍。这两个数放在一起读,说明脚手架进化不只是「先涨一波」,它还把微调本来能拿到的那部分空间提前吃掉了:脚手架能修的失败(缺失工具、没说清的约定、没沉淀到脚手架里的领域规则)与轻量微调能修的失败高度重叠,谁先做谁收。这对「先脚手架、后权重」这个顺序是个不利证据——顺序反过来(先微调、再围着新权重进化脚手架)在论文里没被测过,而它恰好是把两条杠杆的重叠部分留给更便宜那条的排法。

「模型–脚手架适配」给提示工程的可迁移性划了一条线。 一个针对特定模型搜出来的系统提示,不是一份可以随权重更新原地继承的资产。任何改动权重的操作——继续预训练、领域微调、换一个同族的新版本——都在动这份资产的前提。生产系统里「换个更强的模型、提示照旧」这种升级路径,按这篇论文的机制是有风险的。

它给本专栏追了七期的那条主线补了一个此前完全没进视野的变量。 前七期都在优化监督信号本身——打在什么粒度、从哪来、要不要教师、要多少数据、怎么和 RL 组合。这一期说的是:同一份信号,灌进不同的运行环境,符号会反过来。信号的价值不是信号的属性。

5 实践启示

5.1 可以借鉴的技术

单轮定位纠正,替代整条轨迹重放。 这是全文最可直接搬用的一件事,而且不依赖论文的具体任务。做法是三步:跑出学生自己的失败轨迹 → 自动定位失败的那一轮 → 只让强模型重写这一轮,前后原样保留。约 400 条纠正样本就够,每轮采 N=3 个候选交给质量裁判挑。它对任何「已经有一套调好的提示/工具配置,想再微调模型」的管线都适用。

把「脚手架编辑采用率」做成常规监控项。 Table 2 那种统计——每条脚手架编辑在多少比例的 rollout 里至少被触发一次——在微调前后各跑一次,能把「模型还在用我搭的脚手架吗」变成可观测的数字。它在这篇论文里精确暴露了「知识配方用得更多、其他五条用得更少」这个分裂。实现成本只是对轨迹做一次模式匹配扫描。

失败分类要占比和绝对量两列并报。 上面第(一)条局限性的根源就是只报了占比。任何按「占失败总数的百分比」呈现的失败构成表,在总失败率变动时都会误导。论文附录 C 说明它两种都算了(“as a share of that condition’s failures and as a share of all rollouts”),只是 Table 3 只印了前一种。自己的实验里两列并排放,成本为零。

微调前后对比步数分布,而不只是成功率。 附录 D 那个病例的特征是 14–20 步变成 78 步不终止。成功率掉 29.9 分只告诉你坏了,步数分布告诉你坏在「不收敛」而不是「答错」。把 rollout 长度的分位数、重复动作次数、finish 触发率纳入评测面板,比单看分数早一层发现问题。

5.2 潜在应用场景

企业内部 agent 的成本优化。 论文的设定就是这个:七项任务上,一个 30B/3B 激活的开源模型配一个进化过的脚手架拿到 78.0%,专家模型 93.6%。对能容忍这个差距的任务,替换掉前沿模型的调用是实打实的省钱。要注意的是别把 +1.7 那一步当成主要收益来源。

同族模型版本升级的回归测试。 按「适配」这个机制,把底座从某个版本换到下一个版本,等于在没改脚手架的情况下改了权重。这篇论文给出的检查清单是:跑一遍编辑采用率扫描、看规划类失败占比有没有跳、看 rollout 步数分布有没有拉长。三项都是低成本的前置门禁。

多模型路由系统的脚手架归属。 如果一个系统按请求把流量分给不同规模的模型,那么「一份脚手架服务所有档位」按本文机制是有代价的——h∗h^* 是围着某一个模型的原生规划风格长出来的。更稳的做法是按档位维护各自的脚手架,或者在共享脚手架上明确验证每个档位的编辑采用率。

蒸馏数据的准入检查。 拿到一批更强模型的轨迹准备做 SFT 之前,先确认目标模型将在哪套脚手架下运行,以及那套脚手架是不是针对目标模型调过的。若是,这批轨迹的净效应有可能是负的,论文给的幅度是 4 到 30 分。基线脚手架下同一批数据是正收益,这个差别决定了要不要改用单轮纠正的路子。

参考文献

Yu, Z., Bi, B., Pentyala, S. K., Mehrotra, S., Chaudhuri, S., Bhagavath, S., Chen, Z., Xu, R., Mui, P., Zhu, J., & Asur, S. (2026). Co-Evolving Harnesses and Models: On-Policy Correction Helps Weaker Models Catch Up Where Imitation Fails. arXiv:2609.09134 [cs.AI]. Salesforce AI.

Yang et al. (2026). 论文沿用其企业 agent 任务套件、环境与脚手架优化框架。

Agrawal, L. A., Tan, S., Soylu, D., Ziems, N., Khare, R., Opsahl-Ong, K., Singhvi, A., et al. (2025). GEPA: Reflective Prompt Evolution Can Outperform Reinforcement Learning. arXiv:2507.19457.

Hu, E. J., Shen, Y., Wallis, P., Allen-Zhu, Z., Li, Y., Wang, S., Wang, L., & Chen, W. (2022). LoRA: Low-Rank Adaptation of Large Language Models. ICLR.

相关精读

本专栏连续四十三期追问同一个问题:训练信号这一侧还能榨出多少东西。