技能好不好,回滚跑一遍才知道: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-α 的第一个关键决策,是把"生成一份技能"变成"对技能做一连串局部编辑":

\[A_t \sim \pi_\phi(\cdot\mid z_{t-1}, x_t), \quad z_t = \mathrm{Edit}(z_{t-1}, A_t)\]

当前技能状态是 \(z_{t-1}\),来了一条新证据 \(x_t\)(一段文档、一条执行轨迹),策略 \(\pi_\phi\) 输出一个编辑动作 \(A_t\),技能就变成 \(z_t\)。如此循环,直到证据消耗完。

为什么要这么干?两个很实际的理由。源证据经常超出模型的上下文窗口,一次性硬塞必然丢信息;更重要的是,一次性生成把抽象、去噪、冲突消解、压缩这些活儿全搅在一起,训起来根本分不清哪个决策起了作用。拆成逐步编辑之后,每一步的因果链短了,奖励才有意义。

编辑动作一共五种:Create 补缺失的规则,Update 修不准的规则,Merge 合并重叠内容,Prune 删掉误导或冗余的东西,Noop 表示这条证据没啥用、别动。这个空间设计得挺完整的——加、改、并、删、不动,正好覆盖一份文档演化的全部操作。


🔧 Rollback Reward:这篇论文最值钱的设计

方法的核心创新是奖励怎么给。直接的想法是"编辑完让 worker 跑一遍,做对了就给分",但前面说过,这分不清功劳是谁的。

Skill-α 的做法是回滚对比:编辑动作 \(A_t\) 落地后,让同一个 worker同一个锚定问题上分别用旧技能和新技能各跑一次,比较两个分数:

\[R_{\mathrm{rb}}(A_t^{(i)}) = \begin{cases} 1, & \text{非 Noop 编辑且 } r_{t,i}^{\mathrm{edit}} > r_t^{\mathrm{ctrl}} \\ 1, & \text{选了 Noop 且没有任何候选编辑赢过对照} \\ 0, & \text{其他情况} \end{cases}\]

用大白话讲:这次编辑让智能体在同一道题上做得更好了,才算好编辑;如果所有候选编辑都没用,那选 Noop 才是对的,也该给分。

工程上这个设计妙在对照组复用。锚定查询 \(q_t^{\mathrm{anc}}\) 和编辑前的对照分数 \(r_t^{\mathrm{ctrl}}\) 对每个候选动作都是一样的,所以组内 G=8 个候选只需要算一次对照,再把 8 个编辑后结果跟它比。变量被控制得很干净——worker 一样、题一样、锚定的技能状态一样,唯一变化的就是那次编辑本身。分数差,就是编辑的贡献。

Skill-α 总览

图 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前沿,关注我