第2章:Memory 分类法 —— CoALA、三维度法与人脑类比
Working / Episodic / Semantic / Procedural 四类 Memory 的定义与边界,2025 年 Forms × Functions × Dynamics 三维度法,以及不同应用场景的 Memory 偏好对照
要做对 Agent Memory,先要分清”哪一类记忆”。混淆的代价是高昂的——把语义事实当成事件存,后续检索就会”既不及时又不准确”;把过程性技能当成知识存,Agent 就学不会跨任务复用。本章把三套主流分类法讲透,并配一张”应用 → 偏好的 Memory 类型”对照表,让你后面看任何论文/框架时都能一秒定位它在解决什么。
📑 目录
- 1. 为什么需要分类法
- 2. CoALA 框架:认知科学的标准分类
- 3. 四类 Memory 详解
- 4. 一个完整例子:客服退货请求
- 5. Memory in the Age of AI Agents:三维度法
- 6. 人类记忆神经科学的类比
- 7. 不同应用对 Memory 的偏好
- 自我检验清单
- 参考资料
1. 为什么需要分类法
不同类型的 Memory 在四个维度上完全不同,用同一种存储和检索方式必定吃亏:
| 维度 | 一段对话事实 | 用户偏好 | 操作 SOP | 当前思考 |
|---|---|---|---|---|
| 写入频率 | 每对话 | 偶尔 | 偶尔/版本管理 | 每 turn |
| 时间属性 | 强时序 | 弱时序(可演化) | 几乎无 | 瞬时 |
| 存储介质 | KV / 向量 | KV / 图 | 文档 / 代码 | RAM |
| 检索方式 | 时间 + 相似度 | 精确 lookup + 相似度 | 标签 / 分类 | 不检索,直接持有 |
| 冲突处理 | 保留多版本 | 新覆盖旧 | 版本控制 | — |
如果用同一个 vector store 存所有四类,就会出现”今天的偏好和昨天的对话事实在同一个相似度榜单里竞争”的混乱局面——检索准确率断崖式下降。
🌟 结论:分类先行,然后才能选合适的存储 + 检索 + 生命周期策略。
2. CoALA 框架:认知科学的标准分类
CoALA(Cognitive Architectures for Language Agents,Sumers et al., 2023)是 Princeton + Anthropic 提出的语言 Agent 通用框架,把 Memory 划分为四类:
Memory
│
┌─────────────────┼─────────────────┐
│ │ │
Working Long-term (Decision)
│
┌─────────────────┼─────────────────┐
│ │ │
Episodic Semantic Procedural
"事件" "知识" "流程"
🍎 CoALA 的影响力:LangGraph 官方文档、Letta、LangMem 等主流框架都直接或间接采用这套四分法。理解了 CoALA,你能秒读懂大部分现代 Agent 框架的设计文档。
3. 四类 Memory 详解
3.1 Working Memory(工作记忆)
定义:Agent 当前推理 cycle 持有的信息——相当于人脑的”工作记忆环路”。
特点:
- 时间尺度:单次 decision cycle(几秒)
- 容量:有限(对应 LLM 的 context window)
- 内容:当前 turn 的 input、scratchpad、tool call results、检索回来的相关 long-term memory
- 不需要持久化
工程实现:LangGraph 的 state、AutoGen 的 messages、Mem0 的当前 session buffer。
# LangGraph state 即 Working Memory 的典型实现
class State(TypedDict):
messages: list[BaseMessage]
scratchpad: str
retrieved_memories: list[Memory]
3.2 Episodic Memory(情节记忆)
定义:具体事件的记录——“什么时候、什么地点、谁、做了什么、结果如何”。
特点:
- 强时间属性(timestamp 必须有)
- 颗粒度细(每个事件一条)
- 事实可演化但事件本身不被覆盖(永远是”过去发生了 X”)
例子:
- “2026-04-15 14:32 用户咨询了产品 SKU-001 的发货时间”
- “2026-05-01 用户对客服评分 1 星,理由是发货慢”
- “工具调用 search_product(‘iPhone’),返回 12 条结果”
工程实现:
- 时间戳索引的 vector store(Qdrant + payload timestamp)
- Mem0 的 history 表
- LangMem 的 episodic store
3.3 Semantic Memory(语义记忆)
定义:从多个事件中抽象、去时间化、高层化的事实知识。
特点:
- 不带具体时间(或用 t_valid 范围)
- 可被新事件更新或推翻
- 颗粒度:从单条偏好到结构化档案
例子:
- “用户偏好咖啡不加糖”(从多次点单事件中归纳)
- “用户的常用配送地址是浦东新区张江”
- “用户对价格敏感,折扣 > 20% 时转化率显著高”
工程实现:
- 结构化 JSON / 文档(Letta 的 core memory
humanblock) - KG 节点和边(Zep / Graphiti)
- Vector store with deduplication policy(Mem0 graph mode)
🌟 关键算子:Consolidation(巩固)——把重复出现的 episodic facts 归纳成一条 semantic memory。第 6 章会详讲。
3.4 Procedural Memory(过程记忆)
定义:Agent 完成任务的操作流程、技能、SOP——“怎么做”的知识。
特点:
- 通常以代码、prompt template、playbook 形式存在
- 跨任务复用
- 可以从成功案例中”沉淀”出来,也可以由人类预写
例子:
- “处理退款请求的 5 步 SOP”
- “调用 X API 时必须先 auth、再 query、最后 logout”
- “代码生成时,先读 imports → 写函数签名 → 写实现 → 写测试”
工程实现:
- LLM 的 system prompt(最朴素的 procedural memory)
- 工具/函数库(每个 tool 即一种程序)
- ACE / LangMem 中可被 agent 自动更新的 instructions
- Voyager(Minecraft agent)的 skill library
🍎 趋势:可演化的 Procedural Memory——2025 年的 ACE(Agentic Context Engineering)论文展示 Agent 可以自我修改 system prompt(被誉为”agent 的微调”)。
4. 一个完整例子:客服退货请求
把四类 Memory 串起来看一个具体场景:
┌─────────────────────────────────────────────────────────┐
│ User: 我想退掉上周买的咖啡机,不好用 │
└─────────────────────────────────────────────────────────┘
【Working Memory(当前 cycle)】
- 当前消息: "我想退掉..."
- Agent 临时变量: { intent: "refund", tone: "negative" }
【Episodic Memory(检索)】
匹配: "2026-04-28 用户购买 SKU-coffee-pro,金额 ¥1299"
"2026-05-01 物流签收"
【Semantic Memory(检索)】
匹配: { user_id: 123, lifetime_value: ¥8500, vip_tier: gold,
preferences: { return_method: "上门取件" } }
【Procedural Memory(应用)】
SOP: refund_v3
1. 验证订单存在 → ✓
2. 验证签收时间 < 7 天 → ✓
3. VIP 用户走快速通道 → ✓(查 semantic)
4. 询问退款原因(简短)
5. 安排上门取件(查 semantic 偏好)
6. 标记 case,写回 episodic
┌─────────────────────────────────────────────────────────┐
│ Agent: 已为您发起退款。考虑到您是 Gold 会员,我们已安排 │
│ 明天上午上门取件,无需您寄回。退款将在收到商品后 │
│ 24h 内退回原账户。这次不愉快很抱歉,有什么具体 │
│ 是哪方面体验不好,方便简单告诉我吗? │
└─────────────────────────────────────────────────────────┘
【写回】
Episodic: "2026-05-04 用户 123 发起退款 SKU-coffee-pro,
原因待补充(已询问)"
Semantic: 暂不更新(等用户回复后判断要不要新增"对咖啡机品类不满")
四类 Memory 各司其职、协同工作——这就是真正的 Agentic Memory System。
5. Memory in the Age of AI Agents:三维度法
CoALA 给出”功能”分类,2025 年的最新综述 Memory in the Age of AI Agents(arXiv 2512.13564)更进一步,从三个正交维度描述任意一个 Memory 系统:
5.1 Forms(形式)— “记忆物理上是什么”
| 形式 | 物理介质 | 例子 |
|---|---|---|
| Token-level | 文本 / JSON | Mem0 / Letta 的事实文本 |
| Parametric | 模型权重 | LoRA 微调后嵌入用户偏好 |
| Latent | 中间向量 / KV cache | Cached prefix、压缩 latent state |
🌟 趋势:2025 年开始出现”hybrid form”——把高频访问的 fact 留 token 形式,把稳定的群体偏好烧入 parametric。
5.2 Functions(功能)— “记忆做什么用”
| 功能 | 对应 CoALA |
|---|---|
| Factual | Semantic |
| Experiential | Episodic + Procedural |
| Working | Working |
⭕ 注意综述把 Episodic 和 Procedural 合并成 Experiential(强调”经验”维度),颗粒度比 CoALA 略粗。
5.3 Dynamics(动态)— “记忆怎么演化”
| 阶段 | 关键问题 |
|---|---|
| Formation(形成) | 从 raw 数据怎么变成结构化 memory? |
| Evolution(演化) | 如何更新、合并、推翻、衰减? |
| Retrieval(检索) | 如何在合适时机拿出合适的 memory? |
把这三维度套到任何框架,都能给出一份精确的”画像”:
| 框架 | Forms | Functions | Dynamics 强项 |
|---|---|---|---|
| Mem0 | Token | Factual + Experiential | Evolution(自动 dedup/merge) |
| Letta | Token + Latent(prefix cache) | All four | Formation + Retrieval |
| Zep / Graphiti | Token + KG | Factual + Experiential | Evolution(bi-temporal) |
| ACE | Token(prompt) | Procedural | Evolution(self-edit) |
6. 人类记忆神经科学的类比
🧠 这套分类法不是凭空想的——它直接对应人类大脑的解剖学结构。
| 人脑结构 | 主要负责 | Agent 对应 |
|---|---|---|
| 海马体(hippocampus) | 短期编码、新事件巩固 | Episodic Memory + Consolidation 算子 |
| 大脑皮层(neocortex) | 长期事实、语义网络 | Semantic Memory(KG) |
| 小脑(cerebellum)+ 基底神经节 | 程序性技能、运动模式 | Procedural Memory |
| 前额叶工作记忆环路 | 当前任务的活跃信息 | Working Memory |
| 遗忘机制 | 突触修剪、Ebbinghaus 曲线 | Decay / Forgetting 策略 |
| 睡眠中的记忆巩固 | episodic → semantic 的离线转换 | Reflection / 离线 batch consolidation |
🍎 HippoRAG 论文的核心:用图算法(Personalized PageRank)模拟海马体的”模式分离 + 模式补全”机制,用于多跳检索。 🍎 MemoryBank 论文的核心:把 Ebbinghaus 遗忘曲线 直接搬到向量库的衰减权重里。 🍎 A-MEM 论文的核心:借用人类的 Zettelkasten 卡片盒方法(Niklas Luhmann 的笔记法),让记忆之间自动建立连接并演化。
当下最前沿的 Agent Memory 设计,几乎都借了人类记忆/认知科学的某一种机制。理解这些类比,论文读起来会顺畅很多。
7. 不同应用对 Memory 的偏好
不是所有应用都需要全部四类 Memory。下表是一份实战偏好对照:
| 应用类型 | 主导 Memory | 次要 Memory | 典型设计 |
|---|---|---|---|
| Personal Assistant(Siri-like) | Semantic | Episodic | 偏好库 + 历史回溯 |
| Customer Service Agent | Semantic + Episodic | Procedural(SOP) | 用户档案 + 工单历史 + 流程引擎 |
| SWE / Code Agent(Cursor / Devin) | Procedural | Episodic(成功 trace) | 工具技能库 + 历史 PR/commit |
| Game / RPG NPC | Episodic + Procedural | Semantic(人格设定) | Memory Stream + Reflection |
| Scientific Research Agent | Semantic(带不确定性) | Procedural(实验流程) | KG + uncertainty tracking |
| Multi-user SaaS(教育/医疗) | Semantic 强 user 隔离 | Episodic | 多租户 namespace |
| Multi-Agent 协作(团队) | Shared Semantic | Episodic per-agent | G-Memory 三层图 |
🌟 设计 Agent 的第一步:先确定属于哪一类应用,再决定四类 Memory 的优先级。这能避免”什么都做但什么都做不好”的工程灾难。
✅ 自我检验清单
- CoALA 四分:能不看资料默写 Working / Episodic / Semantic / Procedural 的定义和典型例子
- 边界识别:给 5 条具体信息(“用户喜欢辣”、“昨天点了麻辣火锅”、“如何处理退款”、“当前对话历史”等),能正确归类
- 客服例子:能复述四类 Memory 在退货请求中如何协同
- 三维度法:能用 Forms × Functions × Dynamics 描述 Mem0 / Letta / Zep
- 神经科学类比:能讲清海马体 / 皮层 / 小脑 / 前额叶各对应哪类 Memory
- HippoRAG / MemoryBank / A-MEM 启发:能说出每个论文借鉴了哪条神经科学/认知科学原理
- 应用偏好:能为”Cursor 这种代码 Agent”和”小红书种草 Agent”给出不同的 Memory 优先级
- 反直觉:解释为什么”游戏 NPC 比通用助理更看重 Procedural Memory”
📚 参考资料
论文
- CoALA: Cognitive Architectures for Language Agents (Sumers et al., 2023):arXiv 2309.02427
- Memory in the Age of AI Agents (2025):arXiv 2512.13564
- A Survey on the Memory Mechanism of LLM-based Agents (TOIS 2025):ACM 链接
- Generative Agents (Park et al., 2023):arXiv 2304.03442 —— Memory Stream + Reflection 的灵感来源
- HippoRAG (Gutiérrez et al., 2024):海马体启发
- MemoryBank (Zhong et al., 2023):Ebbinghaus 曲线
- A-MEM (Xu et al., NeurIPS 2025):arXiv 2502.12110 —— Zettelkasten 启发
神经科学与认知科学背景(选读)
- Tulving (1972) Episodic and Semantic Memory —— 这一对名词的鼻祖论文
- Squire (1992) Memory and Brain Systems —— Procedural / Declarative 划分的经典综述
- Niklas Luhmann’s Zettelkasten —— A-MEM 借鉴的笔记方法学
框架文档
- LangGraph Memory Overview:https://docs.langchain.com/oss/python/langgraph/memory
- LangMem 三类 Memory 工具:LangChain 官方
- Letta Memory Architecture Docs:github.com/letta-ai/letta