清华团队提出 AutoSFT:搭建自动化后训练基础设施的第一步

本文由清华大学联合北京邮电大学、面壁智能、伊利诺伊大学厄巴纳-香槟分校、香港中文大学等机构研究者合作完成。

把 SFT 数据研究的全部操作交给一个 agent,跑上几十轮,会发生什么?

按常理,一个拿到完整工具箱的 agent,应该会尝试不同种类的数据操作:调配比、修样本、写新数据。有经验的数据工程师就是这样做的。

实际跑出来是另一回事:这个 agent 每一轮都只是在调配比。它没改过一行数据,没换过一个 response,没写过一个新样本。它的词云几乎全是 weights 和 proportions,几十轮没有什么提升。

左:各轮 benchmark 分数。右:agent 描述数据操作的用词,几乎都和配比有关。

这是清华大学 THUNLP 在 AutoSFT 中观察到的现象。研究团队为 SFT 数据研究构建了一个多 agent 系统,让 agent 自主决定每轮该做什么数据操作、从 base model 重新训练、读取评测结果,判断下一轮 data action,然后进入下一轮。在这个过程中, 单 agent 基线只用了六种 data action 中的一种,而多 agent 版本用上了全部六种,并且在指令跟随任务上领先单 agent 基线 6.5 分 (IFEval,同轮数对比)。

论文首页:AutoSFT: An Agentic System for Automated Data Research in Supervised Fine-Tuning

背景:AI 已经开始造 AI

Anthropic 披露,截至今年 5 月,其合并进生产代码库的代码中八成以上由 Claude 编写;OpenAI 披露,到 8 月中旬,研究部门 agent 的运行时长按 8 小时工作日折算,已是研究员的 3.1 倍。写代码、跑实验,越来越多地交给了 agent。

那训练模型本身呢?早期程序员要用 0 和 1 的机器码直接和硬件打交道,后来操作系统把这一层抽象掉了。今天训练模型,还很像前一个阶段:改配置、看曲线、翻 bad case、调数据、重跑,每一步都需要人。

研究团队想做的是一套 RSI Service,也就是未来 AI for AI 的「操作系统」:用自然语言表达目标,系统负责设计实验、执行、分析和迭代,人不再需要直接跟代码框架打交道。RSI loop 里面需要有一个 intelligent 大脑来控制整个过程,改权重、改 harness 还是改算法改数据,都是实现目标的手段,对人来说甚至可以是不透明的。

在 PostTrainBench 中,我们发现当让 agent 接管整条后训练流程,它们最终都会收敛到 SFT,并把大部分精力花在改数据上。 因此作为 RSI Service 里的第一个模块,AutoSFT 将 action space 落在 SFT 数据上。 数据研究也足够像研究:提假设、做干预、看结果、再修正。

AutoSFT 一轮迭代循环

六类 data action,单 agent 只用了一类

有经验的数据工程师不只是挑数据。研究团队把 SFT 数据研究的操作整理成 6 类:调配比(Mixture)、调顺序(Ordering)、删样本(Pruning)、修样本(Repair)、换 response(Resupervision)、写新样本(Synthesis)。

6 类 data action 及其对 recipe 的改动范围

研究团队把这 6 类操作全部交给一个 agent,跑了 11.5 小时、33 轮。结果每一轮都只是在调配比。数据决策、提交任务、评测都挤在同一个 session 里,窗口最高被占到 94.7%,压缩了 10 次,研究历史也被反复丢弃。占空间最多的是训练输出、运行记录和评测输出,没有一样和「下一步该做什么数据操作」有关。Shell 命令占了 58% 的事件记录,其中 268 次是状态检查,占全部事件的 23.0%。

单 agent 的 context 占用,虚线为每次压缩

当我们把优化目标设置为 「10h 之内迭代越高越好」,agent 并不会意识到 「什么才叫好」,因此有时会过早的 early stop 退出。另一方面,agent 对时间也会非常焦虑,当剩下不了多长时间时,agent 会倾向于减少每一轮的数据量,用不满数据 budget,以为了多跑几轮实验,但是站在人类视角,减少了数据量其实无法对比出效果。

在靠后的几轮里,为了「多跑几轮实验」,每一轮训练数据量在锐减

AutoSFT:给数据研究的生命周期拆角色

AutoSFT 框架总览

研究团队的解决方案是把生命周期拆开。考虑到 RSI Service 需要有一个集群支撑,跑实验需要不断往集群上提交 job,因此对 job 提交状态的确认、Reward Hacking 的检测是一种轮询任务。我们分出 Executor ,单独负责训练和评测,只回传 artifact 路径,不再把日志塞进主 session。

w/ 和 w/o Executor 的对比,w/ Executor 减少压缩次数(中)

结果发现,压缩次数从 10 次降到 5 次,Shell 命令占比从 58% 降到 29%,剩下的三分之一还是在调度子 agent。

然后是决策侧的拆分。受启发于 Anthropic 的 AAR,我们让 4 个 Analysis Subagent 分别从训练数据、失败案例、学习动态、研究历史四个角度提出建议,每个子 agent 只看自己需要的那部分上下文。 Synthesis Subagent 为池子覆盖不到的能力写新数据,并用 verifier 把关。meta agent 汇总后决定下一轮 recipe。

在指令跟随任务上, 加入 Analysis 后,第 6 轮已经到 63.33,超过了单 agent 基线跑 50 轮的最好成绩 ;同轮数对比,AutoSFT 领先 6.5 分。第 30 轮到 67.10。

左图:Analysis 消融,IFEval 各轮分数。右图:30 轮里各 action family 被使用的次数

从使用的 action 来看,单 agent 基线 33 轮全部是 Mixture。 AutoSFT 的 30 轮里,6 类 action 全部出现,分布相对均匀。

另一方面,Synthesis Subagent 为池子覆盖不到的能力写新数据。在 IFEval 和 IFBench 上, Synthesis 带来了 +3.4 和 +2.9 的增益 (81.58 vs 78.15,51.95 vs 49.02),峰值到 65.8。

左两图:指令跟随上的 Synthesis 消融;右图:coding domain 的 AutoSFT 表现

在代码生成任务(MBPP+)上, 单 agent 基线跑了 15 轮没有持续提升,加入 Analysis 后在同样轮数内 +3.7 。MBPP+ 只运行测试用例,不提供标注的能力分类,这说明 Analysis 的效果不依赖于现成的能力分类体系,而是能够从失败案例和训练动态中发现问题。

论文还展示了 per-capability 的 Synthesis 效果。 repeat_prompt 在 Synthesis 轮后从约 40% 跳到 75.61% ,是被 Synthesis 明显补上的能力。也有补不上的地方:odd_even_syllables 被 Synthesis 针对了 3 轮,分数一直是 0。补数据也许只能帮模型补上「差一点就会」的能力。

Per-capability Synthesis 效果

结论边界与实践启示

AI for AI 所面临的 action space 非常大,改模型权重还是改 harness?优化算法还是优化数据?现有的工作大多数聚焦于完整的 post-training setting,把自主权交给 frontier agent。在 RSI Service 的第一步 AutoSFT 中,我们聚焦在 SFT 场景下的 data action space,也已经发现模型难以找到很好的 action trace 组合。

自动化 SFT 数据研究的瓶颈,可能不是某个动作不够强,而是结构有没有让 agent 覆盖数据工程师的完整动作空间。虽然 AutoSFT 离「一句话训练模型」还很远,但是是我们给出的一个可操作答案。

📄 论文 :Arxiv 2610.22194

💻 代码 :Github Thinking-Space/AutoSFT