Paper

Harness Learning 论文速读:不更新参数,智能体靠改代码适应新任务

DOC
N°846
DATE
Sep 30, 2026
READ
5 min read
TAGS
Harness-Learning, 智能体, 测试时适应, 元学习, 强化学习, 论文速读, arXiv

一句话总结

arXiv 2609.35738《Harness Learning Enables Generalizable Test-Time Adaptation》证明:智能体在新任务上的适应,可以不经过任何参数更新完成——训练一个提案者模型改写智能体外层的可执行脚手架,harness 修订在功能上扮演权重更新的角色,且这种「学会适应」的能力可以迁移到从未见过的任务上。

问题设定:适应为什么卡在参数空间

一个语言模型智能体由两部分定义:模型本身,以及 harness——组织模型调用、工具使用与信息流的可执行程序。不同任务需要不同的组织方式,所以 harness 需要依据任务反馈被调整。

业界现状是 harness 由人类手工设计(ReAct 循环、反思模式、各种编排框架),或由另一个大模型现场帮忙改提示词。前者不可扩展,后者不保证改进——被提示去修订的大模型没有经过「如何修订」的训练。

论文的形式化很优雅:harness 学习是对可执行程序的元学习。经典元学习(MAML 一族)学的是好的权重初始化,使其能被少量梯度步快速适应;harness 学习学的是好的修订策略,使 harness 能被少量编辑快速适应。权重更新对应 harness 修订,任务损失对应执行反馈。

方法:GRPO 训练一个「程序修订者」

核心配置

  • Solver(求解器):冻结的 Qwen3.5-4B(Reasoning Gym)/ Qwen3-8B(QA),负责实际解题。
  • Proposer(提案者):Qwen3.5-4B / Qwen3-4B,负责修订 harness。
  • Harness 形态:可执行 Python 程序,暴露 solve(model, question) 接口。种子 harness 是极简版——调用一次求解器、提取答案。
  • 编辑接口:结构化 span 替换——定位已有代码片段并提供替换文本,无法解析或应用的编辑记为无效。

两阶段训练

第一阶段可选 SFT 初始化:由 35B 教师(Qwen3.6-35B-A3B)生成第一轮修订,只保留确实改进了种子 harness 且通过质量筛查的样本——最终 432 条,其中 48% 是 interpreter loop 模式(让求解器把计算写成代码交给运行时执行)。LoRA rank 32 训练约 2.9 epochs。

第二阶段 RL:GRPO(组相对策略优化),每个上下文采样 8 个候选,奖励是:

r_i = J(h'_i) + v_i

J : 修订后 harness 在评分题集上的平均得分(含部分分)
v_i : 有效性辅助奖励
     0.05 × 编辑可解析
     0.10 × 成功生成候选 harness
     0.15 × 评分试验运行完成率

每个更新 40 个上下文,学习率 1e-6,640 个上下文一轮。这份奖励设计的关键是把「能跑」和「跑得好」分开计价——跑通本身有小额奖励,但大头永远来自真实执行得分。

结果:三个层级的证据

未见任务上的迁移

Reasoning Gym 共 26 个任务家族,训练用 5 个(codeio、maze、rotten_oranges、simple_geometry、tower_of_hanoi),评测 21 个未见家族。单步修订平均分:

提案者分数
Base(未训练 4B)0.32
SFT0.42(全部 26 家族 0.415)
Single-step RL0.62
35B 教师0.56

4B 提案者反超 35B 教师。这个结果的意义不在分数本身,在于证明了「依据执行反馈修订程序」是一个可训练、可迁移的技能,而不是大模型的涌现副产品。

测试时逐轮适应

两模型全程冻结,只改 harness 代码。多跳问答上:MuSiQue 独立修订仅 0.15 EM(略高于种子),十轮连续修订后达 0.27(提升 80%)。更硬的证据:RL 提案者十轮后的平均最终成绩超过了 80 个独立提议中选最优的 oracle best-of-80——逐轮利用反馈的策略击败了暴力采样。

学到的修订行为也有可读性:QA 场景中它学会保留摘要引导下一跳检索、直接把检索段落传给答题调用、增加第三跳检索、草稿答案缺失时重新搜索——这些正是人类工程师会做的工程优化。

多步训练的反直觉结论

在修订序列上训练的 multistep RL 没有稳定胜过 single-step RL:canonical 设置更高、format-varied 更低,QA 上两者几乎相同。而单步训练的策略在测试时可以持续多轮改进。测试时的持续适应能力可以从单步训练中涌现——跨轮信用分配怎么做好,留作开放问题。

失败模式:论文最有工程价值的部分

三个诚实的观察,每一个都值得抄进自己的智能体设计文档:

算法任务是硬边界。 五个被排除的家族(knight_swap、letter_jumble、modulo_grid、sokoban、ab)全是算法密集型。harness 修订优化的是「组织方式」,当瓶颈在算法本身时无解。

第一轮拿走大部分收益。 Reasoning Gym 上五轮修订的增益大部分来自第一次。种子 harness 越接近可精化的工作流(如 QA 的检索管线),逐轮收益持续越久;种子太弱时一轮大改后就到平台期。

组合接口是可靠性杀手。 失败案例分析显示,多数失败不是算法错误,而是「算法正确但解析、通信或提取环节出错」。生成的辅助组件只有在周边接口全部正常时才有效。这对自修订智能体的规模设了真实顶:纵向做深(同一管线内增加循环与跳数)可靠,横向做宽(集成更多组件)脆弱。

与相邻工作的位置

和提示词自动优化(DSPy 一类)相比,harness learning 的搜索空间是全功能程序而非提示模板,且有 RL 训练的修订者而非启发式搜索。和自反思智能体(Reflexion 一族)相比,它的经验以可持久化的代码形态积累,而非回合内的文本记忆。和测试时训练(test-time training)相比,它不需要梯度基础设施,修订可读可回滚。

真正的近亲是「模型学会写工具/写代码给自己用」这条线,harness learning 把它推到了元学习的正式框架下,并补上了「测试时迁移」的实验证据。

工程意义

对做智能体平台的团队,这篇论文给出了一条明确路线:把脚手架从配置文件升级为受版本管理的代码资产,把执行反馈结构化落盘(成功、失败、成本、耗时),然后「学会修订」就可以被训练成一个独立于具体任务的通用能力。4B 的提案者规模意味着这条路线的部署成本不高——提案者不需要是旗舰模型,需要的是专门训练。

对更远的图景:论文结尾把它定位为通往「continually learning agents」的路径——把累积经验转化为可泛化改进。结合本周 DevDay 上 Dots 那类常驻智能体(持续产生执行反馈)的发布,程序空间的持续学习闭环已经同时具备了信号源与修订器两端的工程原型。距离产品化还有距离(单种子为主的实验、五个排除的家族、多步训练的不稳定),但方向坐标已经很清楚了。

Frequently asked questions

harness 具体指什么?和提示词有什么区别?
harness 是组织模型调用、工具使用与信息流的可执行 Python 程序——智能体的外层控制器,不只是提示词。它可以是带循环、分支、函数调用的完整代码(例如实验中最常见的修订模式是让求解器把计算写成代码交给解释器执行的 interpreter loop)。提示词只是 harness 的一部分。修订采用结构化 span 替换:定位已有代码片段并提供替换文本。
为什么训练出的 4B 提案者能超过 35B 教师?
教师模型只是被提示去修订 harness,一次一个样本;4B 提案者用 GRPO 强化学习在数百个任务上下文上训练,每个上下文采 8 个候选、以修订后 harness 的真实执行得分为奖励。学会的是「如何利用执行反馈做修订」这个可迁移技能,而非记忆特定任务的答案。4B 超过 35B 说明适应能力本身可以蒸馏成小模型的稳定行为。
测试时适应的具体流程是什么?
两模型全程冻结。从种子 harness 出发每轮:输入任务描述加当前 harness 加它在反馈题集上的执行报告,提案者采样若干编辑,应用后重新执行评分。Reasoning Gym 协议是单候选、只在分数提升时保留(保守);QA 协议是 8 候选、推进到最高分候选(即使低于父代)。保留的 harness 进入下一轮,形成逐轮反馈循环。
多步 RL 训练效果如何?
出人意料地不稳定:在修订序列上训练的 multistep RL 在 canonical 设置上高于 single-step RL,但在 format-varied 设置上更低,QA 场景两者最终分数几乎相同。而仅训练单步修订的策略就能在测试时持续多轮改进。论文结论是测试时适应能力可以从单步训练中涌现,跨轮信用分配仍是未解问题。
哪些任务上这个方法会失效?
两类:一是算法密集型任务(华容道、汉诺塔变体、字母重组等五个家族被排除),harness 修订救不了算法本身;二是组合接口脆弱性——失败案例多数是算法正确但问题解析、工具通信或答案提取环节出错,生成的辅助组件只有在周边接口全部正常时才有效。此外 Reasoning Gym 上的五轮增益大部分来自第一轮修订。
// next.txt ›

Some outbound links in this post are affiliate links — see disclosure.