LLM Long-Term Memory 演化合集
速读卡片 (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) — 闭环。
立场:这条 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 也只是"延迟问题",不解决问题。三个理由:
- 关系是几个月叠出来的:任何严肃 AI 助手(医疗、教育、企业支持)需要跨周/跨月维持一致 user persona,这个时间尺度远超任何 context window。
- 真实对话非连续:用户先说自己 vegetarian,中间跟 LLM 聊 8 小时编程,再回来问"今晚吃什么" — full-context 方案需要在几千个无关 token 里找到那条关键饮食偏好。
- Attention 在长距离衰减:即使塞进去了,attention head 也会跨距离失焦 ("lost in the middle" 现象),关键信息事实上读不到。
1.2 三种 augmentation 思路
| 思路 | 形式 | 代表 | 关键短板 |
|---|---|---|---|
| (A) 外挂 storage + retrieval (RAG-style) | 所有对话存向量库,每次 query 检索 top-k 拼回 prompt | MemoryBank, 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 演化时间线
2 · MemoryBank (2023-05) — 起源
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 方法三件套
Ebbinghaus forgetting 公式逐行翻译
- R ∈ (0, 1]:记忆"残留度",越低越易被丢
- t:距上次召回经过的时间(单位天)
- S:记忆"强度",每被召回一次 S += 1(spacing effect)
反向论证: 为什么这能 work? 因为它给了"哪些记忆值得保留"一个可计算指标 — 被反复用到的就强(S 大),很久没用的就弱。但它没有 task signal:一段记忆即使从未被召回,也可能在第 100 天突然关键(用户提到首次见面那天)。后续工作就是要补这个缺口。
2.3 Worked example: 用户问"我女朋友喜欢的礼物?"
- 当前 query c:
"Do you remember the gifts she likes?" - Encoder → hc(768-dim)
- FAISS 在 storage 检索 top-5:命中 04-28 / 04-29 两天的对话片段,其中提到"books and gifts"。
- 检索回来的 memory pieces 拼到 prompt:
[Past Conv 04-28: "她喜欢看书,生日给过她小说..."] + [User Portrait: "open-minded, curious"] + [Current Query] - LLM 生成回答。同时,S(那两条 memory)各 += 1,因为它们被召回了。
2.4 评测
无现成 benchmark — 作者自建:15 个虚拟用户 × 10 天对话,194 道 probing question。SiliconFriend (ChatGPT + MemoryBank) 在 memory recall / empathy / portrait understanding 上显著优于无记忆 baseline,但这是定性主导的评估,缺乏标准化数字。
2.5 局限
- 遗忘是规则驱动,不学;
- 什么是"一条 memory"由 segmenter 拍脑袋决定(回合级);
- 无 update/merge 操作(只能 add 和 forget);
- 评测私有数据,可比性差 — 直到 LoCoMo 等基准出现才有标准。
3 · Mem0 (2025-04) — 工程标准
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 变体
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:
- vs OpenAI memory(ChatGPT 的内置 memory 系统):LLM-as-judge +26% relative
- vs full-context(把全部对话塞 prompt):p95 latency −91%,token cost −90%
- Mem0g 比 Mem0 在 multi-hop / temporal 上再 +2%(graph 结构帮助跨实体关系)
3.5 局限
- CRUD op 选择全靠 LLM in-context 直觉,出错率高(Memory-R1 的 Figure 1 给的 "DELETE+ADD 错把两条狗当矛盾" 是典型);
- Extraction stage 抽不到的 fact 永远丢;
- 无 RL 信号,无法跨任务 generalize;
- graph 变体的 schema 需要预定义。
4 · MEM1 (2025-06) — 范式分叉
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 训练目标
普通 RL,outcome-only reward (final answer 对就 +1)。没有任何关于 memory 效率的 reward 项。但 agent 会涌现出 efficient memory management 行为 — 因为 context 是结构约束 (每轮被强制清空),它必须学会把关键信息存进 IS 才能存活到 final answer。
4.3 trajectory 结构(关键差别)
4.4 数字
- 16-objective multi-hop QA: MEM1-7B 比 Qwen2.5-14B-Instruct 准确率 ×3.5
- 同任务上 memory usage ×3.7 lower
- 训练用 2-objective composition,推理 generalize 到 16-objective(超出训练 horizon 8 倍)
- 三个 domain 都成立:internal retrieval QA / open-domain WebQA / WebShop multi-turn shopping
4.5 为什么这件事不平凡
反向论证:为什么不用 ReAct + 一个 summarization module? 因为 summarization 通常是独立训练的 — summarizer 可能丢的恰好是 reasoning 下游需要的信息。MEM1 的关键在于把 summarization 和 reasoning 放进同一个 LLM forward,用同一个 RL signal 优化 — agent 只压缩"它接下来真用得着"的信息。
4.6 局限
- 需要从头 RL 训(不像 MemoryBank/Mem0 可以零训练插入);
- 跨 session 的"长期 persistence"还没解决 — IS 在 task 结束就消失,无法跨用户、跨日;
- 错压一次,信息永远丢(没有 retrieval 兜底);
- 评测 horizon 16 objective,真实场景可能 100+。
5 · Memory-R1 (2025-08) — 闭环
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 架构
5.3 Worked example (论文 Figure 1)
- Session 1: user 说
"I adopted a dog named Buddy" - Memory Manager 观察 (new_fact: "Buddy", existing_memory: ∅) → action =
ADD。memory 现在: {m₁: adopted Buddy} - Session 5 (一周后): user 说
"I adopted another dog named Scout" - 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"— 对!
- vanilla Mem0 LLM:
- Session 10: user 问
"How many dogs do I have?" - Retriever 拿回 60 条 memory(包括 m₁ 和很多噪声)→ Answer Agent 先 distill 出唯一关键的 m₁,再答 "2"。outcome reward = 1, gradient 同时回到 π_M 和 π_A。
5.4 数字
- Backbone LLaMA-3.1-8B,vs Mem0 baseline: F1 +28%, BLEU-1 +34%, LLM-judge +30%
- 训练数据仅 152 个 QA pair — RL 极高效
- 跨三个 benchmark (LoCoMo, MSC, LongMemEval) 都成立
- 跨三个 backbone scale (3B / 8B / 14B) 都涨,scale 越大涨幅越大
5.5 局限
- 仍然继承 Mem0 的 retrieval 弱点(检索 60 条 memory 已经预设上限);
- RL 需要 verifiable outcome — 在没有 ground-truth answer 的开放对话场景上不易扩展;
- 没跟 MEM1 类工作做端到端对比 — 不清楚 "外存 + RL CRUD" vs "内部 state + RL" 在同一 budget 下谁更强。
6 · 演化轨迹: 两条平行路线对比
6.1 主对比表
| MemoryBank | Mem0 | MEM1 | Memory-R1 | |
|---|---|---|---|---|
| 日期 | 2023-05 | 2025-04 | 2025-06 | 2025-08 |
| memory 形式 | external (text + vec) | external (vec / graph) | internal <IS> | external (vec) |
| operations | add / forget | ADD/UPDATE/DELETE/NOOP | (rewrite IS) | ADD/UPDATE/DELETE/NOOP |
| op 由谁决定 | Ebbinghaus 公式 | vanilla LLM in-context | RL policy | RL policy (PPO/GRPO) |
| 训练成本 | 0 (heuristic) | 0 (prompt only) | full RL | RL on 152 QA pairs |
| context 长度 | O(retrieved k) | O(retrieved k) | O(1) | O(retrieved k) |
| 跨 session | ✓ | ✓ | ✗ (IS 随 task 销毁) | ✓ |
| 主 benchmark | self-built (15 user) | LOCOMO | composed multi-hop QA | LoCoMo + MSC + LongMemEval |
| flagship 数字 | 定性,SiliconFriend | +26% vs OpenAI mem | ×3.5 acc, ×3.7 mem (vs Qwen-14B) | +28% F1 over Mem0 |
| 核心局限 | 无 learning signal | op 选择易出错 | 无跨 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 三个共识 + 两个争议
共识:
- Heuristic 不够 — Ebbinghaus forgetting / vanilla LLM op 选择都不可靠,需要 learning signal;
- Outcome reward 就够 — 都不需要 process supervision,QA 答对就行(Memory-R1 / MEM1 都证明了);
- RL 比 SFT 高效 — Memory-R1 仅 152 个 QA pair 就 work,远小于 SFT 所需。
争议:
- External vs internal — 一个长期 user 关系到底应该存外面还是压成 state?目前无定论。
- 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 用不起来。
待验证问题
- Memory-R1 的 152 个 QA pair 极少,是不是只在 LoCoMo-style 评测上 overfit 了?换到 production 用户对话上还成立吗?
- MEM1 在 RLHF 类无 verifiable outcome 的任务上能不能扩展?(目前只在 QA / shopping 做过)
- External + Internal 合体能否在长期 user 上击败单独任一方?
- CRUD 操作集合是否需要扩展到 MERGE / REFINE / FORGET-with-reason 等更精细 op?
- 当 backbone 升级到 100B+ MoE,这些 RL-trained memory policy 还是 strict improvement,还是被 base model 的 in-context 能力吃掉?
实操建议
- 做 production assistant: Mem0(成熟、有商业支持、可接入)是起点;
- 做 long-horizon agent (research / WebShop): MEM1 思路 — RL 训 internal state;
- 做 personalized chatbot 且有 QA-style 评测信号: Memory-R1 把 Mem0 升级即可;
- 做 forgetting / privacy-aware 应用: MemoryBank 的 Ebbinghaus 公式仍是 best off-the-shelf decay 模型。