为Agent集成长期记忆
摘要
- 长期记忆是上下文中关键组成部分,长期记忆一般是短期记忆的沉淀,从过去的经验中学习,让用户可以记忆多轮对话的关键信息,得到处理问题的一般模式,
Without proper memory systems, AI applications would treat each interaction as completely new, losing valuable context and personalization opportunities.
- 长期记忆作为RAG的一部分,长期记忆的抽取和检索一般是通过RAG来实现,增强大模型回答领域问题的能力,而预训练专注于一般性问题的回答性能,例如langextract,LightRAG这样的框架
- 使用文件存储长期记忆,按需召回,可以避免上下文超长的问题,例如manus的做法
- 长期记忆又可以分为Semantic、Factual、Episodic,实践中一般会按抽取主体不同,按需建立不同的索引,例如mem0
- 使用ReAct模式的Agent来管理Memory可以提供一些自主性,让Agent根据上下文和多轮的任务来自我进化,例如LangGraph MemoryAgent, QwenAgent, A-Mem, MemU
从短期记忆加工长期记忆

LangGraph - MemoryTemplate

MemoryTemplate是LangChain AI提供的长期记忆服务模板,用于构建和部署可连接到任何LangGraph代理的长期记忆服务,实现用户范围的记忆管理。
- 使用 @functools.lru_cache 定义长期记忆的过期机制
- 使用State定义长期记忆的入参,可见本质上是对短期记忆的持久化处理
1
2
3
4
5class State(TypedDict):
"""Main graph state."""
messages: Annotated[list[AnyMessage], add_messages]
"""The messages in the conversation.""" - memory_graph被标记成一个入口点,相当于一个接口
参考文档
https://github.com/langchain-ai/memory-template
长期记忆的提取是一个RAG模式的实现
langextract
LangExtract是一个Python库,使用LLM从非结构化文本文档中提取结构化信息,基于用户定义的指令。它能够处理各种材料,如临床文本、法律文件、学术论文等,并输出结构化的JSON数据。
核心特性
- 精确源定位:每个提取的实体都包含精确的源文本引用
- 可扩展性:支持处理长文档和并行处理
- 自定义提取:通过提示词和示例控制提取行为,从非结构化文本中提取实体、关系和属性
技术架构
- 基于LLM的信息提取
- 支持自定义模型提供商
- 提供插件系统扩展功能
- 支持本地和云端模型部署
引用链接
MemoryScope
定义一个pipeline来处理记忆
https://github.com/modelscope/MemoryScope
LightRAG
定义
LightRAG是一个简单且快速的检索增强生成(Retrieval-Augmented Generation)系统,专注于提供高效的知识检索和生成能力。
- 智能检索:基于语义相似度的文档检索
- 上下文增强:为LLM提供相关上下文信息
- 知识图谱:利用图结构增强检索效果
- 实时查询:支持实时文档查询和生成
为Memory建立索引和检索
https://blog.langchain.com/semantic-search-for-langgraph-memory/
文件系统作为长期记忆的载体
Manus - 使用文件系统作为终极上下文
现代前沿LLM虽然提供128K+令牌的上下文窗口,但在真实代理场景中仍面临三个痛点:观察结果庞大容易超出限制、长上下文导致性能下降、以及高昂的计算成本。
传统压缩策略虽然能缩短上下文,但过度压缩会导致信息丢失。代理需要根据所有先前状态预测动作,无法预测哪个观察结果在后续步骤中变得重要,因此任何不可逆的压缩都带有风险。
文件系统作为终极上下文解决了这些问题:大小不受限制、天然持久化、代理可直接操作。模型学会按需写入和读取文件,不仅用作存储,还作为结构化的外部记忆。
我们的压缩策略设计为可恢复的:保留URL可移除网页内容,保留文档路径可省略文档内容。这样既能缩短上下文长度,又不会永久丢失信息。
这种基于文件的记忆方式也为状态空间模型(SSM)在智能体中的应用开辟了新可能。SSM虽然缺乏完整注意力机制,但通过将长期状态外部化而非保存在上下文中,其速度和效率可能开启新型智能体时代。

参考文档
https://manus.im/zh-cn/blog/Context-Engineering-for-AI-Agents-Lessons-from-Building-Manus
构建不同的长期记忆索引
Mem0
Mem0将长期记忆划分为不同的类型,并通过api上增加agent_id, user_id, run_id进行索引
记忆类型分类:
短期记忆 (Short-Term Memory)
- 对话历史: 最近的对话消息及其顺序
- 工作记忆: 临时变量和状态信息
- 注意力上下文: 当前对话的焦点
长期记忆 (Long-Term Memory)
- 事实记忆 (Factual Memory): 存储用户信息、偏好和领域特定知识
- 情节记忆 (Episodic Memory): 过去的交互和体验
- 语义记忆 (Semantic Memory): 概念理解及其关系
记忆特征对比:
| 类型 | 持久性 | 访问速度 | 使用场景 |
|---|---|---|---|
| 短期记忆 | 临时性 | 即时 | 活跃对话 |
| 长期记忆 | 持久性 | 快速 | 用户偏好和历史 |
Mem0长期记忆实现方式:
- 使用向量嵌入存储和检索语义信息
- 跨会话维护用户特定上下文
- 实现高效的相关历史交互检索机制
核心价值:
AI系统需要记忆系统实现三个关键目标:
- 在对话中维持上下文
- 从过去的交互中学习
- 随时间构建个性化体验
参考
https://docs.mem0.ai/core-concepts/memory-types
https://docs.mem0.ai/open-source/graph_memory/overview#add-memories
进化的记忆
结合Agent的ReAct范式,实现Agentic RAG,由Agent自主判断记忆的抽取和持久化
MemoryAgent

LangGraph ReAct Memory Agent - 一个具有记忆保存工具的ReAct风格智能体示例。
核心特性:
- 基于ReAct范式的智能体,能够自主判断记忆的抽取和持久化
- 提供
store_memory工具,让智能体保存重要信息供后续使用 - 记忆按
user_id作用域隔离,支持跨对话线程学习用户偏好 - 集成LangGraph Cloud部署,支持API交互
工作原理:
- 智能体从记忆图的
Store读取已保存的记忆 - 调用工具时自动路由到
store_memory节点保存信息 - 支持自定义记忆结构(content + context)
- 可配置不同的LLM模型(默认Claude-3.5-Sonnet)
应用场景:
- 跨会话保持用户偏好记忆
- 重要信息的持久化存储
- 智能体学习能力的增强
参考
https://github.com/langchain-ai/memory-agent?ref=blog.langchain.com
A-mem
https://arxiv.org/pdf/2508.08997
https://github.com/agiresearch/A-mem
https://zhuanlan.zhihu.com/p/1888290059859514793
https://github.com/landing-ai/agentic-doc
QwenAgent
Qwen-Agent采用三级处理框架,先通过BM25检索关键词定位核心段落,再评估分块相关性,最后逐步生成答案,实现百万字级上下文处理。
1. 上下文截断机制
qwen_agent/llm/base.py#_truncate_input_messages_roughly 中实现了基础的上下文长度管理,根据最大长度来截断messages:
- 默认最大输入token数为58000(可通过
DEFAULT_MAX_INPUT_TOKENS配置) - 使用
tokenizer.count_tokens和truncate实时统计token数并按最大token数阈值截断 - 保留系统消息和最新的用户消息
- 从旧消息开始截断,确保最重要的上下文保留
2. Memory对话记忆管理
qwen_agent/agents/memo_assistant.py 实现了对话记忆功能:
- 使用storage工具存储重要信息
- 在对话过程中,你可以随时使用storage工具来存储你认为需要记住的信息,同时也随时可以读取曾经可能存储了的历史信息
- 这将有助于你在和用户的长对话中,记住某些重要的信息,比如用户的喜好、特殊信息、或重大事件等
关于数据存取,有以下两点建议:
- 存一条数据的key尽量简洁易懂,可以用所记录内容的关键词
- 如果忘记存过什么数据,可以使用scan查看记录过哪些数据
此处展示当前你存入的所有信息,因此你可以省去专门读取数据的操作:
1 | <info> |
你的记忆很短暂,请频繁的调用工具存储或读取重要对话内容。
- 自动截断对话历史,保留最近的对话
- 将存储的信息嵌入系统提示中
3. RAG文件知识库管理
qwen_agent/memory/memory.py#_run,messages中的文件会被保存在知识库中,检索和query最相关的部分内容,而不是将整个文件抛给llm:
- 支持多种文件格式(PDF、Word、Excel、TXT等)
- 使用RAG(检索增强生成)技术
- 可配置的检索策略和关键词生成
4. DialogueRetrievalAgent - 超长对话管理
qwen_agent/agents/dialogue_retrieval_agent.py:
- 将长对话存储为文件
- 基于检索的历史对话查询
- 会话级别的历史管理

5. VirtualMemoryAgent - 虚拟内存管理
qwen_agent/agents/virtual_memory_agent.py 针对messages中出现的文件名,自动通过deepsearch的方式来检索:
- 先由llm来决定使用什么工具处理这些文件,然后调用这些工具
- 直到达到最大调用次数20次,或不再产生新的toolcall
- 自动检索外部资源
- 动态更新上下文知识
- 智能工具调用
参考文档
https://qwenlm.github.io/zh/blog/qwen-agent-2405/
https://github.com/QwenLM/Qwen-Agent
https://community.modelscope.cn/682d45a3870cef736060aaef.html
MemU
MemU采用背景进程对记忆进行加工和抽取,并建立联系存储到图库中,形成自我进化