【论文阅读】Agent 记忆机制(23):ExpeL——无需参数更新的跨任务经验学习
文章目录
前言
在复杂交互任务中,大模型 Agent 经常会重复犯同样的错误。
例如,在网页问答任务中,Agent 可能已经发现直接搜索完整问题得不到答案,但遇到下一个问题时,仍然继续使用相同的搜索方式。
在家庭环境中,Agent 可能已经通过多次尝试发现平底锅通常位于炉灶附近,但执行新任务时,仍然优先搜索抽屉和橱柜。
这些现象说明,大模型拥有大量世界知识,并不代表 Agent 能够自动从自己的任务经历中学习。
一种直接的解决方式是使用任务数据微调模型。但这种方法存在几个问题:
- 需要访问模型参数;
- 训练成本较高;
- 需要大量交互数据或人工标注;
- 可能损害模型原有的通用能力;
- GPT-4、Claude 等闭源模型无法直接微调。
另一种方法是使用 Reflexion:
任务失败
↓
分析当前失败原因
↓
生成反思
↓
重新尝试同一个任务
Reflexion 能让 Agent 在同一个任务中根据失败不断改进,但反思通常只服务于当前任务。当 Agent 进入下一个任务时,之前的经验不一定会被保留下来。
本文提出的 ExpeL 希望解决的是另一个层次的问题:
Agent 能否把多个训练任务中的成功和失败经验保存下来,提炼为跨任务知识,并在新任务中直接使用?
ExpeL 将学习过程设计为三个阶段:
- 使用 ReAct 和 Reflexion 在训练任务中收集成功、失败轨迹;
- 从轨迹中提取自然语言经验,并保存成功任务轨迹;
- 在测试任务中召回相似成功轨迹,同时使用提炼出的经验指导决策。
整个过程不修改大模型参数,而是通过外部经验池和提示词实现学习。
从今天 Agent 记忆研究的视角看,ExpeL 可以理解为一种较早的“双通道记忆系统”:
成功轨迹
→ 具体情景记忆
从多条轨迹中提炼的 Insight
→ 抽象经验或程序性记忆
前者告诉 Agent“过去某个相似任务是怎么完成的”,后者告诉 Agent“这类任务通常应该遵循什么原则”。
零、论文基本信息
- 论文名称:ExpeL: LLM Agents Are Experiential Learners
- 发表平台:AAAI 2024 Oral
- 代码仓库:LeapLabTHU/ExpeL
- 作者信息:Andrew Zhao、Daniel Huang、Quentin Xu、Matthieu Lin、Yong-Jin Liu、Gao Huang
一、背景与问题
1. 参数学习与提示词学习之间的矛盾
让 Agent 适应特定任务,通常有两条路线。
1.1 参数学习
任务数据
↓
模型训练或微调
↓
参数发生变化
优点是知识可以直接进入模型参数,推理时不需要额外检索大量内容。
但它也存在明显限制:
- 需要访问模型权重;
- 训练需要计算资源;
- 很难持续在线更新;
- 可能使模型过度适应某一类任务;
- 不适用于只提供 API 的闭源模型。
1.2 提示词学习
任务描述 + 示例 + 规则
↓
LLM
这种方法不修改参数,只调整模型上下文。
它更容易应用到闭源模型,也保留了模型原有的通用能力。但提示词通常由人工编写,而且受到上下文窗口限制。
ExpeL 尝试在二者之间寻找一个平衡:
不修改模型参数,但让 Agent 自动从自身经历中生成提示内容。
2. 单任务反思与跨任务学习的区别
Reflexion 主要执行:
任务 A 第一次失败
↓
生成反思
↓
再次执行任务 A
ExpeL 则希望实现:
任务 A、B、C 的成败经历
↓
提炼跨任务经验
↓
用于新的任务 D
因此,两者学习的时间尺度不同。
| 方法 | 经验来源 | 经验作用范围 |
|---|---|---|
| Reflexion | 当前任务的失败轨迹 | 当前任务的下一次尝试 |
| ExpeL | 多个训练任务的成功和失败轨迹 | 后续未见任务 |
| 微调 | 大量训练数据 | 模型参数中的长期能力 |
ExpeL 的关键增量不是“让 Agent 反思”,而是:
将分散在多个任务中的反思与轨迹整理为可以跨任务复用的外部记忆。
二、相关工作
1. 基于提示词的学习
提示词学习通过修改模型输入,而不是修改模型参数,使大模型适应具体任务。
典型方法包括:
- few-shot learning;
- in-context learning;
- Chain-of-Thought;
- 自动生成推理链;
- 自动提示词优化。
这类方法证明了,只要在上下文中提供合适的任务示例和规则,大模型就可以快速适应新任务。
ExpeL 同样通过调整上下文实现学习,但提示内容不是完全由人类准备,而是来自 Agent 自己的历史经验:
- 自动收集的成功轨迹;
- 从成功和失败中提炼的 Insight。
2. 检索增强生成
传统 RAG 通常从外部知识库中检索:
- 文档;
- 事实;
- 网页;
- 数据库记录。
然后将检索内容提供给模型。
ExpeL 检索的不是普通知识文档,而是 Agent 自己生成的成功轨迹。
例如:
传统 RAG:
检索“平底锅通常放在哪里”。
ExpeL:
检索“过去 Agent 如何找到平底锅并完成任务”。
因此,ExpeL 检索的内容同时包含:
- 环境观察;
- 推理过程;
- 工具或动作选择;
- 最终结果。
它更接近后来的“情景记忆检索”,而不是普通的知识 RAG。
3. 智能体规划
大语言模型已经被应用于:
- 机器人规划;
- 游戏;
- 科学实验;
- 网页操作;
- 多步问答;
- 自动化工作流。
这些任务要求 Agent 在每一步根据当前观察选择动作。
ReAct 是代表性方法之一,它将思考和行动交替进行:
Thought:分析当前状态
Action:执行一个动作
Observation:接收环境反馈
相比直接生成整条计划,ReAct 可以根据环境反馈动态调整下一步行动。
但 ReAct 本身不会保存跨任务经验。每个任务开始时,Agent 基本上仍然从固定提示词和 few-shot 示例出发。
4. 智能体自进化与记忆
Reflexion 在 ReAct 基础上加入失败反思:
执行任务
↓
任务失败
↓
分析失败轨迹
↓
生成自然语言反思
↓
重新执行同一任务
这种方法不需要修改模型参数,适合闭源模型。
但 Reflexion 的重点是 intra-task learning,也就是同一个任务内部的改进。
ExpeL 则强调 inter-task learning:
多个任务的经验
↓
形成共享知识
↓
帮助新的任务
此外,ExpeL 同时保留两类信息:
- 具体成功轨迹;
- 跨任务抽象经验。
这也是它区别于只保存反思或只保存轨迹的方法的地方。
三、基础知识
1. 复杂交互任务
论文研究确定性环境中的复杂交互任务。
在每个时间步 i ∈ { 0 , … , H } i\in\{0,\ldots,H\} i∈{0,…,H},Agent 接收观察 o i ∈ O o_i\in\mathcal{O} oi∈O,根据历史交互选择动作 a i ∈ A a_i\in\mathcal{A} ai∈A,目标是完成某个任务 g ∈ G g\in\mathcal{G} g∈G。
历史轨迹可以表示为:
τ t = { o 0 , a 0 , o 1 , a 1 , … , o t } \tau_t=\{o_0,a_0,o_1,a_1,\ldots,o_t\} τt={o0,a0,o1,a1,…,ot}
其中:
- o i o_i oi 表示环境观察;
- a i a_i ai 表示 Agent 动作;
- H H H 表示最大交互步数;
- τ t \tau_t τt 表示到当前时间为止的完整轨迹。
复杂交互任务和普通问答的区别是,Agent 不能只生成一次回答,而需要持续执行:
观察
↓
推理
↓
行动
↓
新的观察
↓
继续推理
一个较早的错误动作可能导致后续任务无法完成。
2. 大语言模型
自回归语言模型根据已有 token 预测下一个 token:
p ( x l ∣ x < l ) p(x_l\mid x_{<l}) p(xl∣x<l)
其中:
- x < l x_{<l} x<l 表示之前的 token;
- x l x_l xl 表示下一个 token。
在 Agent 中,大模型可以将当前轨迹、任务说明、经验和示例作为输入,然后生成:
- 思考;
- 工具调用;
- 环境动作;
- 最终回答。
ExpeL 不改变这个生成模型,而是改变提供给模型的上下文。
3. ReAct 范式
ReAct 将推理和行动结合起来。
例如,在 HotpotQA 中:
Question:
某位导演执导的电影获得了什么奖项?
Thought:
需要先找到导演对应的电影。
Action:
搜索导演姓名。
Observation:
返回电影列表。
Thought:
继续查询目标电影的获奖信息。
Action:
搜索电影名称和奖项。
这种方法使 Agent 能够根据检索结果逐步推进。
4. Reflexion 范式
Reflexion 在任务失败后额外生成反思。
例如:
失败轨迹:
Agent 一直使用完整问题进行搜索,没有找到结果。
反思:
搜索结果不足时,应拆分问题,
先查找中间实体,再使用中间实体继续搜索。
下一次尝试时,这条反思会加入上下文。
ExpeL 使用 Reflexion 收集更丰富的训练经历,但不会直接把所有临时反思当作最终经验。最终跨任务知识来自对成功和失败轨迹的再次比较与提炼。
四、ExpeL 方法总览
为了理解 ExpeL 的训练和测试流程,可以先看论文 Figure 1。

图源:论文 Figure 1,图片来自论文官方项目页面。
左侧展示训练阶段和测试阶段之间的关系;右上是使用 Reflexion 收集成功与失败轨迹;右下是使用 ADD、EDIT、UPVOTE 和 DOWNVOTE 等操作,从经验池中提炼 Insight。
ExpeL 包含三个主要阶段:
阶段一:经验收集
使用 ReAct 和 Reflexion 执行训练任务,
保存成功和失败轨迹。
阶段二:经验学习
检索可复用的成功轨迹,
比较成功和失败轨迹,
提取跨任务 Insight。
阶段三:任务推理
在未见任务中加入 Insight,
并召回相似成功轨迹作为 Demo。
训练阶段会访问环境并积累经验;测试阶段不会更新模型参数,只通过外部记忆增强 Agent。
五、经验收集
1. 设计动机
如果只保存 Agent 第一次执行任务的轨迹,经验池中可能包含大量失败样本,却缺少“同一个任务怎样才能成功”的对照信息。
如果只保存成功轨迹,又无法知道:
- 哪些动作容易失败;
- 成功方案与失败方案的关键区别;
- 哪些错误模式经常重复出现。
因此,ExpeL 使用 Reflexion 让 Agent 对训练任务最多尝试 Z Z Z 次,同时保存每一次轨迹。
2. 第一次尝试
对于训练任务 t n t_n tn,Agent 使用:
- 人工提供的 few-shot 示例 F m a n u a l F_{\mathrm{manual}} Fmanual;
- 当前任务轨迹 τ n , 0 \tau_{n,0} τn,0;
- 初始为空的反思 ν n , 0 \nu_{n,0} νn,0。
策略可以理解为:
a i ∼ L L M R e A c t ( τ n , 0 , F m a n u a l , ν n , 0 ) a_i\sim\mathrm{LLM}_{\mathrm{ReAct}}(\tau_{n,0},F_{\mathrm{manual}},\nu_{n,0}) ai∼LLMReAct(τn,0,Fmanual,νn,0)
Agent 持续执行,直到:
- 完成任务;
- 或达到最大步数 H H H。
无论成功还是失败,轨迹都会写入经验池 B \mathcal{B} B。
3. 失败后的反思
如果任务失败,Agent 根据失败轨迹生成反思:
ν n , z + 1 = concat ( ν n , z , L L M r e f l e c t ( τ n , z ) ) \nu_{n,z+1}=\operatorname{concat}\left(\nu_{n,z},\mathrm{LLM}_{\mathrm{reflect}}(\tau_{n,z})\right) νn,z+1=concat(νn,z,LLMreflect(τn,z))
其中:
- τ n , z \tau_{n,z} τn,z 表示任务 n n n 第 z z z 次尝试的轨迹;
- ν n , z \nu_{n,z} νn,z 表示已有反思;
- ν n , z + 1 \nu_{n,z+1} νn,z+1 表示加入新反思后的内容。
下一轮尝试会将历史反思一起加入上下文。
4. 经验池包含什么
经验池中可能包含:
任务 A
├── 第一次失败轨迹
├── 第二次失败轨迹
└── 第三次成功轨迹
任务 B
├── 第一次失败轨迹
└── 第二次成功轨迹
任务 C
└── 第一次成功轨迹
这为后续学习提供了两类数据:
- 同一任务的失败—成功对;
- 不同任务的成功轨迹集合。
5. 为什么需要失败轨迹
失败轨迹的作用不是直接在测试阶段作为 Demo,而是帮助系统提炼经验。
例如:
失败轨迹:
直接搜索完整问题,多次返回无关页面。
成功轨迹:
先搜索中间实体,再使用实体名称搜索最终答案。
对比后可以提炼:
复杂问题搜索失败时,
应该拆分问题并先定位中间实体。
因此,失败轨迹主要用于发现错误模式;测试阶段召回作为示例的则是成功轨迹。
六、从经验中学习
ExpeL 使用两种互补的学习方式:
具体经验:
召回相似成功轨迹作为 Demo。
抽象经验:
从多条成功和失败轨迹中提炼 Insight。
1. 相似成功经验作为 Demo
1.1 设计动机
当人遇到一个新问题时,通常会回忆过去是否解决过类似问题。
如果历史任务与当前任务非常相似,最有效的方法可能不是重新推理全部流程,而是参考过去的成功轨迹。
1.2 存储和检索
ExpeL 使用:
- FAISS 向量数据库;
- kNN 检索;
all-mpnet-base-v2Embedding 模型。
对于测试任务 t t t,系统检索任务描述最相似的 Top-k 成功轨迹:
F s i m i l a r = TopK τ ∈ B s u c c e s s sim ( E ( t ) , E ( t τ ) ) F_{\mathrm{similar}}=\operatorname{TopK}_{\tau\in\mathcal{B}_{\mathrm{success}}}\operatorname{sim}(E(t),E(t_\tau)) Fsimilar=TopKτ∈Bsuccesssim(E(t),E(tτ))
其中:
- E ( ⋅ ) E(\cdot) E(⋅) 表示文本向量编码;
- t τ t_\tau tτ 表示轨迹对应的任务;
- B s u c c e s s \mathcal{B}_{\mathrm{success}} Bsuccess 表示成功轨迹集合;
- F s i m i l a r F_{\mathrm{similar}} Fsimilar 表示召回的 few-shot 示例。
论文采用最大内积衡量任务相似度。
1.3 为什么按任务相似度检索
ExpeL 不是根据 Agent 当前最新一步的思考动态更换示例,而是根据完整任务描述检索。
这样做的好处是:
- 一次任务中的 Demo 相对稳定;
- 不会因为中间思考变化频繁替换示例;
- 更容易找到整体目标相似的成功轨迹。
后续消融实验也表明:
- 任务相似度检索效果最好;
- 推理相似度略差;
- 随机采样下降明显。
1.4 Agent 场景示例
新任务:
把凉杯放进橱柜。
系统可能检索到成功任务:
把热杯放进橱柜。
观察厨房
→ 找到杯子
→ 拿起杯子
→ 对杯子执行冷却
→ 找到橱柜
→ 放入橱柜
Agent 可以复用动作模式,同时替换具体对象和状态。
2. 从成功和失败中提炼 Insight
具体轨迹适合高度相似的任务,但无法覆盖所有新情况。
因此,ExpeL 还会提取更抽象的自然语言经验。
2.1 同一任务的成功—失败比较
系统将同一任务的失败轨迹和成功轨迹成对输入 Insight 提取模型。
目的在于回答:
- 失败发生在哪里;
- 成功轨迹做对了什么;
- 哪些行为应该避免;
- 哪些策略值得复用。
例如:
失败:
拿到错误物品后继续执行,最终超出步数。
成功:
发现物品错误后放回原位,重新搜索目标物品。
Insight:
如果当前物品不符合任务要求,
应及时撤销错误动作并重新搜索,
不要继续沿错误状态执行。
2.2 跨任务成功模式总结
系统还会从多个不同任务的成功轨迹中寻找共同模式。
例如,多条 HotpotQA 成功轨迹都可能包含:
搜索问题中的第一个实体
→ 获取中间事实
→ 使用中间事实继续搜索
→ 综合多个页面回答
由此可以提取:
多跳问答不应直接搜索完整问题,
应先找到中间实体,再逐步扩展证据链。
这种经验比单个任务轨迹更容易迁移到未见问题。
3. Insight 的维护操作
ExpeL 不会一次性生成固定 Insight,而是维护一个不断修改的 Insight 列表 ι ^ \hat{\iota} ι^。
初始状态为:
ι ^ = ∅ \hat{\iota}=\varnothing ι^=∅
Insight 提取模型可以执行四种操作。
3.1 ADD
添加一条新经验。
ADD:
当一次搜索没有返回有用结果时,
尝试缩短查询并搜索关键实体。
3.2 EDIT
修改已有经验,使其更准确或更通用。
原 Insight:
搜索失败时更换关键词。
修改后:
搜索失败时先识别缺失的中间实体,
再使用实体名和目标属性构造新查询。
3.3 UPVOTE
当新的轨迹支持已有 Insight 时,提高其重要性。
3.4 DOWNVOTE
当新的轨迹与已有 Insight 冲突,或说明它不可靠时,降低其重要性。
4. Insight 重要性计数
新 Insight 的初始重要性计数为 2。
随后:
- UPVOTE:计数增加;
- EDIT:计数增加;
- DOWNVOTE:计数减少;
- 计数降为 0:删除 Insight。
这种机制用于降低单条异常轨迹造成的影响。
因为即使一条轨迹最终成功,也不代表其中每一步都是最优的。成功轨迹同样可能包含:
- 多余操作;
- 偶然成功;
- 错误但未影响结果的推理;
- 无法迁移的任务特定行为。
通过多次支持和反对,系统尝试保留更稳定的经验。
5. Insight 提取模型
论文默认使用 gpt-4-0613 提取 Insight。
原因是,作者观察到 GPT-4:
- 更能正确执行 ADD、EDIT、UPVOTE 和 DOWNVOTE;
- 更少产生幻觉;
- 比
gpt-3.5-turbo-0613提取的经验更有效。
这也说明 ExpeL 的记忆质量高度依赖负责总结经验的模型。
七、任务推理
1. 测试阶段的输入
完成经验收集和 Insight 提取后,ExpeL 进入测试阶段。
对于一个新任务,模型输入由三部分组成:
任务说明
+
完整 Insight 列表
+
按任务相似度检索的成功轨迹
模型策略可以简化表示为:
a i ∼ L L M E x p e L ( τ i , F s i m i l a r , ι ^ ) a_i\sim\mathrm{LLM}_{\mathrm{ExpeL}}(\tau_i,F_{\mathrm{similar}},\hat{\iota}) ai∼LLMExpeL(τi,Fsimilar,ι^)
其中:
- τ i \tau_i τi 表示当前任务轨迹;
- F s i m i l a r F_{\mathrm{similar}} Fsimilar 表示检索到的成功 Demo;
- ι ^ \hat{\iota} ι^ 表示提炼后的 Insight 列表。
2. 两种记忆如何协作
Insight 和成功轨迹分别解决不同问题。
Insight
提供高层原则:
如果当前搜索路径没有推进任务,
应重新检查已有观察,并调整查询策略。
成功轨迹
提供具体操作:
Thought:需要先搜索中间实体。
Action:Search[实体名称]
Observation:……
两者结合后,Agent 既知道“为什么这样做”,也知道“具体怎么做”。
3. 测试阶段只尝试一次
ExpeL 的核心实验设置类似学生参加考试:
训练阶段:
练习多个任务,允许失败和重试。
测试阶段:
使用学到的经验,只尝试一次。
这与 Reflexion 在测试任务中不断重试不同。
因此,在比较 ExpeL 和 Reflexion 时,需要区分:
- ExpeL:跨任务经验,单次测试;
- Reflexion:当前任务失败后继续重试。
八、迁移学习
1. 设计动机
如果两个任务领域共享部分操作方式,那么在源任务中获得的 Insight 可能帮助目标任务。
论文选择:
- 源任务:HotpotQA;
- 目标任务:FEVER。
二者都允许 Agent 使用 Wikipedia Docstore API 搜索信息,因此共享一些能力:
- 搜索实体;
- 修改查询;
- 检查页面;
- 组合证据;
- 避免过早结束。
2. 迁移流程
ExpeL 不会直接把 HotpotQA Insight 原封不动地用于 FEVER,而是进行一次自然语言“微调”。
HotpotQA Insight
+
少量 FEVER few-shot 示例
+
FEVER 任务说明
↓
GPT-4 调整 Insight
↓
适用于 FEVER 的新 Insight
这里的“微调”不是参数微调,而是让模型重写自然语言经验。
3. 为什么不能直接召回源任务轨迹
HotpotQA 和 FEVER 的任务形式不同,因此论文没有直接从 HotpotQA 经验池检索轨迹作为 FEVER Demo。
迁移的主要对象是抽象 Insight。
FEVER 推理时仍然使用目标任务原有的固定 few-shot 示例。
4. 我的理解
这说明两类记忆的可迁移性不同。
| 记忆类型 | 特点 | 跨任务迁移 |
|---|---|---|
| 完整成功轨迹 | 具体、操作性强 | 更依赖任务相似度 |
| 抽象 Insight | 通用、压缩程度高 | 更容易跨任务迁移 |
ExpeL 的迁移学习主要依赖第二种记忆。
九、ExpeL 的方法优势
1. 不修改模型参数
ExpeL 可以用于:
- GPT-4;
- Claude;
- 其他只提供 API 的模型。
只要模型能够:
- 执行任务;
- 生成反思;
- 阅读并遵循 Insight;
- 模仿成功轨迹。
就可以接入 ExpeL。
2. 记忆具有可解释性
Insight 和轨迹都是自然语言,开发者可以直接检查:
- Agent 学到了什么;
- 哪些经验可能有害;
- 某条 Insight 来自哪些轨迹;
- 为什么当前任务检索到某个 Demo。
这比参数微调更容易审计和修改。
3. 支持人工干预
开发者可以:
- 删除错误轨迹;
- 修改不准确 Insight;
- 添加专家规则;
- 添加人工成功示例;
- 调整 Insight 重要性。
4. 支持跨任务学习
Reflexion 主要解决当前任务的重试问题,而 ExpeL 会把经验保留到后续任务。
5. 可以与其他 Agent 方法结合
ExpeL 不是新的底层规划算法,而是一个经验学习层。
它可以与:
- ReAct;
- Reflexion;
- 更强基础模型;
- 经过微调的 Agent;
- 其他规划器
结合使用。
实验中的 ExpeL + Reflexion 也证明,两者可以互补。
十、实验设置
1. 数据集
论文使用四个文本任务环境。
1.1 HotpotQA
HotpotQA 是多跳问答数据集。
Agent 可以通过 Wikipedia Docstore API:
- 搜索实体;
- 打开页面;
- 查找文本;
- 组合多个证据。
论文使用了 ReAct 和 Reflexion 使用过的 100 个验证任务。
1.2 ALFWorld
ALFWorld 是文本形式的家庭环境。
Agent 需要执行:
- 寻找物品;
- 拿起物品;
- 加热或冷却;
- 清洁物品;
- 将物品放到目标位置。
论文使用 134 个可解决任务。
1.3 WebShop
WebShop 是模拟购物网站环境。
Agent 需要:
- 搜索商品;
- 比较属性;
- 选择选项;
- 检查价格;
- 购买符合全部条件的商品。
论文使用了 ReAct 和 Reflexion 中的 100 个任务。
1.4 FEVER
FEVER 是事实验证任务。
Agent 需要检索 Wikipedia 证据并判断声明是否成立。
论文使用 FEVER 测试从 HotpotQA 迁移出的经验。
2. 对比方法
主要包括:
- Imitation Learning;
- Act;
- ReAct;
- Reflexion;
- ExpeL Insights-only;
- ExpeL Retrieve-only;
- 完整 ExpeL。
其中:
Insights-only:
只使用抽象经验,不召回历史轨迹。
Retrieve-only:
只召回相似成功轨迹,不使用 Insight。
ExpeL:
同时使用 Insight 和相似成功轨迹。
3. 模型配置
实验中:
- 经验收集和 Reflexion:
gpt-3.5-turbo-0613; - Insight 提取:
gpt-4-0613; - 测试阶段 Agent:
gpt-3.5-turbo-0613; - 温度:0;
- 解码方式:Greedy。
4. 其他配置
| 环境 | 最大步数 | 最大检索 Demo 数 | 每组成功轨迹数 |
|---|---|---|---|
| HotpotQA | 7 | 6 | 8 |
| ALFWorld | 20 | 2 | 8 |
| WebShop | 15 | 2 | 4 |
| FEVER | 7 | 3 | - |
训练任务最多允许 3 轮 Reflexion 重试。
5. 评估方式
论文采用四折验证,并报告平均值和标准误。
主要指标是成功率:
- HotpotQA:答案精确匹配;
- FEVER:答案精确匹配;
- ALFWorld:在规定步数内完成任务;
- WebShop:购买满足全部属性的商品。
WebShop 还额外报告 [ 0 , 1 ] [0,1] [0,1] 范围内的商品匹配奖励。
十一、主要实验结果
为了直观看到完整 ExpeL、单一记忆通道和基线之间的差异,可以先看论文 Figure 5。

图源:论文 Figure 5,图片来自论文官方项目页面。
三个子图分别对应 HotpotQA、ALFWorld 和 WebShop。虚线表示 Reflexion 在不同重试轮数下的结果,柱状图表示单次测试时不同方法的成功率。
1. 经验学习结果
| 方法 | HotpotQA | ALFWorld | WebShop |
|---|---|---|---|
| Imitation Learning | - | 37 | 29 |
| Act | 29 | 28 | 34 |
| ReAct | 28 | 40 | 35 |
| ExpeL Insights-only | 36 | 50 | 37 |
| ExpeL Retrieve-only | 31 | 55 | 38 |
| ExpeL | 39 | 59 | 41 |
完整 ExpeL 在三个任务上都高于 ReAct:
- HotpotQA:28% → 39%;
- ALFWorld:40% → 59%;
- WebShop:35% → 41%。
这说明,Agent 确实可以在不修改参数的情况下,通过积累和召回经验提高性能。
2. Insight 和轨迹召回分别适合什么任务
2.1 HotpotQA 更依赖 Insight
HotpotQA 中:
- Insights-only:36%;
- Retrieve-only:31%;
- 完整 ExpeL:39%。
HotpotQA 的问题内容差异较大,很难找到高度相似的历史问题,但不同问题共享搜索和推理策略。
因此,抽象 Insight 更有价值,例如:
- 拆分多跳问题;
- 搜索中间实体;
- 更换无效查询;
- 检查已有观察是否已经包含答案。
2.2 ALFWorld 更依赖轨迹召回
ALFWorld 中:
- Insights-only:50%;
- Retrieve-only:55%;
- 完整 ExpeL:59%。
ALFWorld 的动作集合比较固定,任务之间也经常共享操作模式。
例如:
寻找物品
→ 拿起物品
→ 执行加热或冷却
→ 找到目标容器
→ 放入容器
因此,具体成功轨迹比宽泛原则更容易直接复用。
2.3 WebShop 需要二者结合
WebShop 中:
- Insights-only:37%;
- Retrieve-only:38%;
- 完整 ExpeL:41%。
购物任务既需要高层搜索策略,也需要精确执行:
- 如何修改搜索词;
- 如何比较价格和属性;
- 应该点击哪个商品;
- 如何选择尺寸或颜色;
- 什么时候可以购买。
因此,Insight 和轨迹召回同样重要。
十二、跨任务学习与 Reflexion 对比
Figure 5 中的虚线表示 Reflexion 经过多轮重试后的性能。
| 方法 | HotpotQA | ALFWorld | WebShop |
|---|---|---|---|
| Reflexion R1 | 33 | 48 | 43 |
| Reflexion R2 | 40 | 52 | 46 |
| Reflexion R3 | 40 | 54 | 48 |
| ExpeL 单次测试 | 39 | 59 | 41 |
其中:
- HotpotQA:ExpeL 单次 39%,接近 Reflexion 三次重试的 40%;
- ALFWorld:ExpeL 单次 59%,高于 Reflexion 三次重试的 54%;
- WebShop:ExpeL 单次 41%,低于 Reflexion 的 48%。
需要注意,R1、R2、R3 表示重试轮次,不是 pass@1、pass@2、pass@3。
这个结果说明:
跨任务经验可以减少部分任务中对在线重试的依赖,但不能完全替代针对当前任务的反馈和重试。
尤其是在 WebShop 中,每个商品条件比较具体,当前任务反馈仍然非常重要。
十三、Agent 行为分析
论文通过人工检查轨迹,观察到 ExpeL 出现了几种能力。
这些分析属于定性案例,能够帮助理解方法,但不能当作严格的因果证明。
1. 假设构建与约束适应
在 HotpotQA 中,普通 ReAct Agent 有时会在搜索失败后回答:
Unknown
或者:
Information not available
ExpeL 提取到一条经验:
答案可能已经存在于之前的观察中。
在结束任务前,应重新检查已有信息。
受到这条 Insight 影响,Agent 会在最后几步重新检查完整轨迹,并根据已经获得的证据构造最可能的答案。
这体现了两种变化:
- 不再把一次搜索失败直接等同于答案不存在;
- 开始主动形成假设,并用已有观察验证。
2. 世界模型信念更新
在 ALFWorld 中,ReAct Agent 原本倾向于到以下位置寻找平底锅:
- 抽屉;
- 台面;
- 橱柜。
经过多个任务后,ExpeL 形成经验:
搜索物品时,应考虑物品的性质和典型用途。
随后,Agent 会优先在炉灶附近寻找平底锅。
这说明 Agent 的经验不只是记住某条具体路径,还可能改变它对环境规律的先验判断。
不过,这种更新发生在外部自然语言 Insight 中,而不是模型参数内部。
3. 自我纠正
在 ALFWorld 中,Agent 可能误拿了一个物品。
普通 Agent 有时会继续沿错误状态执行,导致任务最终失败。
ExpeL 则可能根据经验:
如果当前动作没有推进任务,
重新评估状态并考虑替代动作。
执行:
发现拿错物品
↓
放回物品
↓
重新搜索正确目标
↓
继续任务
这说明跨任务 Insight 可以影响当前任务中的错误恢复行为。
十四、迁移学习实验
论文将 HotpotQA 中提取的 Insight 迁移到 FEVER。
结果如下:
| 方法 | FEVER 成功率 |
|---|---|
| Act | 58 ± 0.0 |
| ReAct | 63 ± 0.4 |
| ExpeL Transfer,无目标任务 Demo | 65 ± 1.7 |
| ExpeL Transfer | 70 ± 0.7 |
结果说明:
- 直接调整 HotpotQA Insight 后,即使没有 FEVER Demo,也能达到 65%;
- 加入少量目标任务 Demo 调整 Insight 后,成功率达到 70%;
- 相比 ReAct 提升了 7 个百分点。
这说明一些经验不是任务答案,而是可以跨数据集迁移的工具使用和推理策略,例如:
- 如何搜索实体;
- 如何细化查询;
- 如何检查证据;
- 如何根据页面内容判断下一步搜索方向。
但这次迁移发生在两个都使用 Wikipedia Docstore API 的任务之间,源任务和目标任务具有明显共同结构。
因此,不能仅凭这一实验认为 ExpeL 可以在任意领域之间迁移经验。
十五、任务重试实验
论文进一步将 ExpeL 与 Reflexion 结合,在 ALFWorld 中允许测试任务重试。
结果如下:
| 方法 | R0 | R1 | R2 | R3 |
|---|---|---|---|---|
| ReAct + Reflexion | 40.3 | 47.8 | 52.2 | 54.4 |
| ExpeL Retrieve-only | 54.5 | 57.5 | 59.7 | 60.4 |
| ExpeL + Reflexion | 59.0 | 60.4 | 63.4 | 64.2 |
其中:
- R0 表示第一次尝试;
- R1~R3 表示从失败检查点继续重试。
结果表明,跨任务学习和任务内反思并不冲突。
ExpeL:
提供过去多个任务形成的经验。
Reflexion:
利用当前任务的具体失败反馈。
两者结合后:
跨任务先验
+
当前任务反馈
=
更强的持续改进能力
完整 ExpeL 在第一次尝试时达到 59.0%,经过三轮重试后达到 64.2%。
十六、消融实验
1. 经验数量与多样性

论文 Figure 6 比较了不同经验收集方式。
结果说明:
- 只从初始人工 few-shot 中提取经验,几乎没有优势;
- 使用 ReAct 收集更多任务轨迹后,性能有所提高;
- 使用 Reflexion 收集成功、失败对后,完整 ExpeL 表现最好。
这说明关键不只是经验数量,还包括经验多样性。
只保存成功轨迹,系统可以学习“什么有效”;同时保存失败与成功,系统才能更清楚地学习:
- 哪个动作导致失败;
- 成功方案与失败方案差在哪里;
- 哪些规则应该避免。
2. Insight 提取方式
HotpotQA 消融结果如下:
| 方法 | 成功率 |
|---|---|
| ReAct | 28.0 ± 1.4 |
| 人工编写 Insight | 32.0 ± 1.1 |
| Insight 加入 Reflexion 文本 | 29.0 ± 0.4 |
| GPT-3.5 提取 Insight | 32.0 ± 0.4 |
| ExpeL | 39.0 ± 1.7 |
2.1 自动提取优于人工 Insight
人工经验达到 32%,低于 ExpeL 的 39%。
这说明人工总结很难覆盖 Agent 实际运行中出现的全部问题。
2.2 直接加入反思反而下降
将 Reflexion 生成的反思直接加入 Insight 提取过程后,性能只有 29%。
作者认为,反思文本可能包含幻觉或错误归因,从而干扰更高层经验提取。
这说明:
反思不是天然可靠的长期记忆。
在写入长期经验之前,还需要通过成功轨迹、失败轨迹和后续任务结果进行验证。
2.3 GPT-4 比 GPT-3.5 更适合提取 Insight
使用 GPT-3.5 提取 Insight 时,结果为 32%;使用 GPT-4 的完整 ExpeL 达到 39%。
这说明记忆整理模型的能力会直接影响 Agent 的学习质量。
3. 成功轨迹检索策略
ALFWorld 的结果如下:
| 检索策略 | 成功率 |
|---|---|
| ReAct | 40.0 ± 0.3 |
| 推理相似度 | 48.5 ± 2.1 |
| 随机采样 | 42.5 ± 0.8 |
| 任务相似度 | 59.0 ± 0.3 |
任务相似度明显优于其他策略。
随机采样的问题
随机轨迹可能与当前任务无关,不仅不能提供帮助,还会占用上下文。
推理相似度的问题
根据最新思考动态更换轨迹,可能导致任务执行过程中 Demo 不断变化,破坏策略一致性。
任务相似度的优势
完整任务描述相对稳定,也更能反映总体目标和需要的动作模式。
十七、局限性与未来方向
1. 只研究文本观察
论文主要使用文本环境。
现实 Agent 还可能接收:
- 图片;
- 网页截图;
- 视频;
- 音频;
- GUI 状态;
- 传感器信号。
完整轨迹和 Insight 提取方法能否直接扩展到多模态环境,仍需验证。
2. 依赖闭源模型
实验使用:
- GPT-3.5 执行任务;
- GPT-4 提取 Insight。
这会带来:
- API 成本;
- 模型版本变化;
- 难以完全复现;
- 数据隐私;
- 服务可用性。
论文也提出,未来可以探索开源模型。
3. Insight 列表会持续增长
测试时,ExpeL 会将完整 Insight 列表加入上下文。
随着任务不断增加,可能出现:
- Insight 数量过多;
- 多条规则重复;
- 经验之间冲突;
- 上下文窗口不足;
- 无关经验干扰当前任务。
论文提出未来可以为 Insight 增加检索,但当前方法还没有完整解决 Insight 生命周期管理。
4. 轨迹存储成本较高
ExpeL 保存完整成功和失败轨迹。
在长任务中,一条轨迹可能包含:
- 多轮思考;
- 多次工具调用;
- 大量环境观察;
- 最终结果。
当经验池扩大后,向量检索本身可能不贵,但被召回轨迹进入上下文后会显著增加 token 消耗。
5. Insight 仍可能存在错误
ADD、EDIT、UPVOTE 和 DOWNVOTE 可以降低单个错误经验的影响,但不能保证最终 Insight 一定正确。
风险包括:
- 对失败原因错误归因;
- 从偶然成功中提取错误规律;
- 将任务特定策略过度泛化;
- 多条经验之间相互冲突。
生产系统需要为 Insight 增加:
- 来源轨迹;
- 置信度;
- 适用任务范围;
- 使用次数;
- 成功率;
- 更新时间;
- 失效机制。
6. 经验收集阶段成本不低
ExpeL 虽然不训练模型参数,但仍需要:
- 执行多个训练任务;
- 对失败任务进行多次重试;
- 调用模型生成反思;
- 调用 GPT-4 提取 Insight;
- 建立向量经验池。
因此,“无需训练参数”不等于“没有学习成本”。
7. 迁移实验范围有限
论文只展示了:
HotpotQA → FEVER
二者都使用相似的 Wikipedia 搜索接口。
对于差异更大的迁移,例如:
网页问答 → 软件工程
ALFWorld → WebShop
文本环境 → GUI 环境
Insight 是否仍然有效还不清楚。
8. 行为分析主要是定性观察
论文展示了:
- 假设构建;
- 世界模型信念更新;
- 自我纠正。
这些现象很有启发,但主要来自人工检查少量轨迹。
还不能确定:
- 这些行为出现的频率;
- 是否确实由某条 Insight 导致;
- 在其他任务中是否稳定;
- 是否同时引入新的错误行为。
十八、我的理解和启发
1. ExpeL 是“情景记忆 + 抽象记忆”的组合
从记忆机制角度看,ExpeL 包含两类记忆。
情景记忆
过去某个任务的完整成功轨迹
它保留具体上下文、推理和动作。
抽象记忆
从多条成功和失败轨迹中总结出的 Insight
它保存跨任务策略和错误模式。
二者分别适合:
高度相似的新任务
→ 召回情景轨迹
结构相似但内容不同的新任务
→ 使用抽象 Insight
2. 失败经验不应该直接进入行动上下文
ExpeL 的一个重要设计是:
- 失败轨迹用于比较和提炼;
- 测试阶段召回的是成功轨迹。
如果把失败轨迹直接作为 few-shot Demo,Agent 可能模仿错误行为。
因此,失败经验更适合作为:
- 反例;
- 错误模式;
- 风险提示;
- 经验提炼的证据。
而不是直接作为下一次行动模板。
3. 反思需要经过验证才能成为长期记忆
消融实验中,直接加入 Reflexion 文本反而降低性能。
这说明 Agent 自己生成的反思可能存在:
- 幻觉;
- 错误归因;
- 过度总结;
- 与真实成功条件不一致。
如果要在自己的 Agent 中加入长期反思记忆,我会使用下面的流程:
任务失败
↓
生成候选反思
↓
后续重试验证反思
↓
比较成功和失败轨迹
↓
确认反思是否有效
↓
写入长期经验
而不是:
任务失败
↓
生成反思
↓
直接永久保存
4. 记忆写入应该保留证据来源
ExpeL 的 Insight 是从轨迹中提炼出来的,但最终 Insight 列表和原始证据之间的关系并不突出。
在实际 Agent 系统中,每条经验最好保存:
Insight:
复杂问题应先搜索中间实体。
来源:
任务 A 失败轨迹 1
任务 A 成功轨迹 2
任务 B 成功轨迹 1
支持次数:5
反对次数:1
适用领域:Wikipedia 多跳问答
这样可以支持:
- 审计;
- 更新;
- 删除;
- 冲突处理;
- 置信度计算。
5. 经验召回应同时考虑任务和当前状态
论文结果表明,任务相似度优于推理相似度和随机采样。
但在更复杂的长任务中,只根据任务描述检索也可能不够。
可以采用两阶段检索:
第一阶段:
根据任务描述召回相似任务。
第二阶段:
根据当前执行阶段召回相关轨迹片段。
例如:
任务级检索:
找到与“修复 Python 项目”相似的历史任务。
阶段级检索:
当前正在解决依赖冲突,
进一步召回依赖修复片段。
6. 可以借鉴 ExpeL 构建 Agent 经验库
自己的 Agent 项目可以维护如下结构:
experience/
├── successful_trajectories
├── failed_trajectories
├── task_reflections
├── verified_insights
└── reusable_skills
每次任务结束后执行:
记录完整轨迹
↓
判断成功或失败
↓
寻找相同任务的正反例
↓
提取候选 Insight
↓
更新支持和反对次数
↓
将稳定 Insight 提供给后续任务
7. 与后续 Agent 记忆方法的联系
| 方法 | 主要关注点 |
|---|---|
| Reflexion | 当前任务失败后如何反思和重试 |
| ExpeL | 如何从多个任务中积累可复用经验 |
| Voyager | 如何将经验转化为可执行 Skill |
| A-MEM | 如何建立动态关联的记忆网络 |
| Mem0 | 如何管理事实记忆的增加、更新和删除 |
| MemoryOS | 如何管理短期、中期和长期记忆 |
| MemEvolve | 如何自动进化记忆架构 |
ExpeL 可以看作后续“Agent 从轨迹中学习”路线的重要早期工作。
它已经包含几个后来反复出现的设计:
- 保存任务轨迹;
- 对比成功和失败;
- 提炼抽象经验;
- 检索相似任务;
- 迁移跨任务知识;
- 不修改模型参数。
但它还没有完整解决:
- 记忆生命周期;
- 经验冲突;
- 主动遗忘;
- 结构化组织;
- 在线更新;
- 成本控制;
- 经验适用范围判断。
十九、总结
ExpeL 研究的核心问题是:
能否让 LLM Agent 在不修改模型参数的情况下,从多个任务的成功和失败经历中学习?
为此,ExpeL 构建了三个阶段。
第一阶段是经验收集。
Agent 使用 ReAct 执行任务,并在失败后通过 Reflexion 重试,保存成功和失败轨迹。
第二阶段是经验学习。
系统使用两种互补机制:
- 根据任务相似度检索成功轨迹,作为具体 Demo;
- 比较成功与失败,并总结跨任务 Insight。
Insight 通过 ADD、EDIT、UPVOTE 和 DOWNVOTE 不断维护,降低单条异常轨迹的影响。
第三阶段是任务推理。
在未见任务中,ExpeL 将完整 Insight 列表和相似成功轨迹加入 Agent 上下文,使 Agent 在一次尝试中利用过去经验。
实验表明:
- HotpotQA 成功率从 ReAct 的 28% 提升到 39%;
- ALFWorld 从 40% 提升到 59%;
- WebShop 从 35% 提升到 41%;
- 从 HotpotQA 迁移到 FEVER 后,成功率达到 70%;
- ExpeL 与 Reflexion 结合后,ALFWorld 三轮重试成功率达到 64.2%。
实验也说明,不同任务依赖的经验形式不同:
- HotpotQA 更依赖抽象 Insight;
- ALFWorld 更依赖具体成功轨迹;
- WebShop 需要两者共同作用。
这篇论文给我的最大启发是:
Agent 的经验不应该只停留在某一次任务的临时反思中,而应该被保存、比较、验证和抽象,形成可以跨任务复用的外部知识。
但经验也不能不加筛选地永久保存。
真正成熟的 Agent 经验系统还需要继续回答:
- 哪些失败值得记住;
- 哪些反思已经被验证;
- 一条经验适用于什么任务;
- 多条经验冲突时相信哪一条;
- 经验长期无效后如何删除;
- 如何在有限上下文中选择最相关的经验。
ExpeL 提供的不是最终答案,而是一个清晰的起点:
经历任务
↓
保存成败
↓
比较差异
↓
形成经验
↓
在新任务中复用
这也是 Agent 从“每次重新推理”走向“真正能够从经历中学习”的关键一步。
参考资料
- Zhao, Andrew, et al. ExpeL: LLM Agents Are Experiential Learners. AAAI 2024.
- ExpeL 官方代码仓库
更多推荐



所有评论(0)