LangChain 1.2 官方主推记忆完全解析 作者:马育民 • 2026-05-30 20:52 • 阅读:10000 # 介绍 新版记忆的核心设计理念:**记忆即状态,状态即记忆**。 不再单独创建记忆对象、手动存取对话历史,而是将所有对话上下文、会话数据统一纳入 **LangGraph State(状态)**,通过 **Checkpointer(检查点器)** 实现全自动的状态存档、读取、恢复。 核心特性: - 记忆深度集成在 Agent 流程中,而非外挂组件 - 通过 **thread\_id** 天然隔离多用户、多会话 - 全自动持久化,无需手动 add\_message、save\_context - 原生支持断点续跑、流程回滚、复杂分支/工具调用场景 # 主推记忆三大分类 新版官方将记忆严格划分为以下三类,覆盖所有生产场景: - **短期会话记忆(运行时记忆)** - **会话记忆压缩策略** - **长期用户记忆(跨会话记忆)** # 短期会话记忆(基础) 作用:保存**同一个 thread\_id 会话内**的多轮对话历史,是所有 Agent 对话的基础记忆,由 Checkpointer 提供三种存储实现,适配开发、测试、生产全环境。 本质:持久化存储 State 中的 messages 消息列表。 ### (1)InMemorySaver 内存存储(开发调试专用) 全程内存存储,进程重启、服务重启后记忆全部丢失,仅用于本地调试、功能验证,**禁止用于生产环境**。 ```python from langgraph.graph import StateGraph, MessagesState, START, END from langgraph.checkpoint.memory import InMemorySaver from langchain_openai import ChatOpenAI # 初始化模型与检查点 llm = ChatOpenAI(model="gpt-4o-mini") checkpointer = InMemorySaver() # 构建对话图 builder = StateGraph(MessagesState) builder.add_node("chat_node", lambda state: {"messages": llm.invoke(state["messages"])}) builder.add_edge(START, "chat_node") builder.add_edge("chat_node", END) # 编译启用自动记忆 graph = builder.compile(checkpointer=checkpointer) # 会话隔离(thread_id) config = {"configurable": {"thread_id": "debug_001"}} graph.invoke({"messages": [("user", "我叫小明")]}, config) res = graph.invoke({"messages": [("user", "我叫什么名字?")]}, config) print(res["messages"][-1].content) ``` ### (2)SqliteSaver 文件持久化(中小生产首选) 基于本地 SQLite 文件存储,无需部署数据库,轻量零运维、持久化不丢失,适合个人项目、中小型服务、单机部署场景,是**中小项目生产最优解**。 ```python from langgraph.checkpoint.sqlite import SqliteSaver # 持久化到本地数据库文件 checkpointer = SqliteSaver.from_conn_string("sqlite:///chat_memory.db") graph = builder.compile(checkpointer=checkpointer) ``` ### (3)PostgresSaver 数据库持久化(企业级生产) 基于 PostgreSQL 数据库存储,支持分布式部署、多实例共享、高并发、数据持久化备份,适配微服务、集群部署、高可用企业级项目,是**大型项目标准方案**。 # 会话记忆压缩策略(解决 Token 溢出) **短期记忆** 默认存储全量对话,长对话会导致 Token 激增、响应变慢、上下文溢出。LangChain 1.2 官方主推四种内置记忆压缩策略,全部基于 LangGraph State 实现,适配不同长对话场景。 **提示:**会话记忆压缩策略,是搭配 **短期会话记忆** 的 ### (1)全量缓冲策略(默认) 保存会话内所有历史消息,无截断、无压缩。适合短对话、问答式轻量交互。缺点是长对话 Token 消耗极高。 ### (2)滑动窗口缓冲策略 只保留**最近 N 轮对话**,自动丢弃最早的历史记录,固定上下文长度,可控性强,适合常规连续聊天场景。 ### (3)Token 精准窗口策略 按 Token 数量限制上下文长度,而非轮数,精准控制成本和上下文上限,适合对接口成本、响应速度敏感的业务。 ### (4)摘要缓冲策略(1.2 长对话主推) 核心逻辑:**早期对话自动摘要压缩,最新对话完整保留**。兼顾上下文完整性和 Token 成本,是超长对话、长期会话的最优解决方案,也是 LangChain 1.2 官方最推荐的长记忆策略。 # 长期跨会话记忆(用户级永久记忆) 上述短期记忆均绑定 **单个 thread\_id 会话**,会话结束、新建对话后历史丢失。而长期记忆是**跨 thread、跨会话、永久保存的用户全局记忆**,用于存储用户固定属性、偏好、关键历史信息。 1.2 主推两种长期记忆实现方式,和 LangGraph 短期记忆完美搭配: ### (1)向量库语义记忆(核心) 将用户对话中的关键信息(姓名、偏好、需求、习惯)抽取、向量化后存入向量数据库(Chroma、Pinecone、Weaviate),对话时相似度检索召回,注入上下文。适合个性化 AI、知识库问答、用户习惯记忆场景。 ### (2)结构化实体记忆 将用户信息结构化(字典、数据表),存入关系型数据库,存储固定字段信息(用户姓名、身份、业务配置、历史订单等),适合结构化业务场景。 # 完整层级关系 从上到下完整优先级、依赖关系: 1. **底层存储**:InMemorySaver / SqliteSaver / PostgresSaver(会话状态持久化) 2. **中层优化**:四种记忆压缩策略(解决长对话 Token 问题) 3. **顶层扩展**:向量/结构化长期记忆(跨会话用户记忆) # 新版记忆核心优势 1. 状态统一:记忆是 State 的一部分,统一管理,无外挂组件割裂问题 2. 全自动管理:无需手动读写、拼接历史,框架自动处理 3. 适配复杂场景:原生支持 Agent、工具调用、循环、分支、断点续跑 4. 生产能力完备:从调试到企业级存储全覆盖,支持集群、持久化、回滚 # 官方生产选型 - 本地开发调试:**InMemorySaver** - 单机中小型生产:**SqliteSaver + 摘要记忆策略** - 企业集群高可用:**PostgresSaver + Token窗口/摘要策略** - 需要用户长期个性化:叠加 **向量库长期记忆** # 总结 LangChain 1.2 **唯一主推的记忆体系只有三类**(无任何旧版 LCEL 方案): 1. 短期会话记忆(三种 Checkpointer 存储:内存、Sqlite、Postgres) 2. 会话记忆压缩(四种策略:全量、滑动窗口、Token窗口、摘要) 3. 长期跨会话记忆(向量语义记忆、结构化实体记忆) 这三套架构构成了新版 LangChain 生产级 Agent 的完整记忆能力,也是目前官方唯一迭代、维护、推荐的标准记忆方案。 原文出处:http://malaoshi.top/show_1GW3PI0MdbCU.html