6. 长期记忆与检索增强
第 6 章 · 长期记忆与检索增强
"短期记忆受窗口限制;长期记忆决定 Agent 能活多久。"
学习目标
完成本章后,读者应能够:
- 区分事实、经验、工作三类记忆
- 实现 MemGPT 风格分层记忆
- 实现 A-MEM 风格动态记忆网络
- 用 RAG 检索增强长任务
- 选合适评测(LoCoMo、PERSONAMEM、MSC、LongMemEval)
- 处理记忆一致性与冲突解决
先修知识
- 第 1 章 · LLM 智能体时代
- 第 5 章 · 上下文工程与短期记忆
章节地图
- 6.1 长期记忆的三大类
- 6.2 MemGPT:把 LLM 当作操作系统
- 6.3 A-MEM:Zettelkasten 风格的动态记忆网络
- 6.4 检索增强生成(RAG):长期记忆的核心技术
- 6.5 O-Mem 与 Mem0:长期记忆的工程化方案
- 6.6 长期记忆的评测
- 6.7 本章小结
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:
- 5 轮以内的对话:MemGPT 与传统 ReAct Agent 持平
- 50 轮以上的对话:MemGPT 比传统 ReAct Agent 高 35%
- 100 轮以上的对话:MemGPT 比传统 ReAct Agent 高 80%
这证明 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 的工作流程有四步:
- 结构化提取:新记忆进入时,LLM 提取
context、keywords、tags、timestamp等结构化属性。 - 相似度检索:用 embedding 相似度检索 top-K 相关历史记忆。
- 链接建立:LLM 判断是否应在新记忆与候选历史之间建立链接。
- 属性更新:如果链接被建立,被链接的旧记忆的
context等属性会被 LLM 重新生成,反映新记忆的影响。
A-MEM 在 LoCoMo 评测 上达到了 SOTA,比传统 RAG 基线高 10% 以上。关键改进是"A-MEM 在新记忆进入时会主动更新相关旧记忆",而传统 RAG 只追加不更新。
A-MEM 的工程实现需要:
- 向量数据库:存储所有记忆(Qdrant、Weaviate、Chroma)
- LLM 反思服务:每次新记忆进入时调用 LLM 做结构化提取和链接判断
- 属性缓存:旧记忆的更新版需要单独存储,避免修改原始记录
- 版本控制:保留历史版本,便于调试和回滚
复述框 · 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. 召回策略
- 稠密召回(Dense Retrieval):用 embedding 相似度,适合模糊查询。
- 稀疏召回(Sparse Retrieval, BM25):用关键词匹配,适合精确查询。
- 混合召回(Hybrid):两者结合,召回率最高。
2. 切块策略(Chunking)
- 固定大小:每 N tokens 切一块,简单但可能切断语义。
- 语义切块:按段落、章节切,保留语义。
- 滑动窗口:重叠 M tokens 的窗口,跨块信息不丢失。
- 层次切块:同时保留大块(章节)和小块(句子),检索时先大块后小块。
3. 重排模型(Reranker)
- cross-encoder:输入 (query, document) 对,输出相关性分数。精度高,延迟高。
- bi-encoder:分别编码 query 和 document,计算相似度。精度低,延迟低。
- Cohere Rerank、bge-reranker:业界常用模型。
4. 检索优化
- 元数据过滤:按时间、来源、用户等元数据过滤检索结果。
- 查询重写:用 LLM 把模糊 query 改写为多个精确 query。
- HyDE(Hypothetical Document Embeddings):用 LLM 生成假设性回答,用回答的 embedding 检索。
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-Mem 和 Mem0,它们把 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 题 | 综合得分 |
评测面临的三大挑战:
- 正确答案模糊:用户偏好往往不是"对错"问题,而是"程度"问题。
- 时间衰减:用户偏好会变化,记忆应该"忘记旧偏好"还是"保留历史"?
- 隐私与安全:评测数据可能包含个人隐私,公开数据集需要脱敏。
评测方法有三种:
- 人工评估:最准确但成本高。
- LLM 评估:用 GPT-4 等 LLM 评估答案质量("LLM-as-a-judge"),规模化但有偏差。
- 自动指标:Recall、Precision、MRR、nDCG 等量化指标,客观但可能无法反映真实质量。
复述框 · 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 建立理论基础。
本章小结
- 三大类记忆:事实、经验、工作,存储和检索策略不同。
- MemGPT:把 LLM 当 OS,分页机制支持 100+ 轮对话。
- A-MEM:Zettelkasten 风格动态记忆网络,新记忆触发旧记忆更新。
- RAG 三阶段:召回-重排-生成,4 个关键决策 + 5 个评测指标。
- O-Mem & Mem0:工程化方案,混合架构(抽象层 + 向量库 + 知识图谱 + 时序库)。
- 4 个评测基准:LoCoMo、PERSONAMEM、MSC、LongMemEval。
推荐阅读
- 📖 MemGPT 原始论文 [Packer et al., 2023]:把 LLM 当作操作系统的开创性工作。$TRAE_REF
- 📖 A-MEM 原始论文 [Xu et al., 2025]:Zettelkasten 风格动态记忆网络。$TRAE_REF
- 📖 O-Mem 原始论文 [Wang et al., 2025]:主动用户画像 + 层级检索。$TRAE_REF
- 📖 Mem0 原始论文 [Chhikara et al., 2025]:工业级记忆层抽象。$TRAE_REF
- 📖 HippoRAG [Gutiérrez et al., 2025]:受神经科学海马体启发的长记忆 RAG。$TRAE_REF
练习题
- 设计题:为"个人助理 Agent"设计三大类记忆的具体存储:事实记忆用哪种数据库?经验记忆用哪种?工作记忆用哪种?给出具体技术选型。
- 分析题:选一个真实 LLM Agent 系统(ChatGPT、Claude.ai、Gemini),分析它是否实现了 MemGPT 的"分页"机制?通过观察长对话中的行为变化给出证据。
- 动手题:用 Python + SQLite + sentence-transformers 实现一个简化版 A-MEM(不超过 200 行):能添加记忆、检索相似记忆、链接相关记忆。
- 设计题:为 SWE-bench 任务设计 RAG 流程:用什么召回策略(稠密/稀疏/混合)?切块策略(按行/按函数/按文件)?重排模型?给出完整 pipeline。
- 批判题:MemGPT 的"分页"机制与 A-MEM 的"动态网络"机制各有优劣。设计一个结合两者的混合方案:什么场景用 MemGPT?什么场景用 A-MEM?
- 工程实践题:为你的 LLM Agent 设计长期记忆"遗忘机制":什么样的记忆应该被遗忘?什么时机触发遗忘?遗忘前是否需要用户确认?
参考文献(本章内)
- Packer, C., et al. (2023). MemGPT: Towards LLMs as Operating Systems. arXiv:2310.08560. $TRAE_REF
- Xu, W., et al. (2025). A-MEM: Agentic Memory for LLM Agents. NeurIPS. $TRAE_REF
- Wang, Y., et al. (2025). O-Mem: Omni Memory System for Personalized, Long Horizon, Self-Evolving Agents. arXiv:2511.13593. $TRAE_REF
- Chhikara, P., et al. (2025). Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory. arXiv:2504.19413. $TRAE_REF
- Gutiérrez, B. J., et al. (2025). HippoRAG: Neurobiologically Inspired Long-Term Memory for Large Language Models. NeurIPS. $TRAE_REF
- Park, J. S., et al. (2023). Generative Agents: Interactive Simulacra of Human Behavior. UIST. $TRAE_REF
- Zhong, W., et al. (2024). MemoryBank: Enhancing Large Language Models with Long-Term Memory. arXiv:2305.10250.
- 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 字全部完成!