LLM Long-Term Memory 演化合集

四篇串读:从 heuristic forgetting curve → 工程级 CRUD → RL 学 working state → RL 学 CRUD 操作
涵盖论文: MemoryBank (arXiv:2305.10250) · Mem0 (arXiv:2504.19413) · MEM1 (arXiv:2506.15841) · Memory-R1 (arXiv:2508.19828)
关键词: long-term memory · external memory · CRUD · forgetting curve · working memory · RL · LoCoMo

速读卡片 (TL;DR)

叙事主线: LLM 无 native long-term memory,context window 一关就"失忆"。这四篇代表了 augmentation 的三种思路 + 一次 RL 化:MemoryBank (2023-05) 用 Ebbinghaus 遗忘曲线建静态外存;Mem0 (2025-04) 把它工程化为 CRUD-style 操作 + graph 变体,商业部署;MEM1 (2025-06) 范式分叉 — 不要外存,让 RL 教会 agent 把记忆压进一个固定大小的 internal state;Memory-R1 (2025-08) 回归外存路线但用 RL 学操作选择 (ADD/UPDATE/DELETE/NOOP) — 闭环。

heuristic → learned
2 年从 forgetting 公式到 RL 学
external ↔ internal
两条并行演化路线
152 QA pairs
Memory-R1 训练数据量 (RL 高效)

立场:这条 line 真正起作用的范式断点不是"加 memory",而是把 memory operations 从 LLM in-context decision 变成 RL-learned policy。MemoryBank/Mem0 已经证明 storage + retrieval + heuristic update 能用;MEM1/Memory-R1 才证明 什么时候 store / update / discard 应该被学,而且 outcome-reward 就够,无需 process supervision。两者结合,是 agentic memory 的真正 starting point。


1 · 共同动机

1.1 LLM 的 statelessness 病

四篇论文都从同一个观察起步:LLM 是 fundamentally stateless — context window 一关闭、对话一切换 session、上下文一溢出,信息就消失。即使 GPT-4 128K / Claude 3.7 200K / Gemini 10M 也只是"延迟问题",不解决问题。三个理由:

1.2 三种 augmentation 思路

思路形式代表关键短板
(A) 外挂 storage + retrieval (RAG-style)所有对话存向量库,每次 query 检索 top-k 拼回 promptMemoryBank, Mem0什么时候 store / update / forget 是 heuristic 或 LLM 自己选,无学习信号
(B) 把记忆压进 internal state每轮把"上轮 state + 新 obs"挤进一个固定大小的 hidden state,丢掉历史MEM1需要从头训,且 state 一次压缩出错,信息永远丢
(C) 外挂 + RL 学控制storage/retrieval 不变,但 ADD/UPDATE/DELETE/NOOP 由 RL policy 决定Memory-R1需要 outcome reward 的环境,且 reward shaping 难

这四篇正好沿着这三条路线展开:MemoryBank → Mem0 是 (A) 内部演化;MEM1 是 (B) 的开山;Memory-R1 是 (C) 的代表,且明确把 Mem0 的 CRUD 接管。

1.3 演化时间线

2023-05 2025-04 2025-06 2025-08 MemoryBank forgetting curve Mem0 / Mem0g CRUD + graph Memory-R1 RL on CRUD heuristic → CRUD CRUD operations → RL learned MEM1 RL on <IS> 范式分叉 (internal state) External Memory + Control 演化(主线) ↑ 平行的另一条路: 不要外存,把 memory 压进 internal state
四篇时间线 + 两条演化路线。上方主线: 外存路线 (MemoryBank → Mem0 → Memory-R1),逐步把 control 从 heuristic 升级为 LLM in-context 再升级为 RL learned。下方支线 (红): MEM1 提出"完全不要外存,让 RL 学一个 constant-size internal state"的范式分叉。

2 · MemoryBank (2023-05) — 起源

MemoryBank: Enhancing LLMs with Long-Term Memory Zhong et al., Sun Yat-Sen U + HIT + KTH · NeurIPS 2023 / AAAI 2024
arXiv:2305.10250 · 应用: SiliconFriend (long-term AI companion)

2.1 立场

MemoryBank 是"给 LLM 装外挂 memory"这件事的奠基性工作之一。它的贡献不在于学到了什么,而在于第一次把"long-term memory for LLM"这个工程问题做成完整 pipeline,定义了之后整个 line 的术语:storage、retrieval、updating。

2.2 方法三件套

Memory Storage • Daily conversation 全文 + timestamp • Hierarchical event summary (daily → global) • User personality 画像 (daily → global) 所有内容用 FAISS 索引 Memory Retrieval • Dual-tower dense (DPR 风) • Query c → E(c) = hc • Memory M = {h⁰_m,...h^|M|_m} • Top-k by cosine sim • 拼回 prompt: 当前 q + 检索 memory + user portrait Memory Updating (forgetting) Ebbinghaus 公式: R = e−t/S R = retention, t = 距上次召回时长 S = 记忆强度 (∝ 召回次数) R 低于阈值 → 删除 (静态规则) 无学习信号
MemoryBank 的三件套架构。Storage = FAISS-indexed 多层级文本(daily/global/personality);Retrieval = DPR 风 dual-tower 检索;Updating = Ebbinghaus 遗忘曲线决定何时丢弃。所有决策都是 hardcoded heuristic,无任何 learnable 部分。

Ebbinghaus forgetting 公式逐行翻译

R = exp(−t / S)

反向论证: 为什么这能 work? 因为它给了"哪些记忆值得保留"一个可计算指标 — 被反复用到的就强(S 大),很久没用的就弱。但它没有 task signal:一段记忆即使从未被召回,也可能在第 100 天突然关键(用户提到首次见面那天)。后续工作就是要补这个缺口。

2.3 Worked example: 用户问"我女朋友喜欢的礼物?"

  1. 当前 query c: "Do you remember the gifts she likes?"
  2. Encoder → hc(768-dim)
  3. FAISS 在 storage 检索 top-5:命中 04-28 / 04-29 两天的对话片段,其中提到"books and gifts"。
  4. 检索回来的 memory pieces 拼到 prompt: [Past Conv 04-28: "她喜欢看书,生日给过她小说..."] + [User Portrait: "open-minded, curious"] + [Current Query]
  5. LLM 生成回答。同时,S(那两条 memory)各 += 1,因为它们被召回了。

2.4 评测

无现成 benchmark — 作者自建:15 个虚拟用户 × 10 天对话,194 道 probing question。SiliconFriend (ChatGPT + MemoryBank) 在 memory recall / empathy / portrait understanding 上显著优于无记忆 baseline,但这是定性主导的评估,缺乏标准化数字。

2.5 局限


3 · Mem0 (2025-04) — 工程标准

Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory Chhikara, Khant, Aryan, Singh, Yadav · mem0.ai · 2025-04-28
arXiv:2504.19413 · Code: github.com/mem0ai/mem0 (37k+ stars)

3.1 立场

Mem0 是这条 line 的工程标准 — 它不是论文意义上的"研究突破",而是把 MemoryBank 类思路商业化、可部署、有公开 benchmark。它的关键贡献是引入 CRUD-style 操作{ADD, UPDATE, DELETE, NOOP}和 LOCOMO benchmark 上的开源对比。

3.2 方法: 两阶段 + Mem0g 变体

新对话片段 user: "I'm vegetarian" asst: "Noted." Stage 1: Extraction LLM call → 抽取 candidate facts: ["user is vegetarian"] Stage 2: Update LLM 比对已有 memory, 输出 op ∈ {ADD,UPDATE, DELETE, NOOP} Vector DB (Mem0) 或 Graph DB (Mem0g) 推理时检索: User query "晚饭推荐?" 向量检索 top-k → {"vegetarian", "no dairy"} 拼回 prompt → LLM 答 "豆腐沙拉" Mem0g 变体: 把 facts 存为 (entity, relation, entity) 三元组的有向图,multi-hop 检索可走图路径
Mem0 的两阶段架构。Extraction = LLM call 1, 从对话片段抽 fact;Update = LLM call 2, 比对现有 memory 决定 CRUD 操作。Mem0g 变体把存储从 vector DB 换成有向 labeled graph,支持 multi-hop reasoning。注意:这里的 op 选择仍由 vanilla LLM in-context 做,无学习信号 — 这是 Memory-R1 之后要修的关键短板。

3.3 CRUD 操作的语义

op触发场景例子
ADD新信息,与已有 memory 不重叠"user is vegetarian" 是新事实
UPDATE新信息精化/扩展已有事实"vegetarian" → "vegan, no dairy"
DELETE新信息矛盾已有事实(用户改了主意)"我现在吃肉了" 覆盖旧的 "vegetarian"
NOOP无新信息或纯客套"thanks for the help"

3.4 LOCOMO benchmark 上的数字

LOCOMO = 600+ turn 多会话长程对话评测,4 种 question type(single-hop, temporal, multi-hop, open-domain)。Mem0 vs 各 baseline:

3.5 局限


4 · MEM1 (2025-06) — 范式分叉

MEM1: Learning to Synergize Memory and Reasoning for Efficient Long-Horizon Agents Zhou*, Qu*, Wu, Kim, Prakash, Rus, Zhao, Low, Liang · MIT + NUS + SMART · 2025-06-19
arXiv:2506.15841 · Code: github.com/MIT-MI/MEM1

4.1 立场: 不要外存

这篇是这条 line 上最 contrarian 的工作。它说:所有上面的方案都错了 — 不需要外存,memory 应该是 reasoning 的一部分

具体的:agent 在每一轮显式生成一个 <IS> internal state </IS> 块,把"上一轮的 IS + 新 observation"压成一个新 IS,然后把所有历史 token (包括上一轮的 IS 和 obs) 全丢掉,prompt 只剩 {system prompt, initial query, 当前 IS}。Context 真的是常数。

4.2 训练目标

maxπ 𝔼τ ~ π [ R(answerfinal, gt) ]

普通 RL,outcome-only reward (final answer 对就 +1)。没有任何关于 memory 效率的 reward 项。但 agent 会涌现出 efficient memory management 行为 — 因为 context 是结构约束 (每轮被强制清空),它必须学会把关键信息存进 IS 才能存活到 final answer。

4.3 trajectory 结构(关键差别)

普通 agent (ReAct-style): context 线性增长 Turn 1: think₁ + action₁ + obs₁ Turn 2: think₁ + action₁ + obs₁ + think₂ + action₂ + obs₂ Turn 3: ... 累积所有历史 ... ⚠ context 长度 = O(turns) 超出训练 horizon 后 OOD 崩 MEM1: context 恒定 Turn 1: prompt + initial_q + obs₁ → <IS₁> Turn 2: prompt + initial_q + <IS₁> + obs₂ → <IS₂> Turn 3: prompt + initial_q + <IS₂> + obs₃ → <IS₃> ✓ context 长度 ≈ O(|IS|) 常数 |IS| 由 RL 决定,自动收敛到任务最小够用 IS 演化示例 (16-objective shopping) <IS₁> User wants laptop ≤ $1000. Q1: cheapest model? — still searching. <IS₂> cheapest = Lenovo X1 $899. Q1 ✓. Q2: reviews? — searching now. <IS₃> Lenovo X1: 4.5★, 1200 reviews. Q1✓ Q2✓. Q3: compatible with M1 Mac? ... 每轮只保留"已答对什么、当前问什么、缺什么信息" <IS₁₆> 所有 16 个 objective 已答,final answer 拼接输出
MEM1 vs ReAct-style 的本质差别。左:普通 agent 每轮把 thought + action + obs 累加进 context,长度 O(turns)。右:MEM1 每轮生成 <IS>,然后丢掉所有历史(包括上轮 IS 自己),只保留 {prompt, initial query, 当前 IS}。下方:一个 16-objective shopping task 的 IS 演化 — agent 学会把"已完成的、待办的、关键参数"压进 IS,不存对话原文。

4.4 数字

4.5 为什么这件事不平凡

反向论证:为什么不用 ReAct + 一个 summarization module? 因为 summarization 通常是独立训练的 — summarizer 可能丢的恰好是 reasoning 下游需要的信息。MEM1 的关键在于把 summarization 和 reasoning 放进同一个 LLM forward,用同一个 RL signal 优化 — agent 只压缩"它接下来真用得着"的信息。

4.6 局限


5 · Memory-R1 (2025-08) — 闭环

Memory-R1: Enhancing LLM Agents to Manage and Utilize Memories via RL Yan*, Yang*, Huang, Nie, Ding, Li, Ma, Bi, Kersting, Pan, Schuetze, Tresp, Ma · LMU Munich + TUM + Cambridge + HKU · 2025-08-27
arXiv:2508.19828

5.1 立场: 把 Mem0 的 CRUD 学起来

Memory-R1 的诊断很直接:Mem0 的架构是对的,但用 vanilla LLM 选 CRUD 操作错误率高。论文 Figure 1 的例子: 用户先说"I adopted a dog named Buddy",后来说"I adopted another dog named Scout"。Mem0 的 LLM-as-controller 把这当矛盾,issue DELETE+ADD,丢失了 Buddy。正确做法是 UPDATE 合并成"adopted 2 dogs: Buddy and Scout"。

解决方案: 把 op 选择改成 RL policy,outcome-reward 训练。

5.2 双 agent 架构

Memory Manager (RL agent) new fact + retrieved memories Memory Manager π_M LLM (3B–14B) trained w/ PPO/GRPO action ∈ {ADD, UPDATE, DELETE, NOOP} → 修改 memory DB Answer Agent (RL agent) user query + 60 retrieved memories Answer Agent π_A LLM (相同 backbone) 先 distill 再 reason 先 pre-select ≤5 relevant, 再回答 final question → outcome reward (EM) Outcome reward = QA correctness 同一个信号同时回传到 π_M 和 π_A,credit assignment 跨 agent 同 reward
Memory-R1 的双 agent 架构。Memory Manager 学"该不该改 memory、改成什么 op";Answer Agent 学"该用哪条 memory 答这个问题"(先 distill 60 条到 ≤5 条,再 reason)。两个 agent 共享同一个 outcome reward(QA 答对就 +1),credit assignment 通过 PPO/GRPO 跨 agent 传播。注意训练数据只有 152 个 QA pair,RL 高效。

5.3 Worked example (论文 Figure 1)

  1. Session 1: user 说 "I adopted a dog named Buddy"
  2. Memory Manager 观察 (new_fact: "Buddy", existing_memory: ∅) → action = ADD。memory 现在: {m₁: adopted Buddy}
  3. Session 5 (一周后): user 说 "I adopted another dog named Scout"
  4. Memory Manager 观察 (new_fact: "Scout", existing_memory: {m₁}) → 关键决策点:
    • vanilla Mem0 LLM: DELETE m₁ + ADD Scout错! 它把"another"误解成"取代"
    • Memory-R1 trained π_M: UPDATE m₁ to "adopted 2 dogs: Buddy and Scout"对!
  5. Session 10: user 问 "How many dogs do I have?"
  6. Retriever 拿回 60 条 memory(包括 m₁ 和很多噪声)→ Answer Agent 先 distill 出唯一关键的 m₁,再答 "2"。outcome reward = 1, gradient 同时回到 π_M 和 π_A。

5.4 数字

5.5 局限


6 · 演化轨迹: 两条平行路线对比

6.1 主对比表

MemoryBankMem0MEM1Memory-R1
日期2023-052025-042025-062025-08
memory 形式external (text + vec)external (vec / graph)internal <IS>external (vec)
operationsadd / forgetADD/UPDATE/DELETE/NOOP(rewrite IS)ADD/UPDATE/DELETE/NOOP
op 由谁决定Ebbinghaus 公式vanilla LLM in-contextRL policyRL policy (PPO/GRPO)
训练成本0 (heuristic)0 (prompt only)full RLRL on 152 QA pairs
context 长度O(retrieved k)O(retrieved k)O(1)O(retrieved k)
跨 session✗ (IS 随 task 销毁)
主 benchmarkself-built (15 user)LOCOMOcomposed multi-hop QALoCoMo + MSC + LongMemEval
flagship 数字定性,SiliconFriend+26% vs OpenAI mem×3.5 acc, ×3.7 mem (vs Qwen-14B)+28% F1 over Mem0
核心局限无 learning signalop 选择易出错无跨 session仍受 retriever 限

6.2 范式分叉的本质

External memory 路线说:"记忆是世界,LLM 是过客" — 把所有信息存外面,LLM 每次去查。
Internal memory (MEM1) 路线说:"记忆是世界模型的一部分" — 让 LLM 自己学会压缩世界、扔掉无关。

这两条路线不互斥。可以预期未来工作: 跨 session 用 external + RL CRUD,session 内用 internal IS 处理 long horizon。这正好是 Memory-R1 + MEM1 的合体方向,但目前还没人做过。

6.3 三个共识 + 两个争议

共识:

  1. Heuristic 不够 — Ebbinghaus forgetting / vanilla LLM op 选择都不可靠,需要 learning signal;
  2. Outcome reward 就够 — 都不需要 process supervision,QA 答对就行(Memory-R1 / MEM1 都证明了);
  3. RL 比 SFT 高效 — Memory-R1 仅 152 个 QA pair 就 work,远小于 SFT 所需。

争议:

  1. External vs internal — 一个长期 user 关系到底应该存外面还是压成 state?目前无定论。
  2. CRUD 粒度 — Mem0 的 4 op 是不是表达力够?可能需要更多 op (MERGE, SPLIT, REFINE),也可能更少 (Memory-R1 论文里其实只用 3 个,NOOP 用得少)。

7 · 综合 take / 待验证问题

立场

这条 line 的 framing 是把 memory 当 RL 问题这件事,真正生效是从 2025 下半年起。MemoryBank/Mem0 提供了 infrastructure (storage / retrieval / CRUD 语义),MEM1/Memory-R1 提供了"该不该存、该怎么存"的学习信号。这两件事缺一不可 — 没有 infrastructure RL 没东西可学,没有 RL infrastructure 用不起来。

待验证问题

  1. Memory-R1 的 152 个 QA pair 极少,是不是只在 LoCoMo-style 评测上 overfit 了?换到 production 用户对话上还成立吗?
  2. MEM1 在 RLHF 类无 verifiable outcome 的任务上能不能扩展?(目前只在 QA / shopping 做过)
  3. External + Internal 合体能否在长期 user 上击败单独任一方?
  4. CRUD 操作集合是否需要扩展到 MERGE / REFINE / FORGET-with-reason 等更精细 op?
  5. 当 backbone 升级到 100B+ MoE,这些 RL-trained memory policy 还是 strict improvement,还是被 base model 的 in-context 能力吃掉?

实操建议


Memory points

立场 LLM 无 native long-term memory;这条 line 的演化是 storage → learned operations。Memory-R1 是 closing-the-loop 节点。
MemoryBank Ebbinghaus forgetting curve R = e−t/S + FAISS dense retrieval。SiliconFriend 应用层,定义了 storage / retrieval / updating 三件套术语。
Mem0 CRUD-style {ADD/UPDATE/DELETE/NOOP} + vector / graph 双变体。LOCOMO 上 +26% over OpenAI memory,−91% latency,−90% token cost。op 选择仍靠 vanilla LLM。
MEM1 范式分叉: 不要外存,RL 训 LLM 把记忆压进 <IS> tag,context O(1)。outcome reward 就能涌现 memory efficiency。7B 比 14B 准确率 ×3.5。
Memory-R1 把 Mem0 的 CRUD op 选择改成 RL。双 agent (Manager + Answer)。152 QA pair 训练,LLaMA-3.1-8B 上比 Mem0 涨 +28% F1。
两条路线 External + learned-CRUD (Memory-R1) vs Internal compressed state (MEM1)。不互斥,合体方向未做。
RL 高效 不需要 process supervision,outcome reward (QA 对错) 即可。RL 远比 SFT 数据高效。