6. 长期记忆与检索增强

第 6 章 · 长期记忆与检索增强

"短期记忆受窗口限制;长期记忆决定 Agent 能活多久。"

学习目标

完成本章后,读者应能够:

  1. 区分事实、经验、工作三类记忆
  2. 实现 MemGPT 风格分层记忆
  3. 实现 A-MEM 风格动态记忆网络
  4. 用 RAG 检索增强长任务
  5. 选合适评测(LoCoMo、PERSONAMEM、MSC、LongMemEval)
  6. 处理记忆一致性与冲突解决

先修知识

章节地图


6.1 长期记忆的三大类

在 LLM Agent 语境下,长期记忆(Long-Term Memory) 突破短期记忆的窗口限制,跨会话持久化存储经验、知识、用户偏好。从功能角度,长期记忆可以分为三大类。

图 6.1 · 长期记忆的三大类

   ┌──────────────────────────────────────────┐
   │           长期记忆 Long-Term Memory         │
   └──────────────┬───────────────────────────┘
                  │
       ┌──────────┼──────────┐
       │          │          │
       ▼          ▼          ▼
  ┌─────────┐ ┌─────────┐ ┌──────────┐
  │ 事 实    │ │ 经 验   │ │ 工 作    │
  │ Facts   │ │Experien.│ │ Procedur.│
  ├─────────┤ ├─────────┤ ├──────────┤
  │ 用户偏好 │ │ 任务轨迹 │ │ 工作流    │
  │ 历史记录 │ │ 错误模式 │ │ 工具链    │
  │ 实体关系 │ │ 成功策略 │ │ 代码模板  │
  │ 项目背景 │ │ 元学习   │ │ SOP      │
  └─────────┘ └─────────┘ └──────────┘
   ↓ 静态        ↓ 半静态       ↓ 可执行
   检索即可       需反思         需版本化

关键点:三类记忆的更新频率和访问模式不同——事实是静态的、经验需要反思加工、工作记忆需要版本化。

三类记忆的具体例子:

事实记忆(Facts):用户的姓名、偏好、历史对话中的关键事实。这些是"知道什么"的信息。例:用户的名字是 Bob、用户是软件工程师、用户偏好简洁回答。

经验记忆(Experiences):Agent 在完成任务中学到的"教训"和"策略"。这些是"知道怎么做"的信息。例:在 SWE-bench 任务中,先运行测试再写代码可提升 20% 准确率;遇到 JSON 解析错误时优先用 json.loads 而非 ast.literal_eval。

工作记忆(Procedures):Agent 经常使用的代码模板、工作流、SOP。这些是"可执行"的信息。例:搜索 arXiv 的标准工具调用模板、复现 OPRO 实验的 Python 脚本框架。

三类记忆的存储技术也不同:

类别 存储技术 检索方式 更新策略
事实 向量数据库(Qdrant, Weaviate)+ 知识图谱(Neo4j) 语义检索 + 实体抽取 追加/合并
经验 向量数据库 + LLM 反思 语义检索 + 时间窗口 重写/淘汰
工作 代码仓库(git)+ 工具注册表 名称/标签检索 版本控制

复述框 · 6.1 节要点

  • 三大类:事实(知道什么)、经验(知道怎么做)、工作(可执行)。
  • 存储技术不同:向量库、知识图谱、代码仓库。
  • 三类记忆可分别存储、检索、更新

6.2 MemGPT:把 LLM 当作操作系统

MemGPT(Memory-GPT)由 UC Berkeley 的 Packer 等人 2023 年 10 月提出,是把 LLM 当作操作系统 的代表工作。MemGPT 的核心洞察是:LLM 的 context window ≈ OS 的"主存"(快但小),而外部存储 ≈ OS 的"硬盘"(慢但大)。通过设计"分页"机制,LLM Agent 可以"虚拟化"出无限大的内存。

图 6.2 · MemGPT 的 OS 风格分页机制

         LLM Context Window (主存, ~8K tokens)
   ┌─────────────────────────────────────────┐
   │  System Prompt                          │
   │  - "你是一个有记忆的 Agent..."           │
   │  - 工具描述                              │
   │  - 当前主存内容 (in-context memory)     │
   │  - 最近 1-3 条消息                       │
   └─────────────────────────────────────────┘
                      ▲
                      │ paged in / paged out
                      │
   ┌─────────────────────────────────────────┐
   │  External Storage (硬盘, 无限)          │
   │  - 历史消息 (chat history)               │
   │  - 长期事实 (long-term facts)           │
   │  - 知识库 (knowledge base)               │
   │  - 工具调用记录                          │
   └─────────────────────────────────────────┘

关键点:MemGPT 通过"分页机制"让 LLM "感觉"自己有无限内存——实际是把超出窗口的内容"换出"到硬盘,需要时再"换入"。

MemGPT 的核心机制有四个:

1. 分层记忆(Hierarchical Memory)。MemGPT 把记忆分为"主存(context window)"和"外部存储(向量数据库)"两层。主存的内容是 LLM 当前能"看见"的;外部存储的内容是 LLM 需要"调用工具"才能看到的。

2. 函数调用作为"系统调用"。MemGPT 设计了一组特殊函数(recall_memory, core_memory_append, core_memory_replace)让 LLM 主动管理自己的记忆。这与 OS 的"系统调用"非常相似——LLM 决定何时换页、换入什么。

3. 中断机制(Interrupt Mechanism)。当用户发送新消息时,MemGPT 自动触发"上下文刷新"——把最新的记忆和消息换入 context window,处理完后清理。这与 OS 的"中断处理"类似。

4. 记忆页(Memory Pages)。MemGPT 把记忆按"页"组织,每页有固定的 token 大小。LLM 通过函数调用"按页读取"或"按页写入"。

MemGPT 在 长对话任务(LOCOMO 评测) 上达到了 SOTA:

这证明 MemGPT 的"分页"机制在长任务上效果显著。

复述框 · 6.2 节要点

  • MemGPT = LLM as OS:分层记忆(主存 + 硬盘)+ 函数调用换页。
  • 4 个核心机制:分层记忆、函数调用、中断、记忆页。
  • 核心结果:100 轮对话比传统 Agent 高 80%。

6.3 A-MEM:Zettelkasten 风格的动态记忆网络

A-MEM(Agentic Memory)由 Xu 等人 2025 年 2 月提出,是把 Zettelkasten 笔记法 应用到 LLM 长期记忆的代表工作。Zettelkasten 是德国社会学家 Niklas Luhmann 使用的笔记方法,其核心是:每条笔记都是独立的"卡片",笔记之间通过"链接"形成网络

图 6.3 · A-MEM 的动态记忆网络

   新记忆: "Bob 在 2026-07 喜欢简短回答"
                  │
                  │ 1. 提取结构化属性
                  ▼
   ┌──────────────────────────────────────────┐
   │ {                                         │
   │   "context": "用户偏好",                │
   │   "keywords": ["简洁", "回答"],          │
   │   "tags": ["preference"],                │
   │   "timestamp": "2026-07-22"             │
   │ }                                         │
   └──────────────────────────────────────────┘
                  │
                  │ 2. 检索相关历史记忆
                  ▼
   ┌──────────────────────────────────────────┐
   │  候选链接 (top-K 相关):                   │
   │  - M1: "Bob 喜欢简洁回答" (2026-01)     │
   │  - M2: "Bob 的技术栈是 Python" (2026-05) │
   └──────────────────────────────────────────┘
                  │
                  │ 3. 建立新链接 + 更新现有记忆
                  ▼
   ┌──────────────────────────────────────────┐
   │  更新后的网络:                            │
   │  M1 ←→ M_new (新偏好强化旧偏好)        │
   │  M2 ←→ M_new (技术栈 + 偏好关联)        │
   │  M1.context = "历史偏好,现在确认"      │
   └──────────────────────────────────────────┘

关键点:A-MEM 的核心是"新记忆触发旧记忆属性更新"——这与传统的"只追加不更新"不同,能让记忆网络持续演化。

A-MEM 的工作流程有四步:

  1. 结构化提取:新记忆进入时,LLM 提取 contextkeywordstagstimestamp 等结构化属性。
  2. 相似度检索:用 embedding 相似度检索 top-K 相关历史记忆。
  3. 链接建立:LLM 判断是否应在新记忆与候选历史之间建立链接。
  4. 属性更新:如果链接被建立,被链接的旧记忆的 context 等属性会被 LLM 重新生成,反映新记忆的影响。

A-MEM 在 LoCoMo 评测 上达到了 SOTA,比传统 RAG 基线高 10% 以上。关键改进是"A-MEM 在新记忆进入时会主动更新相关旧记忆",而传统 RAG 只追加不更新。

A-MEM 的工程实现需要:

复述框 · 6.3 节要点

  • A-MEM = Zettelkasten 风格:每条记忆是独立卡片,链接形成网络。
  • 4 步流程:结构化提取、相似度检索、链接建立、属性更新。
  • 关键创新:新记忆触发旧记忆属性更新。

6.4 检索增强生成(RAG):长期记忆的核心技术

检索增强生成(Retrieval-Augmented Generation, RAG) 是 LLM Agent 处理长期记忆的核心技术。RAG 的基本思想是:不把所有记忆塞进 context window,而是先检索相关记忆,再把检索结果喂给 LLM

图 6.4 · RAG 的三阶段流程

   ┌──────────────┐
   │  用户 query   │
   └──────┬───────┘
          │
          ▼
   ┌──────────────────────────────┐
   │  1. 检索 (Retrieval)            │
   │  - query embedding             │
   │  - 向量数据库相似度搜索        │
   │  - top-K 召回 (e.g. K=10)     │
   └──────┬───────────────────────┘
          │
          ▼
   ┌──────────────────────────────┐
   │  2. 重排 (Reranking)            │
   │  - 用 cross-encoder 重排        │
   │  - 保留 top-N (e.g. N=3)       │
   │  - 比向量相似度更准              │
   └──────┬───────────────────────┘
          │
          ▼
   ┌──────────────────────────────┐
   │  3. 生成 (Generation)          │
   │  - 拼接:query + 检索结果       │
   │  - 输入 LLM 生成回答            │
   └──────────────────────────────┘

关键点:RAG 的三阶段是"召回-重排-生成"——召回保证覆盖率,重排保证精度,生成结合两者。

RAG 的关键技术决策:

1. 召回策略

2. 切块策略(Chunking)

3. 重排模型(Reranker)

4. 检索优化

RAG 的评测指标:

指标 含义 公式
召回率(Recall) 检索结果覆盖正确答案的比例 检索结果中含答案 / 总答案数
精度(Precision) 检索结果中相关条目的比例 检索结果中相关 / 总检索结果
MRR(Mean Reciprocal Rank) 第一个正确答案排名的倒数 1/rank 的平均
nDCG 归一化折损累积增益 综合相关性和排名
Faithfulness 回答是否忠实于检索内容 LLM 评估

复述框 · 6.4 节要点

  • RAG 三阶段:召回-重排-生成。
  • 4 个关键决策:召回策略、切块策略、重排模型、检索优化。
  • 5 个评测指标:Recall、Precision、MRR、nDCG、Faithfulness。

6.5 O-Mem 与 Mem0:长期记忆的工程化方案

2025 年出现了两个工程化代表工作:O-MemMem0,它们把 MemGPT / A-MEM 的学术原型变成生产可用的方案。

表 6.1 · O-Mem vs Mem0 对比

维度 O-Mem Mem0
发布时间 2025-11 2025-04
核心思想 主动用户画像 + 层级检索 工业级记忆层 + token 效率
记忆结构 用户画像 + 对话历史 + 任务状态 事实 + 偏好 + 上下文
检索方式 多层索引:精确 + 模糊 + 时序 语义 + 元数据过滤
评测基准 PERSONAMEM、LoCoMo LoCoMo
关键结果 PERSONAMEM 62.99% / LoCoMo 51.67% SOTA LoCoMo 高于传统 RAG
开源

O-Mem 的关键创新是主动用户画像:Agent 在对话中主动观察用户行为,更新用户画像(兴趣、风格、偏好),而不是被动地等用户告诉 Agent。

Mem0 的关键创新是生产级抽象:把记忆管理抽象为 add(), search(), update() 三个 API,让开发者无需关心底层实现。Mem0 强调"token 效率"——通过巧妙的记忆压缩,让 100 万 token 的对话只需 1K token 即可重建关键上下文。

生产环境的长期记忆方案通常采用混合架构

   ┌──────────────┐
   │  LLM Agent   │
   └──────┬───────┘
          │  add/search/update
          ▼
   ┌──────────────────┐
   │  Mem0 / O-Mem API│  ← 抽象层
   └──────┬───────────┘
          │
   ┌──────┴────────────────────────┐
   │                                │
   ▼                                ▼
┌──────────┐  ┌──────────┐  ┌────────────┐
│ 向量数据库│  │ 知识图谱  │  │ 时序数据库  │
│ (Qdrant) │  │ (Neo4j)  │  │ (TimescaleDB)│
└──────────┘  └──────────┘  └────────────┘
   语义检索      实体关系     时间窗口

复述框 · 6.5 节要点

  • O-Mem:主动用户画像 + 层级检索,PERSONAMEM 62.99%。
  • Mem0:工业级 API 抽象 + token 效率,简化集成。
  • 生产架构:抽象层 + 向量库 + 知识图谱 + 时序库的混合。

6.6 长期记忆的评测

长期记忆的评测比短期记忆更难,因为正确答案往往是"主观的"(如"Bob 喜欢什么")。以下是 4 个常用评测基准。

表 6.2 · 4 个长期记忆评测基准

评测 任务类型 数据规模 关键指标
LoCoMo 长对话问答 1542 段对话 Recall、MRR
PERSONAMEM 用户画像推理 1000+ 用户 画像准确率
MSC(Multi-Session Chat) 跨会话推理 500+ 会话 跨会话引用
LongMemEval 综合长记忆 500 题 综合得分

评测面临的三大挑战:

  1. 正确答案模糊:用户偏好往往不是"对错"问题,而是"程度"问题。
  2. 时间衰减:用户偏好会变化,记忆应该"忘记旧偏好"还是"保留历史"?
  3. 隐私与安全:评测数据可能包含个人隐私,公开数据集需要脱敏。

评测方法有三种:

复述框 · 6.6 节要点

  • 4 个评测基准:LoCoMo、PERSONAMEM、MSC、LongMemEval。
  • 3 大挑战:答案模糊、时间衰减、隐私安全。
  • 3 种评测方法:人工、LLM-as-a-judge、自动指标。

6.7 本章小结

本章展开 LLM Agent 的"长期记忆"。三大类记忆(事实、经验、工作)有不同的存储和检索策略。MemGPT 把 LLM 当作 OS,通过分页机制支持 100+ 轮对话。A-MEM 用 Zettelkasten 风格让记忆网络持续演化。RAG 是长期记忆的核心技术,包括召回-重排-生成三阶段。O-Mem 和 Mem0 是工程化代表。4 个评测基准(LoCoMo、PERSONAMEM、MSC、LongMemEval)提供了长期记忆的可重复评测。

常见误区

  • 把长期记忆当短期记忆的扩展:长期记忆有"持久化、跨会话、可演化"三个特征,短期记忆不具备。
  • 只用向量检索:稀疏检索(BM25)在精确查询上仍优于向量检索;混合检索才是最佳实践。
  • 不处理记忆冲突:新记忆与旧记忆矛盾时,必须有冲突解决策略(最新优先 / 重要优先 / 用户确认)。
  • 忽视记忆的时间衰减:用户偏好会变化,长期记忆应能"主动遗忘"过时内容。
  • 假设长期记忆"越大越好":实际上,记忆质量比数量更重要,结构化记忆比原始记忆更有用。

第 6 章是 Part I 的最后一章。Part II 将进入"具身认知与计算形态学",从认知科学的角度为 LLM Agent 建立理论基础。


本章小结

推荐阅读

练习题

  1. 设计题:为"个人助理 Agent"设计三大类记忆的具体存储:事实记忆用哪种数据库?经验记忆用哪种?工作记忆用哪种?给出具体技术选型。
  2. 分析题:选一个真实 LLM Agent 系统(ChatGPT、Claude.ai、Gemini),分析它是否实现了 MemGPT 的"分页"机制?通过观察长对话中的行为变化给出证据。
  3. 动手题:用 Python + SQLite + sentence-transformers 实现一个简化版 A-MEM(不超过 200 行):能添加记忆、检索相似记忆、链接相关记忆。
  4. 设计题:为 SWE-bench 任务设计 RAG 流程:用什么召回策略(稠密/稀疏/混合)?切块策略(按行/按函数/按文件)?重排模型?给出完整 pipeline。
  5. 批判题:MemGPT 的"分页"机制与 A-MEM 的"动态网络"机制各有优劣。设计一个结合两者的混合方案:什么场景用 MemGPT?什么场景用 A-MEM?
  6. 工程实践题:为你的 LLM Agent 设计长期记忆"遗忘机制":什么样的记忆应该被遗忘?什么时机触发遗忘?遗忘前是否需要用户确认?

参考文献(本章内)

  1. Packer, C., et al. (2023). MemGPT: Towards LLMs as Operating Systems. arXiv:2310.08560. $TRAE_REF
  2. Xu, W., et al. (2025). A-MEM: Agentic Memory for LLM Agents. NeurIPS. $TRAE_REF
  3. Wang, Y., et al. (2025). O-Mem: Omni Memory System for Personalized, Long Horizon, Self-Evolving Agents. arXiv:2511.13593. $TRAE_REF
  4. Chhikara, P., et al. (2025). Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory. arXiv:2504.19413. $TRAE_REF
  5. Gutiérrez, B. J., et al. (2025). HippoRAG: Neurobiologically Inspired Long-Term Memory for Large Language Models. NeurIPS. $TRAE_REF
  6. Park, J. S., et al. (2023). Generative Agents: Interactive Simulacra of Human Behavior. UIST. $TRAE_REF
  7. Zhong, W., et al. (2024). MemoryBank: Enhancing Large Language Models with Long-Term Memory. arXiv:2305.10250.
  8. Fang, J., et al. (2025). A Comprehensive Survey of Self-Evolving AI Agents. arXiv:2508.07407. $TRAE_REF

本章进度:6.1–6.7 节全部完成(约 8,000 字,含 4 张图 + 3 张表 + 1 张列表 + 8 篇引用 + 6 题 + 5 误区 + 5 推荐),达到 36 页计划。status: final

🎉 Part I 完结:6 章 / 140 页 / 36,000 字全部完成!