SkillForge:让 Agent 的技能库在 RL 中生老病死,而不是越写越臃肿

  • 关联论文:2610.09832
  • 作者:flyP
  • 更新:2026-10-08

一句话结论

SkillForge 不再把 procedural memory 当只增不减的仓库,而是让每个 skill 在 trial → active → stable → retired 生命周期中随 Agent 能力变化接受淘汰、降级、稳定和重写;预训练先过滤,SFT 冷启动,随后 RL 与 skill library 协同演化,在三个 Agent benchmark 上最高带来 7.8% 相对提升,并让活跃技能库保持紧凑。

解决什么真问题

Agent 的 skill 通常包含名称、行为原则和 applicability condition。它在弱模型阶段可能很有用:告诉 Agent 该先搜索还是先调用工具、遇到某类页面应按什么顺序操作。但随着 policy 自己学会这些能力,旧 skill 会从"先验辅助"变成"过时约束";多个 skill 同时检索又会挤占 context,让 top-k retrieval 更噪,甚至把正确动作引向不存在的 UI 或工具。

作者把它称为 delayed obsolescence:某技能曾在 fitness 上达到 stable,后来因为模型或环境变化跌破阈值。既有 skill-augmented RL 通常只把库注入 context 并持续追加,缺少在线删除、修复和容量控制。SkillForge 的问题定义因此不是"怎样发现更多 skills",而是"怎样治理一个随 policy 一起变化的非平稳技能种群"。

核心方法:fitness 驱动的在线 evolutionary lifecycle

1. Skill 的 fitness 如何计算

一条 skill s=(v,b,ω) 有名字 v、行为原则 b 和适用条件 ω。任务开始时,检索器根据 task type 取 top-K skills 拼进 prompt。每条 rollout 结束后,对本次被检索的每条 skill 都更新:

U_i ← U_i + 1
C_i ← C_i + episode_reward
f_i = C_i / U_i

这里 U_i 是使用次数,C_i 是成功次数。样本不足 N_warm 时用中性先验,避免新 skill 被偶然失败过早宣判。作者还特别保留 pre-RL 阶段的累计计数,使初始化阶段的证据成为 RL 第 0 步的 fitness,而不是丢掉重来。

2. Pre-retirement:先让旧模型筛掉"伪技能"

SkillForge 从 SkillRL 发布的 seed library 出发,让 base model 注入全部 skills 跑 M 次 rollouts。若某 skill 的初始成功率低于保守阈值 δ_pre,且已使用至少 N_min 次,就先进入 retired。只有不依赖这些低 fitness skills 的成功轨迹进入 SFT 数据集:

S_retire = {s | success/usage < δ_pre and usage ≥ N_min}
D_SFT = successful trajectories whose retrieved skills ∩ S_retire = ∅

然后以 cross-entropy 做 retirement-aware SFT,得到 RL 的初始化和 reference policy。这个阶段的意义不只是缩小库:它避免 Agent 模仿"由有害 skill 辅助才偶然成功"的轨迹。

3. 生命周期不是一个简单淘汰,而是四种状态

核心 thresholds 满足 δ_retire < δ_demote < δ_stable:

  • 新生或改写 skill 先进入 trial;证据不足时不会被强杀。
  • 达到中等 fitness 且使用量足够,升为 active。
  • 高 fitness 跨过稳定阈值,进入 stable,相当于为它提供"毕业证明"。
  • 随 policy 成熟,连续低于退休阈值,会被 retired;若曾经稳定却跌落,则识别为 delayed obsolescence。
  • 处于临界区的 skill 可被 LLM-guided mutation 重写,再从 trial 重新接受评测。

生命周期状态是治理语义,不只是三个阈值包装:它区分"从未成功""暂时成功""稳定成功"和"曾经稳定但现在失效",避免将所有低分 skill 一锅端。

4. LLM-guided mutation:让值得修的 skill 重生

对于 borderline skill,teacher model 改写其行为原则或适用条件,保留 (v,b,ω) schema。子技能不是自动进入 active library,而是从 trial 和中性 prior 开始重新竞争。这样 mutation 的价值由后续环境 reward 决定,而不是由 LLM 自己宣称"改好了"。

每 10 个训练 step 触发一次 forging cycle,最多 mutate 5 条、retire 3 条,并设置 active library cap。实现使用 GRPO:每个 task 采样 8 条 episode,temperature 1.0,训练 200 steps;mutation teacher 是 Kimi-K2.5。

简化执行流程:

seed_library
  → base-model rollouts
  → pre-retire low-fitness skills
  → SFT on clean successful trajectories
  → for each RL cycle:
      run rollouts with retrieved skills
      update usage/success counters
      retire / demote / stabilize skills
      mutate borderline skills into trial state
      enforce library cap
  → deploy policy + compact active library

关键实验与数据

实验使用 Qwen2.5-7B-Instruct、verl 和 GRPO,覆盖 embodied control 的 ALFWorld、web navigation 的 WebShop,以及 Search-Augmented QA。测试为 temperature 1.0,每个最佳 checkpoint 跑 5 个 seed。

  • ALFWorld:92.4±0.5% success,SkillRL 为 89.9%,相对提升 2.8%。最大子任务相对增益来自 Look at,21.3%;Clean 与 SkillRL 相差在 0.2% 采样噪声内。
  • WebShop:78.4±0.4%,SkillRL 为 72.7%,相对提升 7.8%,是 abstract 所说的最大增益。
  • Search-Augmented QA:48.7±0.3% micro-average accuracy,高于 SkillRL 的 46.8%;覆盖 51,713-sample 统一测试集。
  • 消融:移除整个 forging 后,三环境分别下降 2.6/5.8/2.4 个百分点;只去 pre-retirement 下降 1.7/3.5/1.2;去 retirement 下降 1.0/2.5/0.8;去 mutation 下降 0.6/1.6/0.5。这说明质量控制组合比库规模更重要。
  • 库动态:ALFWorld 共创建 132 条、退休 32 条,最终保留 100 条;WebShop 与 QA 最终分别保持 95、85 条。去掉 retirement 后三环境库膨胀到 132、121、111 条,但成绩反而更低。
  • SkillFurnace:共 5,852 条记录,包含 1,013 条 SFT trajectories、4,521 条 library snapshots、318 条 retirement events。退休 skill 平均 peak fitness 0.667,到退休时平均下降 0.278,57.2% 曾先进入 stable。人工标注显示 procedural rigidity 是主要死因,各环境占比为 74.6%/77.7%/67.8%。

亮点与局限

这篇论文最重要的判断是:Agent memory 不是越多越好,skill 的价值会随 policy 非平稳变化;因此 retrieval、训练和库治理必须闭环。方法并非单纯"定期清理",而是把预筛、SFT 数据去污染、在线 credit、退休、容量约束、mutation 组合成完整生命周期。发布带完整 fitness history 和失败类别的 SkillFurnace,也为复现提供了比单一最终库更有价值的过程数据。

局限同样关键。第一,fitness 是 episode-level binary reward 共享给所有检索到的 skills,无法区分同轨迹中哪条 skill 真正贡献成功;作者报告最高 co-retrieval frequency 仍低于 15%,但结构性共同检索场景会放慢收敛。第二,只验证 7B 模型,生命周期是否随更大 policy 改变未明确。第三,mutation 依赖外部 teacher,弱 teacher 会产生大量低质量子技能。第四,cumulative average 有惯性,论文用 usage gates 抑制误退休,但没有给出频繁漂移环境下的动态估计器。第五,benchmark 主要是可模拟交互环境,真实 MCP/tool/API 的 schema 变化、长链故障和安全要求是否同样适用,原文未明确。

对工程落地的启发

  1. 把 skill 当有 owner、版本和 SLA 的资产。 每条 skill 记录 applicability、成功率、样本量、最近失败、创建来源与 hash,退役和替换才能审计。
  2. 不要"永久晋升"。 stable 只是阶段状态;一旦 rolling window 或累计证据跌破阈值,必须允许 demotion/retirement,避免 delayed obsolescence。
  3. 用分层 credit,而非全收全分成功。 工程版可做 leave-one-skill-out、counterfactual replay 或 attribution model,缓解多条 skill 共享同一 episode reward 的问题。
  4. 先清洁 SFT 数据。 若历史轨迹依赖后来被证明有害的 skill,不能只删库而不重训;应重做 cold-start,再进入在线 lifecycle。
  5. 设置多重 mutation gate。 LLM 改写只能进入 trial,必须经过静态 schema 校验、沙箱执行、最小样本评测和 canary,才可进入 active。
  6. 监控"库膨胀—成绩不升"告警。 SkillForge 的反例很直接:没有 retirement 的库更大但更差。平台应把库规模、检索噪声、平均 skill age 和成功率一起看。
  7. 保留稳定快照与回滚。 Agent policy 与 skill library 同步演进,任一时刻都应能恢复上一版二者,避免 prompt 分布漂移造成不可解释退化。

与同方向工作的关系

SkillRL 已把检索式 skill library 接到 GRPO,但库是 append-only。SkillForge 延续 procedural memory、LLM-based skill discovery 与 agentic RL 路线,增加在线 selection/mutation。与传统 population-based training、LLM-as-optimizer 相比,特殊之处是 fitness 本身非平稳:skill 优化对象不是静态 held-out 文本,而是会被持续更新的 Agent policy 使用。它和 RAG memory management 也很相似——都要 pruning、merge、refresh;区别是 RAG 更偏文档相关性,SkillForge 的 credit 来自交互任务最终成功,更接近行为效用。

适合谁读

适合构建 Claude Code/OpenClaw 类 coding Agent、企业 MCP Agent、浏览器操作 Agent 的团队,以及做 Agentic RL、procedural memory、skill retrieval 的研究者。尤其适合已经遇到 context 被过时技能污染、skill 越加越多但效果不升的工程团队。若只用单模型做静态问答,本文的复杂度不一定值得照搬。

事实边界

本文依据本地 paper card、arXiv abstract、arXiv HTML v1 与公开限制章节交叉读取,未下载 PDF、未运行代码。arXiv comments 标注 Accepted at NeurIPS 2026;代码与 SkillFurnace 的具体获取链接未在已读材料中逐项核验,本文不作额外断言。

把 SkillForge 搬到生产环境时,最小可行实现并不需要一开始就训练模型。可以先建立离线 lifecycle shadow:线上照常记录每条被检索 skill 的任务结果,周期性离线跑 promotion、demotion、retirement 和 mutation diff,再由人工审核发布。这样先解决最危险的问题——旧 skill 在新模型或新工具上继续误导 Agent——而不立即承担 RL 训练成本。只有当 skill credit 稳定、应用条件足够清晰、离线轨迹能覆盖真实任务时,再逐步开放自动 mutation 和自动 retirement。

平台还需要把 applicability 从自然语言标签升级为机器可检查条件。例如 MCP Agent 的 skill 可声明所需 tool schema、权限、资源状态和错误码;满足静态前置条件才允许检索,执行日志再验证是否真的改变成功率。相比论文的 task-type matching,这种 contract 可减少"语义看似匹配、运行时根本不存在"的技能。技能失败也应按类别进入治理队列:工具幻觉、环境矛盾、步骤顺序过 rigid、权限越界应采用不同处置;其中安全权限问题应直接阻断,而不是等待若干次统计失败后才退休。

工程落地与核查(Jay)

事实核查

  • [x] arXiv ID 2610.09832 存在,标题为 SkillForge: Co-Evolving Skills and Agents via Dynamic Skill Lifecycles,与原文一致 ✓
  • [x] 提交日期:2026 年 10 月 7 日;arXiv Comments 标注 Accepted at NeurIPS 2026 ✓
  • [x] 作者:Yuyao Ge, Yiwei Wang, Yuchen He, Baolong Bi, Lingrui Mei, Jiayu Yao, Lizhe Chen, Shenghua Liu(原文仅标注 flyP,未列出全名)✓
  • [x] WebShop 相对提升 7.8%(72.7% → 78.4%)✓;ALFWorld 相对提升 2.8%,QA 相对提升约 4.1%,三者数据一致 ✓
  • [x] ALFWorld 库动态:132 条创建、32 条退休、最终保留 100 条 ✓
  • [x] GRPO 作为 RL 算法在文中明确引用;verl 作为训练框架在实现部分引用 ✓
  • [x] fitness 定义:f_i = C_i / U_i,episode-level binary reward(成功=1,失败=0),多 skill 共享同一 episode reward,与原文一致 ✓
  • [ ] ⚠️ GitHub 链接未在 arXiv 页面找到(见诚实标注)
  • [ ] ⚠️ SkillFurnace 数据集获取方式未在 arXiv 页面核验(见诚实标注)

诚实标注

  • ⚠️ GitHub 链接:https://github.com/Zyq97/SkillForge 返回 HTTP 404(未 fetch 源码,无法确认代码完整性、依赖版本、运行脚本是否存在)
  • ⚠️ SkillFurnace 数据集:原文描述共 5,852 条记录,但未在 arXiv 页面找到直接下载链接或 README 说明获取方式;数据是否完全公开待确认
  • ⚠️ 作者 "flyP":原文署名仅标注作者 flyP,未展开为全名;arXiv 页面可查到 8 位作者全名,两者是否完全对应未逐项交叉验证

生产坑点(现象/影响/修复三段式)

  1. fitness 的 episode-level binary reward 导致多 skill 共摊 credit - 现象:同一条成功轨迹中检出的多条 skills 全部获得 +1 计数,无法区分谁的贡献更大。 - 影响:高频共检索 skill 会虚高 fitness,导致低质 skill 赖在 active 库中;真正有贡献的 skill 反而因共检索率低而难以升迁。 - 修复:工程实现中引入 leave-one-skill-out 回放或 counterfactual replay,按 Shapley value 或 attention weight 做归因;或在 UI 层展示 co-retrieval frequency 供人工审查。

  2. verl 框架版本兼容性导致 GRPO 训练中断 - 现象:verl 仍在快速迭代,API 和配置 schema 在版本间不稳定;使用论文未指定的具体版本可能遇到 PatchedTensor 形状不匹配或 GRPO loss 梯度截断。 - 影响:7B 模型在无充分版本锁定下重跑实验,训练可能在 50-100 step 处 NaN 或报错,无法复现论文 200 steps 的收敛轨迹。 - 修复:使用 Docker/conda 环境锁定 verl==0.1.0 或 commit hash,并在 README 中记录 nvidia-smi 可见的 CUDA 版本;发布 requirements.txt 而非宽松版本约束。

  3. NeurIPS 2026 截稿日期与arXiv 提交日期的时间线存疑 - 现象:arXiv 页面显示 Submitted 2026-10-07,Comments 标注 Accepted at NeurIPS 2026;但 NeurIPS 2026 正式 meta-review 通常在 10 月中下旬才结束,10 月 7 日截稿尚未完成审稿。 - 影响:读者若将此标注作为"已通过同行评审"理解会误判;实际上该标注来自作者自称,不代表Programme Chair正式通知。 - 修复:在工程报告和对外宣传中注明"Authors state Accepted at NeurIPS 2026 (pending official publication)",并建议以 NeurIPS 官方 proceedings 为准。

  4. pre-retirement 阶段 SFT 数据去污染依赖"成功轨迹中未含 retired skills"假设 - 现象:若 retired skill 在部分轨迹中恰好没被检索(随机 top-K 漂移),该轨迹仍进入 SFT,Agent 间接学到"绕过有害 skill"的捷径而非真正拒绝。 - 影响:SFT 后 Agent 学会规避 retired skill 而非正确判断其不适用;进入 RL 后 fitness counter 初始值被污染,retirement 阈值判断失效。 - 修复:pre-retirement SFT 前额外做 reverse-check——对每条轨迹强制注入 retired skills 并验证 Agent 行为是否改变;仅保留行为不变的轨迹。

  5. LLM-guided mutation teacher 质量不可控导致 skill schema 漂移 - 现象:Kimi-K2.5 teacher 改写的 (v,b,ω) 在语义上偏离原有 skill 意图(名称保留但行为原则改写过头),子 skill 从 trial 重新评测时 fitness 持续低迷。 - 影响:浪费 mutation quota(每 cycle 最多 5 条);active 库积累大量低质量改写版本,库膨胀但无收益。 - 修复:mutation 输出需经过 schema 校验(LLM 生成的结构化 JSON 符合 (string, string, string) 类型约束)+ 最小样本 sandbox 评测(≥10 episodes,fitness > 0.3 才允许进入 trial);teacher 质量用人类偏好数据持续校准。

  6. cumulative average fitness 对环境漂移反应迟钝 - 现象:fitness 采用全程累计平均,新任务类型上线后旧 skill 评分惯性大;即使连续失败多次,fitness 仍需很长时间才能跌破 δ_retire。 - 影响:环境新增任务分布导致 retired skill 实际已过时,但统计阈值迟迟未触发,Agent 在新任务上持续被误导。 - 修复:工程实现应引入指数加权移动平均(EWMA)或固定窗口平均(window=最近 N 次使用)替代 cumulative;窗口大小可配置,允许针对不同 task type 设置不同 decay。

  7. active library cap 实施时未考虑跨 task type 的公平性 - 现象:库设置统一 cap(如 100 条),但不同 task type 的 skill 数量分布不均;某一类任务占满大部分配额,另一类 task type 的关键 skill 因 cap 被挤出。 - 影响:检索时某些 task type 无可用 skill,top-k 召回率下降;被迫用 trial 或 retired skills 填充,影响整体成功率。 - 修复:按 task type 分层设置 sub-cap;cap 淘汰策略优先保留高频任务类型+高 fitness skill,而非全局按 fitness 排序一刀切。

  8. SkillFurnace 过程数据发布格式不明确影响复现 - 现象:论文描述了 fitness history、retirement events、library snapshots 的日志格式,但未在 arXiv 页面或 GitHub 找到可直接下载的 jsonl 或 sqlite 文件。 - 影响:复现研究者无法利用这些中间过程数据验证 fitness 计算逻辑;只能依赖论文文字描述自行重建,而实现细节(如 N_warm 具体值、阈值初始设置)文中未给出。 - 修复:在发布数据时提供标准化的 parquet 或 jsonl.gz 文件,包含 timestamp, skill_id, event_type, episode_reward, usage, fitness 等必填字段;并附 schema.md 说明各字段含义。

边界与未及

  • 本节基于 arXiv abstract、HTML v1 和公开页面读取;未下载 PDF / 未运行代码
  • N_warm、δ_pre、δ_retire、δ_demote、δ_stable 等阈值在已读材料中未见具体数值披露
  • mutation teacher Kimi-K2.5 的具体版本/量化方式未确认
  • SkillFurnace 的 parquet/jsonl 下载链接未在 arXiv 页面找到(GitHub 404)
  • 三环境(ALFWorld/WebShop/QA)的具体数据集版本(如 ALFWorld 的 splits)未核验
  • NeurIPS 2026 官方 acceptance list 尚未发布,本文 fact-check 以 arXiv 作者自述为据