当前位置: 首页 > article >正文

LangGraph 持久化深度解析:Checkpoint 机制如何实现对话记忆和断点续跑

很多同学在第一次接入 LangGraph 时会发现图默认是「无状态」的——每次invoke上一轮的消息就消失了。你以为加了 MessagesState 就有记忆了结果测试一问Agent 完全不知道「你叫什么名字」。更惨的是什么生产环境跑一个需要 30 步的复杂工作流第 25 步因为网络超时失败了。重跑从头开始前面 24 步白跑费时又费钱。这些问题的根源就是没搞懂 LangGraph 的Checkpoint 持久化机制。这篇我们把它从头拆开来看——Checkpoint 是什么、怎么存的、thread_id 是什么关系、三种存储后端怎么选、断点续跑怎么用。01 Checkpoint 不是存消息是存图的完整状态很多人把 Checkpoint 等同于「保存对话历史」这是第一个认知偏差。Checkpoint 保存的是Graph 在某一执行步骤的完整状态快照包括所有 ChannelState 里每个字段的当前值当前执行到哪个节点父检查点 ID形成版本链时间戳和元数据Graph 执行一个 Super-Step 的流程 [读取上一个 Checkpoint] ↓ [执行当前节点更新 State] ↓ [写入新 Checkpoint快照] ↓ [决定下一步继续 / 等待 / 结束]你可以把它理解成Git 的 commit 历史每次节点执行都会产生一个 commit记录「这一刻图的状态是什么」。出了问题可以 checkout 到任意一个历史节点重跑而不是从头来。Checkpoint 的数据结构interfaceCheckpointvnumber// 版本号目前是 4tsstring// 时间戳 ISO 格式idstring// UUID唯一标识这个快照channel_values// State 中每个字段的当前值messagesBaseMessagekeystringanychannel_versions// 每个字段的版本号用于冲突检测channelstringnumberversions_seen// 记录各节点看到的版本避免重复处理nodestringchannelstringnumberpending_sendsany// 待发送的消息队列注意channel_versions——这不是废字段。LangGraph 用版本号判断「某个节点是否需要重新执行」这是断点续跑的底层依据。02 thread_id多会话隔离的平行宇宙坐标如果说 Checkpoint 是存档文件thread_id 就是存档槽。一个 Graph 实例可以服务无数个对话线程每个线程有独立的 Checkpoint 序列互不干扰同一个 Graph 编译实例 ├── thread_id: user-001 │ ├── checkpoint-v1 (第1轮对话) │ ├── checkpoint-v2 (第2轮对话) │ └── checkpoint-v3 (第3轮对话) ├── thread_id: user-002 │ ├── checkpoint-v1 │ └── checkpoint-v2 └── thread_id: workflow-batch-20240427 ├── checkpoint-v1 └── ...可随时恢复调用时thread_id 通过config传入importMemorySaverfromlangchain/langgraphimportHumanMessagefromlangchain/core/messagesconstnewMemorySaverconstcompile// 第一轮对话constawaitinvokemessagesnewHumanMessage我叫 James我在学 LangGraphconfigurablethread_iduser-001// 第二轮——Graph 自动加载 user-001 的历史状态constawaitinvokemessagesnewHumanMessage我之前说我叫什么configurablethread_iduser-001// 同一个 thread_id// 输出你之前说你叫 Jamesconsolelogmessagesat1content关键点不传 thread_idGraph 不会持久化任何状态就算 compile 时传了 checkpointer 也没用。thread_id 是持久化的「触发器」。03 三种存储后端钱、可靠性、复杂度的三角博弈LangGraph.js 官方提供三种 Checkpointer选哪个取决于你的场景存储后端包名重启后保留适合场景成本MemorySaver内置❌ 进程重启即丢失开发调试、单元测试零SqliteSaverlangchain/langgraph-checkpoint-sqlite✅ 文件持久化单机部署、小规模生产极低PostgresSaverlangchain/langgraph-checkpoint-postgres✅ 数据库持久化多实例生产、高并发中等MemorySaver开发必用生产勿用importMemorySaverfromlangchain/langgraphconstnewMemorySaverconstcompile// 简单进程活着就有记忆进程死了全没了SqliteSaver单机生产的最佳选择importSqliteSaverfromlangchain/langgraph-checkpoint-sqlite// 同步版本constSqliteSaverfromConnString./checkpoints.db// 或者异步版本推荐importAsyncSqliteSaverfromlangchain/langgraph-checkpoint-sqliteconstawaitAsyncSqliteSaverfromConnString./checkpoints.dbconstcompile// 服务重启后用同一个 thread_id历史对话原封不动恢复constawaitinvokemessagesnewHumanMessage我们之前聊到哪里了configurablethread_iduser-001SQLite 文件会自动建表schema 由 LangGraph 管理你不需要手动 migration。PostgresSaver多实例水平扩展importPostgresSaverfromlangchain/langgraph-checkpoint-postgresimportfrompgconstnewPoolconnectionStringenvDATABASE_URLconstPostgresSaverfromConnStringenvDATABASE_URL// 首次使用必须调用 setup()创建必要的表awaitsetupconstcompilePostgresSaver 支持连接池多个服务实例共享同一个状态库这是 MemorySaver 和 SqliteSaver 做不到的。04 断点续跑Checkpoint 最强的能力对话记忆只是 Checkpoint 的基础用法。更强的是断点续跑——工作流中途失败从上次成功的节点继续跑而不是从头来。场景30 步工作流第 25 步超时importStateGraphAnnotationfromlangchain/langgraphimportSqliteSaverfromlangchain/langgraph-checkpoint-sqliteconstWorkflowStateAnnotationRootstepAnnotationnumberreducer(_, next) resultAnnotationstringreducer(acc, next) errorAnnotationstringnullreducer(_, next) default() null// 工作流 ID 作为 thread_id确保唯一constWORKFLOW_IDbatch-job-${Date.now()}// 第一次执行假设第 25 步超时失败tryawaitinvokestep0resulterrornullconfigurablethread_idWORKFLOW_IDcatchconsoleerror执行失败但已保存 Checkpoint// 查看当前状态——看到了失败前的最后一个快照constawaitgetStateconfigurablethread_idWORKFLOW_IDconsolelog失败时执行到步骤${state.values.step}// 从断点继续——不传 input直接 resumeawaitinvokenullconfigurablethread_idWORKFLOW_IDinvoke(null, config)是断点续跑的核心——传null表示「从上一个 Checkpoint 的状态继续执行不重置状态」。查看历史快照// 获取某个 thread 的所有 Checkpoint 历史forawaitconstofgetStateHistoryconfigurablethread_iduser-001consolelogidconfigconfigurablecheckpoint_idstepmetadatasteptimestampcreatedAtnextNodenext时光机回滚到历史某一步重跑// 从历史中找到某个 checkpoint_idconstforawaitconstofgetStateHistoryconfigurablethread_iduser-001push// 回滚到第 3 步的状态重跑constfinds metadatastep3awaitinvokenullconfigurablethread_iduser-001checkpoint_idconfigconfigurablecheckpoint_id这个能力在调试 Agent 行为时极其有用找到 Agent 判断出错的那一步修改状态重跑后续逻辑而不是从头走一遍。05 手动更新 State在 Checkpoint 之间注入数据有时候你需要在两次 invoke 之间手动修改 State——比如 Human-in-the-Loop 审核通过后注入审核结果importHumanMessageAIMessagefromlangchain/core/messages// 方式一updateState 直接写入awaitupdateStateconfigurablethread_iduser-001messagesnewAIMessage人工审核通过继续执行approvedtrue// 更新后继续执行awaitinvokenullconfigurablethread_iduser-001// 方式二as_node 模拟某个节点写入让 LangGraph 以为是从特定节点产出的数据awaitupdateStateconfigurablethread_iduser-001messagesnewHumanMessage重新注入一条消息human_review_node// 第三个参数以哪个节点的名义写入updateState内部也会创建一个新的 Checkpoint保留完整的状态链路。06 常见坑踩过才知道有多痛坑1MemorySaver 用在生产环境重启血崩开发测试用 MemorySaver上生产忘了换。服务一重启所有用户的对话历史归零。判断标准只要你的服务会重启CI/CD、崩溃恢复就必须用 Sqlite 或 Postgres。坑2没有传 thread_idcheckpointer 形同虚设// ❌ 这样调用就算 compile 了 checkpointer 也没有持久化效果awaitinvokemessagesnewHumanMessagehi// ✅ 必须传 configurable.thread_idawaitinvokemessagesnewHumanMessagehiconfigurablethread_idsome-unique-id判断方法调用graph.getState({ configurable: { thread_id: your-id } })看values是否有内容。坑3thread_id 复用导致状态污染多个用户用同一个 thread_id状态相互覆盖。正确姿势每个用户/会话用唯一 ID推荐user_{userId}_session_{sessionId}格式。坑4PostgresSaver 忘记调用 setup()Error: relation checkpoints does not existPostgresSaver 第一次使用必须await checkpointer.setup()这会创建 LangGraph 需要的表结构。线上部署时把setup()放在服务启动脚本里。坑5断点续跑时传了 input 导致状态被重置// ❌ 想从断点继续却传了 inputState 会被重置到初始值awaitinvokemessagesstep0// 这会覆盖掉保存的 Checkpointconfigurablethread_idWORKFLOW_ID// ✅ 断点续跑传 nullawaitinvokenullconfigurablethread_idWORKFLOW_ID坑6checkpoint 数据无限增长没有清理策略每次 invoke 都会写入新 Checkpoint长期运行的生产环境会撑爆存储。最佳实践SQLite定期DELETE FROM checkpoints WHERE thread_ts ?保留最近 N 条Postgres用 pg_partman 按时间分表配合 cron 清理旧分区总结Checkpoint 不是「存消息」而是存整个 Graph 在某一刻的完整状态快照包括所有 Channel 值、版本号和父子关系。thread_id 是多会话隔离的坐标不传 thread_id 等于没有持久化这是新手最容易踩的坑。三种存储后端各有边界开发用 MemorySaver单机生产用 SqliteSaver多实例水平扩展用 PostgresSaver不要混用。断点续跑的核心是invoke(null, config)传 null 表示从上一个 Checkpoint 继续传 input 会重置状态——这两者行为完全不同。updateStateas_node是 Human-in-the-Loop 的底层支撑让你在 invoke 之间注入数据并以特定节点的名义写入 Checkpoint。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

相关文章:

LangGraph 持久化深度解析:Checkpoint 机制如何实现对话记忆和断点续跑

很多同学在第一次接入 LangGraph 时,会发现图默认是「无状态」的——每次 invoke,上一轮的消息就消失了。你以为加了 MessagesState 就有记忆了,结果测试一问,Agent 完全不知道「你叫什么名字」。 更惨的是什么?生产环…...

IGF-I Analog ;CYAAPLKPALSSC

一、基础信息多肽名称:IGF-I Analog 胰岛素样生长因子 I 类似物 三字母序列:Cys-Tyr-Ala-Ala-Pro-Leu-Lys-Pro-Ala-Lys-Ser-Cys 单字母序列:CYAAPLKPALSSC 氨基酸数量:12 aa 结构修饰:分子内二硫键 二硫键配对&#xf…...

冲突矿产法规合规:供应链尽责管理与ESG风险应对实战指南

1. 冲突矿产法规合规:一场被低估的供应链风暴如果你是一家电子、汽车或工业设备制造公司的供应链、法务或合规负责人,现在请立刻停下手中的工作,问自己一个问题:我们公司使用的锡、钽、钨、金(3TG)这四种金…...

换个角度思考【牛客tracker 每日一题】

换个角度思考 时间限制:1秒 空间限制:256M 知识点:线段树 网页链接 牛客tracker 牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相…...

自治性、反应性、学习能力:AI Agent的关键特性

自治性、反应性、学习能力:AI Agent的关键特性——从蚂蚁觅食到通用智能体的进化之路 关键词 AI Agent, 自治性, 反应性, 强化学习, 记忆机制, 环境交互, 通用人工智能萌芽 摘要 想象一下:你有一个能自己帮你规划周末露营路线(自治性)、中途遇到暴雨自动切换到附近民宿…...

Claude Code 多项目 API 配置管理实践

背景 Claude Code 的项目级配置文件 .claude/settings.json 中包含 API 提供商相关的环境变量。当同时维护多个项目,每个项目使用不同的 API 提供商(Anthropic 直连、OpenRouter 代理、自建转发等)时,每次切换项目都需要手动修改…...

移动SoC设计演进:从骁龙600/400系列看芯片战略与体验竞争

1. 从一场发布会看移动芯片的十年演进2015年2月,巴塞罗那世界移动通信大会前夕,高通的一则新闻稿在业内激起了不小的涟漪。他们宣布了全新的骁龙600和400系列移动平台,其中最引人注目的,是首次将当时ARM最新的64位Cortex-A72核心引…...

硬件工程师显示器选购指南:从垂直分辨率到IPS面板的实战经验

1. 从“够用”到“爽用”:一个硬件工程师的显示器升级心路作为一名整天和代码、电路图、数据手册打交道的硬件工程师,我的工作台就是我的战场。而这块战场上最核心的装备,除了键盘鼠标,就是那块每天要盯着看至少八小时的显示器。几…...

2026AI大模型API聚合系统排行榜:四大主流中转API及特色玩家谁能脱颖而出?

随着AI技术大规模落地,AI大模型API聚合系统成为企业快速接入前沿智能能力、降低技术门槛的关键工具。目前市场上的服务商众多,企业在选择时往往会考虑稳定性、合规性、接入成本等因素。为了帮助企业解决这一难题,本文对当下主流的四大AI大模型…...

5个维度深度解析:如何实现高性能黑苹果系统的架构设计与优化策略

5个维度深度解析:如何实现高性能黑苹果系统的架构设计与优化策略 【免费下载链接】Hackintosh 国光的黑苹果安装教程:手把手教你配置 OpenCore 项目地址: https://gitcode.com/gh_mirrors/hac/Hackintosh 在传统PC硬件与macOS系统兼容性的技术挑战…...

从Gemini Nano到Orion Core:Google 2026 AI芯片级升级路线图(附17个真实POC性能基准数据)

更多请点击: https://intelliparadigm.com 第一章:Gemini Nano到Orion Core:Google 2026 AI芯片级演进全景图 Google 正在以空前的系统性节奏重构其AI硬件栈——从终端侧轻量模型推理引擎 Gemini Nano,到2026年即将量产的全栈自研…...

基于大语言模型与RAG的AI小说生成:从技术原理到工程实践

1. 项目概述:当AI开始“阅读”与“创作”最近在内容创作和小说爱好者圈子里,一个名为“auto-novel”的项目引起了我的注意。简单来说,这是一个利用人工智能技术,实现从“阅读”现有小说到“模仿创作”新内容的自动化工具。它的核心…...

AI技能统一管理:用Obsidian插件Agentfiles构建你的智能编码中枢

1. 项目概述:一个为AI编码时代打造的技能中枢 如果你和我一样,日常开发工作流里已经塞满了各种AI编码助手——Claude Code、Cursor、Codex、Windsurf……那么你一定也面临过同样的困境:每个工具都有自己的一套“技能”或“记忆”系统&#xf…...

FinFET与FD-SOI工艺下的IC可靠性验证关键技术

1. 集成电路可靠性验证的挑战与演进在28nm工艺节点之前,芯片设计工程师面临的选择相对简单——只需沿着摩尔定律的轨迹向下一个工艺节点迁移。但随着FinFET和FD-SOI等新型晶体管结构的出现,以及台积电、三星等代工厂推出的多样化工艺节点选项&#xff0c…...

Git Conflict Resolution

1. 这篇文章解决什么问题&#xff1f; Git 冲突不是异常情况&#xff0c;而是多人协作和分支开发里的正常现象。 常见问题包括&#xff1a; 1. 为什么会产生冲突&#xff1f; 2. 冲突文件里的 <<<<<<<、、>>>>>>> 是什么&#xff1f…...

2026年云端保姆级教程:如何搭建OpenClaw?Token Plan配置及大模型API Key接入

2026年云端保姆级教程&#xff1a;如何搭建OpenClaw&#xff1f;Token Plan配置及大模型API Key接入。OpenClaw是开源的个人AI助手&#xff0c;Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案…...

从手机闪光灯到汽车大灯:聊聊‘发光强度’(坎德拉)在硬件选型中的实际应用

从手机闪光灯到汽车大灯&#xff1a;发光强度&#xff08;坎德拉&#xff09;的硬件实战指南 当你在昏暗的停车场用手机闪光灯寻找钥匙时&#xff0c;是否想过为什么有些手机的补光能照亮整个车位&#xff0c;而有些却只能勉强看清手掌&#xff1f;这个差异背后&#xff0c;隐藏…...

2026盘古石取证初赛(APK取证)

APK取证1.分析方俊朗phone.E01检材&#xff0c;筛选优质客户应用将用户查询记录存储在一个加密的本地数据库中。请问该加密数据库的文件名是什么&#xff1f;[答案格式&#xff1a;12_abc.db]题目说了这边是筛选优质客户&#xff0c;其实和手机取证最后一题一样的&#xff0c;先…...

Go语言安全编码实践:常见漏洞与防护

Go语言安全编码实践&#xff1a;常见漏洞与防护 1. 安全编码原则 安全编码是防止漏洞的根本&#xff0c;包括输入验证、输出编码、最小权限等原则。 2. 安全工具 package securityimport ("regexp""strings" )type Validator struct {emailRegex *regexp.R…...

SQLite Having 子句详解

SQLite Having 子句详解 SQLite 是一款轻量级的数据库管理系统,广泛应用于移动应用、桌面应用以及各种嵌入式系统。在 SQLite 中,HAVING 子句是一个非常重要的特性,它用于对 GROUP BY 子句的查询结果进行过滤。本文将详细介绍 SQLite 的 HAVING 子句,包括其用法、语法以及…...

抖音图片怎么去水印?2026实测免费去水印方法全盘点,这几款工具真好用

抖音图片怎么去水印&#xff1f;2026实测免费去水印方法全盘点&#xff0c;这几款工具真好用 刷抖音的时候&#xff0c;你有没有遇到过这种情况&#xff1a;看到一张超好看的图片&#xff0c;点保存&#xff0c;结果发现角落里多了一行「用户名」或者一个抖音 Logo&#xff0c;…...

Java的Random类

在Java中&#xff0c;java.util.Random 类是日常开发中最常用的伪随机数生成器。它基于线性同余算法生成随机数&#xff0c;只要给定相同的初始值&#xff08;种子 seed&#xff09;&#xff0c;就能生成完全相同的随机数序列。 &#x1f3b2; Random 类的基础使用 使用 Random…...

光子储层计算在无人机动态补偿中的创新应用

1. 深度光子储层计算在无人机动态补偿中的创新应用在无人机控制领域&#xff0c;传统PID控制器面对复杂流体环境时往往力不从心。当无人机在狭窄空间或近地面飞行时&#xff0c;地面效应、天花板效应以及湍流再循环等未建模动力学因素会导致显著的性能下降。我在参与某城市峡谷…...

2026绍兴本地GEO优化公司实测:服务规范与效果验证全解析

引言随着AI搜索算法的不断迭代&#xff0c;绍兴本地企业对GEO&#xff08;生成式引擎优化&#xff09;服务的需求日益增长。为了帮助这些企业在选择GEO优化服务商时做出明智决策&#xff0c;本测评以客观、中立的态度&#xff0c;基于EEAT原则&#xff08;经验、专业性、权威性…...

如何在3分钟内完成Windows与Office智能激活:KMS_VL_ALL_AIO完全指南

如何在3分钟内完成Windows与Office智能激活&#xff1a;KMS_VL_ALL_AIO完全指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows操作系统和Office办公软件的正版激活而烦恼吗&…...

ElevenLabs账号被限频?紧急修复手册:3分钟绕过Rate Limit限制,解锁Pro级语音并发权限

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs超写实语音生成教程 ElevenLabs 是当前业界领先的 AI 语音合成平台&#xff0c;其模型在语调自然度、情感表达力与跨语言一致性方面表现卓越。本章将指导你完成从 API 接入到高质量语音生成的…...

CSS 视图过渡完全指南

CSS 视图过渡完全指南 引言 CSS 视图过渡&#xff08;View Transitions&#xff09;是一个强大的新特性&#xff0c;它允许开发者创建平滑的页面过渡动画。本文将深入探讨视图过渡的各种用法和高级技巧。 基础概念回顾 什么是视图过渡 视图过渡 API 允许你在 DOM 状态变化时创建…...

v7上线首周,93%老用户没发现的隐藏指令——高阶提示工程实战手册,含12个未公开参数调用语法

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney v7核心架构升级与隐性能力图谱 多模态融合推理引擎重构 Midjourney v7 引入了基于分层注意力对齐&#xff08;Hierarchical Attention Alignment, HAA&#xff09;的新型生成主干&#xff…...

Happy Island Designer完整指南:免费在线岛屿设计工具终极教程

Happy Island Designer完整指南&#xff1a;免费在线岛屿设计工具终极教程 【免费下载链接】HappyIslandDesigner "Happy Island Designer (Alpha)"&#xff0c;是一个在线工具&#xff0c;它允许用户设计和定制自己的岛屿。这个工具是受游戏《动物森友会》(Animal C…...

抖音图片怎么去水印?2026实测去水印方法全整理,免费工具一并推荐

抖音图片怎么去水印&#xff1f;2026实测去水印方法全整理&#xff0c;免费工具一并推荐 每次在抖音刷到一张好看的图&#xff0c;长按保存下来却发现角落盖着一行"昵称抖音"水印&#xff0c;这种体验相信不少人都经历过。水印不影响欣赏还好&#xff0c;但如果想把图…...