news 2026/4/12 19:04:05

LangChain记忆管理:构建智能体连续性的关键技术(值得收藏)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangChain记忆管理:构建智能体连续性的关键技术(值得收藏)

文章介绍了LangChain框架中的记忆治理机制,分为短期记忆和长期记忆两层。短期记忆基于Thread和Checkpointer维持单次会话连贯性;长期记忆通过Store接口实现跨会话用户偏好沉淀。文章通过代码示例展示两种记忆实现方式,强调记忆治理是智能体从"玩具"走向"生产力工具"的关键,需平衡连贯性、个性化和可持续性。


01 前言

在上一篇的[LangChain 系列 | 上下文工程]中,我们探讨了如何在单次交互中为模型提供精准的信息。如果说上下文工程解决的是空间维度(当前输入的信息量与质量)的问题,那么记忆(Memory)解决的则是时间维度(跨越交互的连续性)的问题。

在当下,基础模型(Base Models)的上下文窗口虽然已经极大扩展,但“无限上下文”并不等于“无限智能”。在实战中,智能体往往因为缺乏对历史信息的有效索引而出现“断片”。

在 LangChain V1.0+ 的架构体系中,记忆治理被严格划分为两个层级:

1、****短期记忆(Short-term Memory):它的作用范围是会话级(Conversation-scoped),主要负责存储当前对话的消息、上传的文件、身份验证状态以及工具执行的结果。基于Thread, 保证单次会话的连贯性。

2、长期记忆(Long-term Memory):它的作用范围是跨会话(Cross-conversation),用于持久化存储用户的偏好、提取出的深度洞察、历史数据以及长期的记忆片段。基于Store, 实现跨会话的用户偏好沉淀与知识管理。

注意: 短期记忆也是一种持久上下文,作用于某整个会话。

02 架构概览

框架通过将存储层(LangGraph实现)与计算层(LangChain实现)分离,建立了一套完整的数据治理体系,即如何根据存储层的数据,为计算层构建出“正确”的内容。

下图展示了运行时(Runtime)如何分别与短期记忆和长期记忆进行交互:

03 短期记忆

大多数 LLM 本质上是**无状态(Stateless)**的。LangGraph 实现短期记忆的方式,是构建一个有状态的系统(Stateful System)。这套机制由三个核心要素组成:

1、Thread (线程):类似于 Email 的会话 ID,用于隔离不同用户的对话。

2、State (状态):当前会话中累积的数据(Messages),随着每一步交互而更新。

3、Checkpointer (检查点):负责在每一步(Step)执行后,将 State 序列化并持久化到数据库。

工作流原理如下图所示:

一个示例:启用 Checkpointer 实现短期记忆

# pip install langgraph langchain-deepseek from langchain.agents import create_agent import os from langgraph.checkpoint.memory import InMemorySaver # 生产环境建议使用: from langgraph.checkpoint.postgres import PostgresSaver # 1. 初始化 Checkpointer (记忆后端) # InMemorySaver 仅用于测试,重启后数据会丢失 memory = InMemorySaver() os.environ["DEEPSEEK_API_KEY"] = "sk-..." # 2. 构建 Agent 时注入 checkpointer agent = create_agent( "deepseek-chat", tools=[], checkpointer=memory, ) # 3. 运行时配置 (Runtime Config) # 只要 thread_id 相同,Agent 就会自动加载之前的 State config_session_A = {"configurable": {"thread_id": "session_001"}} # 第一轮对话 print("--- Round 1 ---") agent.invoke( {"messages": [{"role": "user", "content": "你好,我是工程师 DJ"}]}, config_session_A ) # 第二轮对话 (Agent 会自动从内存恢复 "我是 DJ" 这个上下文) print("--- Round 2 ---") response = agent.invoke( {"messages": [{"role": "user", "content": "我的职业是什么?"}]}, config_session_A ) # 输出: 你的职业是架构师。 print(response["messages"][-1].content)

示例首先定义InMemorySaver,用于内存中存储短期记忆,生产环境通常使用PostgreSQL等数据库;然后通过create_agent创建Agent,并指定checkpointer;最后通过两轮agent的invoke调用,并指定同一个配置了thread_id的config。

最后输出如下:

--- Round 1 --- --- Round 2 --- 根据我们对话的开始,你提到过:**“我是工程师 DJ”**。 所以,你的职业是 **工程师**。

04 长期记忆

短期记忆的致命弱点在于:一旦thread\_id改变,或者历史记录被修剪(Trimming),信息就永久丢失了。

长期记忆(Long-term Memory)利用Store接口,允许智能体将关键信息从“对话流”中提取出来,存储到独立的数据库文档中。它使用 **Namespace(命名空间)**来隔离数据,结构类似于文件路径 (scope, identifier)。

跨会话交互原理如下图所示:

一个示例:工具读写实现长期记忆Store:

from langgraph.store.memory import InMemoryStore from langchain.tools import tool, ToolRuntime from langchain.agents import create_agent import os from pydantic import BaseModel # 初始化存储后端 (生产环境通常连接 Redis 或 PostgreSQL) store = InMemoryStore() # 这决定了工具中 runtime.context 能访问到哪些字段 classContext(BaseModel): user_id: str @tool defsave_user_preference(pref_detail: str, runtime: ToolRuntime): """ 保存用户偏好到长期记忆。 当用户提到“我喜欢...”或“我不吃...”时调用此工具。 """ # 1. 获取 Store 实例 current_store = runtime.store # 2. 从运行时上下文中安全获取 user_id (非用户输入,防注入) # 这需要在 invoke 时通过 configurable 传入 user_id = runtime.context.user_id # 3. 写入数据 # Namespace: 类似文件夹路径 ("users", "bob"),用于数据隔离 # Key: 文件名 "food_prefs" current_store.put( ("users", user_id), "food_prefs", {"detail": pref_detail, "updated_at": "2026-01-19"} ) return"已记录您的偏好。" @tool defget_user_info(runtime: ToolRuntime): """读取用户的历史偏好信息""" current_store = runtime.store user_id = runtime.context.user_id # 4. 读取数据 item = current_store.get(("users", user_id), "food_prefs") return item.value if item else"暂无该用户偏好记录" # 定义agent os.environ["DEEPSEEK_API_KEY"] = "sk-..." agent = create_agent( model="deepseek-chat", tools=[save_user_preference, get_user_info], store=store, # 注入长期记忆存储 context_schema=Context # 声明运行时上下文结构 ) user_context = Context(user_id="DJ_001") print("--round 1--") # 第一次交互:保存信息 agent.invoke( {"messages": [{"role": "user", "content": "记一下,我超级喜欢吃辣,尤其是川菜。"}]}, context=user_context ) print("--round 2--") # 第二次交互:跨会话/跨工具读取 result = agent.invoke( {"messages": [{"role": "user", "content": "我刚才说我喜欢吃什么来着?"}]}, context=user_context ) print(result["messages"][-1].content)

示例首先定义InMemoryStore,用于存储长期记忆,生产环境通常连接 Redis 或 PostgreSQL等;然后分别定义了两个可以操作长期记忆的工具;最后通过create_agent创建Agent,并指定tools、store和context_schema;通过两轮agent的invoke调用,并指定了同一个context。

最后输出如下:

根据记录,你之前提到过你**超级喜欢吃辣,尤其是川菜**!这是你在2026年1月19日分享的饮食偏好。 川菜确实很美味,像麻婆豆腐、水煮鱼、回锅肉这些经典川菜都很受欢迎。你最近有尝试什么新的川菜吗?

说明:长期记忆通常不直接暴露给 LLM 的 Context(太长且昂贵),而是通过 Tools 按需调用。

05 总结

记忆治理是 Agent 从“玩具”走向“生产力工具”的分水岭。在构建系统时,请遵循以下原则:

1. Checkpointer (短期记忆):解决“连贯性”,主要用于维持对话流(Flow)。

2. Store (长期记忆):解决“个性化”。用于持久存储知识(Knowledge)和偏好。

3. Middleware (治理):解决“可持续性”。防止记忆膨胀拖垮系统,通过自动总结和修剪保持上下文的精炼。

如何学习AI大模型?

如果你对AI大模型入门感兴趣,那么你需要的话可以点击这里大模型重磅福利:入门进阶全套104G学习资源包免费分享!

这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

这是一份大模型从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!


第一阶段:从大模型系统设计入手,讲解大模型的主要方法;

第二阶段:在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段:大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段:大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段:大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段:以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段:以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

100套AI大模型商业化落地方案

大模型全套视频教程

200本大模型PDF书籍

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

LLM面试题合集

大模型产品经理资源合集

大模型项目实战合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 7:33:01

程序员转行AI大模型教程(非常详细),大模型入门到精通_Java程序员转型大模型开发完整指南与必备资源包

本文为Java程序员提供转型大模型开发的系统性指南,涵盖大模型概念认知、五步转型路径、Java程序员独特优势及AI大模型时代新兴技术岗位。文章详细介绍了AI工程师需掌握的数学、编程、机器学习等核心知识体系,并提供从入门到实践的全套学习资源&#xff0…

作者头像 李华
网站建设 2026/4/12 13:48:46

Agent-as-a-Graph:大模型多智能体系统工具与智能体精准检索新范式

本文提出Agent-as-a-Graph方法,将智能体和工具作为平等节点构建二分图知识图谱,解决多智能体系统中精准检索痛点。通过向量初筛、类型加权RRF融合和图遍历聚合三步流程,Recall5提升18.6%,且不依赖特定Embedding模型,具…

作者头像 李华
网站建设 2026/4/12 3:10:41

STL练习

2058: [STL训练]Whos in the Middle 题目描述 FJ is surveying his herd to find the most average cow.He wants to know how much milk this median cow gives:half of the cows give as much or more than the median; half give as much or less. Given an odd number …

作者头像 李华
网站建设 2026/3/29 2:31:44

电商行业的数据分析与优化策略

电商行业的数据分析与优化策略关键词:电商行业、数据分析、优化策略、用户行为、销售预测摘要:本文聚焦于电商行业的数据分析与优化策略。首先介绍了电商数据分析的背景,包括目的、预期读者、文档结构和相关术语。接着阐述了核心概念&#xf…

作者头像 李华
网站建设 2026/4/11 22:43:31

BLE服务特征描述

在蓝牙规范中通常指 GATT 服务 (Service) 与特征 (Characteristic) 的概念及其层级关系。GATT 数据模型层级在低功耗蓝牙 (BLE) 中,设备连接后通过 GATT (通用属性协议) 进行数据交换。其数据模型是一个三层结构:服务 (Service) → 特征 (Characteristic…

作者头像 李华
网站建设 2026/4/7 19:00:16

UART寄存器分类介绍

一、UART 寄存器的核心分类通用 UART 模块的寄存器通常分为控制类、状态类、数据类、配置类4 大类,不同 MCU 的寄存器名称可能不同,但功能一致。二、通用 UART 寄存器详解1. 数据寄存器(Data Register)功能:存储待发送…

作者头像 李华