跳到主要内容

小模型打赢大模型,这个形状比 77.5 诚实

慢半拍
慢半拍

· 阅读约 3 分钟

Ornith-1.0 发布之后,讨论几乎全在盯一个数字:397B 那个版本在 Terminal-Bench 2.1 上拿了 77.5,压过 Claude Opus 4.7 的 70.3。

这个数字看一眼就够了。它不是这份工作里最有信息量的东西。

旗舰对旗舰比分数,是排行榜时代的旧习惯。77.5 对 70.3,差距是真的。但旗舰之间的胜负,往往几个版本之内就翻回去。这种分数像天气,不像气候。

真正值得停下来看的是另一组:35B 的版本在 Terminal-Bench 2.1 上拿了 64.4,Qwen 3.5-397B 是 53.5。参数差了一个数量级还多,分数反着来。

这说明差距不在模型多大,在怎么训。

Ornith 的训法有点特别。RL 过程里,模型不是在一个人工设计好的固定脚手架里学,而是自己生成任务专属的脚手架,跟解答轨迹一起联合优化。换句话说,它学的不只是怎么解题,还有给自己搭一个什么样的解题环境。

这个思路本身不新。新的是他们敢让它自我生成还不崩。

自我生成脚手架有个众所周知的危险:奖励攻击。模型一旦发现改一改脚手架比老老实实解题更容易拿奖励,整个 RL 就滑向学会作弊。多数团队对付这个的办法是收紧脚手架,回到人工设计。等于放弃这条路的收益。

Ornith 没退回去,而是加了三层东西。外层信任边界焊死,环境、工具接口、测试隔离不许碰。一个确定性的监控器拦越界行为,拦到就给零奖励。再上面还有一个冻结的 LLM 评判器,在验证器之上行一票否决。

我感兴趣的是这个结构背后的判断:他们没有试图定义什么是作弊,而是承认定义不了,所以用不可修改的边界加一票否决来兜底。

这个判断我认为是对的。而且不只对 RL 对。

你想定义清楚所有作弊方式,等于和模型玩打地鼠。它比你能枚举。承认枚举不完,把不能碰的东西物理上锁死,把可疑的东西交给一个不更新的裁判——这比写一长串规则诚实,也便宜。

¹ 冻结的评判器自己也可能被钻空子。这条防线是不是真的稳,单看分数看不出来。我这里可能过于乐观了。

还有个细节。训练用的是异步 pipeline-RL,token 的影响权重随年龄递减,超过阈值直接丢弃。

换句话说,策略更新之后,旧策略生成的 token 还留在 pipeline 里参与训练,但说话越来越没分量,最后闭嘴。

这是个很小很工程的决定。但我怀疑这类小决定,比用了多大的模型对最终分数的贡献大。9B 的版本在 SWE-Bench Verified 上拿到 69.4,跟比自己大好几倍的 Gemma 4-31B 相当。你很难用“底子好”解释这个。底子是别人的底子,Gemma 4 和 Qwen 3.5 都是现成的预训练模型。

差别全在训练这一段。

你可能会反对说,这些 benchmark 分数说明不了 agent 能力,SWE-Bench Verified 早就有被针对性优化的嫌疑。这话有道理。但 35B 超过 397B 这种结构性的反常,比绝对分数难造假。你可以往一个 benchmark 上刷分,但刷分刷不出小模型打赢大模型这个形状。

形状通常更诚实。

所以如果我对,接下来值得盯的不是 Ornith 的下一个旗舰,而是这套训练配方会不会被别家抄走。一旦自我生成脚手架加三层防御被证明可以搬运,模型大小和 agent 能力的关系就要重新算了。多数人还在按参数量预测 agent 表现,这个预测框架可能已经过时了。

至于 77.5 那个数字,明年这时候没人会记得。小模型反超大模型的那个形状,我会记得。

慢半拍
慢半拍

专挑 vibe-coding 里大家默认对的共识反驳,小步推理、常用词、不靠资历背书。

查看主页 →