XSKILL 论文精读:让多模态 Agent 从经验和技能中持续学习
总结
这篇论文讨论的是一个很实用的问题:现在的多模态 Agent 已经能看图、写代码、做网页搜索、做图片搜索、访问网页,但它们很多时候仍然像“每道题都从零开始做”。它们可以调用工具,却不一定会高效调用;它们可以执行多步推理,却不一定能把以前成功或失败的经验迁移到新任务。
论文提出的 XSKILL 想解决这个问题:不更新模型参数,只从过去的执行轨迹中抽取可复用的经验和技能,把它们存在外部知识库里,在新任务推理时再检索、改写、注入给 Agent。
这里有两个关键词:
- Experience(经验):偏动作级,告诉 Agent 在某种视觉/执行上下文下应该怎么选工具、怎么纠错、怎么避免走弯路。
- Skill(技能):偏任务级,是更结构化的工作流和工具模板,告诉 Agent 一类任务大致应该按什么步骤做。
可以把二者理解成:
- Experience 像“踩坑记录”和“临场提醒”:如果图片倒置,先旋转;如果目标太小,先裁剪放大;如果原图搜索不准,先裁 ROI 再搜。
- Skill 像“标准操作流程”:对于未知物体识别任务,先定位目标,再裁剪,再反向图片搜索,再访问网页确认。
论文的核心贡献是把这两种知识拆开建模,又让它们互相配合。它不是让模型靠参数微调记住过去,而是让 Agent 维护一个外部知识库:
- Skill Library:Markdown 风格的结构化技能文档;
- Experience Bank:JSON 风格的经验条目,每条经验通常是条件 + 动作。
上图给了一个很直观的例子。问题是识别图片角落两个吉祥物的原型。没有 XSKILL 时,Agent 可能直接看原图、直接搜索原图,然后失败;有 XSKILL 时,它能回忆到以前的经验:图片可能需要转正,小目标最好先裁剪,未知物体可以裁剪后再图片搜索。于是它形成了“旋转 -> 裁剪 -> 图片搜索 -> 访问网页确认”的执行链,最后答对。
一句话概括这篇论文:
XSKILL 把多模态 Agent 的历史轨迹变成可检索、可合并、可迁移的经验和技能,让 Agent 在不微调模型的情况下持续变聪明。
引言
近年来,多模态大语言模型(MLLM)让 Agent 从“被动看图回答问题”变成了“主动解决问题”的系统。一个多模态 Agent 可以:
- 看图理解视觉内容;
- 调 Python 代码裁剪、旋转、增强图片;
- 用网页搜索补充外部知识;
- 用图片搜索识别未知物体;
- 访问网页并抽取信息。
但论文认为,当前多模态 Agent 仍有两个关键瓶颈。
工具使用效率低
有些任务很简单,Agent 却绕很多步;有些任务很复杂,Agent 又探索不够深。比如图片里文字太小,正确做法应该是先裁剪放大再 OCR,但 Agent 可能直接肉眼猜;或者图片方向不对,Agent 没有先旋转,后面所有判断都偏了。
这类问题需要 Skill 来缓解。Skill 提供可复用的工作流和工具模板,让 Agent 知道一类任务应该怎么拆、怎么执行。
工具编排不灵活
很多 Agent 系统是单路径执行,遇到不同任务时不太会组合工具。例如它知道可以图片搜索,也知道可以裁剪,但不知道“先裁剪目标区域,再用裁剪图搜索”比“直接搜索整张图”更可靠。
这类问题需要 Experience 来缓解。Experience 提供更局部、更战术的决策知识,帮助 Agent 根据当前视觉上下文选择合适动作。
为什么不能只保存文本轨迹?
现有很多经验学习方法主要从文本日志中提取知识,比如模型说了什么、调用了什么工具、返回了什么结果。但多模态任务里,关键决策经常来自视觉观察:
- 图像是不是倒置;
- 目标是不是太小;
- 背景是不是太暗;
- OCR 区域是不是被遮挡;
- 搜索结果里的图是否和原图同一个物体。
如果经验提取和检索只看文本轨迹,不看图像状态,就很容易抽到“看起来对、实际不适用”的经验。XSKILL 的一个关键点就是:经验和技能的抽取、检索、改写,都要视觉接地(visually grounded)。
方法概览
XSKILL 的整体流程分两阶段:
-
Phase I:Accumulation(积累阶段)
在训练任务上让 Agent 多次尝试,得到多条推理轨迹。系统从这些轨迹里抽取技能和经验,并合并到外部知识库。 -
Phase II:Solving(推理阶段)
面对新任务时,系统先分解任务,再检索相关经验和技能,然后根据当前图片和问题进行改写,最后注入到 Agent prompt 中辅助执行。
论文里有两个模型角色:
- MLLM_exec:真正执行任务的模型,负责推理和调用工具;
- MLLM_kb:管理知识库的模型,负责总结轨迹、抽取经验、合并技能、检索改写。
这个设计有一个好处:知识管理和任务执行可以解耦。比如可以用强模型积累知识,再把知识迁移给另一个执行模型使用。这也是论文后面做 cross-model transfer 的基础。
问题定义
论文把一个多模态工具使用任务表示为:
$$ T = (q, I) $$
其中:
- $q$ 是自然语言问题;
- $I = {I_1, I_2, ..., I_m}$ 是相关图片集合;
- Agent 拥有工具集合 $F = {f_1, f_2, ..., f_n}$,比如代码解释器、网页搜索、图片搜索、网页访问等;
- Agent 每一步根据当前状态选择一个工具动作,形成轨迹 $\tau$;
- 最终输出答案 $\hat{y}$。
XSKILL 的目标不是更新模型参数,而是构建外部知识库:
$$ KB = (K, E) $$
其中:
- $K$ 是技能库(Skill Library);
- $E$ 是经验库(Experience Bank)。
最终目标是让 Agent 在给定任务和知识库时更容易生成正确答案:
$$ \max_{KB} P[\hat{y}=y^* \mid T, KB] $$
换句话说,XSKILL 学的不是模型参数,而是外部可读、可检索、可编辑的知识。
Skill 与 Experience
Skill:任务级技能
论文定义的 Skill 是一个任务级指导文档,形式上可以写成:
$$ k = (M, W, P) $$
其中:
- $M$ 是元信息,比如技能名、描述、版本;
- $W$ 是 workflow,也就是操作步骤;
- $P$ 是 tool templates,也就是可复用工具模板。
Skill 通常存成 Markdown 文档。它更像 SOP(Standard Operating Procedure,标准操作流程),用于指导一类任务。
例如“识别图片中的未知小物体”可以形成这样的技能:
1. 先判断图片方向是否正常;
2. 如果目标太小,先裁剪目标区域;
3. 对裁剪图进行图片搜索;
4. 打开搜索结果网页,寻找物体名称或来源;
5. 回到原问题,给出简洁答案。
Skill 的优点是结构清楚,能减少工具调用错误、语法错误和无效探索。它解决的是“这一类任务大体应该怎么做”的问题。
Experience:动作级经验
Experience 是动作级、上下文敏感的经验,形式上可以写成:
$$ e = (c, a, v_e) $$
其中:
- $c$ 是触发条件,比如“图片倒置”“目标很小”“搜索无结果”;
- $a$ 是推荐动作,比如“先旋转 180 度”“裁剪 ROI 后再搜索”;
- $v_e$ 是语义向量,用于检索。
Experience 通常更短,像这样:
{
"condition": "当目标物体很小且位于图片角落时",
"action": "先裁剪目标区域并放大,再进行识别或图片搜索"
}
Experience 的优点是灵活,能处理具体任务里的临场选择。它解决的是“当前这个视觉状态下下一步怎么做”的问题。
为什么要同时有二者?
只用 Skill,Agent 有了流程,但可能不够灵活;只用 Experience,Agent 有了很多小提醒,但缺少整体工作流。XSKILL 的假设是:
- Skill 提供稳定结构,减少低级工具错误;
- Experience 提供局部策略,提高工具选择灵活性;
- 两者结合,才能同时提升执行稳定性和任务适应性。
实验也支持这一点:去掉 Experience 或去掉 Skill 都会导致性能下降。
Phase I:经验和技能积累
积累阶段输入一批训练任务。对每个任务,Agent 会做多次 rollout,也就是多条独立尝试路径。
设第 $i$ 个训练任务为:
$$ T_i = (q_i, I_i) $$
执行模型生成 $N$ 条轨迹:
$$ R_i = {\tau_i^{(1)}, ..., \tau_i^{(N)}} $$
XSKILL 不只看一次成功或失败,而是比较多次尝试,找出哪些行为真正导致成功,哪些行为导致失败。
Rollout Summary:视觉接地的轨迹总结
MLLM_kb 会读取:
- 多条执行轨迹;
- 当前任务图片;
- 问题;
- 标准答案;
- 当时注入过的技能。
然后输出:
- 轨迹总结 $SR_i$;
- 新的技能片段 $\Delta K_i$。
这里最重要的是“视觉接地”。系统不是只总结“调用了 image.crop”,而是总结为什么调用它:
- 因为目标在角落很小,所以裁剪;
- 因为图片上下颠倒,所以旋转;
- 因为图像太暗,所以增强亮度;
- 因为 OCR 失败,所以换区域或放大。
这样抽出来的知识才不是空泛日志,而是和视觉状态绑定的可复用经验。
Cross-Rollout Critique:跨轨迹批判
多次 rollout 里有成功也有失败。XSKILL 会比较它们,找因果线索。
比如:
- 成功轨迹都先裁剪目标区域,失败轨迹都直接搜索整图;
- 成功轨迹先旋转图片,失败轨迹忽略图片方向;
- 成功轨迹访问网页验证来源,失败轨迹只看搜索结果标题。
系统据此生成经验更新:
add:加入一条新经验;modify:修改已有经验,让它更准确、更泛化。
这一步的意义是:经验不是从单条轨迹硬抄,而是从成功和失败的对照中归纳出来。
Knowledge Consolidation:知识合并
如果每个任务都加一堆经验,知识库很快会膨胀、重复、变脏。所以 XSKILL 做了分层合并。
对 Experience:
- 新经验加入前,先和已有经验算相似度;
- 如果相似度超过阈值,就交给 MLLM_kb 合并;
- 如果经验库超过最大容量,就删除低质量、重复、不够可执行的经验。
对 Skill:
- 新技能片段会合并进全局 Skill 文档;
- 如果文档太长,就触发 refinement;
- 系统会删除过于具体的案例,把实体替换成占位符,让技能更泛化。
这一步对应论文里说的 hierarchical consolidation:把临时轨迹洞察变成持久、可复用、可迁移的知识。
Phase II:新任务推理
推理阶段面对一个新任务,XSKILL 不会把整个知识库都塞进 prompt,而是做三步:任务分解、经验检索、上下文改写。
任务分解检索
直接用原问题检索经验可能效果不好,因为一个复杂任务常常包含多个技术子问题。
比如一个问题可能同时需要:
- 处理暗图;
- 裁剪小目标;
- OCR;
- 网页搜索;
- 数值计算。
XSKILL 先让 MLLM_kb 把任务分解成若干子任务:
$$ G = {g_1, ..., g_{n_g}} $$
再对每个子任务分别检索 top-k 经验:
$$ E_{ret} = \bigcup_{g\in G} Top\text{-}k({e\in E \mid cos(v_g, v_e)>\tau_{min}}) $$
这样可以避免只检索到一种经验,而漏掉其他关键技术需求。
Experience Rewrite:经验改写
检索到的经验通常是通用的,不能直接照搬。XSKILL 会根据当前图片和问题,把经验改写成当前任务可用的形式。
例如通用经验是:
如果图像方向异常,先规范化方向再识别。
当前任务图片明显上下颠倒,那么改写后可能是:
当前图片倒置,先用 image.rotate(180) 转正,再裁剪角落中的目标物体。
这一步很关键,因为它把“抽象经验”变成“当前任务操作建议”。
Skill Adaptation:技能适配
全局 Skill 文档可能很长,也可能包含当前任务不需要的流程。XSKILL 会根据当前图像和问题剪裁 Skill:
- 删除无关章节;
- 保留相关 workflow;
- 把工具模板改成当前任务适用的参数形式;
- 把重写后的经验整合进技能步骤。
最终得到:
$$ K_{adapted} = MLLM_{kb}(K, E_{rewritten}, q, I) $$
然后把 adapted skill 和 rewritten experiences 注入到 Agent 的系统提示中,让执行模型参考。
论文强调,这种注入是 non-prescriptive 的,也就是不给 Agent 强制脚本,而是提供参考。Agent 仍然可以根据实际观察做调整。
实验设置
论文在五个 benchmark 上评估 XSKILL,覆盖三类任务。
视觉 Agent 工具使用
-
VisualToolBench
关注混合工具视觉推理,要求模型处理视觉输入并调用工具做图像分析。 -
TIR-Bench
Tool-Integrated Reasoning benchmark,包含 referring expression、迷宫、仪器识别、OCR、视觉对比等任务。
多模态搜索
-
MMSearch-Plus
需要结合网页搜索、图片搜索和视觉推理。 -
MMBrowseComp
多模态网页浏览理解任务,论文用它做 OOD 测试,也就是不在目标数据上积累经验,直接迁移过去。
综合任务
- AgentVista
更难的综合 benchmark,结合工具使用和复杂搜索。
训练/测试划分上,多数数据集随机抽 100 个任务用于知识积累,其余用于测试;MMBrowseComp 因为样本少,全部用于测试。
工具集合
论文给 Agent 提供四类工具:
- Code:执行 Python,用于图像处理、计算和数据分析;
- Web Search:文本网页搜索;
- Image Search:反向图片搜索;
- Visit:访问具体网页并抽取内容。
不同 benchmark 可用工具不同。例如 TIR-Bench 只用 Code,MMSearch-Plus 和 AgentVista 则使用四类工具。
Baseline
论文比较了几类方法:
- No Tools:没有工具;
- w/ Tools:有工具,但没有经验和技能学习;
- AWM:Agent Workflow Memory,从过去轨迹中抽工作流;
- DC:Dynamic Cheat-Sheet,维护动态策略和代码片段;
- Agent-KB:构建结构化经验知识库并检索;
- XSKILL:本文方法。
评价指标
论文主要用 Success Rate(SR)。每个任务跑 $N=4$ 次 rollout,并报告两个指标:
- Average@4:4 次 rollout 的平均成功率,衡量稳定性;
- Pass@4:4 次里至少成功一次的任务比例,衡量上限能力。
Average@4 更看重每次是否稳定答对,Pass@4 更像“多试几次有没有希望答对”。
主实验结果
主结果表明,XSKILL 在不同模型和 benchmark 上整体都优于工具基线和已有经验学习方法。
几个关键信息:
- 相比只给工具的 baseline,XSKILL 在不同模型上的 Average@4 平均提升约 2.58 到 6.71 个点。
- 在 Gemini-3-Flash + TIR-Bench 上,XSKILL 的 Average@4 达到 47.75%,比最强 baseline Agent-KB 高 11.13 个点。
- GPT-5-mini 和 o4-mini 并没有自己积累经验,而是使用 Gemini-3-Flash 积累的知识,仍然获得提升。这说明 XSKILL 的外部知识具有一定跨模型迁移能力。
- XSKILL 同时提升 Average@4 和 Pass@4,说明它不只是偶尔多答对一些任务,而是提升了执行稳定性和潜在上限。
这组结果支持论文的主张:工具本身不够,Agent 还需要从历史轨迹中学会如何用工具。
消融实验
论文在 VisualToolBench 上用 Gemini-2.5-Pro 做消融。
完整 XSKILL 的结果是:
- Average@4:30.49;
- Pass@4:46.73。
去掉不同组件后:
- 去掉 Experience,Average@4 下降 3.04;
- 去掉 Skill,Average@4 下降 3.85;
- 去掉 Experience Manager,下降 4.09;
- 去掉 Skill Manager,下降 3.62;
- 去掉任务分解,下降 1.28;
- 去掉任务适配,下降 1.52。
这说明两个点:
- Experience 和 Skill 都有用,不能只保留其中一个;
- 积累阶段的知识质量比推理阶段的检索技巧更关键,但后者也有贡献。
换句话说,XSKILL 的性能主要来自“知识库本身变好了”,而不只是检索 prompt 写得更漂亮。
技能和经验分别带来什么?
Skill 减少工具使用错误
论文分析了工具调用错误。结果显示,从 Experience Only 到 Skill Only,整体错误率从 29.9% 降到 15.3%。其中:
- 语法错误从 114 次降到 71 次;
- 工具名错误从 16 次降到 2 次;
- runtime error 也明显下降。
这说明 Skill 的主要作用是提供结构化工具模板和 workflow,减少低级执行错误,让 Agent 把有限轮数用在真正解决问题上,而不是反复修工具调用。
Experience 让工具选择更灵活
论文还分析了工具使用分布。Experience 会明显改变 Agent 的工具选择。
例如在 VisualToolBench 上:
- w/ Tools 的代码工具使用比例是 66.63%;
- Exp Only 提升到 74.49%;
- Skill & Exp 提升到 76.97%。
在 MMSearch-Plus 上:
- w/ Tools 的图片搜索比例是 15.43%;
- Exp Only 提升到 24.63%;
- Skill & Exp 保持在 23.89%。
这说明 Experience 能让 Agent 根据任务类型更主动地选工具:视觉推理任务更偏向代码处理,多模态搜索任务更愿意使用图片搜索,而不是只靠文本搜索。
Rollout 数量的影响
论文改变积累阶段的 rollout 数量 $N$,发现随着 rollout 增加,Average@4 和 Pass@4 都上升。
原因很直观:多次尝试提供了更多轨迹差异。系统可以比较成功和失败路径,从中抽出更可靠的经验和更泛化的技能。
这也说明 XSKILL 不是简单记录成功案例,而是利用“多路径对照”来做知识归纳。
跨任务迁移
论文还做了 zero-shot cross-task transfer:
- 用 VisualToolBench 上积累的知识去做 TIR-Bench;
- 用 MMSearch-Plus 上积累的知识去做 MMBrowseComp。
结果显示,XSKILL 在 OOD 设置下仍然超过 baseline。论文认为这来自两个机制:
- 知识合并 删除了过于具体的案例细节,保留通用原则;
- 任务适配 会把通用经验重新改写成当前任务可用的形式。
这很重要,因为如果外部知识只能在同一个数据集上用,那价值有限;能跨任务迁移,说明它确实学到了一些通用的工具使用规律。
知识库长什么样?
附录给了技能和经验的例子。可以看到,Skill 更像结构化文档,会包含代码模板、注意事项和工作流;Experience 更像短条目,每条总结一个具体但可迁移的策略。
例如经验中会出现类似规则:
- 复杂结构化问题中,识别不影响最终答案的区域,避免无关变量干扰;
- 体育统计任务中,要区分视觉上下文和统计周期;
- 如果要确认角色是否缺失,需要增强暗部或阴影区域后再判断;
- 如果图像可能镜像,先根据坐标轴或文字方向确认时间顺序;
- 旋转或镜像布局时,要重新校验坐标系统和文本流。
这些内容不像传统 prompt 那样一次性手写,而是从历史轨迹中不断积累、合并、改写出来。
相关工作
论文把相关工作大致放在三个方向。
多模态 Agentic Reasoning
现代多模态 Agent 不再只是回答图像问题,而是会主动操作视觉数据,比如放大、裁剪、增强、执行代码、搜索网页。问题在于很多系统仍然是 stateless 的,每次任务之间没有长期知识积累。
XSKILL 试图补上这一点:让 Agent 从过去的视觉-工具交互中学习。
从经验中学习
已有方法如 AWM、Dynamic Cheat-Sheet、Agent-KB 都在研究如何从历史轨迹中提取经验。但论文认为,它们大多偏文本轨迹,对多模态任务中“视觉状态导致动作选择”这一点建模不足。
XSKILL 的区别是把经验提取、经验检索和经验改写都和视觉观察绑定。
Skills for Agents
Anthropic 等工作已经提出 Agent skills 的概念,即把专门任务能力写成可复用技能。XSKILL 的不同点是:
- 它不是只靠人工写 Skill;
- 它从多条轨迹中自动抽取 Skill;
- 它同时维护 action-level Experience;
- 它会在新任务中根据图片上下文适配 Skill。
论文亮点
1. 把知识拆成 Skill 和 Experience
这个拆分很清楚,也符合 Agent 任务的实际需求。Skill 管流程,Experience 管局部策略。前者提升稳定性,后者提升灵活性。
2. 强调视觉接地
多模态任务不能只看文本日志。XSKILL 让知识抽取和知识适配都访问任务图片,这个设计抓住了多模态 Agent 的关键。
3. 不需要参数更新
所有学习都发生在外部知识库里,因此更容易部署、审计、编辑和跨模型迁移。对于闭源大模型或不方便微调的模型,这点很实用。
4. 用多路径对照提炼经验
只看成功轨迹可能会学到偶然相关的模式;同时比较成功和失败轨迹,更容易识别真正有因果意义的操作。
局限
1. 仍然依赖强模型做知识管理
XSKILL 需要 MLLM_kb 做总结、批判、合并、改写。如果知识管理模型不够强,抽取出的技能和经验可能质量不稳定。
2. 当前实验主要是单轮积累再测试
论文说框架支持持续迭代,但实验主要展示的是一次 accumulation-then-test cycle。真正长期、多轮、开放环境中的知识漂移和知识污染问题还需要进一步验证。
3. 外部知识库可能积累偏见或错误
如果过去轨迹中有错误经验,或者某个模型积累了偏见知识,这些知识可能通过外部库迁移给其他模型。论文在 Impact Statement 中也提到,需要人工审核、偏见审计和访问控制。
4. 知识注入会占用上下文
虽然 XSKILL 会检索和改写,但 adapted skill 和 rewritten experiences 仍然要放进 prompt。长任务或大知识库下,如何控制上下文开销仍然重要。
和普通 RAG 的区别
XSKILL 很像 RAG,但不完全是普通 RAG。
普通 RAG 通常检索的是外部文档或事实知识,而 XSKILL 检索的是 Agent 自己过去做任务时归纳出的操作知识。
更具体地说:
- 普通 RAG 回答“这个问题相关资料是什么”;
- XSKILL 回答“遇到这种视觉任务时应该怎么操作工具”。
所以 XSKILL 更像是 procedural RAG(过程性知识检索) 或 agent memory for tool use(面向工具使用的 Agent 记忆)。
结论
XSKILL 的核心思想很直接:多模态 Agent 不能每次都从零开始,它应该把过去的成功和失败转化为可复用知识。
论文把这种知识分成两层:
- Skill:结构化任务流程,让 Agent 更稳;
- Experience:上下文敏感操作建议,让 Agent 更灵活。
通过视觉接地的轨迹总结、跨 rollout 批判、分层知识合并、任务分解检索和上下文改写,XSKILL 在不更新模型参数的情况下,让多模态 Agent 持续提升工具使用效率和工具编排能力。
这篇论文的价值不只是提出一个 benchmark 上有效的方法,更重要的是给了一个很清晰的方向:Agent 的持续学习不一定只发生在模型参数里,也可以发生在外部、可读、可编辑、可迁移的经验和技能库里。