HoRain云--LangChain 对话记忆
默认情况下每次 agent.invoke() 都是独立的——Agent 不记得之前聊过什么。Checkpointer检查点保存器让 Agent 能够记住对话历史实现真正的多轮对话。没有 Checkpointer 的问题先看看没有 Checkpointer 时的情况实例from dotenv import load_dotenvload_dotenv()from langchain.agents import create_agentfrom langchain.chat_models import init_chat_modelfrom langchain.messages import HumanMessagemodel init_chat_model(deepseek:deepseek-v4-flash, temperature0)agent create_agent(modelmodel,system_prompt你是菜鸟教程 RUNOOB 的助手。,)# 第一轮result1 agent.invoke({messages: [HumanMessage(content我叫小明)]})print(f第一轮: {result1[messages][-1].content})# 第二轮——Agent 不记得第一轮的内容result2 agent.invoke({messages: [HumanMessage(content我叫什么名字)]})print(f第二轮: {result2[messages][-1].content})运行结果第一轮: 你好小明很高兴认识你。 第二轮: 抱歉我没有你的信息不知道你叫什么名字。使用 Checkpointer 记住对话添加 Checkpointer 后同一 thread_id 下的对话会自动关联实例from langgraph.checkpoint.memory import InMemorySaverfrom langchain.agents import create_agentfrom langchain.chat_models import init_chat_modelfrom langchain.messages import HumanMessage# 创建一个内存 Checkpointercheckpointer InMemorySaver()model init_chat_model(deepseek:deepseek-v4-flash, temperature0)agent create_agent(modelmodel,checkpointercheckpointer, # 传入 Checkpointersystem_prompt你是菜鸟教程 RUNOOB 的助手。,)# 使用 thread_id 来标识对话线程config {configurable: {thread_id: user-001}}# 第一轮result1 agent.invoke({messages: [HumanMessage(content我叫小明我在学 Python)]},configconfig,)print(f第一轮: {result1[messages][-1].content})# 第二轮——使用相同的 thread_idAgent 记住了result2 agent.invoke({messages: [HumanMessage(content我叫什么名字我在学什么)]},configconfig,)print(f第二轮: {result2[messages][-1].content})运行结果第一轮: 你好小明Python 是一门很好的入门语言有什么需要帮助的吗 第二轮: 你叫小明你正在学习 Python。有什么具体问题我可以帮你吗thread_id 是关键。同一个 thread_id 下的对话是连续的不同 thread_id 之间的对话完全隔离。这让你可以用一个 Agent 实例同时服务多个用户。Checkpointer 的工作原理Checkpointer 在每次 Agent 执行后自动保存状态快照checkpoint。下一次使用相同 thread_id 调用时自动从最近的 checkpoint 恢复状态。具体工作流程调用 agent.invoke()传入 config含 thread_idAgent 检查是否有该 thread_id 的 checkpoint如果有加载历史消息追加新消息后继续执行完成后自动保存新的 checkpoint实例from langgraph.checkpoint.memory import InMemorySaverfrom langchain.agents import create_agentfrom langchain.chat_models import init_chat_modelfrom langchain.messages import HumanMessagecheckpointer InMemorySaver()agent create_agent(modelinit_chat_model(deepseek:deepseek-v4-flash, temperature0),checkpointercheckpointer,system_prompt你是菜鸟教程 RUNOOB 的助手。,)config {configurable: {thread_id: demo-001}}# 模拟多轮对话questions [我叫小明,我在学 Python,帮我总结一下关于我的信息,]for i, q in enumerate(questions, 1):result agent.invoke({messages: [HumanMessage(contentq)]},configconfig,)# 查看 checkpoint 状态state agent.get_state(config)print(f\n第 {i} 轮后:)print(f 消息数: {len(state.values.get(messages, []))})print(f 下一步: {state.next})print(f 回复: {result[messages][-1].content[:80]}...)运行结果第 1 轮后: 消息数: 2 下一步: () 回复: 你好小明很高兴认识你。 第 2 轮后: 消息数: 4 下一步: () 回复: Python 是一门非常流行的编程语言简单易学。 第 3 轮后: 消息数: 6 下一步: () 回复: 根据我们的对话你的信息如下你叫小明正在学习 Python。Checkpointer 类型类型存储位置持久化适用场景InMemorySaver内存否重启丢失开发调试、测试SqliteSaverSQLite 文件是单机部署、小规模应用PostgresSaverPostgreSQL是生产环境、多实例共享SqliteSaver 示例实例from langgraph.checkpoint.sqlite import SqliteSaver# SQLite 持久化——重启后数据不丢失checkpointer SqliteSaver.from_conn_string(conversations.db)agent create_agent(modeldeepseek:deepseek-v4-flash,checkpointercheckpointer,)# 用法和 InMemorySaver 完全相同config {configurable: {thread_id: user-001}}result agent.invoke({messages: [{role: user, content: 你好}]},configconfig,)# 重启程序后相同 thread_id 的对话依然存在管理对话线程查看对话状态实例# 查看对话状态state agent.get_state(config)print(f下一步: {state.next}) # () 表示空闲print(f消息数: {len(state.values.get(messages, []))})# 查看对话历史for msg in state.values.get(messages, []):print(f [{msg.type}] {str(msg.content)[:60]})创建新线程实例# 不同的 thread_id 不同的独立对话config_alice {configurable: {thread_id: alice}}config_bob {configurable: {thread_id: bob}}# Alice 的对话agent.invoke({messages: [HumanMessage(content我是 Alice)]},configconfig_alice,)# Bob 的对话——完全独立不知道 Alice 说了什么agent.invoke({messages: [HumanMessage(content我是 Bob)]},configconfig_bob,)# 验证隔离性alice_state agent.get_state(config_alice)bob_state agent.get_state(config_bob)print(fAlice 对话消息数: {len(alice_state.values[messages])})print(fBob 对话消息数: {len(bob_state.values[messages])})更新状态——手动修改对话有时你需要手动修改对话状态比如清空对话、插入系统消息等实例from langchain.messages import SystemMessage# 更新状态——插入一条系统消息agent.update_state(config,{messages: [SystemMessage(content用户升级到了 VIP 会员)]})# 之后的对话会包含这条插入的消息update_state() 的参数会通过 add_messages reducer 处理对 messages 字段而言所以新消息会追加而不是覆盖。如果需要覆盖整个状态需要使用不同的方法。

相关新闻

HoRain云--LangChain RAG

HoRain云--LangChain RAG

RAG(Retrieval-Augmented Generation,检索增强生成)让 AI 能够基于你的私有文档回答问题,不需要微调模型,只需将文档向量化存储,Agent 就能检索相关内容来回答。RAG 是什么普通的大模型只能回答训练数据中有…

2026/7/14 0:38:21阅读更多 →
HoRain云--LangChain 多 Agent

HoRain云--LangChain 多 Agent

当一个任务太复杂,单个 Agent 难以胜任时,你可以创建多个各司其职的 Agent,让它们像团队一样协作。为什么需要多 Agent单个 Agent 的问题:system_prompt 太长会导致模型注意力分散工具太多会增加模型选择工具的出错概率不同类型的…

2026/7/14 0:38:21阅读更多 →
系统规划与管理师-云原生系统建设规划与实践案例

系统规划与管理师-云原生系统建设规划与实践案例

一、引言云原生是基于云计算技术架构的软件设计、开发、部署和运行的方法论体系,核心包含微服务、容器、DevOps、持续交付四大核心要素,是软考高级系统规划与管理工程师 IT 战略规划、信息系统架构领域的重要考点,本章在历年考试中分值占比 4…

2026/7/14 0:33:20阅读更多 →
UE5安卓打包实战:从Gradle下载失败到APK部署的完整日志分析与解决方案

UE5安卓打包实战:从Gradle下载失败到APK部署的完整日志分析与解决方案

1. 项目概述:一次典型的UE5安卓打包“渡劫”之旅如果你正在用虚幻引擎5.3(UE5.3)开发移动端项目,并且卡在了打包生成APK(Android Package)这一步,尤其是被那个令人头疼的“Gradle下载失败”问题…

2026/7/14 21:41:09阅读更多 →
PUMA560机械臂MATLAB避障路径规划实战包:含RRT原始版与平滑优化版双算法

PUMA560机械臂MATLAB避障路径规划实战包:含RRT原始版与平滑优化版双算法

本文还有配套的精品资源,点击获取 简介:提供一套开箱即用的PUMA560六轴机械臂MATLAB仿真资源,聚焦三维空间下的自动避障路径规划。内置两种RRT实现:基础RRT算法(RRT.m)快速生成可行路径,优化…

2026/7/14 21:41:08阅读更多 →
3DsMax到UE5毛发制作全流程:引导线生成与Groom系统实战

3DsMax到UE5毛发制作全流程:引导线生成与Groom系统实战

1. 项目概述:从3DsMax到UE5的毛发制作之旅如果你正在为UE5里的角色做毛发,尤其是从3DsMax这类DCC软件里导出的模型,大概率已经体会过那种“模型看着还行,毛发一上就穿帮”的尴尬。UE5的Groom毛发系统功能强大,但它的工…

2026/7/14 21:41:08阅读更多 →
价值系统CT扫描:工程化诊断演化、强化与极限

价值系统CT扫描:工程化诊断演化、强化与极限

1. 项目概述:这不是一篇哲学论文,而是一套可操作的价值系统诊断工具“Mantic”这个词本身就很值得玩味——它源自古希腊语mantis,意为“先知”或“占卜者”,但在这里,它被赋予了全新的实践意义:一种对价值系…

2026/7/14 21:41:08阅读更多 →
模板驱动型文档自动化:结构化生成与确定性交付

模板驱动型文档自动化:结构化生成与确定性交付

1. 项目概述:当文档生产变成“填空题”,而不是“命题作文”你有没有过这种体验:每周要交三份客户方案,每份结构雷同——封面、目录、执行摘要、服务模块、报价单、附录;但每次都要从零新建Word,手动调格式、…

2026/7/14 21:41:08阅读更多 →
多维聚合后的数据操作:从GROUP BY到业务决策的跃迁

多维聚合后的数据操作:从GROUP BY到业务决策的跃迁

1. 项目概述:为什么多维聚合中的数据操作不是“加个GROUP BY”就完事了“Part 20: Data Manipulation in Multi-Dimensional Aggregation”——这个标题乍看像教科书里一个平平无奇的章节编号,但如果你正在处理销售仪表盘、用户行为漏斗、IoT设备时序统计…

2026/7/14 21:36:08阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/14 4:56:14阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/14 2:55:05阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/14 6:17:41阅读更多 →
【Cursor数据库安全红线】:自动执行SQL前必须校验的6项权限策略,金融级项目已强制落地

【Cursor数据库安全红线】:自动执行SQL前必须校验的6项权限策略,金融级项目已强制落地

更多请点击: https://intelliparadigm.com 第一章:Cursor数据库安全红线概览 Cursor 作为一款基于 AI 的智能编程助手,其本地数据库(SQLite 存储)承载着用户代码片段、会话历史、自定义规则及敏感上下文信息。理解其安…

2026/7/14 0:03:18阅读更多 →
【Notion AI写作避坑白皮书】:基于127份真实用户失败案例,总结6大致命误用陷阱

【Notion AI写作避坑白皮书】:基于127份真实用户失败案例,总结6大致命误用陷阱

更多请点击: https://codechina.net 第一章:Notion AI写作辅助的底层能力边界认知 Notion AI 并非通用大语言模型的直接封装,而是基于 Llama 系列与自研微调模型构建的轻量化推理服务,其输入上下文窗口严格限制在 8192 token&…

2026/7/14 0:03:18阅读更多 →
AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

更多请点击: https://kaifayun.com 第一章:AI Agent数据越界行为的合规性挑战与溯源必要性 AI Agent在自主执行任务过程中,可能因提示注入、上下文污染或权限配置缺陷,无意或有意访问、缓存、传输受保护数据(如PII、G…

2026/7/14 0:03:18阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/14 15:07:30阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/14 4:45:36阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/14 2:42:17阅读更多 →