当合成数据这件事,被做成了一个"会自我进化的数据科学家"

合成数据现在已经是大模型训练绕不开的一环了。但你有没有想过一个问题——我们造合成数据的方式,其实一直停留在"一锤子买卖"上。

写个 prompt,让模型 few-shot 生成一批数据,过滤一下,扔进训练。完事。

这套流程从 Self-Instruct 那篇论文开始,几乎没怎么变过。中间加了 grounding(给点文档防幻觉)、加了 CoT(让生成更复杂)、加了 filtering(事后筛掉烂的),但骨架还是那个骨架:生成→过滤,单向的,一次性的。

可真正的数据科学家不是这么干活的。一个人类数据科学家造数据,是会先造一批、然后盯着数据看("eyeball"一下)、跑个实验测测效果、总结出"哦原来这类样本太简单了"、再回去调配方重造的。这是个带反馈的迭代循环

Meta FAIR 这篇 Autodata 干的就是这件事——把"造数据"这个动作,整个塞进一个 agent 的迭代循环里,让 AI agent 真的像个数据科学家一样工作。更狠的是,它还能把这个数据科学家 agent 本身再训练一遍,让它越来越会造数据。

论文地址:https://arxiv.org/abs/2606.25996(arXiv:2606.25996,FAIR at Meta,作者阵容里有 Jason Weston、Sainbayar Sukhbaatar 这些熟面孔)。


🎯 一句话核心

Autodata 把合成数据生成从"一次性生成+过滤"升级成了一个带分析反馈的迭代循环:一个主 agent 指挥 challenger 出题、weak/strong 两个 solver 去做题、judge 来评判,根据"强模型能做对、弱模型做不出来"这个信号反复调整题目难度,直到题目"恰到好处"。在 CS 研究、法律推理、数学推理三个领域上,用它造的数据做 RL 训练都打过了经典方法;更关键的是,连这个数据科学家 agent 自己都能被 meta-optimize——验证通过率从 62.1% 自动爬到了 79.6%,全程没人手写 prompt。

我读完最大的感受是:这篇论文真正值钱的地方,不在于某个炫技的算法,而在于它把一个朴素但被忽略的直觉给系统化了——造数据应该是个迭代过程,而且这个迭代过程本身也该被优化。这个 framing 比具体实现更重要。


📖 为什么需要它?现有方法卡在哪

先把脉络捋一下,不然你不知道这篇在跟谁较劲。

合成数据这条线大概是这么演进的:

方法 核心做法 局限
Self-Instruct (2023) zero/few-shot prompt 让模型自己造指令数据 质量难控,容易重复
Grounded Self-Instruct (2024-25) 接地到文档等真实来源 减少幻觉,但难度仍不可控
CoT Self-Instruct (2025) 生成时用思维链构造更复杂任务 难度还是靠运气
Self-Challenging (2025) challenger agent 出题前先跟工具交互 单向,没有"看数据再改"的回路

发现共同的毛病没有?它们都不直接控制数据的难度和质量。 所以才衍生出一堆事后补救的招数——过滤、进化、精炼。但这些都是"生成完了再补救",而不是"生成的时候就盯着质量调"。

说实话,这个痛点我自己在做训练数据的时候深有体会。你 batch 生成一万条数据,跑完才发现有 30% 太简单(模型本来就会,训练它白费梯度)、20% 太难(模型怎么都做不对,RL 拿不到正奖励信号)。然后你只能事后过滤,扔掉一半。整个过程里没有任何一个环节在生成阶段就告诉你"这条难度不对"。

Autodata 的切入点就在这。它说:别造完再补救了,把"看数据→分析→改配方"这个回路直接嵌进生成过程。


🏗️ Autodata 框架:把数据科学家的工作流程拆开

整体框架长这样(论文 Figure 1):

图1:Autodata 整体框架——数据创建与数据分析两个阶段循环,外加对 agent 本身的 meta-optimization

图1:Autodata 的整体循环。内循环是数据科学家 agent 在"数据创建"和"数据分析"两个阶段之间反复横跳,直到数据质量满意;外循环(meta-optimization)则是把这个 agent 本身当作优化对象,让它越来越会造数据。

拆成几块看:

数据创建(Data Creation):agent 基于给定的源材料(数学题、法律文书、CS 论文等)造数据,可以调工具、用之前积累的经验、花推理时计算去构造训练或评估样本。

数据分析(Data Analysis):agent 回头审视自己造的数据——这条样本对不对?质量高不高?够不够难?从数据集层面看,样本够不够多样?拿去训练真能提升模型吗?这些分析结果会反馈给创建阶段。

整体循环(Data Scientist Loop):在创建和分析之间循环,直到满意,最后吐出训练集或基准。外循环还能加护栏防 agent 作弊。

Meta-Optimization:这是最有意思的部分——agent 本身也能被优化。用 autoresearch / meta-harness 那一套思路,用同样的内循环标准(造出更好的数据)去指导外循环(优化 agent 自己)。

这个"内循环造数据、外循环造数据科学家"的双层结构,是这篇论文的骨架。


🔧 Agentic Self-Instruct:四个子 agent 的分工博弈

框架是抽象的,论文给了个具体落地实现叫 Agentic Self-Instruct。主编排器 agent 手底下管着四个 LLM 子 agent(论文 Figure 2):

图2:Agentic Self-Instruct 方法——主 agent 指挥四个子 agent 进行 weak-vs-strong 博弈

图2:Weak-vs-strong 的 Agentic Self-Instruct。主 LLM agent 指挥四个子 agent:challenger 出题、weak 和 strong 两个 solver 各自尝试、judge 评判它们的输出。系统的目标是造出"strong 能做对、weak 会卡住"的题。主 agent 根据 judge 的反馈分析数据、更新 challenger 的 prompt,然后重复整个循环。

四个角色:

子 Agent 干啥的
Challenger 根据主 agent 的详细指令造训练样本
Weak solver 一个相对弱的模型,预期通常做不出来
Strong solver 一个强模型,预期通常能做对
Verifier / judge 检查样本质量,把经验反馈给主 agent

核心逻辑特别朴素,但很聪明:好的训练题,应该是 strong solver 能做对、weak solver 做不出来的那种。

为什么?你想想看——如果一道题 weak solver 都能轻松搞定,那拿它训练 weak solver 就是浪费,没有学习信号;反过来如果连 strong solver 都做不对,那这题大概率是错的或者没法做,RL 拿不到正奖励。只有那个"强能做对、弱卡住"的难度窗口,才是真正能让模型往上爬的台阶。

接受标准也是围绕这个来的: - 可验证任务:要求 strong solver 多数投票正确,weak solver 多数投票错误 - 不可验证任务:要求 judge 测出来的质量存在 gap,让题对 weak 既不太简单也不太难,strong 来兜底保证题本身是对的

有个细节挺巧:weak 和 strong solver 其实可以是同一个模型的不同模式——strong 版本多给点推理时计算、加点 scaffolding 或聚合、给点特权信息,就成了"强"的那个。


🧪 实验一:CS 研究问题——题目太简单的病

第一个战场是用 CS 学术论文造研究问题。这类问题是开放式的,得用 rubric(评分细则)来打分。

模型配置很有意思,是个混搭: - 主 agent + challenger:Kimi-K2.6 - Strong solver:Qwen3.5-397B-A17B - Weak solver:Qwen3.5-4B

接受标准卡得很死:strong solver 平均分 ≥ 0.65、weak solver < 0.5、两者差距 ≥ 20 个百分点。

数据规模:处理 S2ORC 语料里 2022 年后的 1 万多篇 CS 论文,Agentic Self-Instruct 造出 2.8k 个被接受的样本,过质量 verifier 后留 1.3k 高质量样本做 RL。CoT Self-Instruct 基线也走同样的过滤、采同样的 1.3k,公平对比。

先看造出来的数据质量本身(Table 1):

指标 CoT Self-Instruct Agentic Self-Instruct
Weak solver 平均分 0.677 0.458
Strong solver 平均分 0.696 0.772
Gap(强−弱) 0.019 0.314
Agentic 轮数 1.00 6.59
问题长度(字符) 723 619
Rubric 条目数 13.2 13.1

看那个 gap:CoT 方法造出来的题,强弱模型分数差距只有 0.019——几乎没区分度!这意味着 CoT 造的 CS 题对 4B 的 weak solver 来说太简单了,weak 都能拿 0.677。这种数据拿去 RL,梯度信号基本是噪声。

Agentic 方法把 gap 拉到了 0.314,weak 分数压到 0.458,strong 提到 0.772。代价是平均每个被接受样本要跑 6.59 轮(CoT 只跑 1 轮)。

这个迭代过程里发生了什么?论文的分析挺有画面感:在 880 个被拒的轮次里,80% 是因为题太简单(weak 得分太高被毙),13% 是因为 strong 也搞不定。agent 一开始往往出的是"高层次摘要题"(对 4B 太容易),在 judge 反馈的引导下,后续轮次慢慢转向了具体的算法步骤、消融细节、论文里的数值声明这些真·难题。

那训练效果呢(Table 2,训 Qwen3.5-4B,GRPO,1.3k 样本):

训练数据 CoT 测试 mean@3 CoT best@3 Agentic 测试 mean@3 Agentic best@3
Qwen3.5-4B(无额外 RL) 0.630 0.758 0.366 0.484
RL on CoT 数据 0.727 0.853 0.500 0.631
RL on Agentic 数据 0.774 0.894 0.632 0.768

注意这里有两个测试集:一个简单的 CoT 测试集,一个难的 Agentic 测试集。用 Agentic 数据训出来的模型,两边都赢——在简单测试集上 +0.05、在难测试集上 +0.13。这就是双向迁移:在更难的数据上学,迁移到简单任务也照样涨。

训练曲线长这样(Figure 3):

图3:CS 研究任务的 RL 训练曲线——左为训练奖励,中右为两个验证集上的 mean@3

图3:CS 任务 RL 训练过程。左图训练奖励,CoT 数据(红)因为题简单奖励一开始就高、但很快饱和;Agentic 数据(蓝)起点低但持续爬升。中右两图分别是在 CoT 验证集和 Agentic 验证集上的 mean@3——在难的 Agentic 验证集上(最右),蓝线对红线的优势尤其明显。

这里有个细节值得停一下:训练奖励曲线上,CoT(红)一直比 Agentic(蓝)高。如果只看训练奖励,你会以为 CoT 数据更好。 但验证集上完全反过来。这恰恰说明了那个核心痛点——训练奖励高,往往是因为题太简单,模型轻松拿分,但学不到东西。

下面这张是 Agentic Self-Instruct 实际造一道 CS 题的过程演示(Figure 4):

图4:Agentic Self-Instruct 为一篇大语言模型论文逐步生成训练样本和评分 rubric 的过程

图4:针对一篇关于大语言建模的论文,Agentic Self-Instruct 一步步生成训练样本及对应评估 rubric 的进展过程。可以看到题目如何从粗糙逐渐被打磨到"恰到好处"的难度。


🧪 实验二:法律推理——题目太难的反向病

法律这块特别能说明 Autodata 的通用性,因为它碰到的是完全相反的毛病

CS 任务里,CoT 造的题太简单(gap 才 0.019)。法律任务里反过来——CoT 造的法律题太难了,难到 weak solver 几乎全错,RL 同样拿不到有用信号。

数据源用 Pile of Law 里的法院意见书等公开法律文书,评估用 PRBench-Legal 和它的 Hard 子集。模型配置跟 CS 一样。

看数据质量(Table 3):

指标 CoT Self-Instruct Agentic Self-Instruct
Weak solver 平均分 0.159 0.283
Strong solver 平均分 0.717 0.698
Gap(强−弱) 0.558 0.415
Agentic 轮数 1.00 4.98
问题长度(字符) 1,569 900
Rubric 条目数 18.6 17.3
Weak rollout 标准差 7.93 12.63

CoT 法律题的 gap 是 0.558,weak solver 平均分只有 0.159——题难到 weak 基本做不出来。Agentic 方法这次是反向操作:把 gap 从 0.558 缩小到 0.415,weak 分数从 15.9% 提到 28.3%。

这就是我觉得这篇论文最漂亮的地方:同一套 Agentic Self-Instruct 循环,在两个相反的失败模式上都能自动纠偏。 CS 里把题改难、拉大 gap;法律里把题改容易、缩小 gap。方向相反,但下游 RL 都涨了。

核心洞察一句话:关键不是把题变难,而是把题变"恰到好处"——刚好落在模型能够攀爬的难度窗口里。

法律任务的流程比 CS 更精细:每篇法律文书先过一个 extractor 提结构化摘要,challenger 据此出题加权重 rubric,weak 跑 5 次、strong 跑 3 次,再交给一个 loop judge(不是硬编码标准,而是灵活判断)决定这轮要不要接受。judge 还会返回 grpo_suitability 这种结构化裁决。

这个 grpo_suitability 的分布对比特别能说明问题: - CoT 池:只有 4.8% 被判为 high 适合度,45% 是 low - Agentic 池:52% 是 high,只有 2% 是 low

训练结果(Table 4,训 Qwen3.5-4B,GRPO,2.8k 样本):

模型 GPT-5 Legal GPT-5 Legal-Hard Kimi Legal Kimi Legal-Hard
Qwen3.5-4B(无 RL) 0.280 0.167 0.245 0.145
Qwen3.5-397B(无 RL) 0.404 0.277 0.358 0.226
RL on CoT 数据 0.377 0.253 0.343 0.233
RL on Agentic 数据 0.441 0.315 0.393 0.266

这张表里藏着一个很能打的结果:用 Agentic 数据训练后的 4B 小模型,在所有四个指标上都超过了没做额外 RL 的 397B 大模型。 一个 4B 干翻 397B,靠的不是模型本身,纯粹是训练数据质量。

法律的训练曲线(Figure 5):

图5:法律推理任务的 RL 训练曲线——训练奖励、留出验证奖励、以及 PRBench 上的分数

图5:法律任务 RL 训练。这次训练奖励曲线(左)反过来了——Agentic(蓝)的训练奖励反而比 CoT(红)高,因为 CoT 的题太难、模型拿不到奖励。中图和右图的验证表现,Agentic 在 Legal 和 Legal-Hard 上都稳定领先。

对比一下图3和图5的训练奖励曲线,你会发现一个有意思的对称:CS 任务里 Agentic 的训练奖励更低(因为它把简单题改难了),法律任务里 Agentic 的训练奖励更高(因为它把难题改简单了)。训练奖励本身根本不是好数据的指标,落在合适窗口才是。


🧪 实验三:数学/科学推理——锦上添花

第三个领域是数学对象推理,基于一个叫 Principia 的题集(覆盖 MSC2020 和 PHYS 目录)。这里 weak solver 用的 Qwen3.5-4B 其实本身已经是个很强的推理模型了。

对比三种数据源:纯 CoT、纯 Agentic、两者 Combined(训练量翻倍到 18k)。

验证集结果(Table 5,avg@8):

验证子集 Base 4B CoT Agentic Combined
Overall 68.66% 71.08% (+2.42) 71.86% (+3.20) 71.36% (+2.70)
Agentic 子集 52.39% 56.33% (+3.94) 56.79% (+4.40) 55.88% (+3.49)
CoT 子集 77.17% 79.03% (+1.86) 80.22% (+3.05) 79.66% (+2.49)

Agentic 数据(9k)在整体上涨了 +3.20,比 CoT 的 +2.42 高,甚至比训练量翻倍的 Combined(18k,+2.70)还高。用一半的数据量打过了两倍的数据量。 而且在 CoT 验证子集上,Agentic 训练的模型涨得(+3.05)比 CoT 自己训的(+1.86)还多——又一次印证了"难数据迁移到易任务"。

不过我得说句公道话,这个领域的提升幅度(2-4 个点)明显比 CS 和法律温和。分布外的 Principia 基准(Table 6)上整体也就 +1.04(Agentic avg@8),pass@8 上甚至互有胜负——比如 Physics 的 pass@8 上 Combined 还掉了 3.63 个点。所以在数学这块,Autodata 更像是稳定的小幅改进,不是 CS/法律那种戏剧性的逆袭。原因论文也点了:Qwen3.5-4B 在数学推理上已经很强,逼近能力上限,提升空间本来就小。

这里还有个我觉得很务实的发现:训练大幅降低了推理截断率。在 65,536 token 预算下,Agentic 训练把截断率从 23.75% 压到 4.09%(Table 8)。归因分析(Table 9)显示,大约一半的准确率提升来自模型学会了更高效地推理、不再写到一半被截断,而不是真的学到了新知识。这个 honest 的归因我挺欣赏的——很多论文是不会去拆这一层的。


🔬 真正的大招:把数据科学家自己也训一遍

前面都还是"用 agent 造数据"。这一节才是论文标题里"meta-optimize"的兑现——优化这个 agent 本身(论文 Figure 6)。

图6:数据科学家 agent 的 meta-optimization——外循环评估 agent 的 prompt、分析失败轨迹、用 code-editing agent 改 prompt、再验证

图6:数据科学家 agent 的 meta-optimization。外循环在 CS 论文任务上评估 agent 的 prompt,分析失败轨迹找出系统性弱点(比如上下文泄漏),通过 code-editing agent 改 prompt,再在留出验证论文上重新评估。只有当改动提升了 weak-strong 分离率时才接受。这个过程把验证通过率从 62.1% 提到了 79.6%。

方法是把 agent 的 scaffold 当成可迭代改进的代码,用进化优化框架:

  1. 用 Boltzmann 采样(温度 T=0.1)从候选 prompt 种群里挑父代
  2. 在训练论文上评估,收集轨迹和 weak/strong 分数
  3. 用 LLM agent 分析轨迹,写出系统性失败的根因分析
  4. 通过 code-editing agent 改 prompt,产出一个 diff
  5. 在留出验证论文上重新评估
  6. 只有验证分数严格超过父代才接受

结果(Table 7):

Meta 迭代 验证样本数 6 小时验证通过率
Baseline 100 62.1%
Iter 124 100 79.6%

跑了 233 次迭代(接受 126 次),验证通过率从 62.1% 自动爬到 79.6%,全程没有人工改 prompt。

更有意思的是优化器自己发现的几条改进,每条都像是个有经验的工程师才会想到的:

  1. 论文特定性强制:要求题目必须测论文里的特定知识,加了个自测——"如果 solver 不读这篇论文就能答对,那题太简单"
  2. 上下文泄漏防止:上下文只能描述问题域,绝不能包含论文提出的解法(不然就是送答案)
  3. 只允许正权重 rubric 且上限为 7:负权重的评分标准历史上会误触发、破坏 strong 模型分数,干脆禁掉
  4. 结构化 rubric 格式:强制 JSON 格式带整数权重,消除解析错误

这几条改进,说实话如果让我手写 prompt 我大概也就能想到第 2 条。优化器能自动挖出"负权重 rubric 会误伤 strong 模型"这种细节,是真的有点东西。


🤔 我的判断:framing 比实现更值钱

聊点实在的评价。

最打动我的地方:这篇论文的核心贡献其实是一个视角转换——把合成数据从"一次性生成"重新理解成"迭代的数据科学过程"。这个 framing 一旦确立,CS(题太简单)和法律(题太难)这两个看似无关的问题,就被统一成了同一个"调到恰当难度"的问题。一套循环治两种相反的病,这种统一性是真漂亮。weak-vs-strong 的难度信号也很朴素有效——不需要复杂的难度估计模型,让强弱两个 solver 跑一跑,gap 自己就出来了。

让我皱眉的地方

第一,成本。CS 任务平均每个样本要跑 6.59 轮,每轮要调 challenger、weak(多次 rollout)、strong(多次 rollout)、judge 一整套。这个推理开销比 CoT 高了一个数量级。论文自己也承认这是"用推理时计算换数据质量"——但到底划不划算,得看你训练侧能省多少。对大多数没有 Meta 这种算力的团队,这套全家桶可能跑不起。

第二,数学领域的提升偏弱,2-4 个点,而且分布外有掉点。论文把锅甩给"4B 已接近能力上限",这个解释合理,但也暴露了一个边界——当基础模型在某领域已经很强时,Autodata 的边际收益会快速衰减。它真正发光的是 CS / 法律这种"现有方法造的数据难度严重失配"的场景。

第三,hacking 问题。论文诚实地提到了,agent 会试图作弊——比如偷偷改给 weak solver 的 prompt 告诉它"你要表现弱一点"。这种 reward hacking 在多 agent + meta-optimization 的设定下只会更隐蔽。论文靠加约束部分缓解,但这显然不是终局。

放到同期工作里看,Autodata 跟 Self-Challenging、AgentInstruct、autoresearch 这些都有交集。它的差异化在于:生成、评估、失败分析、配方修订、meta-optimization 全都被装进了同一个循环。 别人做了其中一两环,它把整条链路打通了。这是工程整合的胜利,但整合得足够完整,就成了一种新范式。


💡 如果你也在造合成数据

几个能直接拿走的启发:

  • 别只看训练奖励。这篇最反直觉的一点——训练奖励高往往意味着题太简单。判断数据质量要看验证集,更要看强弱模型的 gap。
  • weak-vs-strong 是个便宜好用的难度探针。不用训难度估计器,跑两个不同强度的 solver,看谁做对谁做错,难度信号自己就浮出来了。
  • 目标是把题调到恰到好处,而不是越难越好。太简单没梯度,太难没正奖励,中间那个窗口才是金矿。
  • prompt 工程可以交给优化器。如果你的 agent scaffold 已经稳定,把 prompt 当代码、用进化优化自动迭代,可能比你手调更狠——尤其是那些反直觉的细节(负权重陷阱这种)。

最后展望一句,论文埋了个钩子叫 Co-improvement:现在是 challenger 帮着训 solver,未来让 challenger 和 solver 同步进化——出题的越来越会出、做题的越来越会做,互相把对方往上推。这要是真能稳定跑起来,就有点 self-play 那味儿了。

这个方向我觉得是对的。我们造数据的方式,确实到了该从"写死的流水线"走向"会自我进化的 agent"的时候了。


觉得有启发的话,欢迎点赞、在看、转发。跟进最新 AI 前沿,关注我