langmem
https://github.com/langchain-ai/langmem
Advances and Challenges in Foundation Agents–Memory调研
https://www.doubao.com/chat/15848166096118786
LangMem的记忆系统通过多层次的设计实现了LLM应用中的长期记忆管理,核心围绕记忆类型划分、记忆提取与更新机制、存储与检索策略以及集成模式展开,具体实现方式如下:
1. 记忆类型的结构化定义
系统将记忆划分为三种类型,每种类型有明确的用途和存储模式,对应人类记忆的结构:
- 语义记忆(Semantic Memory):存储事实和知识(如用户偏好、专业技能),以集合(Collection) 或档案(Profile) 形式存储。
- 集合:记录大量无边界信息(如用户的多个兴趣点),适合 runtime 搜索。
- 档案:遵循严格 schema 的特定任务信息(如用户的姓名、沟通风格),便于快速查询。
- 情景记忆(Episodic Memory):存储过去的交互经验(如成功的问题解决案例),包含场景、思考过程、行动和结果四要素,用于指导未来行为。
- 程序记忆(Procedural Memory):存储系统行为规则(如响应风格、交互逻辑),通过提示词优化实现,随用户反馈动态更新。
2. 记忆的提取与更新机制
记忆的形成分为两种方式,平衡实时性与深度处理:
-
主动形成(Active Formation):
在对话过程中实时提取记忆(如用户提到偏好时立即记录),通过create_memory_manager
工具调用LLM分析对话,生成结构化记忆(支持Pydantic模型定义格式)。- 支持插入、更新、删除操作(可通过参数
enable_inserts
等控制)。 - 示例:用户说“我喜欢深色模式”时,工具会生成包含“偏好类型、内容、上下文”的语义记忆。
- 支持插入、更新、删除操作(可通过参数
-
背景形成(Background Formation):
对话间隙异步处理记忆,通过LLM分析历史交互中的模式(如用户对哪种解释方式更敏感),生成总结性记忆,不影响实时响应速度。
3. 存储与检索系统
基于LangGraph的存储原语,支持灵活的记忆持久化和检索:
- 存储结构:
记忆按命名空间(Namespace) 分层组织(如(组织ID, 用户ID, 记忆类型)
),支持动态模板变量(如{user_id}
),方便多用户、多场景管理。 - 检索方式:
- 直接访问:通过键获取特定记忆。
- 语义搜索:基于内容相似度查找相关记忆。
- 元数据过滤:按记忆属性(如创建时间、类型)筛选。
4. 核心工具与集成模式
-
核心API:
create_memory_manager
:提取、更新记忆的基础工具,支持结构化(Pydantic模型)和非结构化记忆,独立于存储系统。create_prompt_optimizer
:优化程序记忆(如系统提示词),根据对话反馈调整agent行为。
-
状态集成:
结合LangGraph的存储层,提供Store Managers
和Memory Management Tools
,实现记忆的自动持久化和agent的直接调用(如通过工具在对话中主动查询记忆)。
示例流程
- 用户对话输入后,
memory_manager
实时分析内容,提取语义记忆(如用户偏好)或情景记忆(如成功的解释案例)。 - 记忆按命名空间存储在LangGraph的
BaseStore
中,支持Postgres等持久化存储。 - 后续对话中,agent通过语义搜索或元数据过滤检索相关记忆,结合程序记忆的规则生成个性化响应。
- 背景任务定期优化记忆(如合并重复信息、更新过时内容),提升长期有效性。
通过这种设计,LangMem实现了记忆的动态学习、持久化存储和高效复用,让agent能够跨会话适应用户需求。