大模型记忆系统
🧠 AI Agent 记忆系统:新手完全入门教程
本教程面向零基础/刚入门 AI Agent 开发的读者,从"为什么需要记忆"讲到"怎么选型落地",读完即可建立完整认知。
目录
一、记忆系统是什么?为什么需要它?
1.1 一个生活化的类比
想象你有一位私人助理,但每天早上醒来都完全失忆——你不记得自己叫什么、昨天安排了什么、老板喜欢什么口味的咖啡。你每天都要从头自我介绍。
这就是大语言模型(LLM)的原生状态。GPT-4、Claude、DeepSeek……它们本质上是无状态(Stateless) 的:每次 API 调用都是一次全新的计算,关掉对话一切归零。
1.2 三大痛点
| 痛点 | 具体表现 | 后果 |
|---|---|---|
| 成本爆炸 | 聊 100 轮后,每次调用带几万 token 历史 | 费用线性增长,不可持续 |
| 注意力衰减 | 模型对长 context 中早期信息关注度下降 | 越聊越"不在意"前面说过的话 |
| 跨会话失效 | 用户第二天来,上下文全没了 | 无法提供连续、个性化体验 |
1.3 记忆系统的定义
记忆系统 = 让 AI 在对话之外,持久化地"记住"关键信息,并在需要时精准召回的中间层。
它不是模型本身的能力,而是外挂的一套工程架构,负责:
- 📥 写入:从对话中提取值得记住的信息
- 💾 存储:持久化到数据库/向量库/图谱
- 🔍 检索:在需要时把相关记忆召回
- 🗑️ 遗忘:清理过时或无关的记忆
一句话总结:没有记忆系统,Agent 只是一个"高级问答机器人";有了记忆系统,它才能成为真正的"智能体"。
二、Agent 的五种记忆类型
借鉴认知科学对人类记忆的分类,当前主流(Anthropic、OpenAI、Google DeepMind 等团队均采用)将 Agent 记忆分为五层:
📋 总览表
| 记忆类型 | 类比 | 存什么 | 持续多久 | 工程实现 |
|---|---|---|---|---|
| ① 工作记忆 | 你正在"想"的事 | 当前对话上下文 | 任务结束即清除 | Context Window / AgentState |
| ② 语义记忆 | 你知道的"知识" | 用户偏好、事实 | 长期 | 向量数据库 / KV 存储 |
| ③ 情节记忆 | 你经历的"故事" | 具体事件、对话片段 | 中长期 | 时序图谱 / 日志 |
| ④ 程序性记忆 | 你的"肌肉记忆" | 操作流程、SOP | 永久 | Prompt 模板 / 工作流 |
| ⑤ 感知记忆 | 刚看到的画面 | 原始输入缓冲 | 毫秒~秒级 | 输入流 / 缓冲区 |
逐个详解
① 工作记忆(Working Memory)
- 是什么:Agent 当前正在处理的信息,相当于"脑子里正在想的事"。
- 例子:你让 Agent 查天气,它先搜城市代码→调天气 API→组织回答。这中间的临时状态就是工作记忆。
- 特点:容量有限(受 token 限制)、任务结束即清除。
- 实现:LangGraph 的
AgentState、对话消息列表。
② 语义记忆(Semantic Memory)
- 是什么:关于世界的"事实和概念",不绑定具体时间。
- 例子:“用户叫小明”“用户是 Python 工程师”“用户不吃辣”。
- 特点:长期有效、可更新。
- 实现:向量数据库(存 embedding)、键值对存储。
③ 情节记忆(Episodic Memory)
- 是什么:具体发生过的事件,带有时间戳。
- 例子:“上周三用户讨论了项目 A 的需求”“昨天用户修改了偏好设置”。
- 特点:有时间线、可按时间回溯。
- 实现:时序知识图谱(如 Zep 的 Graphiti)、带时间戳的日志。
④ 程序性记忆(Procedural Memory)
- 是什么:怎么做某件事的"技能",类似骑自行车不用想先踩哪只脚。
- 例子:调用某个 API 的步骤、复杂工作流的执行顺序。
- 特点:一旦学会很少改变。
- 实现:Prompt 模板、规则引擎、工作流图(DAG)。
⑤ 感知记忆(Sensory Memory)
- 是什么:最原始的输入缓冲,几乎不被显式实现。
- 例子:语音输入的原始音频流、图片的原始像素。
- 特点:极短暂,通常直接传入下一层处理。
- 实现:输入缓冲区、流式处理管道。
💡 新手重点:日常开发中最常打交道的是前三种——工作记忆、语义记忆、情节记忆。
三、记忆系统的通用工作流程
不管用哪个框架,记忆系统的核心流程都是同一个闭环:
┌─────────────────────────────────────────────────────────┐
│ │
│ 用户输入 ──→ 【提取】──→ 【存储】──→ 【检索】──→ 注入 Prompt
│ │ │ │ │
│ ▼ ▼ ▼ ▼
│ 从对话中 持久化到 按相关性 拼接到当前
│ 抽取关键信息 数据库/向量库 召回记忆 上下文中
│ │
│ ──→ 【遗忘/更新】(定期清理过时信息) │
│ │
└─────────────────────────────────────────────────────────┘
四步拆解
| 步骤 | 做什么 | 关键技术 |
|---|---|---|
| 提取(Extract) | 从对话中识别值得记住的信息 | LLM 摘要、NER、规则过滤 |
| 存储(Store) | 将信息持久化 | 向量数据库、图数据库、SQLite |
| 检索(Retrieve) | 根据当前问题找到相关记忆 | 语义相似度搜索、图遍历、关键词匹配 |
| 注入(Inject) | 将召回的记忆拼入 Prompt | 模板拼接、权重排序 |
四、主流记忆框架逐一拆解
4.1 Mem0 —— 轻量入门首选
| 项目 | 说明 |
|---|---|
| GitHub Stars | 60,000+(YC 孵化) |
| 一句话定位 | 插拔式语义记忆层,5 分钟接入 |
| 核心原理 | 自动分析对话 → 提取事实/偏好 → 存入向量数据库 → 语义检索召回 |
| 存储架构 | 向量数据库 + 知识图谱 + 键值数据库(混合) |
| 优点 | 接入极快、API 简洁、生态成熟、支持记忆导出 |
| 缺点 | 时序能力弱(问"上周说了什么"不太行)、缺乏自动归纳 |
| 适合谁 | 想快速给 Agent 加记忆、不想搭复杂基础设施的开发者 |
最简代码示例:
from mem0 import Memory
m = Memory()
# 添加记忆
m.add("我喜欢喝美式咖啡,不加糖", user_id="xiaoming")
# 检索记忆
results = m.search("用户的咖啡偏好", user_id="xiaoming")
print(results) # → "喜欢喝美式咖啡,不加糖"
4.2 Zep —— 时序记忆专家
| 项目 | 说明 |
|---|---|
| 核心引擎 | Graphiti(动态、时间感知的知识图谱) |
| 一句话定位 | 基于情节图谱的记忆框架,擅长时间线问题 |
| 核心原理 | 三层 Subgraph 架构 |
| 优点 | 时序推理强、能回答"上周/上个月"类问题 |
| 缺点 | 超长周期(跨季度)记忆支持有限、部署略重 |
| 适合谁 | 需要理解事件时间线的对话系统 |
三层架构:
┌─────────────────────────────────────┐
│ Episodic Memory(情节层) │ ← 原始对话,保留时间戳
├─────────────────────────────────────┤
│ Semantic Memory(语义层) │ ← 抽取实体与关系
├─────────────────────────────────────┤
│ Community Memory(社区/归纳层) │ ← 高层摘要与洞察
└─────────────────────────────────────┘
典型能力:
- ✅ “用户上周三讨论了什么?”
- ✅ “最近一个月用户偏好有什么变化?”
- ❌ “半年前那次对话的细节”(超出能力边界)
4.3 LangMem —— LangChain 生态原生方案
| 项目 | 说明 |
|---|---|
| 一句话定位 | LangChain/LangGraph 的"亲儿子"记忆模块 |
| 核心原理 | 区分工作记忆(当前会话)和长期存储(跨会话) |
| 两种模式 | Hot Path(主动调用)/ Background(后台自动) |
| 优点 | 与 LangGraph 零摩擦集成、Namespace 灵活隔离 |
| 缺点 | 强绑定 LangChain 生态、非 LangChain 项目接入代价高 |
| 适合谁 | 已经/计划使用 LangChain 技术栈的团队 |
两种记忆模式对比:
| 模式 | 触发方式 | 类比 | 适用场景 |
|---|---|---|---|
| Hot Path | Agent 主动调用 manage_memory 工具 |
你主动记笔记 | 需要精确控制存什么 |
| Background | 系统后台自动从对话中提取 | 潜意识自动记忆 | 不想手动管理、全自动 |
最简代码示例(Hot Path):
from langmem import create_memory_manager
manager = create_memory_manager(model="openai/gpt-4o")
# Agent 在对话中主动存储记忆
await manager.ainvoke({
"action": "store",
"content": "用户是一名前端工程师,偏好 TypeScript",
"namespace": ("user", "xiaoming")
})
# 检索记忆
memories = await manager.ainvoke({
"action": "search",
"query": "用户的技术栈偏好",
"namespace": ("user", "xiaoming")
})
4.4 SQLite —— 轻量持久化基石
| 项目 | 说明 |
|---|---|
| 一句话定位 | 零配置本地数据库,常作为记忆系统的底层存储 |
| 核心用途 | Checkpoint(检查点)、会话历史、结构化元数据 |
| 优点 | 无需额外服务、单文件部署、Python 内置支持 |
| 缺点 | 不具备语义检索能力、不适合大规模并发 |
| 适合谁 | 本地开发、原型验证、作为其他框架的存储后端 |
在记忆系统中的角色:
┌──────────────────────────────────────────┐
│ 记忆框架(Mem0 / Zep / LangMem) │
│ ↕ │
│ 存储层(SQLite / PostgreSQL / Redis)│
└──────────────────────────────────────────┘
SQLite 通常不单独作为"记忆框架",而是作为存储引擎或Checkpointer(保存 Agent 执行状态,支持断点续跑)。
4.5 TiMem / MemOS —— 前沿方案(了解即可)
| 框架 | 特色 | 成熟度 |
|---|---|---|
| TiMem | 五层时序记忆树,模拟人脑记忆巩固,Token 最省 | 较新,适合长期陪伴类应用 |
| MemOS | 记忆操作系统概念,统一管理所有记忆类型 | 学术前沿,生产落地少 |
新手阶段了解概念即可,暂不建议直接上手。
五、框架横向对比与选型
📊 一表对比
| 维度 | Mem0 | Zep | LangMem | SQLite |
|---|---|---|---|---|
| 上手难度 | ⭐(最简单) | ⭐⭐⭐ | ⭐⭐ | ⭐ |
| 时序能力 | 弱 | 强 | 中 | 无 |
| 语义检索 | ✅ | ✅ | ✅ | ❌ |
| 自动归纳 | 弱 | 中 | 中 | ❌ |
| 生态绑定 | 无 | 无 | 强绑 LangChain | 无 |
| 部署复杂度 | 低 | 中 | 低(在LC内) | 极低 |
| 适用规模 | 个人~中型 | 中型~企业 | 中型 | 原型/本地 |
🌳 选型决策树
你需要给 Agent 加记忆?
│
├─ 已经在用 LangChain/LangGraph?
│ └─ YES → 用 LangMem(零摩擦)
│
├─ 需要回答时间线相关问题?("上周聊了什么")
│ └─ YES → 用 Zep
│
├─ 只想快速跑通 Demo / 存用户偏好?
│ └─ YES → 用 Mem0
│
├─ 只是本地开发、存个会话状态?
│ └─ YES → 用 SQLite 做 Checkpoint
│
└─ 需要跨月/跨年的超长期记忆?
└─ 研究 TiMem / 自研分层方案
六、新手学习路线推荐
🎯 推荐顺序(由浅入深)
| 阶段 | 学什么 | 时间建议 | 目标 |
|---|---|---|---|
| 第 1 步 | 理解五种记忆类型 + 通用流程 | 1~2 天 | 建立概念框架 |
| 第 2 步 | 动手跑通 Mem0 的 Quick Start | 1 天 | 体验"5 分钟加记忆" |
| 第 3 步 | 学习 LangChain 的短期记忆(AgentState) | 2~3 天 | 理解工作记忆的实现 |
| 第 4 步 | 学习 LangMem 的 Hot Path / Background 模式 | 2~3 天 | 掌握长期记忆的两种范式 |
| 第 5 步 | 了解 Zep 的三层图谱架构 | 1~2 天 | 理解时序记忆的设计思路 |
| 第 6 步 | 用 SQLite 实现一个简单的 Checkpoint | 1 天 | 理解持久化与断点续跑 |
| 第 7 步 | 综合实战:搭一个带记忆的对话 Agent | 3~5 天 | 融会贯通 |
📚 推荐学习资源
| 资源 | 链接/说明 |
|---|---|
| LangMem 官方 Quick Start | langchain-ai.github.io/langmem/hot_path_quickstart/ |
| Mem0 GitHub + Docs | github.com/mem0ai/mem0 |
| Zep 官方文档 | docs.getzep.com |
| 菜鸟教程 - Agent 记忆系统设计 | runoob.com/ai-agent/ai-agent-memory-system-design.html |
| 掘金 - 2026 记忆框架横评 | 搜索"Mem0 Zep LangMem TiMem 横评" |
🏆 新手第一个项目建议
用 Mem0 做一个"记住你喜好的聊天机器人"
# 完整示例:10 行代码实现有记忆的对话
from mem0 import Memory
from openai import OpenAI
m = Memory()
client = OpenAI()
def chat(user_input, user_id):
# 1. 存储本轮对话中的关键信息
m.add(user_input, user_id=user_id)
# 2. 检索相关记忆
memories = m.search(user_input, user_id=user_id)
# 3. 拼接记忆到 Prompt
context = "\n".join([mem["memory"] for mem in memories])
# 4. 调用 LLM
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": f"你了解用户的这些信息:\n{context}"},
{"role": "user", "content": user_input}
]
)
return response.choices[0].message.content
运行效果:
你:我叫小明,是一名后端工程师,喜欢喝美式咖啡
AI:你好小明!作为后端工程师,你平时用什么语言比较多?
(第二天新对话)
你:推荐一杯咖啡吧
AI:根据你之前的偏好,推荐一杯不加糖的美式咖啡 ☕
七、常见误区与避坑
❌ 误区 1:“上下文窗口够大就不需要记忆系统”
哪怕 2M token 的窗口,也只是推迟问题。成本更高、速度更慢、关键细节仍会遗漏。工程上仍需要"写入→检索→老化→治理"的完整闭环。
❌ 误区 2:“记忆 = 把对话历史存起来”
真正的记忆系统需要提取、归纳、去重、更新。不是把所有对话原样塞进数据库,而是提炼出"用户喜欢什么"“发生了什么关键事件”。
❌ 误区 3:“一个框架解决所有问题”
实际生产中,往往是组合使用:
- SQLite/Redis → 存会话状态(Checkpoint)
- Mem0/Zep → 存长期用户画像
- Prompt 模板 → 存程序性记忆(SOP)
❌ 误区 4:“新手直接上最复杂的方案”
先用最简单的方案跑通 → 遇到瓶颈 → 再升级。不要一上来就搞五层记忆树。
✅ 正确心态
没有最好的框架,只有最适合你场景的框架。 选错了后期迁移成本很高,所以先想清楚需求再动手。
总结:一张图记住全部内容
┌─────────────────────────────┐
│ AI Agent 记忆系统 │
└──────────────┬──────────────┘
│
┌──────────────────────┼──────────────────────┐
│ │ │
┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐
│ 五种记忆类型 │ │ 通用流程 │ │ 主流框架 │
├─────────────┤ ├─────────────┤ ├─────────────┤
│ ① 工作记忆 │ │ 提取 │ │ Mem0 │
│ ② 语义记忆 │ │ 存储 │ │ Zep │
│ ③ 情节记忆 │ │ 检索 │ │ LangMem │
│ ④ 程序性记忆 │ │ 注入 │ │ SQLite │
│ ⑤ 感知记忆 │ │ 遗忘 │ │ TiMem │
└─────────────┘ └─────────────┘ └─────────────┘
📌 最后的建议:如果你是纯新手,从 Mem0 开始。5 分钟跑通第一个 Demo,建立直觉后再深入其他框架。记忆系统不难,难的是想清楚"我的 Agent 到底需要记住什么"。
祝学习顺利!🚀
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)