前两篇刚好写了 SGA-MCTSSkillX,今天这篇 SKILL0: In-Context Agentic Reinforcement Learning for Skill Internalization 正好能把这条线补完整。

如果说 SGA-MCTS 和 SkillX 都是在讨论“怎么把 Agent 经验放到外部系统里”,那 Skill0 问的是另一个更狠的问题:外部技能库能不能只在训练时用,最后把技能内化到模型参数里,让 Agent 测试时不再依赖 runtime skill retrieval?

一句话概括:训练时给模型看技能,随着 RL 训练逐步把技能撤掉,逼模型从“照着技能做”变成“自己会做”。

为什么要把技能撤掉

现在很多 Agent 系统会在推理时加载技能:先检索相关 skill file,再把技能内容塞进上下文,让模型照着做。

这条路线很实用,但论文指出它有几个天然问题:

  • 检索会有噪声,可能捞到不相关甚至误导性的技能;
  • 技能内容会占上下文,长任务里 token 开销很明显;
  • 模型只是临时 follow skill,并没有真正学会这个技能;
  • 一旦检索失败,Agent 的行为就容易退化。

所以 Skill0 的目标不是再做一个更好的 skill retriever,而是把 skill 当成训练时的脚手架。脚手架搭模型,最后脚手架要拆掉。

这个思路我挺喜欢,因为它把“技能库”和“参数学习”连接起来了:技能库不是最终形态,而是训练模型的中间媒介。

Skill0 的核心想法

Skill0 是一个 in-context agentic reinforcement learning 框架。它训练时不是一上来就让模型裸跑,而是给模型完整技能上下文,让它先在有提示的状态下学会工具调用、多轮交互和任务完成。

然后关键来了:训练过程中逐步减少可用技能上下文。

可以粗略理解成一个 curriculum:

early training: 给完整技能,模型先照着做
middle training: 只保留仍然有帮助的技能
late training: 技能预算继续下降
final policy: 不再加载技能,零样本执行

这种设计像是“先扶着走,再逐渐放手”。如果直接不给技能,RL 探索太难;如果一直给技能,模型永远只是依赖外部提示。Skill0 想在这两者之间找一条退火路径。

Dynamic Curriculum

论文里最关键的机制是 Dynamic Curriculum。它不是机械地每隔几步删掉一些技能,而是根据当前 policy 的 on-policy helpfulness 来决定哪些 skill file 还值得保留。

也就是说,一个技能如果当前模型还明显受益,就暂时留着;如果模型已经不太需要它,或者它帮助不大,就可以从上下文预算里撤掉。

同时,总技能预算会线性下降,最后逼近零。

这个机制背后的直觉很清楚:不同技能被模型吸收的速度不一样。有些简单工具调用模式很快就会了,有些长程规划技巧需要保留更久。动态课程比固定删减更像真实教学。

为什么叫 in-context RL

Skill0 里技能仍然是通过上下文注入的,但它的目标不是长期依赖上下文,而是借助上下文提高 RL 采样质量。

普通 RL baseline 里,模型需要自己探索出好行为。Agent 任务通常奖励稀疏、步骤长、工具调用容易错,探索成本很高。

Skill0 则让模型在训练早期拥有更强的行为先验:

skill context -> better trajectories -> better RL signal -> policy internalization

这里的 in-context 更像训练时的辅助观测。它让模型更容易走到成功轨迹,再通过 RL 把这些行为模式压进参数里。

和 SkillX 的关系

SkillX 是自动构建技能知识库,让弱 Agent 可以 plug-and-play 地消费强 Agent 的经验。

Skill0 则像是下一步:既然有了技能库,能不能不在推理时每次都检索,而是在训练时把技能喂给模型,让模型最后自己会?

所以可以把两篇放在一条链上看:

SkillX: 经验 -> 技能库
Skill0: 技能库 -> 参数化能力

这条链很有想象力。因为真实系统里,外部技能库和模型参数不是非此即彼。技能库可以用来冷启动、训练、纠错、更新;参数化能力则负责低延迟、低 token 成本、稳定执行。

实验结果怎么读

论文在 ALFWorld、Search-QA、WebShop 这类 Agent benchmark 上做实验,报告相对标准 RL baseline 有明显提升:

  • ALFWorld:约 +9.7%
  • Search-QA:约 +6.6%
  • WebShop:约 +10.1%

同时,它每步上下文控制在 0.5k tokens 以下。这个点很关键,因为如果一个方法靠堆很长的 skill context 获得提升,线上成本会很难看。Skill0 的卖点正好相反:训练时用技能,最后尽量把 runtime 负担降下来。

当然,这些数字还要看 benchmark 细节和 baseline 设置。但方向本身很清晰:技能上下文可以成为 RL 的辅助训练信号,而不一定是推理阶段永久依赖项。

一个直觉例子

假设一个 WebShop Agent 要学会买商品。外部技能可能会告诉它:

先解析用户需求
再搜索候选商品
过滤价格、颜色、尺寸等约束
最后打开详情页确认再购买

如果推理时每次都把这段技能塞进去,模型可以照做,但会有 token 成本,也可能检索到不合适的购买策略。

Skill0 的路线是:训练早期把这段技能给模型,让它更容易跑出成功购买轨迹。训练中后期逐渐减少提示,让模型自己学会“先检索、再过滤、再验证”的流程。最终上线时,不再需要把这段技能塞进 prompt。

这个思路非常像工程里的知识蒸馏,只是蒸馏对象不是 logits,而是 Agent 行为策略。

我比较喜欢的点

Skill0 的价值不只是“又一个 RL trick”,而是它提出了一种很实用的 Agent 能力迁移方式:

  • 外部技能库负责提供结构化先验;
  • RL 负责把先验转成可执行策略;
  • curriculum 负责逐步减少依赖;
  • 最终模型负责低开销执行。

它也回答了一个很现实的问题:如果我们真的维护了很多 skill file,难道每次推理都要检索、拼 prompt、赌模型 follow 对吗?

Skill0 给出的答案是:不一定。技能可以是训练材料,不一定永远是运行时依赖。

还需要追的问题

这类方法后面我会继续关注几个点:

  • 技能内化后,模型是否真的学会了可迁移策略,还是只记住了 benchmark 模式;
  • 训练时撤掉技能的节奏对最终效果有多敏感;
  • 如果技能库里有错误技能,RL 会不会把错误行为也内化进去;
  • 新工具、新环境出现时,已经内化的技能如何更新;
  • 参数化技能和外部技能库应该怎么协同,而不是互相替代。

最后一点尤其重要。外部技能库的优点是可编辑、可审计、更新快;参数化技能的优点是低延迟、低 token、行为稳定。真实 Agent 系统大概率需要两者都要。

小结

SGA-MCTS、SkillX、Skill0 这三篇放在一起看,会形成一条很自然的路线:

先把搜索经验变成可检索原子
再把轨迹经验变成技能知识库
最后把技能逐步内化进模型参数

这也许是 Agent 系统接下来很重要的一条工程路线:不是只靠更大的模型,也不是只靠更长的 prompt,而是让经验在外部系统和模型参数之间流动起来。

我觉得这个方向值得继续追。Agent 真正变强,可能不只是因为它“想得更久”,而是因为它开始有办法把过去想过、做过、错过的东西沉淀下来。