第 2 章 智能体记忆核心概念 本章不碰复杂配置,只建立三个心智模型:为什么需要结构化记忆、memU 的三层架构、写入与读取如何分工。 2.1 大模型的「失忆症」 纯 LLM 对话存在天然缺陷: 问题 | 表现 | 后果 上下文窗口有限 | 长对话被截断 | 早期信息丢失 无持久状态 | 会话结束即忘 | 无法跨天连续服务 Token 成本高 | 每次重读全文 | 7×24 在线不经济 难以审计 | 黑盒 prompt | 无法回答「它凭什么这么答」 工业界常见补救方案: memU 属于方案 D 的进化:不是简单存向量,而是编译成可浏览、可排序、可导出的记忆树。 2.2 「文件系统即记忆」 memU 的核心隐喻:记忆像文件系统一样组织。
本章不碰复杂配置,只建立三个心智模型:为什么需要结构化记忆、memU 的三层架构、写入与读取如何分工。
纯 LLM 对话存在天然缺陷:
| 问题 | 表现 | 后果 |
|---|---|---|
| 上下文窗口有限 | 长对话被截断 | 早期信息丢失 |
| 无持久状态 | 会话结束即忘 | 无法跨天连续服务 |
| Token 成本高 | 每次重读全文 | 7×24 在线不经济 |
| 难以审计 | 黑盒 prompt | 无法回答「它凭什么这么答」 |
工业界常见补救方案:
方案 A:全量塞入 System Prompt → 窗口不够、成本爆炸 方案 B:向量 RAG → 片段化、缺乏主题结构 方案 C:外部 KV / 数据库 → 需人工建模「记什么」 方案 D:memU 结构化工作区 → 自动提取 + 分层 + 可追溯
memU 属于方案 D 的进化:不是简单存向量,而是编译成可浏览、可排序、可导出的记忆树。
memU 的核心隐喻:记忆像文件系统一样组织。
| 文件系统概念 | memU 对应 | 智能体如何使用 |
|---|---|---|
| 挂载点 | Resource | 原始对话、文档、图片 |
| 文件 | MemoryItem | 一条原子事实或偏好 |
| 文件夹 | MemoryCategory | 主题摘要,先读目录再读细节 |
| 符号链接 | CategoryItem | 记忆项与主题的归属关系 |
| 根目录索引 | INDEX / MEMORY / SKILL | 全局导航与技能手册 |
这种设计带来三个工程优势:
memU 的数据自底向上分为三层(详见第 3 章):
┌─────────────────────────────────────────┐ │ Layer 3: MemoryCategory(主题文件夹) │ ← 宽泛查询、紧凑上下文 │ 例:user_preferences, project_goals │ ├─────────────────────────────────────────┤ │ Layer 2: MemoryItem(原子记忆文件) │ ← 精确事实、偏好、技能 │ 类型:profile | event | knowledge | │ │ behavior | skill | tool │ ├─────────────────────────────────────────┤ │ Layer 1: Resource(原始来源) │ ← 溯源、重读原文 │ 模态:conversation | document | │ │ image | video | audio │ └─────────────────────────────────────────┘
检索方向是自上而下:先匹配 Category → 再筛 Item → 必要时回到 Resource 读原文。这与传统 RAG「扁平向量 Top-K」形成对比。
LLM 在 memorize 阶段会把内容分类为以下类型:
| 类型 | 含义 | 典型示例 |
|---|---|---|
profile |
用户画像、稳定偏好 | 「用户喜欢简洁文档」 |
event |
带时间的事件 | 「周会上决定简化 onboarding」 |
knowledge |
领域事实 | 「API 限流为 100 req/min」 |
behavior |
行为模式 | 「用户通常在晚上提问」 |
skill |
可复用技能 | 「写 Python 时先跑类型检查」 |
tool |
工具使用经验 | 「改配置前先全库搜索」 |
类型化提取的价值:检索时可以按场景过滤——编码智能体多召回 tool / skill,客服助手多召回 profile / event。
memorize()把原始来源编译进记忆工作区,内部流水线(第 5 章详解):
Ingest → Preprocess → Extract → Organize → Persist │ │ │ │ │ 存Resource 解析/描述 LLM提取 分类+向量 写数据库
retrieve()按查询召回相关上下文,内部流水线(第 6 章详解):
Route → Category Recall → Sufficiency? → Item Recall → Resource Recall → Build Response │ │ │ │ │ 意图路由 主题层匹配 够了吗? 细项层 原文层
两种检索策略:
| 策略 | 核心机制 | 适用 |
|---|---|---|
rag |
向量相似度 + 可选 LLM 路由 | 低延迟、大规模 |
llm |
LLM 直接阅读并排序 ID | 深度语义、小中规模 |
memU 从设计之初支持多租户 / 多用户 / 多智能体隔离:
user={"user_id": "..."} 绑定作用域where={"user_id": "..."} 过滤这意味着:同一套 MemoryService 实例可以服务多个用户,只要 where 正确即可。第 4 章会讲如何配置 UserConfig。
| 场景 | 传统 RAG | memU |
|---|---|---|
| 「用户喜欢什么风格?」 | 可能召回无关 chunk | profile 类型 + Category 摘要 |
| 跨会话记住项目决策 | 需手工维护 | event / knowledge 自动提取 |
| 工具调用失败教训 | 难以结构化 | tool 类型专门存储 |
| 多模态(会议录像) | 需额外管线 | 内置 caption / transcribe |
| 可解释性 | 「相似度 0.87」 | 完整溯源链 |
| 成本 | embedding 便宜 | RAG 模式可控;LLM 模式更贵但更准 |
结论:memU 不是要废弃向量检索,而是在其之上增加结构化中间层,让智能体「先知道主题,再找细节」。
自托管版 memU 内部用 Workflow Pipeline 编排各步骤:
PipelineManager 在注册时校验依赖对你而言,公开 API 仍是 memorize() 与 retrieve();Workflow 是「盖在 API 下面的发动机」。
memorize() 编译写入,retrieve() 分层读取。memory_type 覆盖画像、事件、知识、行为、技能、工具。retrieve() 的返回应注入到哪里?(System Prompt?Tool 上下文?)memory_type,各举一条真实例子。下一章:第 3 章 — 数据模型详解。
参见:第 0 章架构图;第 5、6 章流水线细节。