技能可以被推翻,理解不能跟着一起删掉。这篇论文把 Agent 的经验拆成三层,让"失败的尝试"第一次变成了能累积的资产。
给 Agent 写技能这件事,这两年已经形成了固定套路。技能本质上是个文件夹,里面装着 Agent 干活时要遵循的指令,可以是 SKILL.md,也可以配上脚本和参考资料。进化的流程是:跑一批任务、挑出失败的、改写指令、在留出验证集上测一遍,分数涨了就留着,跌了就回滚文件。
回滚这道闸门是必要的。某次改动悄悄让 Agent 变菜,问题会一轮轮累积下去,所以每次都得"先改、再测、掉了就还原"。
麻烦出在后面。分析"为什么会失败"是最费劲的一步,要读完完整轨迹、对比成败案例,可这个诊断结论从来没被单独记下来,只留下了改出来的那版指令文本。于是指令一回滚,背后的发现也跟着没了。
WikiSkill 的解法,是把原来那一个文件夹拆成三块,给它们定不同的生命周期。这一层设计才是论文真正的贡献,加个 Wiki 只是表象。
把每一步的推理、工具调用、工具返回、最终答案原样存下来,只支持追加写入,不允许任何修改删除。它是整个演化过程的原始证据,Wiki 维护器和技能生成器都只能读,不能改。
中间这一层是核心。它把零散轨迹整理成结构化的长期知识,主要存四样东西:
新证据进来时,已有的模式页面会被增量修订。技能回滚的时候,这一层不回滚。这就是整套设计最关键的不对称。
当前真正生效的技能,每个技能两个文件:SKILL.md 写完整的执行逻辑、步骤和异常处理,PURPOSE.md 记录这个技能是从 Wiki 里的哪些模式、哪些轨迹推导出来的,方便溯源。候选改动必须验证涨分才转正,否则退回上一个稳定版本。
四个角色接力,每轮的固定动作如下:
| 角色 | 干什么 | 能看 Wiki 吗 |
|---|---|---|
| Inference Agent | 拿当前技能跑完整个训练集,产出原始轨迹 | 不能 |
| Wiki Maintainer | 采样最多 5 条失败 + 3 条成功轨迹(每条截断 15000 字符),做根因分析,提炼模式页面 | 能 |
| Skill Proposer | ReAct 式检索 Wiki,先读索引和影响记录,按需翻具体模式页和原始轨迹,最后提交一个原子改动 | 能 |
| Gating | 在独立验证集上跑一遍候选技能,严格涨分才接受,否则回滚 | — |
Proposer 被要求至少检查 4 条轨迹才允许提改动,单次只能做一个动作:新建一个技能、改一个技能、或者不改。每轮迭代的开销大概是 1 次 Wiki 维护调用加上 10 到 20 轮 Proposer 对话。
Wiki 里明明攒了一堆高质量知识,为什么不让执行任务的 Agent 直接读?论文拿 Gemini-3.5-Flash 做了四组消融,结果挺意外:
| 执行 Agent 看 Wiki | Proposer 看 Wiki | 四基准平均分 |
|---|---|---|
| 否 | 否 | 48.7% |
| 是 | 否 | 45.3% |
| 是 | 是 | 60.9% |
| 否 | 是 | 63.7% ← 最优 |
让干活的 Agent 也读 Wiki,平均分反而从 63.7% 掉到 60.9%,其中 LiveMath 一项从 72.6% 掉到 64.8%。
作者的推测是:如果执行时随时能查 Wiki,跑出来的轨迹就掩盖了当前技能本身的缺陷,后面改技能拿不到有效信号。用机器学习的说法,Wiki 是老师端的备课笔记,Skill 是要装到学生脑子里的东西;允许学生考试时翻老师的教案,最后他未必真学会。
评测覆盖 5 个基准和 5 个模型。基准分别是 LiveMathematicianBench(数学推理)、SealQA(开放域网页搜索)、SpreadsheetBench(表格处理)、OfficeQA(长上下文文档问答)、ALFWorld(具身交互)。模型包括 Gemini-3.5-Flash 和 Qwen-3.5-4B / 9B、Qwen-3.6-27B、Gemma-4-31B。完整流程独立跑 3 次取平均,还做了 1000 次迭代的成对 bootstrap 显著性检验。
| 模型 | 无技能 | 最强对比方法 | WikiSkill | 相对无技能 |
|---|---|---|---|---|
| Qwen-3.5-4B | 26.2 | 35.2 | 38.5 | +12.3 |
| Qwen-3.5-9B | 29.9 | 42.3 | 47.4 | +17.5 |
| Qwen-3.6-27B | 39.4 | 53.3 | 63.3 | +23.9 |
| Gemma-4-31B | 41.3 | 49.1 | 54.9 | +5.8 |
| Gemini-3.5-Flash | 49.5 | 56.1 | 68.1 | +12.0 |
技能进化和模型规模是互补的,不是替代的。模型越大,从技能里拿到的增益反而越多。Qwen-3.5-4B 涨 12.3 个点,Qwen-3.6-27B 涨 23.9 个点,SpreadsheetBench 单项更是涨了 40.9 个点。反过来看,Qwen-3.5-9B 配上进化技能拿到 47.4%,比裸跑的 Qwen-3.6-27B(39.4%)还高。
技能可以跨模型、跨家族迁移。Qwen-3.5-4B 进化出的 LiveMath 技能,把 Gemini-3.5-Flash 从 33.0% 拉到 67.5%;Qwen-3.6-27B 的表格技能让 Qwen-3.5-9B 从 24.3% 涨到 50.5%,比它自己进化出来的还好用。技能库第一次成了一笔跟模型解耦的资产。
但存在负迁移。Qwen-3.5-4B 的表格技能套到 Gemini-3.5-Flash 上,性能从 50.5% 崩到 18.1%。原因是小模型进化出的是"单条命令式"的操作逻辑,把大模型的多步脚本能力给限制住了。
另外,增益在不同任务上差异很大。数学推理、表格处理、具身交互涨得最猛,长上下文文档问答涨得少,小模型在 OfficeQA 上甚至略低于无技能基线,因为小模型执行不了技能里指定的复杂长距离检索流程。
这篇论文明显是接着 Andrej Karpathy 的 LLM Wiki 思路往下做的,引用里也明确提了。
Karpathy 那版对传统 RAG 的批评是:每次回答都从原始文档里检索片段,再重新理解和综合,大量的综合工作被反复重复做。更合理的做法是让模型把原始材料持续编译进一个结构化、相互链接、可以不断更新的 Wiki,让已经完成的理解成为持久资产,而不是下次查询时从零开始。
WikiSkill 把同样的思想从"知识问答"搬到了"Agent 学习"上,而且多加了一个闭环:Wiki 里的知识不再只是等着被查询,而是被编译成程序性能力;能力进入环境跑起来产生新轨迹;新轨迹再回来修正 Wiki。在这个结构里,Wiki 从知识消费层变成了能力生成层。
如果你在维护一套 Agent 技能或者知识库,这篇论文给出了一条很具体的升级路径:把"记录知识"和"生成可执行技能"拆成两层,并且让技能层可回滚、知识层不可回滚。
很多人的知识库是单层的,改坏了就是改坏了,要不就只能整体备份。按三层拆开之后,失败的经验不会丢,下一轮能直接踩在上一轮的理解上继续走。
还有一条工程上的提醒值得抄:不要为了让当前任务跑得更好,就把所有知识一股脑塞给执行中的 Agent。知识的价值在于产生能力,而不是替代能力。
作者:Liyan Tang、Cyrus Rashtchian、Chun-Sung Ferng、Andrew Tomkins、Da-Cheng Juan、Tu Vu
原文:arxiv.org/abs/2608.27454