# Memory 管理学习笔记

> L2 工程层 · 最后一块拼图 · 2026-06-28
> 前置：RAG ✅ / CE ✅ / Agent 设计模式 ✅ / Function Calling ✅

---

## 一、定位：Memory 在 Agent 系统中的位置

### 和 CE / RAG 的关系

CE 管「上下文窗口里放什么、怎么放」。信息从哪来？三个入口：

| 来源 | 机制 | 状态 |
|---|---|---|
| 用户当前输入 | 直接进窗口 | — |
| 外部知识库 | **RAG**（检索增强） | ✅ 已学 |
| Agent 自身历史/状态 | **Memory**（记忆系统） | ⬅️ 本文 |

**一句话**：CE 是上下文的总调度，Memory 和 RAG 是上下文的两个上游水源。Memory 管"我记得什么"，RAG 管"我能查到什么"。

---

## 二、记忆的三层模型

业界共识框架（Anthropic、LangChain、扣子底层均类似）：

```
┌──────────────────────────────────────┐
│  上下文窗口（Working Memory）         │  ← 当前推理时可见的全部内容
│  容量：几K~几M tokens，用完即清       │
└──────────┬───────────────────────────┘
           │ 写入/召回
    ┌──────┴──────┐
    │              │
┌───┴────────┐ ┌──┴──────────────┐
│ 短期记忆    │ │ 长期记忆         │
│ 当前会话    │ │ 跨会话持久化     │
│ 对话历史    │ │ 语义检索召回     │
│ 窗口压缩    │ │ 结构化索引       │
└────────────┘ └─────────────────┘
```

### ① 工作记忆 = 上下文窗口本身
- CE 管的那个东西
- 推理时一次性装入，token 烧完就没了
- **核心矛盾**：窗口再大也有限，必须取舍

### ② 短期记忆 = 当前会话内
- 对话历史、中间计算结果、用户刚说过的事
- 问题：会话长了窗口装不下 → **上下文压缩**（摘要替换原文）
- 扣子会自动压缩历史——本质是把长对话摘要成一段文字塞回窗口

### ③ 长期记忆 = 跨会话持久化
- 用户画像、项目进度、决策记录、知识沉淀
- 存储形式：结构化文件、向量数据库、知识图谱
- 取用方式：**语义检索**（向量相似度召回，非关键词匹配）

---

## 三、核心机制

### A. 语义检索（Semantic / Vector Search）

Memory 系统最核心的能力，与 RAG 检索完全同构：

```
存入：文本 → Embedding 模型 → 向量 → 向量数据库
召回：查询 → Embedding 模型 → 向量 → Top-K 最相似 → 返回原文
```

**关键参数**：
- **Top-K**：召回几条。K 太小漏信息，K 太大塞垃圾进窗口
- **相似度阈值**：低于某分数不召回，避免强行凑数
- **分块策略**：怎么切原文（与 RAG Chunking 完全复用）

### B. 摘要压缩（Summarization）

```
原始对话（5000 tokens）→ LLM 摘要 → 「用户问了X，Agent 回答了Y，结论是Z」（200 tokens）
```

**代价**：丢失细节。摘要可能漏掉随口提但后来重要的信息。
**缓解**：分层压缩——先压中等粒度，再压粗粒度，保留多层。

### C. 结构化索引（扣子实战方案）

```
即时层（常驻上下文）→ 手动精选，体积严格受限
近中期层（索引+文件）→ 按需加载，读完即弃
长期层（语义检索）→ 全量向量化，query 时召回
```

这是**结构化分层 + 语义兜底**的混合策略，比纯向量检索更可控。

---

## 四、扣子记忆机制对照

| 理论层 | 扣子实现 | 用户感知 |
|---|---|---|
| 工作记忆 | 上下文窗口（模型 token 上限） | 聊太久了会"忘"前面 |
| 短期记忆 | 自动上下文压缩 + 会话摘要 | 中断重开后给 Summary |
| 长期记忆 | MEMORY.md + memory_search（语义检索） | "之前那个XX项目怎么样了"能回忆 |

**扣子 memory_search 本质**：所有历史对话和文件做 Embedding 存入向量库，query 时语义相似度捞最相关片段。

---

## 五、与 CE 的串联

Memory 直接贡献 CE 九种 Context 成分中的三种：

| Context 成分 | 由 Memory 提供 |
|---|---|
| State (History) | 短期记忆：对话摘要 |
| Long-term Memory | 长期记忆：USER.md、MEMORY.md |
| Retrieved Knowledge | RAG 检索结果 |

**完整链条**：

```
Memory 系统（存+取）→ CE 调度（选+排）→ 上下文窗口 → LLM 推理
```

CE 想"窗口里放什么"，Memory 想"能从过去拿到什么放进去"——两块拼在一起就是 Agent 的完整上下文供给链。

---

## 六、前沿方向

| 方向 | 一句话 | 代表 |
|---|---|---|
| MemGPT / Letta | 记忆管理做成 OS 级虚拟内存分页——窗口=物理内存，外存=硬盘，自动换页 | UC Berkeley |
| Contextual Retrieval | 检索时给每条 chunk 加上下文前缀再 Embedding，大幅提升召回精度 | Anthropic |
| Graph Memory | 不存向量，存知识图谱（实体-关系-实体），适合多跳推理 | — |

---

## 七、关键结论

1. **Memory 是 CE 的上游**：没有记忆系统，CE 无米下锅
2. **三层模型是工程共识**：Working / Episodic / Semantic 覆盖所有记忆需求
3. **语义检索是核心能力**：与 RAG 完全同构，一套 Embedding 基础设施复用
4. **扣子实现了完整三层**：即时层（常驻文件）+ 近中期层（索引文件）+ 长期层（memory_search）
5. **L2 工程层至此全部通关**：RAG ✅ → CE ✅ → Memory ✅ → FC ✅ → Agent 设计模式 ✅
