精读:Harness-S——把脚手架的执行收益蒸进策略参数
harness 演化实测存在局部性、互补性、非平稳性,万能 harness 不存在;Harness-S 在策略对基础 harness 全失败的任务上用兄弟 harness 定向重采、救援组整组替换零信号的失败组进 GRPO,撤走辅助脚手架后分数仍在——9B 在 AppWorld 72.52 对 GRPO 64.89,DBBench 路由版 78.00 反超三个前沿模型,多花 18.44% rollout 买 7.89 分。
1 论文概览
一句话总结:上海交大与小红书的团队把 agent 的执行脚手架(harness)从「要优化成什么样」变成「训练时从哪里借执行支持」——先实证测出 harness 演化存在局部性、互补性、非平稳性三条性质,据此不追求万能 harness,而是在策略对基础 harness 全部采样失败的任务上,让同一个策略换到兄弟 harness 下重新采样、用这批带组内对比的轨迹替换掉零信号的失败组去做 GRPO,训练结束后策略回到原 harness 执行,涨的分数还在,且再开路由还能涨(Qwen3.5-9B 在 AppWorld 上 72.52 对 GRPO 的 64.89,DBBench 上路由版 78.00 反超三个前沿模型参考线)。
核心问题:一个 agent 的行为由模型策略与 harness 共同决定——harness 管着 prompt、工具接口、上下文与记忆机制、执行规则。改 harness 能修任务,但修出来的收益绑在 harness 上;改策略,策略又受制于当下 harness 给它的信息与行动通道。两条路合起来演化(harness 与策略交替更新)成本高、harness 难复用,收益还未必能在策略回到基础 harness 时幸存。论文要回答的是:harness 提供的执行支持,能不能被蒸进策略参数本身——辅助脚手架撤走之后,模型在原始 harness 下执行,学到的行为是否还在。
“Harness evolution from a common base exhibits Locality, Complementarity, and Nonstationarity: variants repair different failures, and their utility changes as the policy learns.” —— 原文 Abstract
主要贡献:
- 三条性质的系统实证。在 Qwen3.5-4B 与 AppWorld 上量出 harness 演化的三张面孔:局部性(一次编辑修一批失败、也引入一批回归)、互补性(兄弟 harness 的 oracle 并集覆盖超过任一单打或同 rollout 预算下的原 harness 重复采样)、非平稳性(harness 的效用随策略学习漂移,变体排名在 checkpoint 间反转)。这是后续全部设计的地基,也是对「找一个最优 harness」这条路线的直接否定。
- 方向性 harness 演化与冻结的兄弟池。从基础 harness 出发按失败根因分支演化,父代选择最大化联合验证覆盖,所有可执行、协议合规的子代全部入池;池在策略训练期间冻结,成一个可复用资产。AppWorld 上三轮演化、每轮 7/8/8 个提案预算,路由池最终 20 个 harness。
- 互补救援训练。每任务在原 harness 下采 K=8 条,全失败才触发救援:路由器选 8 个兄弟 harness、同一策略从任务初始状态各采一条新轨迹,救援组整组替换失败组进 GRPO。全失败组内奖励恒为零、组内归一化后优势全为零——救援做的事是把零信号组换成有信号组。
- 自适应路由器与再锚定。Harness 行为画像(prefer/avoid 两个方向的 When/Behavior 条目)加多 LLM 独立投票做 Top-k 选择;策略每过一个 checkpoint,画像用当前策略的配对验证轨迹刷新一遍,对冲非平稳性。训练完的路由器直接复用于推理(Rank-1 选择),同一执行 rollout 预算下再涨一截。
2 方法详解
架构:三个部件各对一条性质
Harness-S 的设计是性质驱动的:三性质各自否掉一条旧路线,也各自催生一个部件。
局部性否掉「合并修复成万能 harness」——修复之间有不兼容的执行要求,攒在一起互相干扰,于是改为保留分工:方向性演化让每个子代只修一小撮相关根因(每个方向 2-3 个根因、每个根因至少两个失败任务佐证),编辑器(GLM-5.3,温度 0.6,开高强度思考)收到的输入是父代加根因清单,可改的组件覆盖 prompt、技能、上下文、记忆、钩子、工具视图六类。
互补性否掉「多采样凑 pass@k」——同 rollout 预算下,在 8 个兄弟 harness 里各采一条的 oracle 覆盖高于在原 harness 下采 8 条,于是救援就是定向换 harness 采样。
非平稳性否掉「一次画像用到底」——harness 对策略的价值随训练漂移,于是再锚定:checkpoint 处冻结当前策略,在每个兄弟 harness 下重跑验证任务的配对轨迹,画像与验证统计一起刷新(式 11),测试任务结果严格隔离在外。
关键创新点:救援组的记账学
最值得拆的一步在式 5。GRPO 的组内优势是 a = (R − r̄)/max(σ, ε)(式 6):一个任务 8 条轨迹全失败时 R 全零、r̄ = 0、σ = 0,优势仍然全零——全失败组是零梯度组,采多少条都白采。固定混合基线(原 harness 混 Claude Code 或混 Top-4 兄弟)把多样化 harness 均匀撒在所有任务上,失败任务换个 harness 采出来的仍以失败居多,组内还是没对比;已解决任务的组倒是被稀释了。表 9 里两条固定混合基线双双低于纯 GRPO(DSH+Claude Code 46.69、DSH+Top-4 47.84,对 48.98),这个结果从记账结构直接可预测。
“Complementarity gives the policy alternative paths through difficult tasks. Rescue groups containing successes and failures provide reward contrasts absent from the initial attempts.” —— 原文 §3.3
救援只对全失败组触发,等于把额外的 rollout 全部花在「换一个视角就翻盘概率最高」的题上。图 3 的有效组率(组内混着成功与失败的比例)给了机制层的验证:全程 79.38%,对纯 GRPO 的 64.69%、原 harness 救援的 70.94%;有效组占保留训练 token 的份额 80.88% 对 72.68%。
还有一个容易被略过的工程细节:辅助轨迹在兄弟 harness 的上下文里生成,概率比 π_θ(y|c_H)/π_old(y|c_H) 沿用生成时的 harness 上下文计算,且 rollout 后端与训练后端对同一 token 的概率记录有差异,论文加了一个 detach 的修正权重 w = clip(π_old/q, 0, 2)(式 16)。裁剪系数取 η⁻ = 0.20、η⁺ = 0.28,无参考模型 KL 项;harness 注入的指令与工具观察不进 token 损失。
与基线方法的区别
对照组的选取把「收益从哪来」拆得很干净:对纯 GRPO(同优化器、同任务流)隔离救援本身的价值;对原 harness 救援(同触发条件、同分配逻辑,只是救援时不换 harness)隔离「换 harness」与「多采样」;对两条固定混合隔离「定向」与「均匀」;对冻结策略的 Meta-Harness 隔离「策略学习」与「脚手架优化」;对 WHALE(拒绝采样微调)与 HarnessForge(分支专属策略)这类联合演化基线,隔离「冻结池加共享策略」与「交替更新」。全表在原 harness H₀ 下评测——辅助支持必须撤走之后验收,这是全文口径上最硬的一条。
3 实验结果
主要指标
Qwen3.5-4B/9B,AppWorld、SWE-Gym、DBBench 三个基准(训练/验证/测试切分 320/150/262、240/100/160、1600/200/300),8 张 H800,主表为 3 次独立随机重复的均值。Pass@3 是三采样下至少一成的任务比例,Avg@3 是三采样平均。
| 设置(AppWorld P@3/A@3) | 4B | 9B |
|---|---|---|
| 纯 GRPO | 60.31 / 48.98 | 64.89 / 53.31 |
| GRPO + 原harness 救援 | 61.83 / 51.91 | 65.65 / 54.83 |
| 固定混合 DSH+Claude Code | 57.63 / 46.69 | 62.21 / 50.89 |
| Meta-Harness(策略冻结) | 48.09 / 36.26 | 53.44 / 42.88 |
| WHALE | 63.36 / 52.93 | 68.70 / 58.02 |
| Harness-S(回 H₀ 执行) | 67.56 ± 1.87 / 56.87 ± 1.47 | 72.52 ± 1.65 / 62.34 ± 1.28 |
| Harness-S + Rank-1 路由 | 68.32 / 61.45 | 75.19 / 67.05 |
SWE-Gym 上增益最大:4B 从 GRPO 的 24.38 涨到 38.75(+14.37),路由版 42.50;DBBench 上 4B 路由版 75.00、9B 路由版 78.00,超过 GPT-6-Sol(71.33)、DeepSeek-v4-Flash(75.00)、GLM-5.3-Flash(76.67)三条前沿参考线。路由后的 4B 在所有报告指标上超过 9B 的 GRPO+救援。
与 SOTA 的对比细节
联合演化基线里最能打的 WHALE 在 AppWorld 9B 上 68.70,被 Harness-S 的 H₀ 口径 72.52 压过;Harness-S 的全管线 GPU 时(75.79 h)低于 WHALE(95.84 h)、API token(18.69M)却高于 WHALE(9.80M)——演化编辑器与多 LLM 投票的外部调用是主要开销。相对 HarnessForge 则相反:GPU 时更高(75.79 对 65.39)、API token 更低(18.69 对 24.40)。搜索侧 rollout 数 4010,比 Meta-Harness(8000)、WHALE(8640)、HarnessForge(5680)少 29%-54%。
消融实验关键发现
表 2 在同一救援 rollout 预算下比较分配策略:随机选 harness 的救援成功率在各训练段游走于 18.18%-25.00%,规则路由(按相似验证任务的成功率排序、不用行为画像)升到 26.67%-44.44%,带画像再锚定的 Top-8 自适应全程最高(52.38/66.67/45.71/50.00 四个训练段)。最终 Pass@3:GRPO 60.31、随机 62.98、4×2 集中采样 65.65、规则 66.41、自适应 67.56。两个结论:画像与再锚定各值一截(再锚定贡献 Avg@3 +4.71 分);Top-8 广撒网优于 4 个 harness 各采两条——救援预算下探索宽度比采样深度值钱。附录 E 补了一个池规模的视角:九个被分析的兄弟 harness 单独各修 11-15 个原 harness 失败、并集修 29 个,两两修复重叠率平均 62.47%——不完整,所以值得保留分工;也不到正交,所以路由选得准不准仍有边际。
内化的证据链是 RQ4/RQ5/RQ6 三节接力。行为频率上(表 3),Harness-S 策略在原 harness 下执行时,首次调用 API 前先查 schema 的比例 67.6%(base 22.9、GRPO 38.2),重复执行同一段代码降到 9.8%(GRPO 反而恶化到 30.1);SWE-Gym 上测试被 block 后改写断言验证的比例 48.5%(GRPO 13.3%)。论文对这张表的态度值得抄录:
“The frequencies describe behavior, not correctness: more calls or checks are useful only when they serve the task.” —— 原文 §4.5
RQ5 的表 5 给出量化内化:训练前路由器只把 1.53% 的任务排给原 harness 当首选,训练后升到 22.52%;Rank-1 路由对 H₀ 的 Pass@3 优势从 14.21 分收窄到 0.76 分(Avg@3 从 13.49 到 4.58)——策略越来越不需要辅助支持。RQ6 换到 Claude Code、OpenClaw 两个未见过的外部 harness,Harness-S 仍全面领先固定混合 GRPO,但也如实报告低于 DSH H₀:
“Harness-S nevertheless scores below DSH H₀ on both external harnesses and benchmarks.” —— 原文 §4.7
成本对账(表 9,AppWorld 4B、40 次更新):Harness-S 用 3032 条训练 rollout(118.44%)、67.19 GPU·h,换 H₀ 口径 Avg@3 56.87;纯 GRPO 2560 条、50.58 h、48.98;原 harness 救援 3616 条(141.25%)、97.77 h、51.91。多花 18.44% 的 rollout 买 7.89 分,对照组花 41.25% 只买到 2.93 分。
4 个人分析
亮点
零信号组的经济学。这篇最值钱的洞察不在 harness,在 GRPO 的记账结构:组内全失败的题贡献零梯度,而这批题恰恰是策略最该学的。救援机制把额外预算全部投向「翻盘概率最高的零信号组」,图 3 的有效组率证明的正是这笔投资的转化率。这个视角可以平移到一切组内对比优化器上——失败任务不是训练的沉没成本,是待激活的预算。
负结果用得诚实。两条固定混合基线低于纯 GRPO,这个反直觉结果没有藏进附录,而是放进主表,用作「多样性本身不产生价值、定向才有」的论据。对比很多只报正向混合增益的工作,这个对照设计让结论的因果链干净得多。
内化的多证据设计。「行为真的进了参数吗」这个最容易被一句涌现糊弄过去的问题,论文给了四条独立证据:行为频率迁移到 held-out 实例(表 4 的集合交集与账号恢复两个案例)、原 harness 被路由器首选的比例升 15 倍、Rank-1 优势收窄到 0.76 分、外部 harness 上仍领先。单条都能挑刺,四条同向就很难推翻。
局限性
内化与上下文分布 shift 的贡献没分干净。救援轨迹在兄弟 harness 上下文里生成并计算概率比,训练后策略却在 H₀ 上下文里执行。「行为进了参数」与「策略见过更多样的上下文格式后对格式脱敏」是两个可分离的假设,Rank-1 路由在训练后仍值 4.58 分 Avg@3,说明执行支持的贡献只是收窄、没有归零——论文承认这一点,但没有设计把两者分开的对照(比如用纯格式扰动 harness 做救援的对照组)。
单一模型家族。全部主实验基于 Qwen3.5-4B/9B。「harness 救援的收益能蒸进策略」这个命题对模型能力高度敏感——4B 在 AppWorld 上 base 只有 42.62,失败空间大,救援有得救;一个 base 分数 75 的模型还剩多少可救的零信号组、这些组还剩多少翻盘概率,论文没有回答。
触发边界太硬。只有 8 条全失败才触发救援。8 条里成 1 条的任务(组内有对比但对比弱)与 8 条全失败但换 harness 也大概率全失败的任务,处在触发边界的两侧,前者有改进空间、后者是救援的无效开销——一个按组内不确定度软触发的版本值得试,论文没有。
再锚定的成本随池线性涨。每个 checkpoint 要在池内 20 个 harness 上跑 150 个验证任务的配对轨迹,池再大(论文自己把 Harness Scaling 列为 future work)这笔钱会先失控。62.47% 的两两修复重叠率也暗示池内有冗余,池的剪枝与再锚定的采样化都是没做的功课。
对大模型领域的影响
对 agent 工程的直接影响是一个把「脚手架收益参数化」的可复制配方:训练集上的失败分析 → 定向演化一个兄弟池 → 救援训练 → 原脚手架部署。更深的信号在数据一侧——这与本专栏反复出现的主题同构:GRPO 的学习信号由数据供给结构决定,改数据生成分布(什么题、在哪个 harness 下、采几条)比改算法本体收益更大。OC-GRPO 用特权信息突破学习悬崖、Co-Evolving Harnesses 发现同一份轨迹换个脚手架符号就反转,Harness-S 把两者接了起来:脚手架就是部署时不可用的特权信息,救援就是以它为杠杆撬开零信号组,而学到的东西要能在特权撤走后幸存。
5 实践启示
可以借鉴的技术
- 零信号组激活清单:跑 agent RL 前先量一遍组内全失败任务占比与有效组率,这两个数是「还能从数据结构里挤出多少」的直接仪表盘;救援不必照搬,换温度重采、换工具子集重采、换 harness 重采都是同一骨架。
- 行为画像的 When/Behavior 结构:把「这个组件什么条件下有用」写成任务条件加行为差异的配对条目,再用多 LLM 投票聚合——这个模式对任何组件选择问题(工具、检索器、prompt 模板)都直接可用,再锚定的思路(证据随主模型演化定期刷新)对冲了所有静态画像的腐烂问题。
- 冻结池、刷新证据:资产(兄弟 harness 池)与证据(行为画像)分离,前者训练期间不动、后者按 checkpoint 刷新——这个二分适用于一切「生成资源贵、评估资源便宜」的场景,比如数据配方池、课程单元池。
- 验收口径:辅助支持的收益必须在撤走辅助后于原始环境复测。任何「训练时开了外挂」的方法都该补这一条。
潜在应用场景
- 企业内 agent 落地:同一策略要在多套内部系统(不同工单系统、不同 CI 流水线)上工作,兄弟池按系统分支演化、救援训练一个共享策略,比每个系统各训一个分支省得多,表 1 的 4B 超 9B 结果就是这条路线的性价比背书。
- 评测基准构建:方向性演化的失败分析副产品(根因分组、局部性/互补性测量)可以反过来用于诊断 benchmark 的失败空间结构——哪些失败是 harness 可修的、哪些是模型能力缺口,这个区分对评测设计者本身就是产出。
- 推理时路由的副产品价值:训练完的路由器免费升级成部署时的 harness 选择器(Rank-1),同一执行预算再涨 4-6 分;对已经维护多套 prompt/工具配置的团队,这是一条零新增基建的增益通道。
参考文献
- Zhang, K., Jiao, W., Fang, B., et al. Harness-S: Learning from Sibling Harnesses for Generalizable Agent Training. arXiv:2611.04277, 2026(本文,上海交大、小红书、中关村学院等;代码 github.com/DeepExperience/Harness-S)。
- Shao, J., et al. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. 2024(GRPO:组内相对优势,本文救援训练的宿主优化器)。
- Yao, S., et al. ReAct: Synergizing Reasoning and Acting in Language Models. ICLR 2023(推理与行动交错,harness 影响策略行为的早期证据)。
- Yang, J., et al. SWE-agent: Agent-Computer Interfaces Enable Automated Software Engineering. NeurIPS 2024(agent-计算机接口设计对任务执行的影响)。
- Trivedi, H., et al. AppWorld: A Controllable World for Simulating and Testing Agentic Interaction. 2024(AppWorld 基准,本文主实验环境之一)。
- Chen, et al. HarnessX. 2026 与 Lee, et al. Meta-Harness. 2026(harness 演化与策略协同演化的并行路线,本文的直接对照)。
相关精读
-
本篇把本专栏连续六十六期的主线再挪一格:此前六十五期回答的是「挑哪些 token、挑哪些轨迹、信用按哪套口径记账、信号被消费时旧了多少、数据分布离基座多远、整条响应有没有资格参与这次更新、策略容量会不会被优化动力学耗光、教师分布里哪些位置允许比较、事后经验除了改行为还能不能改行动之前的那次预测、参考模型的 KL 该从哪条边进组相对更新、教师的意见从哪条通道进 RL、off-policy 校正的记账区间有多长、裁剪区间那两个端点由什么决定、干预落在流水线的哪一环、逐步信用从哪个模型里来、一个已经报出来的增益该怎么拆账、这些信号最终以什么形状落到参数上、结局空间该分成几档、同一笔优势在响应内部怎么分、教师交出来的那笔位移里哪些前缀有资格进损失、这笔信用在更新里当斜率还是当终点、一次迭代该对齐到任务的哪一格、一份外部语料要进模型,是作为检索出来的文本进上下文,还是作为预测出来的隐状态进解码器、模型内部被拆出来的那批坐标能不能当作可以相加的行为解释单元、思考预算拧大之后,模型换掉的是对一个句子的读法,还是只换掉了答对的比例、一组 token 压成一个向量时,这个压缩动作本身该不该由输入自己解出来、一份原生多模态预训练预算该在三个模态之间怎么切成参数、token 与重复次数、生成过程里没有左右顺序时 token 级信用该记在什么量上、当奖励本身就是一份由打分器算出来的清单覆盖率时,优化器在最大化哪一样,以及给这份奖励补上一个精确率项之后,模型缩短的究竟是废话还是内容、当参数量被钉死、深度靠同一组权重反复复用来买时,多出来的计算到底在买什么、MTP 的交叉熵梯度里,到底有多少在教模型它还不会的事、有多少只是在低信噪比地复读它已经会的下一 token 分布——把后者单独留下来,要不要付钱、两个从不见面的模态编码器,学到同一份世界表征的充分条件是什么——正对连的到底是世界状态,还是同一份观测的扰动,这一个选择决定了表征属于世界还是属于模态,next-token prediction 属于哪一边、评测用的那把尺子本身——一道题都不换、模型也不换,只是题目在难度轴上的摆放不均匀时,排行榜的排名会翻转多少、训练监控里哪些区段的进步在任何重复采样次数下都测不出来、一次交互在执行之前能不能被便宜地估值、错估的账怎么摊、被那道把关的门删掉的训练数据算谁的、稀疏注意力的账单从「算」搬到「找」之后,挑 key 的钱能不能不按全文长度付、而按语义聚类的层级付、推理压缩的监督该记在哪个对象上——是整条轨迹的长度偏好,还是单个状态上继续或收束的那次选择,以及谁有资格判定那个状态已经想够了、@k 训练对抗锐化的那部分收益,究竟是「一次采 k 条」的采样结构买来的,还是「按题难度重新配准压力」的记账结构买来的,以及后者能否离线校准后在单样本更新里兑现」;这一期问的是harness 修出来的执行收益,能不能不留在 harness 里、而留在策略参数里——辅助脚手架撤走、模型回到原 harness 执行时,涨的分数还在不在——上一期把 @k 优化拆成 @1 优化加一个按题配准的系数,单样本更新在目标预算上追平 k 倍 rollout 的专门优化器;这一期把执行脚手架从「要优化成什么样」换成「训练时从哪里借执行支持」:失败诊断驱动的兄弟 harness 池定向救援全失败任务组,组替换恢复 GRPO 的对比信号,行为画像按 checkpoint 再锚定对冲非平稳,训练完的路由器免费升级成部署时的 harness 选择器。
-
精读:基准不是题库,是难度轴上的经验测度——DDM 与 Max Gap 的两张体检单、30 题基准的盲区定理与 BenchFill 的三道补题
-
精读:把「柏拉图表征」从假说拧成定理——好视图的 42 倍样本效率、NTP 的 log-partition 身份与那台写文本的图像描述器
-
精读:三明治包络、输入注入与状态组织的三轴审判——Looped Models Done Right 与那笔藏在全胜账本背面的 5.4 分