让模型自己出题、自己判卷、自己攒"技能包":Skill Self-Play 怎么把自进化的两头都占了
开头痛点
如果你最近跟进过 LLM 自进化(self-evolution)这条线,大概率会被一个老问题硌到:让模型自己出题自己练,听起来很美,做起来两头不讨好。
一头是"绑环境"的路线——代码执行器、棋类模拟器、检索引擎,判分确实准,但任务空间被环境焊死了,模型练来练去就那几样。另一头是"开放式生成"的路线——让模型随便出题,再用格式检查、多数投票这类事后过滤兜底。任务面是宽了,可生成质量没人管,病题、错题混进训练池,几轮迭代下来数据就"塌"了。
说实话,这个两难我在看 Absolute Zero、SPIRAL 这批自弈工作的时候就一直在想:有没有一种中间形态,既有环境级的验证精度,又不把任务空间锁死?Qwen 团队这篇 Skill Self-Play(Skill-SP)给的答案挺漂亮——把"技能"(skill)当作可进化的任务模板接口,让出题、解题、技能库三者在一个 RL 循环里共同进化。
核心摘要
Skill-SP 是一个由出题器(Proposer)、解题器(Solver)和技能控制器(Controller)组成的共进化框架。核心思路一句话:每个 skill 打包了某类任务的规则、示例和可执行验证器,保证这一类任务"出得对、判得准";而技能库本身在训练中不断被精炼、剪枝、归纳扩充,于是任务多样性也不丢。效果上,工具调用基准最高涨 42.9 个点(Ministral-3-8B 从 20.7 到 63.6),逻辑推理 ZebraLogic 最高涨 12.0 个点,全面压过无引导自弈基线。我的判断:这不是底层算法突破,而是把"技能"这个概念嵌进自弈循环的一次很扎实的工程范式整合——但它解决的痛点是真的,消融也做得干净,值得细读。
📖 论文信息
- 标题:Skill Self-Play: Pushing the Frontier of LLM Capability with Co-Evolving Skills
- 作者:Siyuan Huang, Pengyu Cheng, Haotian Liu, Tao Chen, Yihao Liu, Jingwei Ni, Shijie Zhou, Ziyi Yang, Gangwei Jiang, Mengyu Zhou, Yu Cheng, Xiaoxi Jiang, Guanjun Jiang
- 机构:Qwen Large Model Application Team (Alibaba),联合 CUHK、人大、中山大学、北大、ETH Zürich、University of Zurich、University at Buffalo
- 链接:https://arxiv.org/abs/2607.22529 (2026 年 7 月 24 日提交)
- 代码:https://github.com/Qwen-Applications/skill-self-play
🎯 问题动机:自进化的"验证-多样性"两难
论文 Figure 1 把三条路线画得很直白,我照着讲。

图 1:左,绑环境的自弈(代码执行器/游戏模拟器/检索引擎)验证可靠但任务空间窄;中,无引导生成+事后过滤,覆盖面宽但过滤是被动的,残留错误会污染训练;右,Skill-SP 用主动的技能编排器,技能引导生成与开放探索双流并行,同时拿到广覆盖和高保真。
左边那类方法,判分靠真实环境,奖励信号干净,可任务类型被环境钉死。中间那类,生成器撒开了出题,事后过滤却只是个"被动筛子"——能滤掉格式错误,但滤不掉"看起来合法、实际有病"的任务,更没法主动引导生成器产出可复用、逻辑自洽的任务模式。论文引用的 synthetic data collapse 研究说的就是这事:误差一轮轮累积,合成数据最终坍缩。
作者的破题点在于把 skill 形式化为一个"任务模式接口"。你想想看,自弈循环里那些零散分布在各条轨迹上的经验,直接塞进出题器的 prompt 会带来严重的上下文膨胀;而 skill 把这些经验蒸馏成紧凑、可复用、可共进化的单元。它不是事后过滤,而是全程参与:生成前注入结构先验,生成后提供可执行验证器,跨迭代追踪历史难度来管课程进度。
这个抽象我觉得是全文最值钱的地方。它跟 Anthropic 之前提的 Agent Skills 概念一脉相承(论文也明确引了),但Skill-SP 往前多走了一步:skill 不只是推理时加载的知识包,而是训练时可进化的" curriculum 建筑材料"。
🧠 方法核心:出题、解题、技能库,三方共进化

图 2:框架总览。进化中的技能库经 Skill Router 采样后指导出题器生成任务,候选任务过有效性验证,再按 frontier reward 排名构建解题课程;验证失败、新颖样本和任务统计反馈给技能进化控制器,触发技能的精炼、剪枝与归纳。
整个循环拆开看是三块。
出题器:技能条件生成 + 门控课程奖励。 每个 skill 是个六元组 \(s = \langle m, r, h, e, \nu, \sigma \rangle\):路由元数据、程序规则、生成提示、few-shot 示例、可执行验证器、历史使用统计。出题分两股流——技能流在采样到的 skill 条件下生成 \((x, c)\),探索流不带任何 skill 约束自由生成,专门用来防模式坍塌。
这里有个关键设计。自弈里出题器的经典目标是瞄准学习前沿,即中等难度分 \(1 - 2|v_{\text{solve}} - 0.5|\),\(v_{\text{solve}}\) 是解题器在该任务上的期望成功率。但只优化这个,出题器很快就会 reward hacking——出些根本没解的病题来"人造难度"。Skill-SP 的处理是给奖励加一道硬性闸门:
valid 的判定是三个条件的交集:schema 合规、skill 自带的验证器通过、以及探针一致性——用当前解题器跑 \(K\) 次 rollout,多数答案必须唯一且与出题器给的参考答案一致。等于说出题器出的每道题,都得先被解题器"试做"验证一遍才算数。无效任务直接零奖励,造病题这条路被堵死了。
解题器:混合前沿课程。 两条流里通过验证的任务,按 frontier reward 排名,按混合比例 \(\alpha\) 各取 top 凑成训练池 \(D^{(t)}\)(实验中 \(\alpha = 0.5\)),用 GRPO 更新解题器。出题器同样用 GRPO 更新,而探针 rollout 顺手复用为 \(v_{\text{solve}}\) 的估计,不额外花采样预算——这个细节挺省的。
技能库:精炼、剪枝、归纳。 这是让系统不"停滞"的关键。每轮迭代:根据执行反馈更新技能统计并修正系统性失败(精炼);把期望 frontier reward 低于阈值 \(\gamma_{\text{prune}}\) 的"已饱和"技能归档(剪枝);再从探索流里筛出 frontier reward 高于 \(\gamma_{\text{induce}}\) 的新颖任务,由控制器抽象成候选技能包,过完整性检查和词法相似度去重后入库(归纳)。一轮轮下来,技能库就是个活的课程引擎。
整个框架可以写成一个双层优化:外层联合优化出题器和技能库,让它们产出有效且瞄准前沿的任务;内层解题器在这些任务上最大化验证奖励。形式漂亮,落地也都对得上。
📊 实验结果:5 个 backbone 全面开花
实验跑在两类可验证任务上:工具调用(API-Bank L1-L3 + BFCL 四类)和逻辑推理(ZebraLogic 四档规模)。五个 backbone 从 3B 到 14B:Qwen3-4B-Instruct、Qwen3-8B、Ministral-3-8B/14B、Granite-4.1-3B。出题器和解题器用同一个 checkpoint 初始化,技能精炼和归纳也不借助外部强教师。训练 5 轮迭代,GRPO,工具调用每轮 8000 题、\(K=10\) 探针,推理每轮 1920 题。
工具调用主表(avg@8,Overall 列):
| Backbone | Base | + Unguided SP | + Skill-SP |
|---|---|---|---|
| Qwen3-4B-Ins | 60.2 | 64.1(+3.9) | 66.7(+6.5) |
| Qwen3-8B | 69.4 | 71.0(+1.6) | 72.2(+2.8) |
| Ministral-3-8B | 20.7 | 20.8(+0.1) | 63.6(+42.9) |
| Ministral-3-14B | 22.2 | 59.0(+36.8) | 64.5(+42.3) |
| Granite-4.1-3B | 57.2 | 58.2(+1.0) | 62.5(+5.3) |
最抢眼的是 Ministral-3-8B 那一行。这个模型零样本下 schema 遵循基本是崩的(BFCL 上只有 12.8),无引导自弈完全带不动——因为 base 模型自己出不出合法任务,自弈循环连启动信号都没有。Skill-SP 靠初始技能库把第一把火点着,直接拉了 42.9 个点。说真的,看到这个数的时候我愣了一下,这已经不是"提升"而是"救活"了。
对本来就强的 Qwen 系,提升是 2.8 到 6.5 个点的稳态增长,而且论文强调 Skill-SP 在所有子项上严格为正,Unguided SP 则会在个别子项上掉点(比如 Granite 的 JS 子项降 3.0)。
逻辑推理主表(ZebraLogic,avg@8):
| Backbone | Base Overall | + Skill-SP Overall | 小谜题提升 | Cell 级提升 |
|---|---|---|---|---|
| Qwen3-4B-Ins | 72.1 | 73.5(+1.4) | +0.1 | +3.9 |
| Qwen3-8B | 23.6 | 32.4(+8.8) | +14.8 | +5.4 |
| Ministral-3-8B | 5.0 | 11.2(+6.2) | +18.7 | +20.0 |
| Ministral-3-14B | 5.4 | 17.4(+12.0) | +35.3 | +19.1 |
| Granite-4.1-3B | 11.6 | 12.6(+1.0) | +3.0 | +0.8 |
有个细节值得点出:Unguided SP 在推理域直接缺席——它根本合成不出合法的 zebra 谜题,自弈循环起不来。这本身就是"技能引导必要性"最硬的证据。另外注意 Large/X-Large 两档对弱模型几乎没动,论文也坦承纯自弈有最低能力门槛,这个态度是诚实的。

图 3:Skill-SP(红实线)在工具调用和逻辑推理两个家族上全面外扩 base(灰虚线);Unguided SP(黄点线)只在工具调用上可比,推理域因无法合成合法谜题而缺席。
🔬 消融:四个设计维度逐一验证
消融都在 Qwen3-4B-Ins 上做,Overall 相对满血系统(66.7)的变化:
| 消融变体 | Overall | 变化 |
|---|---|---|
| Full System | 66.7 | — |
| Unguided SP(去掉技能编排) | 64.1 | 降 2.6 |
| Uniform routing(均匀路由) | 64.8 | 降 1.9 |
| Frozen skills(技能库冻结) | 64.4 | 降 2.3 |
| Frozen proposer(出题器冻结) | 64.6 | 降 2.1 |
| Frozen feedback solver(评估用解题器冻结) | 63.7 | 降 3.0 |
| Frozen both(双冻结) | 63.5 | 降 3.2 |
几张图配着看更清楚。

图 4a:Skill-SP 五轮迭代稳步爬升(+6.5),Unguided SP 第二轮就开始平台期甚至回落(+3.9),曲线形态差异很明显。

图 4b:只用技能流、不混探索流,L2 上掉 4.1 个点、L3 掉 2.9——双流混合防模式坍塌不是摆设。
我觉得最有说服力的是 Frozen feedback solver 这组:把用于探针评估的解题器冻结,出题器拿到的就是过时的难度信号,直接掉 3.0 个点。这说明"前沿追踪"必须是动态的——出题器、解题器、评估器三方得一起往前走,缺一个都不行。Frozen skills 掉 2.3 则说明光有技能不行,技能库不进化照样衰退。这两组消融把论文的核心论点钉得挺死。
📈 数据回路诊断:技能库真的在"活"吗
最终准确率只能看到结果,作者还审计了训练池内部,这是我认为论文做得比多数自弈工作扎实的地方。

图 5a:技能流生成任务的平均解题成功率稳定在 0.57 附近(紧贴 0.5 的前沿虚线),Unguided SP 和探索流分别漂到 0.70 和 0.75——题目出得太容易,训练信号就水了。

图 5b:问题经 all-MiniLM-L6-v2 编码后做 PCA。Unguided SP(橙)挤在几个窄语义簇里,Skill-SP 混合池(蓝)覆盖明显更广。

图 5c:五轮迭代里技能包持续被归纳(浅蓝)、更新(深蓝)、退休(灰),每轮大约新增 20 个包——技能库是个动态系统,不是静态资产。

图 6:活跃技能数(至少产出 1 条被接受记录)五轮涨到 86;用指数化香农熵算的"有效技能数"涨到 46,说明生成没有集中在少数几个模板上。
0.57 对 0.70/0.75 这个对比很有说服力:没有技能引导,生成器会自发滑向"舒服区",题目越出越容易,frontier reward 的设计初衷就被架空了。有效技能数的统计也很讲究——用熵来折掉长尾,比单纯报"库里有 N 个技能"诚实得多。
🤔 我的判断
亮点是真的。 把 skill 从"推理时知识包"升格为"训练时可进化的课程接口",这个抽象切中了自进化的核心矛盾;门控前沿奖励用探针一致性堵 reward hacking,简洁且对症;消融覆盖数据侧和共进化侧两个维度,诊断部分甚至做了嵌入空间的多样性审计,完成度高于大多数同类工作。
但也有几个地方要保持清醒。 其一,两个任务家族都是强可验证域——API 调用有 schema、zebra 谜题有确定性 checker。这套"探针一致性"验证在开放式任务(写作、开放式问答)上根本不成立,论文标题里的 "Pushing the Frontier of LLM Capability" 范围其实没标题听上去那么宽。其二,+42.9 这种惊人数字主要来自"base 模型零样本崩坏"的救援场景,对本来就对齐良好的模型,实际增益是 2 到 6 个点——有效,但别被最大值带偏预期。其三,只跑了 5 轮迭代、最大 14B 模型,技能库长期进化会不会出现新形式的坍缩(比如技能之间语义趋同、归纳质量随轮次退化),论文没回答。其四,跟"用强教师蒸馏"或"人工课程"的对照缺失,Skill-SP 的相对性价比不好判断——它赢在零监督自举,但如果手头有现成高质量数据,谁更划算还不好说。
工程启发。 如果你在做 Agent 后训练,这篇给了两个可以直接抄的点:一是"任务验证三件套"(schema + 可执行验证器 + 探针一致性),任何自生成数据管线都值得加;二是把中间产物沉淀成带验证器的技能包而不是堆轨迹,上下文效率和可复用性都好得多。 skill 六元组里带 \(\nu\)(验证器)和 \(\sigma\)(统计)这两个字段的设计,尤其值得借鉴。
收尾
自进化这条线,前两年的主角是"造环境",去年开始流行"放养生成+过滤",Skill-SP 代表的第三条路——用可进化的技能接口做主动编排——我觉得可能会成为接下来 Agent 自训练框架的标配组件。真正悬而未决的问题还是那个:当验证信号没法程序化的时候,这套东西还剩多少功力?这可能得等下一篇论文来回答了。
觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我