你让 AI 改一个跨越五个文件的软件功能,它可能会写代码,却未必知道先改哪一处、何时跑测试、失败后该回到哪一步。人们通常给它加一套办事流程:先分析依赖,再按顺序修改,每完成一步就验证。问题是,这套流程往往由人单独维护;模型训练模型的,流程优化流程的,两边很少真正接上。
Fei Ding、Yongkang Zhang、Runhao Liu 等人的新论文,试图拆掉这堵墙。他们提出 scaffold-mediated post-training(脚手架介导的后训练):不再只调整模型参数,也把提示步骤、工具调用和验证流程组成的“推理脚手架”放进训练循环。系统先发现有用流程,用它们帮助模型完成任务,再通过蒸馏把部分流程教进模型,最后重写剩余的外部流程。论文把这一具体实现称为 Skill Training。
先说明证据边界:本文数字与效果判断均来自这篇 arXiv 论文,尚无第三方复现;材料也未提供作者机构或代码仓库,论文只称代码将在接收后发布。
不只训练大脑,也整理办事清单
后训练(Post-Training)是基础模型完成海量文本预训练后,再用示范或奖励继续调整参数,让它更会听指令、推理和使用工具。传统做法主要改变模型内部参数。推理脚手架(Scaffold)则留在模型外部,像一张操作清单:先拆题,再调用工具,最后核对结果。
外部清单容易写清,也便于检查,但会让推理流程越来越复杂、越来越慢。直接把示范拿去训练,流程中的结构又可能被压成一串平坦文本:模型看过答案,却未必稳定学会何时启动哪套策略,以及不同策略如何衔接。
这篇论文的换角度之处,是把脚手架本身也当成可以学习和改写的对象。每项“skill”不是一句泛泛提示,而是一个带结构的流程单元:它写明适用条件、执行步骤、验证检查、输入输出接口和常见错误。多个 skill 通过显式调用关系连接成程序化图结构——也就是用节点和连线表示先后依赖、数据传递与组合方式。
例如,一个高层流程可能要求先分析文件依赖,再修改代码,随后运行测试。图结构能告诉系统谁依赖谁,也让它按拓扑顺序执行,即先完成前置步骤,再处理依赖它的步骤。实验中的初始图包含 30 个节点和 52 条依赖边。
先借脚手架做,再把做法学进去
Skill Training 分三步。
第一步是发现 skill。系统从 2,000 个成功案例中抽取约 120 条候选策略,聚类、合并为 45 个候选 skill,再用独立验证集筛选。最终 30 个通过门槛,过程在 5 轮后收敛。论文所说的“自动发现”并非凭空创造,而是让模型从已有成功解法中提炼可复用流程,再检查这些流程是否确实改善任务表现。
第二步是用脚手架生成训练数据。面对新任务,模型按照适用条件挑选 skill,抽出最多三层的相关子图,再依次执行。每个节点完成后都要拿出可执行证据,例如构建退出码或测试结果,而不能只由模型宣称“已经完成”。检查失败可重试一次;再次失败,整条轨迹就被丢弃。最终只有通过任务级测试的过程才进入训练数据。
第三步是渐进式蒸馏。蒸馏(Distillation)可以理解为学生先跟着完整解题范例练习,再独立完成。这里的“老师”和“学生”是同一模型的不同配置:老师能看到脚手架并产出完整执行轨迹,学生只看到任务,训练目标是模仿老师的行为。
系统从底层、最常被依赖的 skill 开始,一层层把流程吸收到参数中。为降低灾难性遗忘——学习新能力时损伤旧能力——论文混入 50% 的预训练数据,约束新参数不要偏离原模型,并在每轮检查能力保留率。没有达到门槛的 skill 不会被强行收进模型,而是继续留在外部。
真正关键的是“学会后重编译”
如果模型已经学会“分析文件依赖”,直接删除对应节点还不够。上层流程可能仍明确写着“调用依赖分析 skill”,数据也可能经过这个节点传递。论文因此加入 dynamic recompilation(动态重编译):删除已内化节点后,由模型重写依赖它的上层流程,更新数据传递和接口,再在验证集上检查。性能下降过多时就回退,保留原来的外部节点。
这一步让所谓“共同演化”有了具体含义:脚手架把能力传给参数;参数发生变化后,系统再据此缩写脚手架。实验中,22 个 skill 被成功内化,外部节点从 30 个减至 8 个,依赖边从 52 条减至 6 条。系统触发了 50 次上层流程重编译,48 次成功、2 次回退,论文报告成功率为 96%。此时 passed rate(每项任务中原本失败的测试有多少被修复通过的平均比例)从使用全部自动 skill 时的 32.5%降至 31.5%,下降 1.0 个百分点。
几组数字说明了什么
在 FeatureBench 上,基础配置的 passed rate 为 24.4%。FeatureBench 测试端到端功能开发,涉及多文件协作、架构选择和多步验证。加入自动发现的 skill 后,成绩升至 32.5%,增加 8.1 个百分点。这里是“百分点”,不是相对增长 8.1%。人工编写 skill 的成绩为 35.0%,自动版本低 2.5 个百分点。
渐进式蒸馏后,系统保留 8 个外部 skill,passed rate 为 31.5%。如果把外部脚手架全部移除,只靠参数中内化的能力,成绩仍有 27.7%。论文据此给出 85.2% 的蒸馏保留率,即“纯内化成绩”除以“使用自动 skill 时的成绩”。
相同数据上的标准 SFT(监督微调,即直接用示范答案训练)得到 25.5%。纯内化模型高出 2.2 个百分点;保留 8 个外部 skill 的混合方案高出 6.0 个百分点。论文称这些差异显著,但正文材料没有给出具体显著性检验结果。实验称每种配置运行了 5 个随机种子,趋势在 Qwen3-Coder 与 DeepSeek-V3.2 两个模型上一致。
消融实验也给出一个重要线索。去掉执行验证后,推理时成绩从 32.5%降至 30.0%,蒸馏保留率从 85.2%降至 78.3%。去掉 skill 之间的显式调用关系后,推理成绩降至 31.0%,保留率降至 81.0%。这说明收益不只来自“多写一些提示”:可执行检查帮助筛掉错误轨迹,明确依赖则让流程更容易组合和分阶段学习。
为什么值得关注
这项工作的价值,不只是一种新的提示写法。它提出了两种能力载体之间的分工:模型参数适合保存已经练熟、需要随手调用的能力;外部脚手架适合保留尚未稳定学会、需要明确检查的流程。系统不必在“全部写进模型”和“永远外挂工作流”之间二选一,而可以边训练边调整边界。
这也挑战了后训练长期以来的默认分工。过去,人们训练模型参数,再另行设计代理流程;这篇论文则把流程发现、数据生成、参数学习和流程删改串成一个闭环。最有意思的不是模型会照清单做事,而是它学会部分清单之后,剩下的清单会随之改写。
局限与未知
- 论文只在代码生成领域验证。作者称方法原则上可用于其他拥有可执行验证器的领域,但数学推理等方向尚未得到实验支持。
- 全程采用同一模型自蒸馏,可能强化模型原有偏差;测试与构建结果能过滤一部分错误,却不能替代不同教师模型或独立复现。
- 24 个评测仓库可能出现在基础模型的预训练材料中。论文认为这对各配置影响相同,因此依靠相对差异得出结论,但污染程度并未被排除。