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

【LangGraph 状态持久化(Checkpoint)详解】学习笔记

目录什么是状态持久化持久化方案对比内存持久化MemoryPersistenceSQLite 持久化SqlitePersistenceAgent 多轮对话持久化AgentPersistenceget_state 与 get_state_history 详解总结对比1. 什么是状态持久化LangGraph 默认情况下每次invoke()执行完毕后State 就销毁了。但很多场景需要跨调用保留状态场景需求多轮对话AI 记住上一轮聊了什么工作流断点续跑某步骤失败后从失败点继续状态审计查看每一步的中间状态回滚/分支回到历史状态重新执行LangGraph 通过Checkpointer检查点保存器实现状态持久化。核心 API# 编译时指定 checkpointer app graph.compile(checkpointerInMemorySaver()) ​ # 配置 thread_id会话 ID config {configurable: {thread_id: user-001}} ​ # 同 thread_id 多次 invoke状态自动恢复 result1 app.invoke({messages: []}, config) # 第1次 result2 app.invoke({messages: []}, config) # 第2次从第1次结果继续Checkpoint 的工作原理第1次 invoke() │ ├── 创建 checkpoint_1开始前状态 ├── 执行节点创建 checkpoint_2中间状态 ├── 执行完成创建 checkpoint_3最终状态 │ ▼ 持久化存储内存 / SQLite / Postgres ​ 第2次 invoke()同 thread_id │ ├── 从存储加载 checkpoint_3 作为初始状态 ├── 创建 checkpoint_4开始前状态 └── ...2. 持久化方案对比方案后端数据生命周期安装要求适用场景InMemorySaver内存程序关闭即丢失内置无需安装开发调试、单次 sessionSqliteSaverSQLite 文件持久化到文件pip install langgraph-checkpoint-sqlite本地实验、单机部署PostgresSaverPostgreSQL持久化到数据库pip install langgraph-checkpoint-postgres生产环境、多实例共享3. 内存持久化MemoryPersistence3.1 文件MemoryPersistence.py三步工作流step_one → step_two → step_three配合InMemorySaver演示状态的保存和读取。3.2 核心代码from langgraph.checkpoint.memory import InMemorySaver ​ # 编译图时传入 checkpointer app graph.compile(checkpointerInMemorySaver()) ​ # 每个 thread_id 独立存储状态 config {configurable: {thread_id: user_13811112222}} ​ # 第1次执行 result app.invoke({messages: [开始执行], step_count: 0}, config)3.3 测试输出首次执行结果: {messages: [开始执行, 执行了步骤 1, 执行了步骤 2, 执行了步骤 3], step_count: 3} ​ 检查存储的状态: {messages: [开始执行, 执行了步骤 1, 执行了步骤 2, 执行了步骤 3], step_count: 3} ​ 执行历史从最新到最旧共 6 个 checkpoint: checkpoint_1: {messages: [开始执行, ...步骤 1, 步骤 2, 步骤 3]} ← 最终 checkpoint_2: {messages: [开始执行, ...步骤 1, 步骤 2]} ← step_two 后 checkpoint_3: {messages: [开始执行, ...步骤 1]} ← step_one 后 checkpoint_4: {messages: [开始执行]} ← 初始 checkpoint_5: {messages: []} ← 系统内部3.4 关键行为持久化的核心是 thread_id同一个thread_id多次invoke()→ 状态自动叠加相当于继续对话不同thread_id→ 完全隔离恢复执行# 如果图已完成invoke(None) 直接返回已有结果不重新执行 result2 app.invoke(None, config)4. SQLite 持久化SqlitePersistence4.1 文件SqlitePersistence.py与内存持久化功能相同但数据存储在 SQLite 文件中程序重启后数据不丢失。4.2 安装依赖pip install langgraph-checkpoint-sqlite4.3 核心代码import sqlite3 from langgraph.checkpoint.sqlite import SqliteSaver ​ # 1. 建立 SQLite 连接 conn sqlite3.connect( databaseD:/hermes-project/project/sqlite_data.db, check_same_threadFalse ) ​ # 2. 创建 SqliteSaver sqliteDB SqliteSaver(connconn) ​ # 3. 编译图时传入 graph builder.compile(checkpointersqliteDB) ​ # 4. 执行同 thread_id 自动持久化 config {configurable: {thread_id: user-001}} result graph.invoke({messages: []}, config)4.4 数据库结构执行后 SQLite 文件中有两个核心表checkpoints 表每个状态变更的完整快照thread_idcheckpoint_idparent_checkpoint_idcheckpoint (BLOB)user-001uuid-1None初始状态空 messagesuser-001uuid-2uuid-1开始执行user-001uuid-3uuid-2node_1 执行后[abc,def]writes 表每个节点的写入明细thread_idcheckpoint_idchannelvalueuser-001uuid-1messages[]初始user-001uuid-3messages[abc,def]4.5 连续执行的 Checkpoint 链第1次执行: invoke({messages:[]}) checkpoint_1 (开始, messages[]) ↓ checkpoint_2 (node_1运行中) ↓ checkpoint_3 (完成, messages[abc,def]) ​ 第2次执行: invoke({messages:[]}) ← 从 checkpoint_3 继续 checkpoint_4 (开始, 恢复 [abc,def]) ↓ checkpoint_5 (node_1运行中) ↓ checkpoint_6 (完成, [abc,def,abc,def])每次invoke()生成3 个 checkpoint开始→中间→完成通过parent_checkpoint_id串联。4.6 查看 SQLite 数据库import sqlite3 conn sqlite3.connect(D:/hermes-project/project/sqlite_data.db) # 列出所有表 cur conn.execute(SELECT name FROM sqlite_master WHERE typetable) for t in cur.fetchall(): print(t[0]) # 查看 checkpoints rows conn.execute( SELECT thread_id, checkpoint_id, parent_checkpoint_id FROM checkpoints ORDER BY checkpoint_id ).fetchall()5. Agent 多轮对话持久化AgentPersistence5.1 文件AgentPersistence.py将 Checkpoint 与 LangChain 的create_agent()高级 API 结合实现带记忆的多轮对话。5.2 核心代码from langchain.agents import create_agent from langgraph.checkpoint.memory import InMemorySaver llm init_chat_model(modelqwen-plus, ...) checkpointer InMemorySaver() agent create_agent(modelllm, checkpointercheckpointer) config {configurable: {thread_id: user-001}} # 第一轮自我介绍 msg1 agent.invoke( {messages: [(user, 你好我叫张三喜欢足球)]}, config ) # 第二轮AI 记得上轮信息 msg2 agent.invoke( {messages: [(user, 我叫什么我喜欢做什么)]}, config ) # AI 回复你叫张三喜欢足球 ⚽5.3 测试输出AI: 你好张三很高兴认识你同为球迷——足球的魅力在于团队精神与激情活动 AI: 你叫张三喜欢足球关键第二轮 AI 准确回答了张三和足球——这是 InMemorySaver 在 agent 层面自动持久化了对话历史。5.4 AgentPersistence 的技术要点要点说明create_agent中的 checkpointerLangChain 1.2 的 Agent 高级 API 原生支持 checkpointer消息自动累加messages字段使用add_messagesreducer新消息追加到历史thread_id 隔离不同 thread_id 的对话历史互不干扰可替换后端InMemorySaver → SqliteSaver/PostgresSaver 无需改业务代码6. get_state 与 get_state_history 详解6.1 get_state获取当前状态# 获取指定 thread 的当前状态 saved_state app.get_state(config) print(saved_state.values) # 状态字典 print(saved_state.next) # 下一步要执行的节点空已完成输出{messages: [开始执行, 步骤1, 步骤2, 步骤3], step_count: 3} () ← 空元组表示图已执行完毕6.2 get_state_history获取完整执行历史# 获取指定 thread 的所有历史 checkpoint history app.get_state_history(config) for checkpoint in history: print(checkpoint.values) print(checkpoint.next) print(checkpoint.config[configurable][checkpoint_id]) print(---)输出按从最新到最旧排列# 最新最终状态 当前状态: {messages: [开始执行, 步骤1, 步骤2, 步骤3], step_count: 3} --- 当前状态: {messages: [开始执行, 步骤1, 步骤2], step_count: 2} --- 当前状态: {messages: [开始执行, 步骤1], step_count: 1} --- 当前状态: {messages: [开始执行], step_count: 0} --- 当前状态: {messages: [], step_count: 0} ← 初始状态6.3 checkpoint 的返回结构class StateSnapshot: values: dict # 该时刻的完整 State next: tuple # 下一步要执行的节点空已完成 config: dict # 包含 checkpoint_id 等配置 metadata: dict # source, step 等信息 created_at: datetime # 创建时间 parent_config: dict # 上一个 checkpoint 的配置 tasks: tuple # 待执行的任务7. 总结对比7.1 三个文件的定位文件后端用途核心 APIMemoryPersistence.pyInMemorySaver基础演示状态保存、历史查看compile(checkpointer),get_state(),get_state_history()SqlitePersistence.pySqliteSaver文件级持久化程序重启不丢失sqlite3.connect(),SqliteSaver(conn)AgentPersistence.pyInMemorySaverAgent 多轮对话记忆create_agent(checkpointer), 多次invoke()7.2 核心 API 速查操作API内存持久化compile(checkpointerInMemorySaver())SQLite持久化compile(checkpointerSqliteSaver(conn))配置线程config {configurable: {thread_id: xxx}}获取当前状态app.get_state(config)获取历史状态app.get_state_history(config)更新状态app.update_state(config, values{...})Agent 持久化create_agent(modelllm, checkpointer...)7.3 学习路线1. MemoryPersistence.py → 理解 checkpoint 是什么、get_state 怎么用 │ ▼ 2. SqlitePersistence.py → 数据持久化到文件查看数据库结构 │ ▼ 3. AgentPersistence.py → 实战多轮对话 AI 助手

相关文章:

【LangGraph 状态持久化(Checkpoint)详解】学习笔记

目录 什么是状态持久化? 持久化方案对比 内存持久化:MemoryPersistence SQLite 持久化:SqlitePersistence Agent 多轮对话持久化:AgentPersistence get_state 与 get_state_history 详解 总结对比 1. 什么是状态持久化&…...

题解:学而思编程 3或5的倍数

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…...

3个关键步骤:如何为视频下载工具扩展新平台支持

3个关键步骤:如何为视频下载工具扩展新平台支持 【免费下载链接】yt-dlp-gui Windows GUI for yt-dlp 项目地址: https://gitcode.com/gh_mirrors/yt/yt-dlp-gui 为开源视频下载工具添加第三方平台支持是开发者面临的常见挑战。yt-dlp-gui作为Windows平台上广…...

CherryUSB嵌入式USB协议栈终极指南:从入门到精通

CherryUSB嵌入式USB协议栈终极指南:从入门到精通 【免费下载链接】CherryUSB CherryUSB is a tiny and beautiful, high performance and portable USB host and device stack for embedded system with USB IP 项目地址: https://gitcode.com/gh_mirrors/ch/Cher…...

2025最权威的降AI率方案实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 随着人工智能技术迅猛地发展,它在学术研究领域的应用越发深入,对高等…...

Claude代码生成Token预算管理实战:成本控制与智能优化策略

1. 项目概述与核心价值最近在折腾大模型应用开发,特别是围绕Claude这类顶尖的代码生成模型时,一个绕不开的痛点就是成本控制。模型调用是按Token计费的,而一个复杂的代码生成任务,动辄消耗成千上万个Token,账单不知不觉…...

Verilog行为级建模:从initial/always到阻塞非阻塞赋值的核心语法解析

1. 项目概述:从“连线”到“行为”的思维跃迁刚接触数字电路设计的朋友,可能都是从画原理图、连逻辑门开始的。但当你面对一个需要处理复杂时序、包含状态机或者有算法逻辑的模块时,光靠门级网表来描述,那工程量简直让人头皮发麻。…...

Spring boot相关

1. ● 问题1:为什么扫描的是 com.example.demo 包?因为主入口类在这个包下。 com.example.demo …...

Transformer在CV领域的新秀:拆解TransWeather如何用‘天气查询’一招解决多任务难题

Transformer在CV领域的新秀:拆解TransWeather如何用‘天气查询’一招解决多任务难题 计算机视觉领域正经历一场由Transformer架构引领的革命。从最初的图像分类任务到如今的复杂场景理解,Transformer以其强大的全局建模能力不断刷新着各项基准。而在天气…...

如何用KLOGG在5分钟内成为日志分析高手

如何用KLOGG在5分钟内成为日志分析高手 【免费下载链接】klogg Really fast log explorer based on glogg project 项目地址: https://gitcode.com/gh_mirrors/kl/klogg 你是否曾在海量日志文件中迷失方向?面对数十GB的日志数据,传统的grep命令显…...

Codex 杀进 Chrome!接管了我的浏览器后,我在摸鱼

家人们,Codex 这次真的往普通电脑工作流里钻了。 OpenAI 已经宣布,Codex 现在可以直接在 macOS 和 Windows 的 Chrome 中运行。 它可以和 Chrome 里的应用、网站配合得更好,还能在后台标签页之间并行运行,不会一直占用你的键盘鼠标…...

SQL如何提取分组中的第一条记录_使用ROW_NUMBER定位数据

ROW_NUMBER() 是最稳的分组取首行解法,需在子查询或CTE中按PARTITION BY分组、ORDER BY排序,外层筛选rn1;GROUP BY配MIN(id)易导致数据错乱,且无ORDER BY时顺序不保证;须建联合索引覆盖分组与排序字段,并注…...

Android Studio中文界面完整解决方案:从语言障碍到高效开发

Android Studio中文界面完整解决方案:从语言障碍到高效开发 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack AndroidSt…...

python 中的进制

进制是数值的表示方式,Python 原生支持二进制、八进制、十进制、十六进制,并提供了丰富的进制转换功能。一、进制表示方式1. 四种进制的字面量# 十进制(默认) dec 42 print(dec) # 42# 二进制:0b 或 0B 前缀 b…...

MongoDB副本集在网络闪断后如何快速恢复_重连机制与心跳超时(electionTimeoutMillis).txt

...

从账单明细看Taotoken按Token计费模式的实际支出情况

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 从账单明细看Taotoken按Token计费模式的实际支出情况 在模型应用开发与测试阶段,成本控制是团队普遍关心的问题。固定套…...

路由器市场新机遇:从硬件到场景化解决方案的演进

1. 项目概述:一个被低估的“家门口”战场聊到路由器,很多人的第一反应可能是“运营商送的”、“能用就行”。确实,在过去很长一段时间里,家用Wi-Fi设备是一个典型的“黑盒”产品,用户对其性能、功能和体验的感知非常模…...

3个步骤彻底告别电脑风扇噪音:Windows平台最精细的风扇控制解决方案

3个步骤彻底告别电脑风扇噪音:Windows平台最精细的风扇控制解决方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHu…...

Visual C++运行库终极解决方案:一站式修复所有Windows程序依赖问题

Visual C运行库终极解决方案:一站式修复所有Windows程序依赖问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否经常遇到"缺少msvcp140.…...

CentOS 8 安装 Docker 超详细教程

CentOS 8 安装 Docker 超详细教程 适用于 CentOS 8 / CentOS Stream 8,从零开始直到运行第一个容器。 一、准备工作 1. 检查系统版本 cat /etc/redhat-release看到 CentOS Linux release 8.5.2111 或 CentOS Stream release 8 即可继续。 2. 卸载旧版本 Docker …...

Mac用户必看:彻底解决NTFS读写难题的终极免费方案

Mac用户必看:彻底解决NTFS读写难题的终极免费方案 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and management for NT…...

智能家电语音交互核心技术:从麦克风阵列到语义理解的易用性设计

1. 项目概述:从“鸡肋”到“刚需”的智能语音交互几年前,当智能家电刚开始搭载语音模块时,很多用户的第一反应是“新鲜”,第二反应可能就是“鸡肋”。唤醒词不灵敏、指令识别率低、稍微带点口音就听不懂,更别提在嘈杂环…...

明日方舟MAA助手:如何用5分钟自动化你的每日游戏任务

明日方舟MAA助手:如何用5分钟自动化你的每日游戏任务 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://gitc…...

MAA明日方舟自动辅助工具终极指南:一键解放双手的智能解决方案

MAA明日方舟自动辅助工具终极指南:一键解放双手的智能解决方案 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: htt…...

Display Driver Uninstaller (DDU) 终极指南:显卡驱动彻底清理解决方案

Display Driver Uninstaller (DDU) 终极指南:显卡驱动彻底清理解决方案 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-driv…...

机器人研发选3D打印还是CNC精密打样?

在机器人(尤其是人形机器人、协作机器人)的研发初期,工程师经常面临一个技术选型:为了验证原型,是直接送去 3D 打印,还是找一家精密零件加工厂做 CNC 打样?这个选择不仅关乎打样费用的支出&…...

Crustocean/conch:云原生容器化应用构建与部署的自动化工具箱

1. 项目概述与核心价值最近在折腾一个很有意思的项目,叫“Crustocean/conch”。光看这个名字,你可能觉得有点摸不着头脑,又是“甲壳海洋”又是“海螺”的。其实,这是一个非常典型的、由开发者社区驱动的开源项目命名风格&#xff…...

3分钟搞定Figma中文界面:设计师必备的终极汉化方案

3分钟搞定Figma中文界面:设计师必备的终极汉化方案 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 面对Figma满屏的英文界面感到困扰吗?专业术语看不懂、操作按钮…...

YOLOv8花生种子霉变识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置)

摘要 本文基于YOLOv8目标检测算法,构建了一套火焰烟雾检测系统,并对两类目标(有火/烟、无火/烟)进行了训练与评估。实验使用自建数据集,共包含训练集248张、验证集77张、测试集42张。实验结果表明,模型在测…...

SpeexDSP音频处理库深度解析:3种核心算法实现与40%性能优化实战

SpeexDSP音频处理库深度解析:3种核心算法实现与40%性能优化实战 【免费下载链接】speexdsp Speex audio processing library - THIS IS A MIRROR, DEVELOPMENT HAPPENS AT https://gitlab.xiph.org/xiph/speexdsp 项目地址: https://gitcode.com/gh_mirrors/sp/sp…...