LangGraph 对话内容筛选与存储实现指南

核心机制概览

功能 核心机制 实现方法/工具 关键点
筛选 状态管理 RemoveMessagefilter_messagestrim_messagesSummarizationNode 可删除、过滤、修剪或总结对话历史,以控制上下文长度和成本。
存储 检查点 (Checkpoints) InMemorySaver (开发), AsyncPostgresSaver (生产) 用于持久化单次对话线程的状态,实现短期记忆。
存储 存储层 (Store) InMemoryStore, AsyncPostgresStore 用于跨会话、跨线程的长期记忆存储,可按命名空间和键值检索。
检索 向量检索 PostgresStore.search(), 集成Mem0, langmem 工具 通过语义相似度在长期记忆中查找相关信息。

🧠 如何筛选对话内容

对话筛选的核心是管理上下文窗口,控制Token消耗和成本。LangGraph 提供了以下方法:

消息过滤 (Message Filtering)

此方法不修改原始状态,只在调用LLM前临时筛选消息列表。

  • filter_messages:按消息类型(如是否删除 SystemMessage)或角色过滤。
  • RemoveMessage:从图状态中直接删除指定ID的消息,可减少状态存储开销。

消息修剪 (Message Trimming)

基于Token数量,精确控制传给LLM的消息历史。

  • trim_messages:从 langchain_core.messages 导入,可设置 max_tokens 和策略(如 strategy="last"),确保传入的消息在Token预算内。

LLM摘要 (LLM Summarization)

用LLM将对话历史压缩为摘要,用简短的摘要文本替代原始消息,保留关键信息。

  • 实现:在LangGraph图中创建一个专门的“摘要节点”,定期触发并将结果存入状态。

💾 对话内容如何存储

LangGraph的存储机制分为“短期”和“长期”,服务于不同目的。

短期记忆:检查点 (Checkpoints)

它像“会话记忆”,用于在同一对话线程内记住上下文,实现多轮对话和“人在环”。

  • 作用:LangGraph 在图的每个“节点”执行后自动保存状态(如 messages 列表)。
  • 实现:在编译图时传入 checkpointer 对象,并通过 config 参数为每个对话指定唯一的 thread_id
from langgraph.checkpoint.memory import InMemorySaver
checkpointer = InMemorySaver() # 开发环境,也可用AsyncPostgresSaver等用于生产
graph = builder.compile(checkpointer=checkpointer)

config = {"configurable": {"thread_id": "1"}}
graph.invoke({"messages": [HumanMessage(content="你好")]}, config)

长期记忆:存储层 (Store)

它像“知识库”,用于跨会话、跨线程地保存用户偏好、事实等持久信息。

  • 实现:使用 BaseStore 接口,可选用 InMemoryStore(开发)或 AsyncPostgresStore(生产)。通过命名空间(namespace)和键(key)来组织数据-。
from langgraph.store.memory import InMemoryStore

store = InMemoryStore()
store.put(("user_preferences", "123"), "theme", {"value": "dark"})
theme = store.get(("user_preferences", "123"), "theme")

🏗️ 筛选与存储的协同:记忆架构设计

筛选与存储常常协同工作。LangMem 就是一个优秀的整合方案,它通过提供一系列工具,让智能体自主决定何时存储、更新或搜索长期记忆。

  • 初始化存储层 (Store):配置 InMemoryStore 并设置索引以支持向量搜索。

  • 创建记忆管理工具:使用 langmem 提供的 create_manage_memory_tool 和 create_search_memory_tool。

  • 创建并运行智能体:将这些工具添加到你的 Agent 中。Agent 会自然地使用这些工具进行记忆的筛选和存储。

💡 最佳实践建议

  • 环境区分:开发测试用 InMemorySaver/Store;生产环境务必用 AsyncPostgresSaver/Store 实现数据持久化。

  • 性能考量:存储到长期记忆前,通过过滤和摘要来压缩数据,能有效减少Token消耗、节省成本。

  • 时间戳策略:使用 PostgresStore 时,为按时间范围检索,应在存储的数据内容中加入时间戳字段。

  • 生态集成:如果LangGraph原生功能不够用,可以集成Mem0等专门服务。它以极少的代码(仅需 add() 和 search() 两个方法)提供强大的记忆层能力。

LangGraph 的“筛选”与“存储”能力是其核心优势。通过组合 filter_messages、trim_messages、Checkpointer 和 Store 等工具,你可以为智能体构建出强大、个性化和经济的记忆系统。
LangMem 概念解析

LangMem:为 LangGraph 智能体赋予长期记忆的开源 SDK

什么是 LangMem?

LangMem 是 LangChain 团队专为 LangGraph 智能体(Agent)开发的开源长期记忆 SDK。它解决了 AI 在多轮对话中容易“失忆”的核心痛点,让智能体不仅能“记住”用户说过的话,还能从中“学习”和“进化”。

核心能力速览

特性 描述 解决的问题
核心定位 专为 LangGraph 设计的开源记忆SDK。 为原生框架提供无缝集成的记忆方案。
记忆类型 语义记忆(事实/偏好)、情景记忆(经验/摘要)、程序性记忆(行为/规则)。 模拟人类记忆模式,信息结构化存储。
整合模式 支持热路径工具(对话中实时调用)和后台管理器(对话后异步处理)。 适应不同性能场景,平衡实时性与吞吐量。
独特优势 1. 自动整合与去重
2. 提示词自我优化(程序性记忆)
3. 框架无关的核心API
解决记忆膨胀、提升智能体“情商”和长期性能。

快速上手:为智能体安装 LangMem

以下极简示例展示了如何快速集成 LangMem(需提前安装 langgraphlangmem 并配置大模型 API Key)。

1. 初始化带语义搜索的内存库

from langgraph.store.memory import InMemoryStore

# 开发环境使用内存存储,生产环境请使用 AsyncPostgresStore
store = InMemoryStore(
    index={
        "dims": 1536,  # 嵌入向量维度
        "embed": "openai:text-embedding-3-small",  # 使用的嵌入模型
    }
)

2.创建智能体并授予记忆工具

from langgraph.prebuilt import create_react_agent
from langmem import create_manage_memory_tool, create_search_memory_tool

agent = create_react_agent(
    "anthropic:claude-3-5-sonnet-latest",
    tools=[
        create_manage_memory_tool(namespace=("user_memories",)),
        create_search_memory_tool(namespace=("user_memories",)),
    ],
    store=store,
)
  1. 对话:智能体自主记忆与检索
# 第一轮:存储用户偏好
agent.invoke(
    {"messages": [{"role": "user", "content": "记住我喜欢用暗色模式。"}]}
)
# 智能体内部会自动调用 manage_memory 工具记录此偏好。

# 第二轮:检索记忆中的信息
response = agent.invoke(
    {"messages": [{"role": "user", "content": "我上次说的界面偏好是什么?"}]}
)
print(response["messages"][-1].content) 
# 预期输出: "您之前提到过喜欢使用暗色模式。"

LangMem 与主流记忆方案对比

为了帮助你做出技术选型,这里将 LangMem 与其他热门方案进行对比:

特性 LangMem (LangChain) Mem0 Zep Letta (原MemGPT)
核心定位 LangGraph 的原生记忆库(SDK) 平台化的记忆服务 上下文工程平台 完整的智能体运行时平台
部署方式 开源库,需自托管 开源 + 云服务 主要为云服务 开源 + 云服务
知识图谱 有 (Pro+) 有 (核心特性)
独特优势 提示词自我优化、框架无缝集成 生态成熟、记忆压缩、合规性强 强大的实体提取和事实去重 操作系统级的三级记忆架构
适用场景 深度使用 LangGraph 构建,且需要程序性记忆(自适应学习)的场景 需要企业级功能、知识图谱和平台服务的团队 需要构建复杂、可进行深层上下文推理的应用 希望更换智能体底层架构,实现极致记忆管理的项目

最佳实践建议

环境区分:开发测试使用 InMemoryStore,生产环境务必切换到 AsyncPostgresStore 等持久化方案。

按需提取:使用 Pydantic 模型定义清晰的记忆结构,确保提取的信息精准、可用。

监控整合:定期检查记忆库,LangMem 的自动整合功能可防止记忆膨胀。

隐私合规:处理用户数据时,必须遵守 GDPR 等法规,并提供记忆管理的用户界面(如查看、删除)。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐