Agent 聊着聊着就忘了?记忆管理如何突破 Context Window
Agent 多轮对话后,前面的关键信息被”挤”出 Context Window,开始答非所问。如何让 Agent 记住重要信息、忘记无关信息?
记忆管理通过短期记忆(STM)、长期记忆(LTM)、向量库等分层架构,突破 Context Window 限制。本篇解析如何设计”该记的记、该忘的忘”的记忆系统。
记忆管理 = 该记的记(重要信息存 LTM)、该忘的忘(压缩/剪枝)、该查的查(需要时从知识库检索)。Context Window 有限、成本高、全塞进去会拖慢推理——分层架构(STM + LTM + ExM)解决这三个问题。
🧠 一、Agent 的分层记忆架构
Agent 组成与记忆在整体架构中的位置详见第 6 篇。本篇深入解析记忆的分层架构。像人脑:短期记当前在做的事,长期存重要经历,外部需要时查资料。Agent 同理:
- 短期记忆(STM):记住当前对话和任务的关键信息
- 长期记忆(LTM):保存历史经验和用户偏好
- 外部知识(ExM):需要时从知识库检索
1.1 三层记忆架构详解
| 层次 | 概念比喻 | 存储介质 | 内容与功能 | 核心挑战 | 简单理解 |
|---|---|---|---|---|---|
| 短期记忆 (STM) | 大脑 RAM | Context Window (Prompt) | 当前会话的 Thought / Action / Observation 序列,确保任务连贯性 | Token 长度限制:容易溢出 | 记住当前正在做的事情 |
| 长期记忆 (LTM) | 硬盘 Hard Drive | 向量数据库 / 知识图谱 | 历史经验、用户偏好、项目进度摘要 | 高效检索:如何召回相关信息 | 保存过去的重要经历 |
| 外部知识 (ExM) | 百科全书 | RAG 知识库 / API 数据 | 事实性、专业性、非个人化信息 | 知识时效性:需要定期更新 | 需要时查阅资料 |
1.2 生活化理解:三层记忆如何工作
场景:客服 Agent 处理多轮咨询——用户先问退换货政策,再问某订单状态,最后要求退款。Agent 需要记住对话上下文(STM)、用户历史偏好(LTM)、政策文档(ExM)。
短期记忆(STM):
记住当前任务的关键信息:
- “我正在查询用户数据”
- “查询成功,返回了 1000 条记录”
- “现在需要生成报告”
就像你正在看书时,记住当前页的内容。
长期记忆(LTM):
保存重要的历史信息:
- “用户偏好:喜欢 PDF 格式的报告”
- “上次查询时遇到了数据库连接问题”
- “项目进度:已完成 80%”
就像你记住过去学过的知识。
外部知识(ExM):
需要时从知识库检索:
- “数据库查询的最佳实践”
- “报告生成的模板”
- “API 文档”
就像你查字典或查百科。
1.3 三层记忆如何协作
工作流程:
1. 用户输入任务 |
💡 关键理解:
- STM:保证当前任务的即时连贯(就像工作记忆)
- LTM:持久化经验,支持跨任务学习(就像长期记忆)
- ExM:提供事实性与专业知识(就像查阅资料)
三者结合,确保 Agent 既能记住重要信息,又能智能遗忘不重要的细节。
💾 二、短期记忆 (STM) 的管理策略
Context Window 有限,写满了就要擦——擦哪些?留哪些? 三种策略:滑动窗口(只留最近 N 轮)、对话摘要(压缩成摘要)、重要性剪枝(只留关键信息)。
2.1 Sliding Window(滑动窗口)
只保留最近 N 轮,旧的自动丢弃。简单粗暴,但可能丢掉关键信息。
机制:
保留最近 N 轮 Thought / Action / Observation,旧信息被丢弃或迁移到 LTM
生活例子:
就像你的手机通知栏:
- 只显示最近 10 条通知
- 新的通知来了,最旧的通知被挤掉
- 简单直接,但可能丢失重要信息
适用场景:
- 对话轮次有限
- 任务步骤明确
- 不需要长期上下文
代码示例:
# 滑动窗口(伪代码) |
2.2 Conversational Summarization(对话摘要)
LLM 定期把最旧内容摘要成短文本,保留关键信息——像读书笔记,记结论不记全文。价值:
- 节省 Token 空间
- 保留关键主题和结论
- 不会丢失重要信息
工程实现:
每 K 轮循环调用 Summarizer LLM,生成更新后的记忆片段
代码示例:
# 对话摘要(伪代码) |
2.3 Importance-Based Pruning(基于重要性的剪枝)
为每段记忆打重要性得分,Context 满载时优先移除低分——像手机相册,空间不足时先删截图。评分方式:
通过小型分类模型或 LLM Prompt,根据与核心任务目标的关联性评分
代码示例:
# 基于重要性的剪枝(伪代码) |
2.4 三种策略对比
| 策略 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 滑动窗口 | 简单直接,实现容易 | 可能丢失重要信息 | 对话轮次有限,任务简单 |
| 对话摘要 | 保留关键信息,节省空间 | 需要额外的 LLM 调用,成本较高 | 需要长期上下文,任务复杂 |
| 重要性剪枝 | 智能选择,保留重要信息 | 评分准确性依赖模型 | 需要区分重要/不重要信息 |
选择指南:
- ✅ 简单任务:使用滑动窗口
- ✅ 需要长期上下文:使用对话摘要
- ✅ 需要智能选择:使用重要性剪枝
- ✅ 最佳实践:结合使用(如:滑动窗口 + 重要性剪枝)
🗄️ 三、长期记忆 (LTM) 的存储与检索
LTM 持久化经验与用户画像,核心是高效检索——像硬盘,存得多但要能快速找到。
3.1 存储介质多样性
三种存储方式,各有优势:
1. 向量数据库 (Vector Stores)
简单理解:就像搜索引擎,通过”语义相似性”找到相关内容。
存储内容:
- 历史对话
- Observation(观察结果)
- Thought(思考过程)
检索方式:语义相似性搜索(RAG 基础)
- 把查询转换成向量
- 在向量空间中找最相似的记忆
- 就像”找相似的文章”
适用场景:
- 需要语义检索(如”找相关的历史对话”)
- 非结构化数据(文本、对话)
常见工具:
- Pinecone、Weaviate、Qdrant、Chroma
2. 知识图谱 (Knowledge Graphs)
简单理解: 就像关系数据库,存储实体之间的关系。
存储内容:
- 结构化关系(如用户偏好与项目关联)
- 实体和关系(如”用户A 喜欢 项目B”)
检索方式: 多跳推理(Cypher / SPARQL)
- 通过关系链找到相关信息
- 就像”找朋友的朋友”
适用场景:
- 需要关系推理(如”找用户喜欢的项目”)
- 结构化数据(实体、关系)
常见工具:
- Neo4j、ArangoDB
3. Key-Value / 关系型数据库 (SQL/NoSQL)
简单理解: 就像传统的数据库,通过键值或 SQL 查询。
存储内容:
- 用户配置
- 项目状态
- 任务清单
检索方式: Function Calling 或 Text-to-SQL
- 通过键值查询
- 或通过 SQL 查询
适用场景:
- 需要精确查询(如”查询用户ID=123的配置”)
- 结构化数据(表、字段)
常见工具:
- PostgreSQL、MySQL、MongoDB、Redis
3.2 存储介质选择指南
| 存储介质 | 检索方式 | 适用场景 | 简单理解 |
|---|---|---|---|
| 向量数据库 | 语义相似性搜索 | 非结构化文本、对话历史 | 像搜索引擎,找相似内容 |
| 知识图谱 | 关系推理 | 结构化关系、实体关联 | 像关系数据库,找关联信息 |
| 关系型数据库 | SQL/键值查询 | 结构化数据、精确查询 | 像传统数据库,精确查找 |
选择指南:
- ✅ 文本、对话:使用向量数据库
- ✅ 关系、实体:使用知识图谱
- ✅ 配置、状态:使用关系型数据库
- ✅ 最佳实践:结合使用(如:向量数据库 + 关系型数据库)
3.3 高级检索策略:Contextual Memory Retrieval
不只找”相似”,还要考虑相似性(是否相关)、时效性(是否近期)、重要性(是否关键)。检索公式:
$$\text{Recall Score} = \alpha \cdot \text{Contextual Similarity} + \beta \cdot \text{Recency} + \gamma \cdot \text{Importance}$$
三个维度:
Contextual Similarity(语义相似度)
确保与当前任务相关
- 例如:当前任务是”查询数据库”,优先召回”数据库相关”的记忆
Recency(时效性)
近期事件权重更高
- 例如:昨天的记忆比去年的记忆更重要
Importance(重要性)
关键事件优先召回
- 例如:包含”错误”、”失败”的记忆更重要
实现要点:相似度 + 时效性 + 重要性加权。以下为可选参考实现:
# 高级检索策略(伪代码) |
💡 工程实践:
- 结合多策略排序,提高长期任务的记忆精度和效率
- 根据任务类型调整权重(如:对话任务更重视时效性,知识任务更重视相似度)
🔄 四、记忆管理总线:信息流转机制
完整记忆系统需要一个 Memory Stream 来管理信息流入与流出。
简单理解:
就像工厂的生产线:
- 接收:接收原材料(用户输入、观察结果)
- 处理:加工处理(分块、向量化)
- 存储:保存到仓库(LTM)
- 检索:需要时从仓库取出(检索相关记忆)
- 整合:组装成最终产品(Prompt)
4.1 记忆管理总线的四个组件
1. Perceiver(感知器)
简单理解:
就像”信息接收器”,接收用户输入和观察结果,进行预处理。
功能:
- 预处理用户输入与 Observation
- 进行分块(Chunking)
- 提取关键信息
代码示例:
# Perceiver(伪代码) |
2. Embedding Generator(向量生成器)
简单理解:
就像”翻译器”,把文本转换成向量(数字),方便存储和检索。
功能:
- 将文本转换为向量
- 存入 LTM(向量数据库)
代码示例:
# Embedding Generator(伪代码) |
3. Retrieval Module(检索模块)
简单理解:
就像”图书管理员”,需要时从仓库(LTM)找到相关书籍(记忆)。
功能:
- Planner 启动前,检索 Top K 记忆片段
- 使用高级检索策略(相似度 + 时效性 + 重要性)
代码示例:
# Retrieval Module(伪代码) |
4. Context Refiner(上下文精炼器)
简单理解:
就像”编辑”,把各种信息整合成一篇好文章(Prompt)。
功能:
- 整合 STM 摘要、LTM 检索结果及当前输入
- 形成高效 Prompt 注入 LLM Planner
- 防止”上下文污染”
- 提升 LLM 推理效率
代码示例:
# Context Refiner(伪代码) |
4.2 完整的信息流转流程
流程图:
用户输入 |
代码示例(完整流程):
# 完整的记忆管理总线(伪代码) |
💡 关键理解:
- Perceiver:接收和预处理信息
- Embedding Generator:把文本转换成向量
- Retrieval Module:从 LTM 检索相关记忆
- Context Refiner:整合所有信息,生成高效 Prompt
四个组件协作,实现完整的记忆管理流程。
🔍 总结:Agent 的记忆是自主性的载体
💡 快速回顾:你学到了什么?
- 分层记忆架构:STM(短期记忆)、LTM(长期记忆)、ExM(外部知识)
- 短期记忆管理:滑动窗口、对话摘要、重要性剪枝
- 长期记忆存储:向量数据库、知识图谱、关系型数据库
- 高级检索策略:综合考虑相似度、时效性、重要性
- 记忆管理总线:Perceiver → Embedding → Storage → Retrieval → Refiner
三层记忆的核心作用
| 层次 | 作用 | 简单理解 |
|---|---|---|
| STM | 保证当前任务的即时连贯 | 记住当前正在做的事情 |
| LTM | 持久化经验,支持跨任务学习 | 保存过去的重要经历 |
| ExM | 提供事实性与专业知识 | 需要时查阅资料 |
关键设计原则
- 智能遗忘:不是记住所有信息,而是记住重要的,忘记不重要的
- 高效检索:不是简单存储,而是能够快速找到相关信息
- 分层管理:不是单一存储,而是分层存储,各司其职
- 动态更新:不是静态存储,而是动态更新,保持时效性
实战建议
- 从简单开始:先实现滑动窗口,再逐步优化
- 选择合适的存储:根据数据类型选择存储介质
- 优化检索策略:根据任务类型调整检索权重
- 监控记忆质量:定期检查记忆的准确性和相关性
💡 核心理解:
一个优秀的 Agent 工程师,不仅要让 Agent 记住重要信息,更要让它 智能遗忘,精准召回高价值记忆,实现长期自主性。记忆管理不是简单的存储和检索,而是一套完整的工程化系统,需要综合考虑存储、检索、压缩、更新等多个维度。
📚 延伸阅读(含可直接访问链接)
以下资源按主题分类,每个资源都附有简要说明,帮助你选择合适的学习材料。
🧠 分层记忆架构
Agent Memory Architecture, Layered Memory Model(分层记忆模型论文):Agent 分层记忆架构的开创性论文。必读论文,适合所有读者。
Generative Agents: Interactive Simulacra of Human Behavior(生成式 Agent 论文):Stanford 2023 年的经典论文,展示了如何实现具有记忆的 Agent。强烈推荐,适合想了解记忆管理实践的读者。
🔍 记忆检索策略
Contextual Memory Retrieval, Recency & Importance Weighted Search(LlamaIndex 记忆检索):LlamaIndex 的记忆检索实现,包含时效性和重要性加权搜索。强烈推荐,适合使用 LlamaIndex 的开发者。
LangChain Memory Management(LangChain 记忆管理):LangChain 的记忆管理实现,包含多种记忆类型。适合使用 LangChain 的开发者。
🗄️ 存储介质
Pinecone Vector Database(Pinecone 向量数据库):流行的向量数据库服务。适合需要向量存储的开发者。
Neo4j Knowledge Graph(Neo4j 知识图谱):流行的知识图谱数据库。适合需要关系存储的开发者。
Knowledge Graph for LLM Agent Reasoning(知识图谱在 Agent 中的应用):知识图谱在 LLM Agent 中的应用指南。适合想了解知识图谱的读者。
🔄 记忆管理实践
Memory Management Best Practices(记忆管理最佳实践):记忆管理的最佳实践指南。适合想优化记忆系统的开发者。
Context Window Optimization(上下文窗口优化):上下文窗口优化的研究。适合想优化 Context Window 的开发者。
🔔 系列说明
本文是《🧠 LLM/Agent 从入门到精通:告别浅尝辄止》系列第 9 篇。上一篇:复杂任务 Agent 怎么拆?任务规划与 Self-Correction。下一篇:LangChain、LlamaIndex、AutoGPT 怎么选?Agent 框架对比。













