微调之前:harness 的杠杆常常大过模型容量
同一个任务只改 harness,正确率从 17.1% 涨到 61.0%。3B 配好 harness 比 7B 配差 harness 高 14.1 个点。先修 harness 不是保守,是杠杆更大。
「做垂类当然要微调」—— 这句话听起来天经地义,毕竟通用模型不懂你的业务。
而实测数据给的顺序是反的:在微调之前,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 和权重一起进化 —— 第四篇拆这些。