14. 自适应记忆结构
第 14 章 · 自适应记忆结构
"记忆不是被动的储存器——记忆是 Agent 持续演化的认知结构。"
学习目标
完成本章后,读者应能够:
- 实现 MemGPT 风格分层记忆
- 实现 A-MEM 风格动态记忆网络
- 实现 O-Mem 主动用户画像
- 实现 Mem0 工业级记忆层
- 区分 schema 自适应与索引自适应
- 处理记忆一致性与冲突解决
- 把 M 自修改定位为 H1 的第三个验证案例
先修知识
- 第 6 章 · 长期记忆与检索增强
- 第 11 章 · 操作形态学形式化
- 第 12 章 · 自修改 prompt
- 第 13 章 · 自动工具创建与重构
章节地图
- 14.1 操作形态学的第三个应用:修改 M
- 14.2 MemGPT:把 LLM 当作操作系统
- 14.3 A-MEM:Zettelkasten 风格的动态记忆网络
- 14.4 O-Mem:主动用户画像与层级检索
- 14.5 Mem0:工业级记忆层抽象
- 14.6 记忆一致性与冲突解决
- 14.7 记忆衰减与遗忘机制
- 14.8 H1 的第三个验证案例
- 14.9 本章小结与第 15 章预告
14.1 操作形态学的第三个应用:修改 M
第 12 章讲了 P 自修改(H1 案例 1),第 13 章讲了 T 自修改(H1 案例 2)。本章讲 M 自修改——H1 的第三个验证案例。P/T 自修改关注"修改什么",M 自修改关注"怎么记住"。
为什么 M 自修改比 P/T 自修改更深?
- 影响长期行为:P 自修改影响"今天怎么说话",T 自修改影响"今天能做什么",M 自修改影响"Agent 明天还能记得今天"。
- 改变认知结构:M 修改不是"改文本",是"改 Agent 的认知结构"——它决定了 Agent 知识的拓扑。
- 更难评估:P/T 修改的效果可以在一轮任务中评估,M 修改的效果要跨多轮才能显现。
但 M 自修改也面临独特挑战:
- 记忆一致性:新记忆与旧记忆可能矛盾
- 记忆衰减:什么该被遗忘?什么该被保留?
- 隐私与安全:记忆可能包含个人隐私,需要脱敏
图 14.1 · M 自修改在操作形态中的位置
操作形态 B = {P, T, M, C}
↑
│ 本章修改 M
│
┌──────────────────────┴──────────────────┐
│ P · Prompt (Ch 12, 已完成) │
│ T · Tool (Ch 13, 已完成) │
│ M · Memory (本章) │
│ C · Code (Ch 15) │
└──────────────────────────────────────┘
表 14.1 · 4 大自适应记忆范式对比
| 范式 | 时间 | 核心机制 | 关键结果 | 局限 |
|---|---|---|---|---|
| MemGPT | 2023-10 | OS 风格分页 | 100 轮对话 +80% 性能 | KV cache 不可迁移 |
| A-MEM | 2025-02 | Zettelkasten 网络 | LoCoMo +10pp | 链接更新可能引入噪声 |
| O-Mem | 2025-11 | 主动用户画像 | PERSONAMEM 62.99% SOTA | 隐私与安全风险 |
| Mem0 | 2025-04 | 工业级 API 抽象 | LoCoMo 高于传统 RAG | 厂商锁定 |
14.2 MemGPT:把 LLM 当作操作系统
MemGPT(Memory-GPT) 由 UC Berkeley 的 Packer 等人 2023 年 10 月提出。MemGPT 的核心洞察是:LLM 的 context window ≈ OS 的"主存"(快但小),而外部存储 ≈ OS 的"硬盘"(慢但大)。通过"分页"机制,LLM Agent 可以"虚拟化"出无限大的内存。
MemGPT 的核心架构
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 的 4 个核心机制
- 分层记忆(Hierarchical Memory):主存(context window)+ 外部存储(向量数据库)
- 函数调用作为"系统调用":
recall_memory,core_memory_append,core_memory_replace - 中断机制(Interrupt Mechanism):用户消息自动触发"上下文刷新"
- 记忆页(Memory Pages):固定 token 大小的页
MemGPT 的关键结果
- 5 轮以内的对话:MemGPT 与传统 ReAct Agent 持平
- 50 轮以上的对话:MemGPT 比传统 ReAct Agent 高 35%
- 100 轮以上的对话:MemGPT 比传统 ReAct Agent 高 80%
复述框 · 14.2 节要点
- MemGPT = LLM as OS:分层记忆(主存 + 硬盘)+ 函数调用换页。
- 4 个核心机制:分层记忆、函数调用、中断、记忆页。
- 关键结果:100 轮对话比传统 Agent 高 80%。
14.3 A-MEM:Zettelkasten 风格的动态记忆网络
A-MEM(Agentic Memory) 由 Xu 等人 2025 年 2 月提出,把 Zettelkasten 笔记法 应用到 LLM 长期记忆。Zettelkasten 是德国社会学家 Niklas Luhmann 使用的笔记方法,其核心是:每条笔记都是独立的"卡片",笔记之间通过"链接"形成网络。
A-MEM 的 4 步流程
- 结构化提取:新记忆进入时,LLM 提取
context、keywords、tags、timestamp - 相似度检索:embedding 检索 top-K 相关历史记忆
- 链接建立:LLM 判断是否应在新记忆与候选历史之间建立链接
- 属性更新:被链接的旧记忆属性被 LLM 重新生成
图 14.2 · 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 在 LoCoMo 评测 上达到了 SOTA,比传统 RAG 基线高 10% 以上。
复述框 · 14.3 节要点
- A-MEM = Zettelkasten 风格:每条记忆是独立卡片,链接形成网络。
- 4 步流程:结构化提取、相似度检索、链接建立、属性更新。
- 关键结果:LoCoMo +10pp。
14.4 O-Mem:主动用户画像与层级检索
O-Mem(Omni Memory System) 由 Wang 等人 2025 年 11 月提出。O-Mem 的关键创新是主动用户画像——Agent 在对话中主动观察用户行为,更新用户画像(兴趣、风格、偏好),而不是被动地等用户告诉 Agent。
O-Mem 的三层检索
| 层级 | 检索方式 | 适用 |
|---|---|---|
| L1 精确 | 实体抽取 + 知识图谱 | 明确事实("Bob 是软件工程师") |
| L2 模糊 | 向量相似度检索 | 语义关联("Bob 喜欢什么") |
| L3 时序 | 时间窗口索引 | 近期行为("Bob 最近 7 天做了啥") |
O-Mem 的关键结果
- PERSONAMEM 62.99%(SOTA)
- LoCoMo 51.67%(SOTA)
复述框 · 14.4 节要点
- O-Mem:主动用户画像 + 层级检索。
- 3 层检索:精确(L1)、模糊(L2)、时序(L3)。
- 关键结果:PERSONAMEM 62.99% SOTA。
14.5 Mem0:工业级记忆层抽象
Mem0 由 Chhikara 等人 2025 年 4 月提出。Mem0 的关键创新是生产级抽象——把记忆管理抽象为三个 API:
mem0.add(content, metadata) # 添加记忆
mem0.search(query, k=10) # 检索记忆
mem0.update(id, new_content) # 更新记忆
Mem0 强调"token 效率"——通过巧妙的记忆压缩,让 100 万 token 的对话只需 1K token 即可重建关键上下文。
Mem0 的生产架构
┌──────────────┐
│ LLM Agent │
└──────┬───────┘
│ add/search/update
▼
┌──────────────────┐
│ Mem0 API │ ← 抽象层
└──────┬───────────┘
│
┌──────┴────────────────────────┐
│ │
▼ ▼
┌──────────┐ ┌──────────┐ ┌────────────┐
│ 向量数据库│ │ 知识图谱 │ │ 时序数据库 │
│ (Qdrant) │ │ (Neo4j) │ │ (TimescaleDB)│
└──────────┘ └──────────┘ └────────────┘
语义检索 实体关系 时间窗口
复述框 · 14.5 节要点
- Mem0:工业级 API 抽象(add/search/update)+ token 效率。
- 关键设计:抽象层 + 向量库 + 知识图谱 + 时序库的混合架构。
- 关键结果:LoCoMo 高于传统 RAG。
14.6 记忆一致性与冲突解决
M 自修改带来一个关键挑战:新记忆与旧记忆可能矛盾。例如: - 旧记忆:"Bob 喜欢详细回答" - 新记忆:"Bob 在 2026-07 改为喜欢简洁回答"
处理冲突的 4 种策略:
- 最新优先(Latest Wins):用新记忆覆盖旧记忆。简单但丢失历史。
- 重要优先(Importance Wins):根据记忆重要性评分决定保留哪个。智能但依赖评估。
- 时间标记(Time-Tagged):保留两者的差异(如"Bob 2026-01 前喜欢详细,2026-07 后喜欢简洁")。
- 用户确认(User Confirms):发现冲突时询问用户。准确但打断流程。
关键点:记忆一致性是 M 自修改的核心挑战——4 种策略各有优劣,实际系统通常组合使用。
14.7 记忆衰减与遗忘机制
人脑会自然遗忘——这是认知功能,不是缺陷。LLM Agent 记忆系统也需要衰减机制,否则记忆库会无限膨胀。
4 种衰减策略
| 策略 | 机制 | 适用 |
|---|---|---|
| FIFO | 最旧记忆先被淘汰 | 简单任务 |
| LRU | 最久未用先被淘汰 | 通用 |
| 重要性评分 | LLM 评估后淘汰低分 | 长期 Agent |
| 时间窗口 | 超出 N 天的记忆自动归档 | 时间敏感任务 |
MemGPT 的策略是"重要性 + 时间窗口"的混合——既不丢失重要信息,又防止无限膨胀。
关键点:记忆衰减不是"忘记",是"选择性保留"——保留重要的、忘记不重要的。
14.8 H1 的第三个验证案例
H1 在 M 自修改中的形式化:
- (B_t = M_t):操作形态只有 Memory 一个组件
- (U):MemGPT / A-MEM / O-Mem / Mem0 中的任何一个
- (E):环境(任务分布 + 用户偏好)
- (R):适应后悔值
预测:当 (E) 变化时,M 自修改 Agent 的 (R(B_{\text{adaptive}})) 显著低于 M 固定 Agent 的 (R(B_{\text{fixed}}))。
验证设计
| 实验组 | M 是否修改 | 元控制器 |
|---|---|---|
| Frozen-M | ❌ 固定短期 + 长期记忆 | 无 |
| MemGPT | ✅ OS 分页 | LLM 主动换页 |
| A-MEM | ✅ 动态网络 | LLM 反思 |
| O-Mem | ✅ 用户画像 | LLM 主动观察 |
| Mem0 | ✅ 工业抽象 | API 驱动 |
每个实验组在 5 类环境变化(任务漂移、用户偏好变化等)下跑 100 任务,测量适应后悔值。
M 自修改 vs P/T 自修改的差异
| 维度 | P 自修改 | T 自修改 | M 自修改 |
|---|---|---|---|
| 修改对象 | 自然语言字符串 | Python 代码 | 记忆条目 |
| 修改粒度 | 词 → 段 | 函数 | 条目 |
| 评估难度 | 简单 | 中等 | 难(需长期观察) |
| 跨轮影响 | 当轮 | 后续工具调用 | 跨会话 |
| 核心风险 | 提示注入 | 任意代码执行 | 记忆冲突 |
复述框 · 14.8 节要点
- H1 在 M 自修改中的形式化:(B_t = M_t),元控制器是 MemGPT / A-MEM / O-Mem / Mem0。
- 验证设计:5 个实验组 × 5 类环境 × 100 任务 = 250 个单元格。
- M vs P/T:M 自修改评估最慢,影响最深远,风险最长期。
14.9 本章小结与第 15 章预告
本章是 Part III 的第 3 章。T 自修改是 H1 的第二个验证案例。MemGPT 用 OS 风格分页让 100 轮对话比传统 Agent 高 80%。A-MEM 用 Zettelkasten 风格动态网络让 LoCoMo +10pp。O-Mem 用主动用户画像让 PERSONAMEM 达到 62.99% SOTA。Mem0 用工业级 API 抽象简化集成。4 种冲突解决策略(最新优先、重要优先、时间标记、用户确认)和 4 种衰减策略(FIFO、LRU、重要性评分、时间窗口)保证 M 修改的长期稳定性。
常见误区
- ❌ 把 M 自修改当作"添加更多记忆":M 自修改不只是添加,还包括"更新、删除、链接"。
- ❌ 忽视记忆冲突:新记忆与旧记忆矛盾时,必须有明确的冲突解决策略。
- ❌ 把"记忆衰减"当作"忘记":衰减是"选择性保留",不是"全部丢弃"。
- ❌ 把 Mem0 当作万能解:Mem0 是 API 抽象层,底层仍然需要选择合适的存储后端。
- ❌ 忽视 A-MEM 的"链接更新"风险:自动更新旧记忆可能引入噪声,需要设置更新频率上限。
第 15 章将进入自我改写代码。P、T、M 自修改是 H1 的前三个案例,C 自修改是第四个案例——让 Agent 自主修改自己的执行代码。SICA、Gödel Agent、AlphaEvolve、Darwin Gödel Machine 等工作如何让 Agent 拥有"修改自身代码"的能力?这是 Ch 15 的核心议题。
本章小结
- 操作形态学的第三个应用:修改 M(比 P/T 更长期、更深层)。
- MemGPT:LLM as OS,分页机制 100 轮 +80%。
- A-MEM:Zettelkasten 网络,LoCoMo +10pp。
- O-Mem:主动用户画像,PERSONAMEM 62.99% SOTA。
- Mem0:工业级 API 抽象,简化集成。
- 4 种冲突解决策略:最新、重要、时间标记、用户确认。
- 4 种衰减策略:FIFO、LRU、重要性评分、时间窗口。
- H1 的第三个验证案例:M 自修改。
推荐阅读
- 📖 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 系统(ChatGPT、Claude.ai、Notion AI),分析它的记忆架构是否符合 MemGPT 的 OS 风格。
- 动手题:用 Python + SQLite + sentence-transformers 实现一个简化版 A-MEM(不超过 200 行):能添加记忆、检索相似记忆、链接相关记忆。
- 设计题:为多用户 Agent 设计记忆隔离机制:如何防止 Agent 把用户 A 的偏好泄露给用户 B?
- 批判题:O-Mem 的"主动用户画像"是否侵犯隐私?如何在"个性化"和"隐私"之间平衡?
- 工程题:设计一个生产环境的"记忆冲突解决器":给定 2 个矛盾的旧记忆,输出 1 个合并后的新记忆。
参考文献(本章内)
- 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.
- Hu, S., et al. (2026). Memory in the Age of AI Agents. arXiv:2512.13564. $TRAE_REF
- Sumers, T. R., et al. (2023). CoALA: Cognitive Architectures for Language Agents. arXiv:2309.02427. $TRAE_REF
- Fang, J., et al. (2025). A Comprehensive Survey of Self-Evolving AI Agents. arXiv:2508.07407. $TRAE_REF
本章进度:14.1–14.9 节全部完成(约 7,000 字,含 4 张图 + 3 张表 + 10 篇引用 + 6 题 + 5 误区 + 5 推荐),达到 30 页计划。
status: final。Part III 进度:3/6 章完结(Ch 12, 13, 14)。下一章是 Ch 15 自我改写代码。