LLM 跑对一次不算学会,一篇新论文给了个固化经验的方案

做过几次科学计算的人大概都有体会:让 LLM 写一段数值代码,第一次跑通,你以为它学会了。换一组参数、换一个方程再来,它从零开始犯一样的错,之前那次执行好像根本没发生过。

这不是错觉,而是大模型目前一个挺尴尬的短板——它能解题,但解题经验不积累,每次推理都是全新开局,不记得上次在哪摔过跤。

上周 arXiv 上线了一篇论文,来自 Liwei Dong、Jiahao Zhao 和 Nan Xu,标题很直白:「从执行到能力:通过程序性知识合成固化科研经验」。他们研究的问题翻译过来就是:LLM 在科学计算任务里跑对了一次,怎么让这次经验变成它下次也能用的真能力?论文把这叫「经验固化」(experience consolidation),听起来像人类备考时的错题本机制。

作者提出的方法叫 SciConsolidate,思路不是简单地把跑通的代码扔回去做 SFT。它先对比成功和失败的运行轨迹,抽取出跨任务的程序性知识——也就是「这类问题应该先做什么、再做什么、在什么条件下选什么方法」这层抽象步骤。然后这些抽象步骤会通过一个开发-验证门筛选,确保它们是通用的,不是针对某个特定问题的 hack。

这里面有个关键难点:小模型拿到抽象步骤,未必执行得出来。论文把这叫 abstraction-execution gap——抽象步骤它读懂了,但实现不了。SciConsolidate 的解法是,用一个更强的模型把抽象步骤「具象化」成可执行的代码监督信号,再拿去做标准的 SFT。同时设一个平行的不含程序性指导的 teacher 分支做对照,专门验证程序性知识到底贡献了多少。

结果放在 SciCode 基准上,数字挺说明问题。直接注入运行时程序性知识,Qwen3.6-27B 在子步骤和主问题两个维度上分别涨了 +3.85 和 +6.26 个点。但同样方法套到 Qwen3.5-9B 上,主问题几乎没涨——这就是 abstraction-execution gap 的现实表现:纸上谈兵它懂了,真写代码还是不行。

故事没有停在这里。经过程序性知识具象化之后,9B 模型在无步骤依赖的部署下,比无步骤的 SFT 控制组高了 +3.89 子步骤 / +6.25 主问题,比原始 9B 模型高了 +5.62 / +11.25。这个涨幅说明,抽象步骤虽然小模型自己用不了,但经过大模型「翻译」一道后,能变成真正可消化的训练信号。

这篇论文给了一条很实际的路径:让模型从执行经验里长出真能力,不是光喂成功轨迹,而是对比成败、提炼抽象步骤、再用更强模型翻译成学生模型能吸收的东西。本质上是一套「错题本 + 名师讲解」的组合。

当然,目前只在 SciCode 一个基准上验证了,规模局限在 9B 和 27B 两个尺寸。抽象步骤的提炼能不能规模化、跨领域迁移有没有天花板,论文没有提供答案。但方向是对的——我们缺的从来不是模型「能跑一次」的能力,而是它「跑完一次能变强一点」的机制。

如果你也在用 LLM 写科学计算代码,这篇 arXiv:2607.24459 值得翻一翻。