技能到底该"记住"还是"带着"?Skill0.5 给出了一个折中但有效的答案

你有没有碰到过这种情况——给智能体配了一堆技能文档,训练的时候表现不错,一旦换到新任务域就彻底拉胯?或者反过来,把技能全蒸馏进模型参数里,结果新技能来了它根本不听,还在用旧模板硬套?

这其实是当前 Agent RL 领域一个很核心的两难困境:技能到底该外部化(放在 prompt 里随时查阅)还是内化(压进模型权重里)?两个极端都有明显的毛病。今天聊的这篇 Skill0.5,给出了一个"各取所长"的方案——通用技能内化,任务特定技能外部利用,中间靠一个动态难度路由器来调度。

🎯 核心摘要

痛点:现有基于技能的智能体 RL 方法在"完全外部化"(上下文爆炸、推理退化)和"完全内化"(过拟合、知识冲突)之间做刚性二选一,导致 OOD 泛化能力差。

方案:Skill0.5 将技能按功能解耦为通用技能和任务特定技能,通过难度感知路由器将任务分为 Hard/Medium/Easy 三档,分别施加特权蒸馏、标准 GRPO、反捷径利用三种定制优化策略。

效果:在 ALFWorld 上 OOD 泛化比最强基线 SkillRL 绝对提升 13.2 个点(45.3% → 58.5%),WebShop 上提升 3.9 个点。ID 性能同样领先。

判断:这是一篇工程整合做得很扎实的工作。核心 insight(通用技能该内化、特定技能该外部利用)直觉上很合理,三档路由的设计也足够简洁。OOD 提升幅度确实能打,但目前只在文本交互环境验证,离真实复杂场景还有距离。


📖 论文信息

  • 标题:Skill0.5: Joint Skill Internalization and Utilization for Out-of-Distribution Generalization in Agentic Reinforcement Learning
  • 作者:Jiapeng Zhu, Jianxiang Yu, Yibo Zhao, Chengcheng Han, Qi Gu, Xunliang Cai, Xiang Li, Weining Qian
  • 机构:华东师范大学、美团 Longcat 团队
  • arXiv:2605.28424
  • 代码:https://github.com/JasonZhujp/Skill0_5
  • 日期:2026年5月27日

🧠 问题动机:两个极端,都不好使

先快速理清背景。当前让 LLM Agent 解决复杂任务的一个热门范式是给它配"技能"——把程序性知识封装成模块化的文本指令。比如在家居环境中,"先找到目标物体,再导航到目的地,最后执行放置动作"就是一个技能。

问题在于,这些技能在训练和推理时怎么用?目前有两个极端:

完全外部化(SkillRL 路线):所有技能都塞进 prompt 里,训练和推理时都带着。好处是灵活——换新技能直接替换就行。坏处是 prompt 越来越长,LLM 的上下文学习能力会退化,推理质量下降。

完全内化(SKILL0 路线):通过课程学习把技能逐步从 prompt 中撤除,最终全部压进模型参数。好处是推理时不需要额外上下文。坏处是——模型容量有限,新技能和旧技能可能打架;更致命的是,推理时遇到全新的 OOD 技能,模型可能根本不理会,还在用内化的旧模板。

我之前在做类似的 Agent 项目时也碰到过这个问题:技能文档太长模型会"走神",但不给又不行。Skill0.5 的思路是——别一刀切,先想清楚哪些技能该记住,哪些该临时查。


🏗️ 方法核心:功能解耦 + 难度路由 + 三档优化

技能的功能解耦

Skill0.5 的第一个关键观察是:智能体技能天然分两类。

类型 特征 例子 处理方式
通用技能 领域无关、上下文长、稳定不变 "系统性探索环境"、"错误恢复策略" 内化到参数
任务特定技能 细粒度执行规则、动态更新、域相关 "加热后直接导航到目的地放置" 推理时外部检索

这个分类直觉上很合理。通用技能就像你学会了"怎么思考问题",这种能力应该内化成本能;任务特定技能就像操作手册,用的时候翻一翻就行,没必要全背下来。

整体框架

图1:Skill0.5 框架总览

图1:Skill0.5 的两阶段框架。Phase-1 通过 rollout 采样和滑动窗口阈值将任务路由到 Hard/Medium/Easy 三个层级;Phase-2 对不同层级施加定制优化——困难任务用特权蒸馏、中等任务用标准 GRPO、简单任务用反捷径利用机制。

框架分两个阶段:

Phase-1:难度感知路由——先用标准提示(只含检索到的特定技能)对每个任务采样多条轨迹,根据经验通过率把任务分成三档。

Phase-2:层级定制优化——对不同难度的任务施加不同的训练策略。

Phase-1:怎么判断任务难度?

方法很直接:对每个任务 \(x_i\),在标准提示下采样 \(G\) 条轨迹,计算通过率:

\[p_i = \frac{1}{G}\sum_{g=1}^G R(\tau_i^{(g)})\]

然后用滑动窗口维护一个动态阈值 \(\eta_t\),路由规则是:

  • \(p_i = 0\) → Hard(完全做不出来)
  • \(0 \lt p_i \leq \eta_t\) → Medium(偶尔能做对)
  • \(p_i > \eta_t\) → Easy(大部分时候能做对)

动态阈值的好处是:随着训练推进,模型变强了,"简单"的标准也水涨船高。

Phase-2:三档优化策略

困难任务:特权蒸馏

当任务通过率为零时,说明智能体缺乏基础推理能力。这时候把通用技能作为"特权信息"加回 prompt,让模型在丰富上下文下重新尝试——这相当于一个"开卷考试"的教师版本。

过滤出成功轨迹后,用 token 级 Jensen-Shannon 散度对齐教师(有通用技能)和学生(无通用技能)的输出分布:

\[\mathcal{L}_{hard} = \frac{1}{|\mathcal{T}|}\sum_{\tau \in \mathcal{T}} \frac{1}{|\tau|}\sum_{k=1}^{|\tau|} \text{JSD}(\text{sg}[\pi_\theta^t(k)] \| \pi_\theta^s(k))\]

这里用 JSD 而不是 KL 散度,我觉得是个不错的选择——JSD 是对称的,数值更稳定,不会出现 KL 那种一边趋近零时梯度爆炸的问题。

中等任务:标准 GRPO

直接复用 Phase-1 的轨迹做标准 GRPO 优化,没什么花活。这部分任务模型已经有一定能力了,正常强化就行。

简单任务:反捷径利用(最有意思的部分)

这里的设计我觉得是全文最精巧的地方。

问题是什么?当任务变得"太简单"后,模型可能在走捷径——它不是真的在利用检索到的特定技能来做决策,而是直接记住了"看到这种任务指令就输出这种动作"的虚假映射。这种捷径学习在 ID 上看不出问题,但一到 OOD 就暴露了。

怎么检测捷径?引入一个反事实诊断探测:把特定技能全部撤掉(\(c_t^{none} = \emptyset\)),让模型"裸考"。如果有技能和没技能的通过率差不多(\(u_i = p_i - p_i^{none}\) 很小),说明模型根本没在用技能,是在走捷径。

然后构造一个复合优势:

\[\hat{A}_i^{(g)} = \underbrace{A_i^{(g)}}_{\text{轨迹级质量}} + \underbrace{A_i^u}_{\text{任务级利用}}\]

当检测到捷径学习时,\(A_i^u\) 为负,全局抑制该任务的优化梯度。这相当于告诉模型:"你做对了但方式不对,不奖励你。"


🧪 实验结果

主实验:ALFWorld

方法 类型 ID Avg. OOD Avg.
Zero-shot 提示 20.7 18.9
Few-shot 提示 57.5 24.5
Reflexion 记忆 60.9 34.0
GRPO RL 80.5 43.4
SimpleMem+GRPO 记忆+RL 71.3 47.2
SkillRL 技能+RL 90.8 45.3
SKILL0 技能+RL 85.1 39.6
SLIM 技能+RL 82.8 35.8
Skill0.5 技能+RL 93.1 58.5

OOD 上从 45.3% 到 58.5%,绝对涨了 13.2 个点。这个幅度在 ALFWorld 这种环境上是相当显著的。

主实验:WebShop

方法 ID Avg. OOD Avg.
GRPO 33.6 32.3
SkillRL 38.3 36.7
SKILL0 35.2 35.4
SLIM 33.7 33.8
Skill0.5 40.4 40.6

WebShop 上提升相对温和一些,OOD 涨了 3.9 个点。不过注意一个有意思的现象——Skill0.5 的 ID 和 OOD 性能几乎持平(40.4 vs 40.6),说明它确实学到了泛化能力,而不是在 ID 上过拟合。

训练动态分析

图2:训练曲线对比

图2:四种方法在 ALFWorld 上的训练动态。(a) 训练集成功率;(b) ID 验证集成功率;(c) OOD 验证集成功率。Skill0.5(蓝线)在三个维度上都保持稳定上升,而 SkillRL(红线)出现明显的过拟合——训练集飙升但 OOD 后期下降。

这张图很能说明问题:

  • SkillRL(红线):训练集成功率飙到接近 1.0,但 OOD 验证集在 step 80 之后开始下降——典型的捷径学习导致的过拟合。
  • SKILL0(绿线):OOD 上始终被压制在较低水平,完全内化策略太刚性了。
  • SLIM(橙线):剧烈振荡,说明过早退役通用技能导致训练不稳定。
  • Skill0.5(蓝线):三个维度都稳定上升,OOD 上持续改善没有衰减。

路由比例变化

图3:训练过程中任务难度分布的演变

图3:训练过程中 Hard/Medium/Easy 任务比例的动态变化。ALFWorld 上 Hard 任务从初始约 40% 逐步降至接近 0%,Easy 任务占比稳步上升;WebShop 由于任务本身更难,Hard 任务比例下降更缓慢。

这张图验证了路由器的合理性——随着训练推进,模型能力增强,困难任务自然减少,简单任务增多。路由器不是静态的标签,而是动态反映模型当前能力水平。

消融实验

变体 ID Avg. OOD Avg.
Internalize-Only(只做特权蒸馏) 89.6 52.8
Utilize-Only(只做反捷径利用) 85.1 50.9
Skill0.5(完整版) 93.1 58.5

两个关键结论:

  1. 内化是前提:Utilize-Only 在 ID 和 OOD 上都大幅下降。没有基础推理能力,给再多特定技能也没用。
  2. 利用解锁 OOD 峰值:Internalize-Only 的 OOD 从 58.5% 降到 52.8%。光有基础能力但不强制模型利用新技能,OOD 泛化还是会打折。

🔬 案例分析:三种失败模式

论文给出了三个很有说服力的案例,展示了不同方法的失败机制:

Case 1(SkillRL 的上下文干扰):任务是"把热土豆放冰箱",OOD 技能说"加热后直接导航到目的地放置"。SkillRL 成功加热后到了冰箱,却执行了"cool potato"——因为 ID 训练中"fridge"和"cool"的关联太强了,覆盖了 OOD 技能的指令。Skill0.5 只用 7 步就完成了,没有这种干扰。

Case 2(SKILL0 的参数知识冲突):任务是"用台灯照碗",OOD 技能说"到台灯后执行 use desklamp"。SKILL0 激活了内化的 Pick&Place 模板,反复尝试拿起台灯——内化的旧知识和新指令直接冲突。

Case 3(SLIM 的行为崩溃):Step 85 还能成功完成任务,到 Step 120 就完全崩了——开始产生任务幻觉,推理关于"cd"而任务是"pillow"。原因是通用技能"系统性探索"在 step 5 就被退役了,后续推理基础丧失。


💡 我的判断

亮点

  1. 技能功能解耦的思路很清晰,通用技能内化 + 特定技能外部利用的设计直觉上就对。
  2. 反捷径利用机制是全文最有价值的贡献——通过反事实诊断来检测模型是否真的在"用"技能,这个思路在其他场景(比如 RAG 中检测模型是否真的在利用检索结果)也有迁移价值。
  3. 实验设计很完整,ID/OOD 分离评估、训练动态分析、消融、案例研究都有。

值得商榷的地方

  1. 难度判断完全基于经验通过率,这在任务数量少的时候可能不够稳定。\(G=8\) 条轨迹的采样量对于判断"通过率为零"是否足够?有没有可能只是运气不好?
  2. 目前只在 ALFWorld 和 WebShop 两个文本交互环境验证。这两个环境的动作空间相对受限,任务结构也比较规整。在更开放的环境(比如真实网页导航、代码生成)中,通用技能和特定技能的边界是否还这么清晰?
  3. 通用技能和特定技能的划分目前是人工预定义的。如果技能库规模大了,这个划分本身可能需要自动化。

工程启发

如果你在做 Agent 系统,Skill0.5 的反捷径利用思路值得借鉴——在训练过程中周期性地做"无辅助测试",检测模型是否真的在利用你提供的外部信息,而不是在走捷径。这个诊断方法成本不高但信息量很大。


📊 实现细节速查

配置项
基座模型 Qwen2.5-7B-Instruct
优化骨干 GRPO
学习率 1e-6
组采样大小 8
批大小 16
滑动窗口 W 5
技能检索 Top-K 3
嵌入模型 Qwen3-Embedding-0.6B
硬件 4×H800
训练步数 120(ALFWorld)/ 150(WebShop)

🔗 相关工作定位

把 Skill0.5 放在技能增强 Agent RL 的谱系里看:

方法 核心思路 优势 劣势
SkillRL 全程带技能 prompt 灵活、OOD 时能注入新技能 上下文过长导致推理退化、捷径学习
SKILL0 渐进撤除技能,完全内化 推理时零开销 过拟合 ID 模式、OOD 新技能无法利用
SLIM 选择性退役技能 兼顾内化和利用 退役时机难把握、训练不稳定
Skill0.5 功能解耦 + 难度路由 + 三档优化 OOD 泛化强、训练稳定 需要人工划分技能类型

坦率地讲,Skill0.5 的核心创新不在于某个单一组件的突破,而在于把"功能解耦"这个认知科学启发的 insight 和三种已有技术(蒸馏、GRPO、反事实诊断)组合得很自然。这种"正确的组合"本身就是一种贡献。


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