技能库与自动归纳:从 Voyager 到「越用越强」
同一个 agent 做第 100 个任务和第 1 个一样生疏,缺的不是模型,是沉淀经验的位置。技能库把「会做事」变成可检查、可测试、可退役的外部工件,judge→induce→admit 一环环转下去,累计成功率曲线一路爬升——「越用越强」从口号变成可度量的性质。从 Voyager 的函数归纳到 AWM 文本模板、ASI 代码技能、ReasoningBank 的失败策略库,本篇把这条线连起来读。
先看两条购物轨迹 (L4 p.2)。一条把 Sony 耳机加进心愿单,一条查无线键盘的价格区间,两条的开头五步一模一样:goto store → find search box → fill (query) → click Search → open result,只有收尾动作不同。
把共享结构抽出来,只留一个 {query} 变量,归纳就完成了:两条轨迹并成一个技能。技能库(skill library)就是攒技能的地方。模型没变,变的是有没有地方存经验。
一、技能是什么:把重复抽象成变量
设定朴素 (L4 p.22,24):两条轨迹、一个变量,技能的全部原料就这些。不是存两条轨迹,而是存一份可实例化的流程。
在线归纳(online induction)的设定更苛刻:任务串行到达,agent 完成一个、成功后先更新记忆再接下一个,没有离线题库,也没有回放机会。评价指标只有一个:至今累计成功率。
这条曲线检验的就是越用越强:技能记忆跨任务流增长,第 N 个任务站在前 N-1 个任务的肩膀上。
二、三环生命周期:LEARN、USE、MAINTAIN
LEARN 环决定什么配进库 (L4 p.25)。图里的技能记忆(skill memory)即前文的技能库。episode 先过 judge,成败明确才有资格谈归纳;induce 出候选技能,再过 admit 这道关,写入 memory。
USE 环是日常运转:从库里 select/retrieve 出合用的技能去 act,产出 outcomes。
最容易被忽略的是第三环 MAINTAIN。outcomes 不只回填统计,还要驱动 add(补新)、repair(修旧)、retire(淘汰)。库是活的,会修也会死。
多数 agent 记忆演示只画前两环,第三环才是库长期不腐烂的分水岭。
三、归纳谱系与两种载体:文本还是代码
从经验里归纳可复用程序,并非 web agent 的发明 (L4 p.23):
- Voyager:在 Minecraft 里归纳技能函数,函数再调函数,长成技能树。
- DreamCoder:把已解题语料压缩成函数。
- Stitch:用符号压缩在轨迹里找共享结构。
- LAPS:引入任务描述做引导。
- LILO:让 LLM 写函数、Stitch 压缩,再由 LLM 命名并文档化。
谱系走向很清楚:归纳器从符号系统换成了 LLM,产出物始终是程序。
到 web agent 这里,同一个 judge→induce→admit 环分出两种载体。AWM (ICML 2025, Zora Wang; L4 p.26-28) 归纳文本技能:judge 只问一句「终态正确吗」,通过就 few-shot 归纳出带 {term} 变量的动作模板入库。技能被后续任务复用,收益跨任务复利式累积。
ASI (2504.06821, COLM 2025; L4 p.30-33) 走代码路线:同一个环,落库的是 def search_reviews(...) 这样的函数。judge 升级为双问:终态正确吗?用了技能吗?防的就是把运气记成功力。
准入还能做成可测试的:候选先进练习场实战,reward model 打分过关才 admit,否则 revise 再考 (SkillWeaver 2025)。
带 {term} 变量的动作模板+示例。灵活,能按当下页面逐步适配改写(L4 p.29);但使用时仍要一步步「抄着改」,多步推理一步也省不下。
def search_reviews(...) 这样的可执行函数。可执行、可组合、可以先测再存,一次调用折叠整段多步推理;代价是僵硬 —— 页面改版了它也照原样执行(L4 p.36)。
WebArena 五站平均 (L4 p.30-33):
| 配置 | checkpoints 达成率 | 每任务步数 |
|---|---|---|
| 无记忆 | 41.3% | 24.5 |
| 文本技能 | 59.5% | 20.6 |
| 代码技能 | 80.2% | 15.0 |
任务级的压缩更直观:无记忆时一个任务 50 步撞上限,代码技能就位后 4 步收工。整条找搜索框→填词→点搜索→开结果的链路,被一次函数调用折叠掉。
归纳器本身还能训练。技能的价值要到复用时才显现,SAGE/AgeMem 干脆把后续任务放进训练样本,奖励在任务一的成功奖励 r₁ 之外加一条:两任务都成功且复用了技能 (L4 p.43),AppWorld 完成率 55.4→60.7。
四、库会腐烂:泛化、维护与从失败学习
代码技能的僵硬迟早要付代价:sort_listings 在原站点走下拉框,换到 Target 变成开侧栏,跨站脆断 (L4 p.34-35)。
PolySkill (ICLR 2026) 的答案是面向抽象编程:一个接口、多个站点实现,组合逻辑只写一次。
维护端,TroVE (ICML 2024) 按使用频率做垃圾回收,淘汰使用次数 < ½・log₁₀(n) 的函数。
Not All Skills Help 则提醒 (L4 p.42):对一类任务有益的技能会伤另一类,admit 时就得想清适用边界。
从失败学习也有专门的工作。ReasoningBank (2509.25140, ICLR 2026; L4 p.38-41) 从失败轨迹里归纳策略:
三组对照结论 (L4 p.38-41):
- 记忆类型对照:失败经验对策略记忆帮助大,对轨迹记忆 (Synapse) 与 workflow 记忆 (AWM) 帮助小。
- 裁判质量:judge 不必完美。换成按概率翻转的模拟裁判,在很宽的质量区间内方法仍有效。
- 检索量:检索注入并非越多越好,过度检索经验反而掉分,经验可能不相关,条件化信息有限。
与本讲的连接
- 本篇把伴读里「把情节沉淀为程序」的提法落到最小例子:两条轨迹的共享结构+一个变量=技能。
- 人工写 SKILL.md(资料库里 OpenHands 那篇,趁记忆新鲜固化工作流)与 agent 自动 induce,是同一环的两种执行者;重复工作流沉淀成提示还是函数,第三节那张表就是判据。
- 第四节的 TroVE 淘汰、Not All Skills Help 与 ReasoningBank 策略库合起来提醒:建库只是一半,另一半是维护。
重复结构一出现,LEARN 环就该转起来:无记忆 41.3%,文本技能 59.5%,代码技能 80.2%。生态侧,OpenAI Codex 已支持 Agent Skills,技能作为工件正在跨厂商互操作。
本节论文与规范
本节资料
- Agent Skill Induction(自适应技能归纳) 论文2504.06821前沿官方指定
官方指定读物。与 AWM 相同的 judge→induce→admit 归纳环,但产出物从文本模板换成可执行函数,由模型在沙箱里自己写、自己测、再入库。WebArena 五站点成绩从 41.3 提升到 59.5,注入技能后可达 80.2,完成任务所需步数从 24.5 降到 15.0。代码技能更强但门槛更高,是本讲技能库板块的关键对照。
- Agent Workflow Memory 论文2409.07429前沿官方指定
官方指定读物。让 agent 从成功轨迹中归纳文本型 workflow 技能:先判断哪些步骤值得记住,再用 few-shot 提示把轨迹抽象成带 {变量} 占位符的动作模板,存入技能库供后续任务检索复用。在 WebArena 与真实网站任务上,跨任务的「技能复利」持续抬升成功率。与 ASI 同一团队的两条路线之一:这条走文本。
OpenAI Codex 的技能文档:同样采用 SKILL.md 的 Agent Skills 格式,目录结构、触发方式与 Claude 一脉相承。这份文档的存在本身就是最有说服力的事实——技能格式已在厂商之间互操作,写一次可以同时服务两边的 agent。
- ReasoningBank: 从失败轨迹归纳策略记忆 论文2509.25140前沿官方指定
官方指定读物。把失败也当资产:从轨迹(含失败尝试)中归纳「策略记忆」,按任务特征检索注入,让 agent 越用越强。工程结论很有分寸——LLM 裁判的归纳准确度只要落在宽区间内效果就稳定,检索条数过多反而掉分。融合了记忆管理与技能归纳两条线索,是本讲技能板块的收官读物。
技能库思想的源头:在 Minecraft 里让 GPT-4 自己写代码当技能,配自动课程出题、迭代提示机制与可执行技能库。技能可执行、可组合、可验证,入库之后获得独特物品数 3.3 倍、技术树探索 15.3 倍提升,还能迁移到新世界即插即用。今天一切 agent 技能归纳工作的共同祖先。
AI 生成 · 仅供参考,与课程方无关。选中正文里的任何一段也能直接问我(解释一下 / 举个例子)。
本详解以 CMU 11-768 AI Agents (Fall 2026) 课程大纲为参考框架独立撰写,AI 辅助起草、人工抽审。 涉及的官方课件、论文与课程材料版权归原所有方,讲义为站内镜像、其余外链原文出处; 观点与文字(除标注引用外)为作者原创。