微调之前:harness 的杠杆常常大过模型容量

同一个任务只改 harness,正确率从 17.1% 涨到 61.0%。3B 配好 harness 比 7B 配差 harness 高 14.1 个点。先修 harness 不是保守,是杠杆更大。

位置
第 03 篇 / 共 4 篇
预计
6 分钟

「做垂类当然要微调」—— 这句话听起来天经地义,毕竟通用模型不懂你的业务。

而实测数据给的顺序是反的:在微调之前,harness 那一侧还有几十个百分点没被拿走。

三组数

全部来自 The Interplay of Harness Design and Post-Training in LLM Agents,环境是扩展过的 ALFWorld,把 harness 当成一个可控的实验变量来做消融。

它变的三样东西,每一样都是纯 harness、不碰模型:

  • 工具描述的详略 —— 从一行摘要(h-low),到写清前置条件和相互作用(h-high)
  • 每步附带的辅助信息 —— 当前可用工具列表(h-mid)、物品清单状态(h-high)
  • 工具 schema 的版本 —— 原始命名(v1.0)、改写过的名字(v1.1)、把 13 个工具合并成 5 个(v2.0)

第一组:不训练,只改 harness。

GPT-5 Mini 在 Pick-2 任务上,h-low 是 17.1%,h-high 是 61.0%。一个字都没训,涨 43.9 个百分点。

第二组:harness 和模型容量比大小。

Qwen2.5-3B 经 GRPO 训练、配 h-high,比 Qwen2.5-7B 配 h-low 高 14.1 个点。参数量翻一倍多,抵不过 harness 的信息量。

原文的结论句是 “the choice of harness can outweigh the effect of model capacity”

第三组:顺序错了,微调会变成负资产。

工具 schema 从 v1.0 换到 v2.0(13 个工具合并成 5 个,语义发生位移)之后:

训练时用的 harness 分布内 schema 变化后
h-low 55.6% 2.7%
h-high 69.6%(工具调用合法率 95.7%)
不微调的基线 13.5%

用 h-low 训出来的模型,遇到工具变化之后比没训练的还低 10.8 个点。 微调不但没帮上忙,还把模型锁死在了一个已经消失的世界里。

为什么会这样

Anthropic 那篇讲长时程 harness 的文章有一句话正好解释:harness 里的每一个组件,都编码了一个「模型自己做不到某件事」的假设。

顺着这句话推:

  • harness 信息量低的时候,模型必须自己脑补工具的前置条件、自己维护物品清单。微调就是在把这些脑补固化进权重
  • 一旦工具变了,固化下来的脑补全部失效 —— 而且比没固化更糟,因为它现在会自信地用错。
  • harness 信息量高的时候,那些信息每一步都从环境里来。模型学的是「怎么用给到的信息」,而不是「记住那些信息」。前者迁移,后者不迁移。

所以那篇的结论才写成:harness-aware post-training 是前提,不是补充

微调之前该做完的事

把这几组数翻译成可执行的顺序:

一、先把 harness 的信息量拉满,量一遍。 工具描述从一行扩成带前置条件的完整说明、每步附上当前可用动作 —— 这类改动零训练成本,而上面那组数说明它可能就是最大的一块。

二、确认瓶颈真的在模型。 那篇讲披露的论文提出的 Binding Constraint Thesis 说:长时程任务上,harness 常常比它包着的模型更决定结果,harness 引起的方差可以超过模型引起的方差,甚至让模型排名反转。所以「换个更强的模型」这个动作,在 harness 没定型之前得到的结论是不可信的 —— 你比的可能是两个 harness。

三、把 harness 定型。 这一条最反直觉:微调必须在最终的 harness 下做。训练时用的 harness 和部署时不一致,代价是 20.7 到 22.5 个点(同一篇里 Qwen2.5-7B + GRPO 在 h-mid / h-high 上的训练时应用 vs 事后应用之差)。

换句话说,微调会把你的 harness 冻住。 定型之前动手,等于给一个还在改的接口写死适配。

四、有可复现的评测。 微调要看提升,而提升要能被量出来。这就回到第一篇提过的 execution lineage:如果两次运行的路径都不一样,你分不清涨的那两个点是模型的功劳还是运气。

什么时候 harness 就到顶了

也别走到另一个极端。harness 不是万能的,下面这几种情况是它解不了的:

模型压根没有那个能力。 视觉定位是最典型的 —— 一个模型如果读不出屏幕坐标,再详细的工具描述也没用。这类能力是权重里的,不是上下文里的。

每次调用都要重复解释同一件事。 如果你的系统提示里有两千字在教模型你们公司的术语,那这两千字是每次请求都在付的税。微调把它移进权重,是一次性付清。判据很实际:这段解释的长度乘以调用次数,超过微调成本没有。

小模型 + 窄领域。 有一类工作专门做这件事:Learn from Weaknesses 让小的 computer-use agent 先跑、收集自己的失败模式、生成针对性的合成数据,再微调。2B–8B 的模型在单一领域上,靠这条路去追大模型。这是垂类微调最有说服力的一类场景:不是让小模型变通用,是让它在一格里变强。

边界与代价

这些数字来自一个基准,不是普适规律。 ALFWorld 是具身任务环境,工具边界清晰、动作空间有限。你的垂类如果工具语义更模糊、观察更嘈杂,harness 的杠杆未必这么大。可以拿它论证「先量一量 harness」,不能拿它论证「你也能涨 43 个点」。

「先修 harness」不等于「永远不微调」。 它是顺序建议,不是替代方案。真正的意思是:在 harness 定型之前微调,多半是浪费;定型之后不微调,可能是留了钱在桌上。

harness 信息量拉满也有代价。 每步附带可用工具列表和物品清单,意味着每次请求的 prompt 更长、更贵、更慢。那篇没有报这部分成本,而在本地小显存上跑的人,这笔账可能直接改变结论。

我自己还没走到微调那一步,所以这一篇里没有我的第一手数据 —— 全是别人的实验加我的推导。这一点必须说明白:转述的实验和自己跑过的实验,可信度不是一回事。

下一篇

假设 harness 已经定型,评测也有了,确实该微调了。

那具体怎么做?训什么、拿什么数据训、怎么保证训完之后 harness 还能改、以及怎么让 harness 和权重一起进化 —— 第四篇拆这些。