技能好不好,回滚跑一遍才知道:Skill-α 把技能生成变成了 RL 问题
做 Agent 的人最近应该都绕不开一个东西:skill。给智能体挂一份 SKILL.md,告诉它怎么拆任务、怎么调工具、怎么检查中间结果,模型不用重训,行为就能被塑形。
但用着用着就会碰到一个挺烦的问题——技能是谁写的,写得对不对,根本没法评。
你想想看:一份技能文档读起来通顺、结构清晰,不代表它真的能让智能体干得更好。有的规则写得漂亮但纯属误导,有的经验总结得太具体换个任务就失效。更麻烦的是,当你往技能里加了一条新规则,智能体表现变好了,你分不清是这条规则的功劳,还是模型本来就能做对那道题。
没有监督信号,就没法训练。这就是技能生成一直停留在"手工+启发式"阶段的根本原因。
这篇 Skill-α 论文给我的感觉就是:它把这个问题想明白了。
核心摘要:技能生成缺的不是生成能力,是监督信号——一份技能通不通顺和它好不好用是两回事。Skill-α 的思路很巧:把技能生成拆成一连串局部编辑动作,每改一次,就让 worker 智能体在同一个锚定问题上分别用"改前"和"改后"的技能各跑一遍,用分数差当奖励,拿 GRPO 去训。这套叫 rollback reward 的设计,把编辑级的信用分配问题给解决了。效果上,tau2-bench 平均通过率比最强基线 SkillPro 高 6.7 个点,CL-Bench 高 3.3 个点。说实话这不是什么底层理论突破,但它切的是真痛点,方案也扎实,值得做 Agent 的人认真读一遍。
📖 论文信息
- 标题: Progressive Agent Skill Generation via Reinforcement Learning
- 作者: Junhao Shen, Zhanqiu Zhang, Yiwen Guo, Hong Cheng
- 机构: 香港中文大学、LIGHTSPEED、独立研究者
- arXiv: 2608.01678(2026年8月3日)
- 代码: github.com/ejhshen/skill-alpha
🎯 这个问题到底难在哪
技能生成现在主要有两条路子。一条是从文档出发,把产品手册、规则说明压成程序性指令,Ctx2Skill、AutoSkill 都是这个思路;另一条是从经验出发,把成功或失败的执行轨迹蒸馏成可复用的指导,ExpeL、SkillPro 属于这类。
两类方法有个共同的软肋:每条证据该怎么改变正在写的那份技能,全靠人拍脑袋设计的启发式规则。这条轨迹该合并进去还是单独成条?那条规则过时了该改还是该删?现有方法基本不回答这些问题。
更深的坎在训练信号上。数学推理有标准答案,代码有单测,搜索有点击率,但技能这东西,唯一的评价标准是"挂上它之后智能体干活干得怎么样"。一个看似流畅的技能可能是冗余的,一段不起眼的编辑可能才是真正改善行为的关键。直接拿"智能体做对了题"当奖励也不行——答案对可能是因为 worker 本身强,或者题目本来就简单,跟你那次编辑半点关系没有。
说到这个,做过 RL 的人应该秒懂:这就是经典的信用分配问题,只不过被搬到了"编辑技能"这个新场景里。一个最终的好结果,功劳怎么分给中间的每一步操作?Sutton 那帮人在这问题上折腾了几十年,Skill-α 给出的答案挺直白,也挺好用。
把视野再拉大一点看,这篇论文其实踩在一条正在成型的技术线上。从 Voyager 的技能库开始,大家就发现智能体攒下来的"经验文本"比参数微调便宜得多、也好解释得多;后来的 ExpeL、Agent Workflow Memory 一路把经验复用做到了工作流级别。但这些工作有一个共同的天花板——攒经验的策略是写死的,人设计什么规则它就怎么攒,攒得好不好没人教它。Skill-α 相当于在这条线上补了缺失的一环:让"怎么攒"本身变成可学习的。这个方向我自己也还在跟进,直觉上"可训练的技能管理"会是接下来 Agent 系统里很重要的一块拼图,毕竟谁也不想自家智能体的知识库越用越乱还没法修。
🧠 核心思路:一次写完整份技能?不,一步步改
Skill-α 的第一个关键决策,是把"生成一份技能"变成"对技能做一连串局部编辑":
当前技能状态是 \(z_{t-1}\),来了一条新证据 \(x_t\)(一段文档、一条执行轨迹),策略 \(\pi_\phi\) 输出一个编辑动作 \(A_t\),技能就变成 \(z_t\)。如此循环,直到证据消耗完。
为什么要这么干?两个很实际的理由。源证据经常超出模型的上下文窗口,一次性硬塞必然丢信息;更重要的是,一次性生成把抽象、去噪、冲突消解、压缩这些活儿全搅在一起,训起来根本分不清哪个决策起了作用。拆成逐步编辑之后,每一步的因果链短了,奖励才有意义。
编辑动作一共五种:Create 补缺失的规则,Update 修不准的规则,Merge 合并重叠内容,Prune 删掉误导或冗余的东西,Noop 表示这条证据没啥用、别动。这个空间设计得挺完整的——加、改、并、删、不动,正好覆盖一份文档演化的全部操作。
🔧 Rollback Reward:这篇论文最值钱的设计
方法的核心创新是奖励怎么给。直接的想法是"编辑完让 worker 跑一遍,做对了就给分",但前面说过,这分不清功劳是谁的。
Skill-α 的做法是回滚对比:编辑动作 \(A_t\) 落地后,让同一个 worker 在同一个锚定问题上分别用旧技能和新技能各跑一次,比较两个分数:
用大白话讲:这次编辑让智能体在同一道题上做得更好了,才算好编辑;如果所有候选编辑都没用,那选 Noop 才是对的,也该给分。
工程上这个设计妙在对照组复用。锚定查询 \(q_t^{\mathrm{anc}}\) 和编辑前的对照分数 \(r_t^{\mathrm{ctrl}}\) 对每个候选动作都是一样的,所以组内 G=8 个候选只需要算一次对照,再把 8 个编辑后结果跟它比。变量被控制得很干净——worker 一样、题一样、锚定的技能状态一样,唯一变化的就是那次编辑本身。分数差,就是编辑的贡献。

图 1:Skill-α 全貌。左边是推理阶段——从初始技能 \(z_0\) 出发,逐条读入证据 \(x_1, x_2, x_3\),通过编辑动作 \(A_1\) 到 \(A_T\) 把技能逐步演化成最终版 \(z_T\)。右边是训练阶段——技能生成器从当前状态采样 G 个候选编辑,分别构造编辑后技能,交给固定 worker 在锚定问题上执行,编辑后的分数逐个与对照分数比较,产生 rollback reward,最后喂给 GRPO 更新策略。
还有一个容易被忽略的细节:论文在附录里给了理论保证,证明在校准验证器下,rollback reward 的期望等于编辑后技能对旧技能的成对胜率,并且保持理想的偏好排序。理论部分写得比较硬核,感兴趣的可以去看 Appendix,我在这里就不硬装懂了——说实话那几条引理的完整推导我只顺了一遍,不敢保证理解没有偏差,但结论的直觉是清楚的:这个奖励在期望意义上排对了序,配合 GRPO 的组内相对优势,方向就是对的。
🏗️ 训练流程:先模仿,再强化
整体是两段式。先拿 Qwen3-8B 做 SFT 预热,监督数据 6,481 条,由 DeepSeek-V4-Pro 从三个基准的训练集合成,覆盖 CL-Bench、SpreadsheetBench 和 tau2-bench。这一步只教会模型输出格式和基本编辑逻辑——从数据里的动作分布也能看出来,Create 占 33.24%、Noop 占 24.83%,模型先学会"什么时候该加东西、什么时候别乱动"。
然后进 GRPO 强化学习。组大小 G=8,actor 学习率 5e-7,rollout 温度 1.0,KL 正则直接关掉了。worker 固定为 GPT-4o,训练全程不换。验证器这块是基准依赖的:CL-Bench 用 GPT-5.5 当 rubric judge,另外两个基准直接用环境自带的执行反馈。
模型看到的输入模板很朴素:当前 SKILL.md 全文、序列化的证据,然后输出一段诊断推理加一个结构化的编辑动作。没什么花哨的 prompt 工程,重点全在奖励信号上。
📊 实验:数据能打,但有几个地方值得细品
好,方法讲完了。work 不 work,看数字。
文档到技能(CL-Bench,GPT-4o 当 worker):
| 方法 | Rule System App. | Procedural Task Exec. | Domain Knowledge | Empirical Discovery | 平均 |
|---|---|---|---|---|---|
| No Skill | 21.82 | 4.30 | 5.13 | 3.02 | 8.57 |
| Anthropic Skill-Creator | 14.55 | 5.38 | 4.07 | 4.02 | 7.01 |
| Ctx2Skill | 15.82 | 4.30 | 3.02 | 5.13 | 7.07 |
| AutoSkill | 15.45 | 3.23 | 3.77 | 3.02 | 6.37 |
| Progressive Prompt Skill | 16.36 | 4.30 | 3.77 | 4.02 | 7.11 |
| Skill-α | 20.91 | 9.68 | 5.88 | 5.03 | 10.38 |
先看好的:Skill-α 平均 10.38,比最强基线 Progressive Prompt Skill 的 7.11 高了 3.3 个点。最狠的是 Procedural Task Execution 这一项,从 4.30 直接拉到 9.68,翻了一倍多——说明它确实能把文档里的程序性约束翻译成 worker 能执行的指令,这正是别的压缩式方法丢掉的增量。
但等等,有一个数让我皱了眉:No Skill 的 Rule System Application 是 21.82,比 Skill-α 的 20.91 还高。而且更尴尬的是,除了 Skill-α 之外的所有技能生成基线,平均分全部低于 No Skill 的 8.57——挂上一份自动生成的技能,还不如不挂。
这个观察其实挺扎心的。它说明"自动生成技能"这件事之前的方法基本是负优化,Skill-α 是第一个真正跑赢裸模型的。作者没回避这一点,但行文里淡化了。我觉得这反而是这篇论文价值最好的注脚:这个领域之前的坑有多深,这个+1.8 个点对 No Skill 的超越就有多不容易。
经验到技能(SpreadsheetBench & tau2-bench,GPT-4o 当 worker):
| 方法 | SpreadsheetBench | Airline | Retail | Telecom | tau2 平均 |
|---|---|---|---|---|---|
| No Skill | 18.00 | 40.00 | 47.50 | 12.50 | 33.33 |
| ExpeL | 18.50 | 55.00 | 70.00 | 12.50 | 45.83 |
| SkillX | 18.50 | 50.00 | 80.00 | 8.00 | 46.00 |
| SkillPro | 15.50 | 55.00 | 72.50 | 20.00 | 49.17 |
| Skill-α | 27.50 | 65.00 | 80.00 | 22.50 | 55.83 |
tau2 上比最强基线 SkillPro 高 6.7 个点,比 No Skill 高了 22.5 个点。经验到技能这个场景,Skill-α 的优势是碾压级的。Airline 从 40 到 65,这个幅度在工作流复用任务里相当能打了。
不过要泼一小盆冷水:SpreadsheetBench 上论文表里真正的最强基线其实是 Anthropic Skill-Creator 的 26.00(初稿那版表格没列全),Skill-α 的 27.50 只比它高 1.5 个点。考虑到 Anthropic 那个就是个通用 prompt 流程、完全没训练,这个差距谈不上悬殊。当然反过来说,一个未经训练的通用工具能打到 26,也说明这个基准上简单方法就已经摸到了大部分天花板。
跨 worker 转移(Claude-Sonnet-4.5 当 worker):Skill-α 在 CL-Bench 平均 9.55,tau2 平均 70.33,依然是最好或并列最好。这个结果我是看重的——技能是在 GPT-4o 上学出来的,换个 Claude 当 worker 还能用,说明学到的是可迁移的结构化知识,不是针对某个模型的提示捷径。但也得说句公道话:Claude 下 tau2 的 No Skill 已经高达 63.33,Skill-α 的 70.33 只领先 7 个点,远没有 GPT-4o 下那种翻倍式的提升。worker 越强,技能的边际收益越小,这个规律值得关注。
🔬 消融:rollback reward 是承重梁,Noop 没那么重要
| 变体 | CL-Bench Avg. | SpreadsheetBench | tau2-bench Avg. |
|---|---|---|---|
| Skill-α 完整版 | 10.38 | 27.50 | 55.83 |
| SFT only | 3.46 | 15.50 | 44.17 |
| 去掉 rollback reward | 3.68 | 17.00 | 46.67 |
| 去掉 Merge/Prune | 4.74 | 20.00 | 39.17 |
| 去掉 Noop | 9.55 | 22.00 | 53.33 |
这张表里最刺眼的一行:去掉 rollback reward 之后,性能几乎贴着 SFT only 走(3.68 vs 3.46)。RL 训了半天,没有这个奖励就等于白训。这直接证明了论文的核心主张——把编辑和下游改进连起来的,就是这一根线,抽掉就塌。
Merge/Prune 拿掉之后在 tau2 上掉了 16.66 个点,比去掉 rollback reward 还狠。这说明技能不是攒出来的,是修出来的——只会往里加东西,冗余和冲突很快就把技能文档搞烂了。做 RAG 的人对这个应该有共鸣,知识库只管进不管出,三个月后就没法用了。
真正让我意外的是去掉 Noop 那行:9.55 / 22.00 / 53.33,跟完整版差距很小,CL-Bench 上甚至只差 0.83 个点。论文把 Noop 定位为"校准机制",但数据上看它更像锦上添花而非必需品。说实话这块我也没完全想明白——理论附录里专门给 Noop 证了一条引理,说它的期望奖励等于"所有非 Noop 候选都赢不了对照"的概率,理论上挺漂亮,但实验里它的存在感真的很弱。理论和实验的这个温差,作者没解释,我只能猜是 Noop 的判断在 SFT 阶段就学得差不多了。
📈 训练动态:这张图比表格更有说服力

图 2:(a)各消融变体的训练奖励曲线。完整 Skill-α 起点并不是最高的,中途还经历过 50 到 150 步的低谷,但一路爬升到 0.2 左右收敛;去掉 Merge/Prune 的变体开局冲到 0.3 的尖峰,随后持续退化——只加不减的技能很快塞满冗余;去掉 rollback reward 的曲线全程趴在 0.07 附近起不来。(b)rollout 动作分布。完整版以 Create 为主但 Update/Merge/Prune/Noop 都保持活跃份额;去掉 rollback reward 后策略坍缩成 Noop 占六成的保守派;去掉 Noop 和去掉 Merge/Prune 的变体里 Create 份额都被挤到七成上下。
左边那条曲线讲了个很重要的故事:完整模型的奖励是从低谷里爬出来的,说明 RL 确实在学编辑策略,而不是吃 SFT 的老本。而 w/o Merge/Prune 那条"高开低走"的曲线,几乎就是"技术债累积"的可视化——前期猛加规则奖励涨得快,后期技能臃肿了改不动了,奖励一路阴跌。
右边那张分布图更直接。没有 rollback reward 的模型学会了躺平:反正分不清编辑好不好,选 Noop 最安全,六成动作都是"不动"。这跟消融表里它的性能贴着 SFT 完全对得上。奖励设计决定行为模式,这张图是最好的证据。
另外一个对工程实践很有用的发现是证据批量。每步喂 1 条证据,SpreadsheetBench 只有 22.00;喂 4 条到 27.50 的峰值;喂 8 条又掉回 20.00。太少会短视、把技能改得碎片化,太多则编辑焦点被稀释。每步 4 条是个甜点,而证据顺序打乱或逆序影响都在几个点以内,说明方法对输入顺序不敏感。做落地的时候这个超参值得抄。
💡 我的判断
坦率的讲,这篇论文是今年 Agent 技能方向我读到的少数几篇"把问题想对了"的工作。
它的价值不在于 RL 算法本身——GRPO 是现成的,SFT 预热也是常规操作。真正值钱的是那个视角转换:技能不是写出来的文本,是一个需要持续维护、每次改动都该被验证的活物。一旦接受这个设定,渐进式编辑、五种动作、回滚对比奖励,每一步都顺理成章。这种"问题定义对了,方法自然长出来"的论文,比那些方法花哨但痛点存疑的工作耐看得多。
定位上,我会把它归到"扎实的范式整合"而非"底层突破"。思路里有 voyager、ExpeL 这一系技能学习工作的影子,rollback 对比也能看到 RLHF 里 pairwise 比较的血统,但把它们缝成一个可训练的统一框架,并且用消融把每个组件的必要性砸实,这个工程量和方法论素养是过硬的。
局限也要说清楚。最大的问题是验证器仍然是基准特供的——CL-Bench 靠 GPT-5.5 当裁判,另外两个靠环境自带反馈,换一个没有现成验证器的场景,整套奖励就得重新搭。成本也不透明:每个训练步要对 8 个候选编辑各跑一次 worker 再加对照,论文没给训练开销的数字,如果训练成本是基线的十倍,涨的那几个点就得重新掂量。技能表示目前还是纯文本,rollback 只评局部编辑,缺长程信号——一份技能的整体结构好不好,这套奖励看不见。
工程上如果你在做 Agent 技能沉淀,有三个东西可以直接拿走。一,把技能更新拆成 Create/Update/Merge/Prune/Noop 的原子操作,别再用"整体重写";二,Merge 和 Prune 必须有,只进不出的技能库三个月后必烂;三,任何技能改动上线前,用固定问题集做改前改后的 A/B 回归——你不一定需要训一个 RL 模型,但 rollback 这个验证思想,零成本就能用起来。
至于那个更大的问题——worker 越强、技能越不值钱,当基座模型再迭代两代,外挂技能这套玩法还剩多少空间?这篇论文没回答,可能也回答不了。但至少现在,它给了"怎么把技能写好"一个能训起来的答案。
觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我