![]()
2016年,AlphaGo让世界记住了"自我对弈"这个词。两个一模一样的神经网络互相下棋,越下越强,最后强到能吊打人类冠军。
但如果你以为这套把戏能直接搬到语言模型身上,那就想简单了。
围棋有一个天然的好处:规则永远不变,棋盘永远是19乘19,输赢永远由棋盘上的黑白子说了算。可语言模型要处理的是数学题、代码题、还有需要连续好几十步操作的工具调用任务。如果只是让模型自己出题自己做,很快就会撞上一堵墙,这堵墙有个专门的名字,叫"隐形皮带"。
**隐形皮带指的是:一个模型出的题目,永远不会比它自己脑子里已经装着的知识更难。**
这就好比让一个只会煮泡面的人去写菜谱大全,他写出来的菜谱翻来覆去也就是那几种泡面的花样,加不加蛋、加不加葱、水放多少,他写不出佛跳墙,因为他压根不知道佛跳墙是什么。自我对弈在语言模型这里最大的风险,就是模型给自己出的题目会越来越单调、越来越简单,最后所有的题目看起来都长得差不多,这种现象论文里管它叫"模式坍缩"。
华盛顿大学、卡内基梅隆、MIT等多所高校和机构的研究者联手,在2026年这篇论文里,给出了一个解法。这个解法有一个挺有意思的名字,叫SPADE
**SPADE:全称是Self-Play in Adaptive Synthetic Executable Environments,翻译过来是"在自适应合成可执行环境中的自我对弈"。**
这套系统的核心想法说起来不复杂,用一个模型同时扮演两个角色。一个角色叫"环境设计师",专门负责写训练环境的代码,这些环境不是随便写写的问答题,而是完整的、可以运行的Python程序,带着状态、带着规则、带着怎么判断对错的逻辑。另一个角色叫"推理智能体",专门负责去解这些环境设计师造出来的题。
这两个角色其实是同一套参数,同一个大脑,只是穿上了不同的"工作服"。
为什么代码是关键:一份说明书和一台真机器的区别
先说清楚一件事:SPADE里的"环境",跟我们平时说的"出一道题"完全不是一个量级的东西。
如果你让一个模型写一道数学题,那顶多就是一段文字加一个标准答案,做对了给1分,做错了给0分,事情就这么结束了。但SPADE让环境设计师写的是一个完整的程序,这个程序遵循一套叫做
**Gym风格接口:一种在强化学习领域被广泛采用的编程规范,最早由OpenAI提出。它规定任何一个训练环境都要提供reset()和step()两个函数,reset()负责把环境恢复到初始状态,step()负责接收智能体的一个动作,然后返回新的状态、奖励、以及这一局是否结束。**
的程序。这意味着什么?意味着环境设计师不是在写一道题,而是在搭建一整个小世界,这个世界里有隐藏的状态(比如一个法律纠纷案例里,爷爷到底立没立遗嘱,这个信息一开始藏着,主角得靠一步步询问才能挖出来),有多轮交互(不是一锤子买卖,而是像玩文字冒险游戏一样,你每做一个动作,世界就给你一点反馈,你根据反馈调整下一步),还有一套写在代码里、跑起来就能判断对错的验证逻辑。
这里必须打个比方,才能真正说清楚这个设计的分量。
想象你要培养一个厨师。第一种做法是给他一堆菜谱,菜谱上写着"红烧肉需要五花肉、酱油、糖",他背下来就算过关。第二种做法是直接把他扔进一个真实的厨房,锅碗瓢盆俱全,食材新鲜但会变质,火候需要现场判断,客人还会因为菜咸了淡了而现场反馈。
第一种做法培养出来的是"背菜谱的人",第二种做法培养出来的才是"真正会做菜的人"。如果SPADE只是让环境设计师写"一道数学题加一个答案",那推理智能体学到的顶多是解题技巧的堆砌,但因为环境设计师写的是完整的可执行程序,推理智能体在里面练习的是真正的、需要连续判断和调整的解决问题的能力。这也是为什么论文特别强调,这套系统能同时覆盖单轮推理任务(比如证明一道数学题)和多轮工具调用任务(比如连续操作好几个API接口才能完成一个客服工单),因为它们本质上都能写成同一种带
reset()
step()
的程序。
怎么判断一道题出得好不好:用"提示"来测量差距
光有能写代码的环境设计师还不够,最难的问题其实是:怎么知道环境设计师出的题,出得好不好?
太简单的题,推理智能体一学就会,没什么锻炼价值。太难的题,推理智能体怎么都做不出来,同样白费功夫。真正有价值的题,应该卡在推理智能体"踮起脚尖刚好能够到"的那个难度上。
这在教育学里其实早有说法,叫"最近发展区",一个孩子独立能做到的事和在别人帮助下能做到的事之间那个区间,才是学习效率最高的地方。SPADE的解法,正是把这个教育学直觉变成了一个可以量化、可以拿来当奖励信号的公式。
方法是这样的:环境设计师每造出一个环境,还要顺手写一段
**特权提示:环境设计师附加在环境上的一段额外信息,内容通常是解题的关键思路、部分解法或者一个重要的观察点,但绝不会直接把答案说穿。**
然后让推理智能体去玩这个环境两次,一次不给提示,正常做,另一次带着提示去做。两次得分的差距,就是这个环境的"
hint-based regret
(基于提示的遗憾值)":
带提示时的平均得分减去不带提示时的平均得分。
这个差距能说明什么?论文里划出了三种情况。第一种,差距很大,说明这道题推理智能体自己做不出来,但给点提示就能豁然开朗,这正是最有教学价值的"学习前沿"。第二种,差距趋近于零而且两次得分都很高,说明这题对推理智能体来说已经是小菜一碟,练了也没什么长进。第三种,差距趋近于零但两次得分都很低,说明这题压根就是道无解题或者难度爆表,给提示也救不了,练了也是白练。
这里最值得琢磨的一点是,这套机制巧妙地绕开了一个经典难题。
在强化学习的"非监督环境设计"这个研究方向里,早年有一套叫
**PAIRED:一种由对抗训练驱动的环境设计方法,2020年提出,核心思路是让一个对抗者去设计能让智能体犯错最多的环境,从而形成一种此消彼长的博弈过程,最终逼出一套"极小化极大遗憾"的最优策略。**
的经典方法,但它需要单独训练一个"对手模型"专门负责出难题,而对手模型自己就有可能耍赖,故意造出根本无解的环境来骗分。SPADE的巧妙之处在于,它没有引入额外的对手,而是让"带提示的自己"扮演了这个理论上的对手角色。既然带提示的自己代表了这个环境理论上能达到的最高水平,那这个差距天然就带着一种约束,如果环境本身无解,带不带提示得分都是零,差距自然也是零,环境设计师根本没法靠出无解题来骗奖励。
论文里还专门给这套机制做了数学证明,如果假设成立,那么在这场博弈的均衡点上,推理智能体在所有合法环境上都会达到不需要提示也能做到的最优水平。这不是空口说白话,是附录里有完整证明过程的结论。
光有好的打分机制还不够:为什么必须往真实语料里找灵感
如果只靠环境设计师自己闷头想题目,即使有了刚才说的这套精妙打分机制,还是会撞上开头提到的那堵墙,模式坍缩。
打分机制只能判断已经出好的题目质量高不高,但没法解决"题目从哪里来"这个更底层的问题。一个只靠自己脑子里存量知识循环利用的系统,无论打分再精准,能想到的题材终究是有限的。
论文的解法是给环境设计师喂一份持续更新的外部语料,每一轮生成新环境之前,先从一个大规模预训练语料库里随机抽一篇文档,可能是一篇物理学论坛的帖子,可能是一段大学教科书里的化学知识,让环境设计师照着这篇文档的知识点去构造一个全新的环境。
这个思路其实特别像我们上学时老师留作业的方式。如果一个老师只会出自己出过的题的变体,比如翻来覆去都是"鸡兔同笼"换个数字,学生练久了也就那点花样。但如果老师每次翻开一本新的参考书,从物理、化学、法律、天文各个领域随手挑一个知识点来出题,学生接触到的题材就会源源不断地更新。如果去掉这份外部语料,会发生什么?论文用数据说话:去掉语料引导后,衡量环境多样性的一个指标叫
**Vendi分数:一种量化多样性的评估指标,本质是计算一批样本里"有效不同的样本数量",数值越高说明这批样本彼此差异越大。**
结果显示,有语料引导时这个分数是0.68,接近理论上限,去掉语料引导后暴跌到0.04,论文里描述了一个具体到让人哭笑不得的场景:在训练进行到第290到312步这个窗口,没有语料引导的那次实验,连续41次生成的环境全都是同一个"旋转迷宫"任务,只是迷宫的具体布局换了换。
这还没完,论文还专门设置了一个环境记忆机制,把过去生成过的环境连带它们的难度评分一起存起来,供环境设计师下一轮参考,已经被推理智能体轻松拿下的题目就别再出了,明显太难攻克不下的题目也标记一下别再撞南墙。语料库负责"这道题该讲什么内容",记忆库负责"这道题该出多难",两者各管一段,缺一不可。
实测效果:从数学竞赛到多轮工具调用全线跑分
说了这么多设计思路,最终还是要看数字说话。
研究团队在三个不同规模的Qwen3模型上做了实验,从40亿参数的小模型到300亿参数(激活参数30亿)的中等规模模型都测了一遍。对比对象是两种"固定环境"的基线方法:一种是用GPT-5.5静态生成一批题目后就不再变化,另一种是官方发布的、包含400个环境的RLVE数据集,这两种基线本质上都是"题库定了就不再变",而SPADE是"题库跟着学生水平持续调整"。
在最大的300亿参数模型上,SPADE在八个覆盖数学竞赛、科学推理、代码生成和逻辑推理的评测集上,平均分比训练前的原始模型提高了8.1分,比表现最强的固定环境基线还要再高出5.3分。更值得注意的是一个规律:模型规模越大,SPADE相对固定环境方法的优势就越明显,40亿参数模型上的提升是5.2分,80亿参数模型上是5.7分,到了300亿参数模型直接跳到8.1分。
| 模型规模 | 未训练基线 | 固定环境GRPO | 固定环境RLVE | **SPADE** |
| 40亿参数 | 38.9 | 39.9 (+1.0) | 42.5 (+3.6) | **44.1 (+5.2)** |
| 80亿参数 | 49.8 | 51.0 (+1.2) | 53.8 (+3.9) | **55.5 (+5.7)** |
| 300亿参数 | 50.2 | 51.4 (+1.2) | 53.0 (+2.8) | **58.3 (+8.1)** |
这个现象背后的原因不难理解:固定题库对小模型来说可能还有点挑战性,但对越来越强的大模型来说,题库很快就会被"刷穿",之后再怎么训练也是重复劳动。而SPADE的环境设计师会跟着推理智能体的进步持续调整出题难度,模型越强,这种持续供给新鲜、匹配难度题目的能力就越值钱。
工具调用这个方向的测试结果也很能说明问题。团队让环境设计师改去写模拟API工具的多轮任务环境,一套虚构的银行系统、客服工单系统、订单管理系统,推理智能体需要连续调用好几个工具接口才能完成一个用户请求。在300亿参数模型上,这套自造的工具调用训练环境,在
**ACEBench-Agent:一个专门评测智能体多步骤工具调用能力的测试基准。**
上带来了13.9分的提升,在
**BFCL v4多轮测试:伯克利函数调用排行榜的多轮对话版本,专门考察模型能否在连续多轮交互中正确调用工具完成任务。**
上带来了5.7分的提升。而且这套自己训练出来的系统,在这两个基准上甚至超过了几个专门为工具调用场景设计数据合成流程的同行系统,比如AgentScaler和Agent-World。
拆开来看,每个部件到底谁在起作用
论文做了一整套消融实验,把SPADE拆开来一个一个部件地测,看看到底哪个部分才是真正起作用的关键。
结果相当有意思。如果把环境设计师彻底冻结(不让它接受任何梯度更新),同时也拿掉环境记忆,那么整个系统的表现居然比压根不训练还要差,八个基准的平均分从未训练时的50.2掉到40.5,倒退了将近10分。这说明一个静止不动、没有和推理智能体共同进化的环境设计师,反而是拖后腿的存在。
那如果换一个更强的外部模型来当环境设计师呢?团队用GPT-5.5扮演固定不变的环境设计师,同时保留语料引导和记忆机制,结果确实比不训练要好(53.0分对比50.2分),但只拿到了完整SPADE八分之一多一点的提升幅度,而且在代码能力这一项上甚至比不训练时还差一点点。这一点特别值得琢磨:哪怕换上一个能力更强的模型来出题,只要这个出题者不能根据学生的实时反馈调整自己的策略,效果就大打折扣。这就像请了一位学识渊博的家教,但这位家教完全不看学生的作业反馈,只按照自己脑子里固定的教学大纲照本宣科,再厉害的家教,脱离了对学生实际水平的感知,教学效果也会打折。
去掉语料引导单独测试,八项平均分是53.5,去掉记忆单独测试,是53.2,这两个数字都明显低于完整版的58.3分,但也都明显高于彻底冻结那个40.5分。这说明语料和记忆各自都在发挥作用,但真正的核心引擎,还是让环境设计师本身持续接受梯度训练、和推理智能体一起共同进化这件事。
环境设计师是怎么"自己变聪明"的
论文里有一段追踪分析特别耐人寻味,团队盯着同一个训练过程,观察环境设计师从头到尾生成的环境到底发生了什么变化。
生成指令从头到尾没有变过,一直是同一套模板,要求环境设计师造出带隐藏状态、多轮交互、部分奖励的环境,每一轮抽到的语料文档也是随机的,跟训练进度没有关联性。也就是说,如果生成的环境真的变得更难了,那这个变化只能归因于环境设计师本身通过训练变聪明了,而不是提示词或者素材发生了变化。
研究团队盯上了物理类环境的一个具体细节:环境的开场提示里,是不是直接把解题需要用到的核心公式给写出来了。在训练刚开始的阶段,大约四分之一的物理环境会在开场白里直接把公式摆出来,训练到后期,这个比例掉到了5%左右。
一个具体的例子摆在论文里对比得很清楚。早期一个环境的开场提示里直接写着"某些老模型将相对论质量描述为m等于m0除以根号下1减v平方除以c平方",答案思路几乎是明摆着的。而训练到后期的一个热力学环境,开场提示里只剩下操作面板:"激活加热"、"启动膨胀"、"开始冷却"、"测量当前熵值",没有一句话提到公式本身,全靠推理智能体自己一步步操作、观察反馈、推导出答案。
这个转变背后其实藏着一个更深层的现象。研究团队也顺带追踪了推理智能体这一侧的行为变化,同一批训练日志显示,在训练初期,模型面对问题会一股脑先把所有数学推导都写在纸面上,一旦格式出错就没有任何挽回机会,训练到中期,模型开始学会先试探性地提出短小的假设,根据环境反馈来修正,训练到后期,模型学会了先收集足够的证据,再一次性给出推导。论文里记录了一个具体的例子:一道需要推断隐藏规律的题目,模型先用三步简单的探测动作摸清楚了函数在几个点上的取值,然后才动笔推导,一次性给出了正确答案,只用了12步限制中的4步就搞定了。
这两条线索合在一起,就描绘出一幅相当立体的画面:环境设计师逐渐学会不再把答案的钥匙塞进题目里,而推理智能体也逐渐学会不再依赖题目里泄露的线索,转而依靠真正的探索和推理去解决问题。这两者的进步不是各自独立发生的,而是互相驱动的,题目变难逼着推理智能体去练真本事,推理智能体的能力提升又反过来倒逼环境设计师去出更精细、更需要交互的题目。
写在后面
读完这篇论文,最让我意外的一点不是它的核心算法设计,而是团队坦承的一个细节:在40亿和80亿参数这两个较小的模型上,用来打分的"提示遗憾值"这个信号,在训练过程中经常会跌到零以下,理论上这个值不该是负的,因为多给一点信息,怎么算都不该让智能体表现变差。但小模型有时候会被提示误导,反而做得更差了。这不是论文藏起来不说的瑕疵,而是被明明白白画在图里、写在正文里的观察。
这种坦诚挺难得的。一篇讲"自我进化系统"的论文,本可以把叙事包装得天衣无缝,但作者选择了把不完美的地方摆出来,还专门讨论了为什么会出现这种情况,可能是提示的表达方式对小模型来说太绕,也可能是小模型本身的能力还不足以充分利用额外信息。
还有一处细节值得单独记一笔:论文附录里提到,有41%的环境设计师原始生成代码,因为一个很小的字符串转义错误直接跑不起来,一个花括号该转义没转义,导致解析\boxed{}这样的动作格式时程序崩溃。但训练管道里有个专门的修复程序能把这类小错误自动纠正,纠正之后有效率能到100%。这说明再精巧的自我进化系统,底层依然离不开工程上老老实实的兜底和纠错,聪明的设计和笨拙的容错缺一不可。
如果一个系统真的能持续给自己出题、持续给自己改卷子,那它离真正意义上的"自我学习"还差多远?这篇论文没有给出终极答案,但它确实往前迈了扎实的一步。
Q&A
Q1:SPADE是什么?
A:SPADE全称Self-Play in Adaptive Synthetic Executable Environments,是一套让单个语言模型同时扮演"环境设计师"和"推理智能体"两个角色的自我对弈训练框架。环境设计师负责用Python代码写出完整的、带状态和奖励规则的训练环境,推理智能体负责在这些环境里学习解决问题,两者共用同一套模型参数,训练过程中相互促进、共同进化。
Q2:SPADE和之前的自我对弈方法有什么不同?
A:以往很多自我对弈方法只是让模型出"一道题带一个答案",容易陷入模式坍缩、题目越出越单调。SPADE让环境设计师生成的是完整的可执行程序,同时引入了基于提示差距的打分机制(专门衡量题目难度是否卡在推理智能体的学习前沿),并且持续从真实预训练语料里抽取灵感,防止题材枯竭。
Q3:SPADE的效果具体好在哪里?
A:在300亿参数规模的模型上,SPADE让八项数学、科学、代码、推理基准的平均分比训练前提升了8.1分,比最强的固定环境基线还要高出5.3分,在工具调用类任务上,ACEBench-Agent基准提升13.9分,BFCL v4多轮测试提升5.7分。而且模型规模越大,SPADE相对固定题库方法的优势就越明显。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.