LangGraph 对话内容筛选与存储实现指南
LangGraph 对话内容筛选与存储实现指南
核心机制概览
| 功能 | 核心机制 | 实现方法/工具 | 关键点 |
|---|---|---|---|
| 筛选 | 状态管理 | RemoveMessage、filter_messages、trim_messages、SummarizationNode |
可删除、过滤、修剪或总结对话历史,以控制上下文长度和成本。 |
| 存储 | 检查点 (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(需提前安装 langgraph、langmem 并配置大模型 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,
)
- 对话:智能体自主记忆与检索
# 第一轮:存储用户偏好
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 等法规,并提供记忆管理的用户界面(如查看、删除)。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)