Memento
Paper · arXiv 2508.16153v2 · 2025

Memento:不微调 LLM,让 Agent 靠案例库持续学习

静态工作流部署后就停止学习;微调 LLM 又要付出算力、数据与灾难性遗忘的代价。 Memento 把「学习」从模型参数挪到外部案例库:成功与失败轨迹都写成 (state, action, reward), 规划时检索相似或高价值的案例,只在线训练一个轻量 Q 函数。代价是推理链路更长、案例库会饱和。

Huichi Zhou 等 · UCL / Huawei Noah's Ark Lab arXiv 2508.16153v2(以 v2 为准)↗ 代码 ↗
TL;DR · 30 秒抓住核心

论文要回答的是:Agent 能不能在部署后继续变强,但不更新底层 LLM?它的答案是 M-MDP: 把案例库 M 作为状态的一部分,策略同时依赖当前状态 s 和记忆 M; 写操作追加 (s,a,r),读操作决定参考哪条旧经验。

两种读法对应两种记忆。非参数化 CBR 按 SimCSE 语义相似度做 TopK; 参数化 CBR 用 Q(s,c;θ) 预测「这条案例对当前任务有多有用」,再做 TopK。 Q 是两层 MLP,用二分类交叉熵在线更新,LLM 始终冻结。

在 DeepResearcher 的七个 QA 数据集上,Memento 平均 F1 66.6 / PM 80.4, CoT+RAG 是 37.7 / 43.2:F1 绝对高 28.9 个百分点(66.6 − 37.7), 相对提升 76.7%(28.9 / 37.7)。但 §5.5.3 说案例库约 3k 数据就饱和, Table 4 的后续迭代收益递减;推理侧 token 成本也随任务难度上升。

87.88%
GAIA validation Pass@3
Alita 87.27
66.6 / 80.4
DeepResearcher 平均 F1 / PM
CoT+RAG 37.7 / 43.2
4.7–9.6 pp
OOD 任务绝对提升
论文 §5.5.4 给的范围
01

部署之后,Agent 的学习就停住了

先分清两种「不会学」:工作流不会更新,微调更新的是模型而不是经验。

很多 Agent 的能力来自固定的提示、工具编排和反射流程。它们在窄任务上可用,但部署后是静态的: 既不会把新环境的信息写回系统,也不会从失败轨迹里改进行为。论文把这类方法归为 「fixed workflows and hard-coded reasoning」(§1)。

另一条路是更新 LLM 本身:SFT 或 RL。它更灵活,但需要大量算力、数据和长程 rollout; 论文还点名灾难性遗忘的风险(§2.1)。对需要持续上线的 Agent 来说,每次环境变化都重训一遍并不现实。

RAG 也不是答案。RAG 检索的是静态文档语料,缺少「从自己的成功/失败中持续适应」的机制(§2.1)。 Memento 要检索的是 Agent 自己的经历:一条案例是 (s,a,r),s 是任务/状态, a 是计划,r 是成功或失败。

论文的中心问题

能不能只学经验,不动权重?

“How can we build LLM agents that learn continuously from a changing environment without the prohibitive cost of fine-tuning the underlying LLMs?”(§1)

论文的回答不是「更好的 prompt」,而是把记忆做成决策过程的一部分。

一个具体的场景是 deep research:任务需要多步搜索、爬取、读文件和写代码,单步答案对不对很难提前判断。 如果每次失败都只留在上下文里,下一次还要重新踩坑;案例库把失败也存下来,下一次规划可以直接避开。

02

三条路:工作流不学、微调太贵、RAG 只读静态文档

论文的定位不是「又一个 Agent 框架」,而是换掉学习发生的位置。

路线 A

固定工作流 / 反射提示

ReAct、Reflexion 一类方法靠预定义启发式改进行为;它们能在单次任务内反思,但没有真正的持续学习。

论文的措辞是 “pre-defined heuristics and do not achieve true lifelong learning”(§2.3)。

路线 B

参数微调 / Agentic RL

SFT、RL、GRPO 一类方法更新 LLM 参数;任务保真度高,但计算、数据、灾难性遗忘的代价高(§2.1)。

长程任务还要大量 rollout 和人工标注问题。

路线 C

RAG / 静态知识库

RAG 从静态文档里取事实;CBR 从动态经验库里取「过程」。

论文把两者在 §2.1 明确区分:RAG “query static document corpora and lack mechanisms for continual adaptation”。

Memento 走的是另一条路(不是 RAG):LLM 冻结,学习发生在外部记忆的写入与读取上。 它借的是 Case-Based Reasoning:从旧案例检索、复用、修正、保留,再把这次的结果写回库(§3)。

03

把「学什么」变成「读哪条案例」

M-MDP 定义问题,两种 Read 定义方法;真正的区别是「相似」还是「有用」。

M-MDP 在标准 MDP 上加了一个记忆空间 M = (S × A × R)*。时刻 t 的案例库是 Mt = {ci},每条 ci = (si, ai, ri)。 执行一步后,新案例被追加:Mt+1 = Mt ∪ {(st, at, rt)}(Eq.12)。

π(a | s, M) = Σc∈M μ(c | s, M) · pLLM(a | s, c)
Eq.1 · 整体策略 = 检索策略 μ 对 LLM 动作似然的加权和;LLM 本身不更新

检索策略 μ 是唯一要学的东西。论文用最大熵 RL 推出最优检索策略是 Q 值的 softmax(Eq.7):

μ*(c | s, M) = exp(Q*(s, M, c) / α) / Σc'∈M exp(Q*(s, M, c') / α)
Eq.7 · α 是熵温度;α→0 退化为贪心选 Q 最高的案例

但直接学 Q 很难,因为状态和案例都是自然语言。论文给了两条实现路径:

Non-Parametric

按「像不像」读

Read 直接用冻结编码器的余弦相似度做 TopK(Eq.13)。它假设「相似的问题有相似的解」,不学任何检索参数。

ReadNP(st, Mt) = TopKci∈Mt sim(enc(st), enc(si))

编码器用 SimCSE,相似度是余弦(§5.3)。

Parametric

按「有没有用」读

Read 用 Q(s,c;θ) 做 TopK(Eq.16)。Q 预测「在当前状态下参考案例 c,最终成功的概率」,因此可以选出表面不像、但结构上有用的案例。

ReadP(st, Mt) = TopKci∈Mt Q(st, ci; θ)

Q 是两层 MLP,用 SimCSE 初始化句子表示(§5.3)。

在 deep research 实现里,CBR 只用于规划,所以整个 M-MDP 被简化成单步:TD 目标坍缩为即时奖励, Q 直接用二分类交叉熵训练(Eq.15)。这是论文明确说的简化,不是页面替它补的(§4.2)。

L(θ) = E(s,c,r)[ −r log Q(s,c;θ) − (1−r) log(1−Q(s,c;θ)) ]
Eq.15 · r∈{0,1};Q 被当作「案例 c 对状态 s 有用」的概率

注意:Eq.7 的 softmax 是理论上的最优检索分布;实际 Read 用 TopK 取 Q 最高的 K 条,以减少随机性(§4.2)。

同一题库,两种读法选出不同案例

下面只保留排序:5 条案例,分别给出「相似度排名」和「Q 排名」。切换读法、拖动 K,看两种 CBR 选中的案例何时重合。 排序是页面构造的示意,不是论文实验数据;机制对应 Eq.13 与 Eq.16。

查询:某公司 2024 年营收是多少?需要交叉核对官网与年报。
当前选择
手算对照(2 组)K=2 与 K=4 的排序、选择与交集

排序(页面示意):相似度 A > B > C > D > E;Q 值 D > E > C > B > A。

第 1 组,K=2:非参数化取相似度前二 = {A, B};参数化取 Q 前二 = {D, E}。两组交集为空。

第 2 组,K=4:非参数化取 {A, B, C, D};参数化取 {D, E, C, B}。交集为 {B, C, D},两组已经大部分重合。

这个模拟覆盖了什么:只覆盖 Eq.13 / Eq.16 的 TopK 排序与选择。未覆盖 Eq.7 的 softmax 采样、Eq.15 的 Q 训练、真实 SimCSE 编码器,以及案例库的写入与增长;它是机制示意,不是论文实验复现。

04

训练只发生在一个两层 MLP 上

LLM 冻结;要学的只有 Q(s,c;θ),而且每条轨迹只写最后一步。

实现细节在 §5.3:非参数化 CBR 用 SimCSE 编码句子、余弦相似度排序;参数化 CBR 也用 SimCSE 初始化句子表示, Q 函数是一个两层 MLP。整个训练过程不更新 GPT-4.1 / o3 / o4-mini 的参数。

案例写入不是把整条轨迹塞进库。论文只保留每条轨迹最后一步的 (s,a,r), 避免状态里继承的前文造成冗余(§5.3)。这让案例库保持紧凑,但也意味着中间步骤的过程信息不会单独成为案例推断(依据:§5.3 只写 final step 的 (s,a,r) 入库)。

参数化 CBR 的 Write 同时做两件事:追加案例,和用 Eq.15 更新 Q。因为 deep research 的奖励是二元的 r∈{0,1},论文把 MSE 换成交叉熵,理由是 MSE 在 0/1 附近梯度会消失(§4.2)。

实现边界

Algorithm 1 是多步版,落地走单步版

Algorithm 1 给的是完整 M-MDP 版本:TD 目标、目标网络、kernel-based episodic control。 实际 deep research 实现走的是单步简化版:CBR 只在规划时用,TD 目标坍缩为即时奖励,kernel 估计被去掉(§4.2);单步设定下目标网络也不需要推断(依据:没有 bootstrap,TD 目标不含下一状态 Q)。

页面按 §4.2 的单步实现讲;Algorithm 1 的多步分支未被这个实现覆盖。

成本账要分开看。训练侧只更新两层 MLP 和写案例库,没有 LLM 梯度;推理侧每个规划步都要检索, planner-executor 交替调用工具,token 消耗随难度上升(Figure 6)。论文报告的是 token 成本,不是 wall-clock 时延。

05

Planner 读案例,Executor 调工具

Figure 3 的主循环:规划阶段查 Case Memory,执行阶段查 Tool Memory,完成后写回案例。

Memento 是 planner-executor 架构。Planner(GPT-4.1)负责把任务拆成子任务; Executor(GAIA 用 o3,其他数据集用 o4-mini)通过 MCP 协议调用搜索、爬取、代码、文件处理等工具。 两者交替,直到 planner 判断任务完成。

三类记忆分工不同:Case Memory 存向量化的 (s,a,r),供规划检索; Subtask Memory 存当前子任务与执行结果;Tool Memory 存每个子任务的工具调用日志。 只有 Case Memory 是跨任务持续增长的。

任务指令 当前状态 s_t Planner GPT-4.1 · CBR agent 任务分解 Subtask Memory 子任务 + 执行结果 Case Memory M_t = {(s, a, r)} SimCSE 向量 Executor o3 / o4-mini MCP client Tool Memory 每个子任务的工具日志 MCP 工具 search / crawl code / file 任务 子任务 执行 Read / Write Write 工具日志 调用 / 返回 执行结果 / 是否完成 实线:执行流 · 虚线:记忆读写
Figure 3 的简化重绘:Planner-Executor 主循环与三类记忆。原图还包含多模态处理与具体 MCP server 分支,本图未展开;小屏可左右滑动查看右侧 Executor 与 Tool Memory。
这张图覆盖了什么、没覆盖什么对应 §4.1 与 §4.3

覆盖:§4.1 的 planner / executor 交替、Case Memory 的 Read / Write、Subtask Memory 与 Tool Memory 的层级, 以及 §4.3 的 MCP 工具入口。

未覆盖:§4.3 的多模态处理细节(VLM 图像描述、ASR 音频转写、PDF fallback 等), Figure 3 中每个 MCP server 的具体连接,以及案例库内部的向量索引实现。图是简化重绘,不是原图逐像素复制。

一个容易忽略的点:planner 的「规划」不是一次性输出完整计划,而是每轮根据 Subtask Memory 里的执行结果重新评估; 任务完成后才写案例(§4.1)。所以案例库记录的是完整任务的最终状态-计划-奖励,而不是每个子任务的中间步骤。

06

小案例库赢过大而全,但增益会饱和

先看 DeepResearcher 和 GAIA 的主表,再看消融、K 与五轮迭代。

DeepResearcher:平均 F1 从 37.7 到 66.6

Table 1 的七个开放域 QA 数据集(NQ、TQ、HotpotQA、2Wiki、Musique、Bamboogle、PopQA)上, Memento 用 GPT-4.1 planner + o4-mini executor,平均 F1 66.6、PM 80.4。 CoT+RAG 是 37.7 / 43.2;训练式的 DeepResearcher 是 51.8 / 60.5。

Table 1(节选) · DeepResearcher 七个数据集的平均;表注称最后两列为 weighted average(Bamboogle 125 条,其余各 512 条)。基线 CoT / CoT+RAG / Search-r1 / DeepResearcher 均为 Qwen 2.5 (7B) backbone,Memento 用 GPT-4.1 planner + o4-mini executor,属跨 backbone 比较

方法Avg F1Avg PM
CoT23.626.1
CoT + RAG37.743.2
Search-r1-base48.353.8
DeepResearcher51.860.5
Memento(GPT-4.1 + o4-mini)66.680.4

相对 CoT+RAG,按表内数字直接相减,F1 绝对高 28.9 个百分点(66.6 − 37.7),相对提升 76.7%(28.9 / 37.7); PM 绝对高 37.2 个百分点(80.4 − 43.2)。论文用 “nearly doubling” 描述这个差距; 按原表算是 1.77 倍(66.6 / 37.7),严格说不是 2 倍。

但这组比较有一个口径问题:Table 1 表注称最后两列是 weighted average,而 Memento 的 66.6 / 80.4 是七个数据集的简单平均(F1 七项之和 466.2 ÷ 7 = 66.6;PM 562.8 ÷ 7 = 80.4),按 Bamboogle 125 条、其余 512 条加权复算应为 64.23 / 78.90;CoT+RAG 的 37.7 / 43.2 则是加权值(37.72 / 43.15)。按统一加权口径,F1 差 26.51 个百分点、相对提升 70.3%,PM 差 35.75 个百分点,F1 比值 1.70。两种口径并列,本页不替原文选择;引用时应说明用的是哪一种。

GAIA:validation 第一,但 Level 3 不是

Table 2 是 2025-06-26 的 GAIA leaderboard。Validation 上 Memento 87.88%,Alita 87.27%, 差 0.61 个百分点(87.88 − 87.27);test 上 Memento 79.40%。 注意两件事:其一,Pass@3 只标在 validation 的 Memento 行,Alita 与 test 各行都没有这个标注,所以 0.61 的差值不是严格同口径;其二,test 的案例库不是从 test 学出来的——论文说 test 只用 validation 期间积累的案例库(§5.4)。

Table 2(节选) · GAIA validation / test;仅 validation 的 Memento 行标 Pass@3,其余行未标

SplitAgentAvg (%)Level 1 (%)Level 2 (%)Level 3 (%)
ValidationMemento(Pass@3)87.8896.2390.7061.54
ValidationAlita87.2788.6889.5376.92
TestSu Zero Ultra80.4093.5577.3665.31
Testh2oGPTe Agent v1.6.3379.7389.2579.8761.22
TestMemento79.4090.3275.4771.43
原文并列

test set 是第 4,还是 open-source 里的 top-1?

§5.4 写 Memento 在 test set 是 “4th place”;Table 2 表注写 “Top-1 performance on the validation set and the test set in open-source agent frameworks”。Table 2 可见行里,Su Zero Ultra 80.40、h2oGPTe v1.6.33 79.73 都高于 Memento 79.40。

这两句可能同时成立:第 4 名是总榜名次,top-1 限定在 open-source agent frameworks。但本页看不到完整榜单,无法确认 79.40 之上是否还有闭源系统,也无法确认 Su Zero Ultra / h2oGPTe 是否算 open-source。两处并列呈现,本页不替原文合并口径。

Validation 的 Level 3 是另一个边界:Memento 61.54,Alita 76.92。总体第一不等于每一层都第一。

消融:工具不一定加分,案例记忆是叠加的

Table 5 把系统拆成四层:Offline Executor(只有 LLM)→ Online Executor(接工具,无 planner/记忆)→ Memento w/o CBR(加 planner,无案例记忆)→ Memento(完整)。

Table 5(Average 行) · 每格 F1 / PM;planner GPT-4.1,executor o4-mini

设置HLESimpleQADeepResearcher
Offline Executor6.4 / 8.719.7 / 21.548.8 / 62.8
Online Executor11.2 / 15.848.5 / 84.830.8 / 60.7
Memento w/o CBR22.2 / 17.481.0 / 89.759.9 / 72.2
Memento26.7 / 24.484.7 / 95.066.6 / 80.4

两个反直觉点。第一,接上实时工具不一定更好:DeepResearcher 从 Offline 到 Online,F1 从 48.8 掉到 30.8 (下降 18.0 个百分点,48.8 − 30.8),PM 从 62.8 掉到 60.7(下降 2.1 个百分点,62.8 − 60.7)。 论文把它归因于数据污染(§5.5.2),并说外部知识有时会负面影响模型。

第二,案例记忆的增益是叠加的:在 w/o CBR 之上,HLE 高 4.5 F1 / 7.0 PM (26.7 − 22.2 / 24.4 − 17.4),SimpleQA 高 3.7 / 5.3 (84.7 − 81.0 / 95.0 − 89.7),DeepResearcher 高 6.7 / 8.2 (66.6 − 59.9 / 80.4 − 72.2)。

五轮迭代:三条线都在涨

Table 4 是 DeepResearcher 上五轮迭代的曲线。三条线都在上升:w/o CBR 78.65→84.47(+5.82), 非参数化 79.84→84.85(+5.01),参数化 80.46→85.44(+4.98)。但三条线同时上升不能直接归因于案例库:w/o CBR 按 §5.3 是禁用 episodic memory 的设置,它的 +5.82 甚至高于参数化 CBR 的 +4.98,与「案例记忆带来持续学习」的叙事存在张力。参数化 CBR 的差别是每轮水平更高,但它相对 w/o CBR 的领先并不单调收窄:Iter 1 是 1.81(80.46 − 78.65),Iter 2 升到 1.91(82.84 − 80.93),之后才降到 Iter 5 的 0.97(85.44 − 84.47)。端点确实从 1.81 缩到 0.97,但中间有回升。

Table 4 · DeepResearcher 五轮迭代;表注未标注指标定义,正文称其为 accuracy(§5.5.3)。表中三行全量转录

方法Iter 1Iter 2Iter 3Iter 4Iter 5
Memento w/o CBR78.6580.9382.6283.5384.47
Memento w/ Non-Parametric CBR79.8481.8783.0984.0384.85
Memento w/ Parametric CBR80.4682.8484.1084.8585.44

论文也承认饱和:约 3k 训练数据后 Case Bank 很快饱和, 后面每轮的新案例越来越少,增益递减(§5.5.3)。

检索多少条?K=4 最好,多了反而略降

Table 3 扫 K=0,1,2,4,8,16,32。Average F1 在 K=4 最高(64.5),PM 也在 K=4 最高(78.5); K=0 是 59.9 / 72.2,K=32 是 63.9 / 78.1。也就是说,从 K=0 到 K=4, F1 绝对高 4.6 个百分点(64.5 − 59.9)、PM 高 6.3 个百分点(78.5 − 72.2); 再往上加,F1 反而低 0.6 个百分点(64.5 − 63.9)、PM 低 0.4 个百分点(78.5 − 78.1)。

论文的解释

小的高质量记忆,比大而全更好

“CBR benefits from a small, high-quality memory, unlike few-shot prompting, where more examples often help.”(§5.5.1)

论文接着说,仔细的案例选择与记忆管理因此很关键。

F1 PM 横轴 55–80,放大差异;数值标签为准
当前 K

Table 3(Average 行,转置) · K 与平均 F1 / PM;7 个数据集的分项未转录

K012481632
Avg F159.963.663.764.564.163.963.9
Avg PM72.277.978.178.578.278.178.1
手算对照(2 组)K=0 与 K=32 分别对照 K=4

第 1 组,K=0 → K=4:F1 59.9 → 64.5,差 64.5 − 59.9 = 4.6 个百分点;PM 72.2 → 78.5,差 78.5 − 72.2 = 6.3 个百分点。

第 2 组,K=32 → K=4:F1 63.9 → 64.5,差 64.5 − 63.9 = 0.6 个百分点;PM 78.1 → 78.5,差 78.5 − 78.1 = 0.4 个百分点。

这个交互覆盖了什么:只复现 Table 3 Average 行的数值切换与高亮;未实现真实检索、SimCSE 编码、Q 训练或案例库写入,是简化示意。

另外两个基准与一个反直觉结果

SimpleQA 上 Memento 95.0% accuracy(Figure 4);HLE 上 24.4% PM,比 GPT-5 的 25.32% 低 0.92 个百分点(25.32 − 24.40),排第二(§5.4)。 这两个数字的条件是 GPT-4.1 planner + o4-mini executor;不要和 GAIA 的 o3 executor / Pass@3 直接比。

反直觉

慢思考 planner 反而更差

Table 6 的 GAIA validation pass@1:GPT-4.1 planner + o3 executor 70.91,o3 planner + o3 executor 63.03, 差 7.88 个百分点(70.91 − 63.03)。这里只转录这两行;原表还有 Qwen3-32B 等配置(如 53.94 / 40.61),未转录。

论文的解释是 o3 planner 有时直接答题、跳过规划,或生成过长的计划,反而误导 executor(§6.3)。 在模块化系统里,简洁、结构化的规划比「想得更久」更重要。

07

它省的是梯度,不是推理

案例库会饱和、工具会引入噪声、不同基准的条件不能混着比。

第一,记忆规模。论文自己说 Case Bank 在约 3k 训练数据后很快饱和(§5.5.3); Table 4 的五轮曲线也在 Iter 3 后趋缓(§5.5.3 称 rapid convergence)。论文的实验规模停留在约 3k 训练数据,百万级案例下的检索效率不在本文实验范围内。

第二,推理成本。Figure 6 的 token 统计:GAIA Level 1 平均 26k 输入 / 4.7k 输出,Level 2 48k / 6.9k, Level 3 121k / 9.8k。论文的结论是主要负担来自整合多步工具输出,而不是生成长回答(§6.2)。 但论文报告的是 token 成本,不是端到端时延;检索、planner-executor 交替和工具调用的 wall-clock 开销不在 Figure 6 的范围内。

第三,奖励假设。实现里 reward 是二元的 r∈{0,1},CBR 只用于规划,所以 M-MDP 被简化成单步(§4.2)。 论文的实验都建立在二元奖励上;概率化 reward 与 memory update 被列为 future work(§3)。

第四,工具不是越多越好。DeepResearcher 的 Offline→Online 反而掉了 18.0 F1 个百分点(Table 5c), 论文归因于数据污染。这条对「多接工具总没坏处」的直觉是一个反例。

第五,条件不能混。GAIA 的 87.88 是 validation 的 Memento 行、标了 Pass@3,同表其余行未标 Pass@3; Table 6 的 fast/slow 对比是 pass@1;DeepResearcher / SimpleQA / HLE 用 o4-mini;Table 4 的表注未标注指标定义。 把 87.88、70.91、66.6 放在一起比较会混淆口径。

最后,GAIA Level 3 仍是短板:validation 上 Memento 61.54,Alita 76.92;test 上 Memento 71.43。 总体排名靠前,不代表长程任务已经解决。

什么时候别用

先确认你的场景满足这些前提

  • 如果任务分布固定、案例极少,且可以接受离线批处理,固定工作流或一次性 RAG 更简单。
  • 如果奖励不是二元、或者你需要严格的端到端低延迟,先别把 Memento 当成即插即用方案。
  • 如果你需要模型内化的新能力(而不是检索经验),参数微调仍是另一条路。

推断(依据:论文只验证了二元奖励、deep research 场景与约 3k 案例的规模;以上是工程判断,不是论文结论。)