LangGraph基础教程(4)---LangGraph的核心能力

一: 持久化能力

LangGraph 支持图状态的持久化和重放。

利用检查点(checkpointing)来持久化图状态,以及利用检查点执行图得重放和状态更新

检查点是图状态的快照,在图的每个超级步骤(superstep)执行后保存。每个检查点都与一个**线程(thread)**相关联,线程是检查点的集合。

当您调用图时,可以指定 thread_id 作为图配置的一部分。如果您不提供 thread_id,LangGraph 会自动生成一个。

持久化能力的基础:

①: 检查点:

本质:图状态的快照,在每个执行步骤(超级步骤)后自动保存。

作用:支撑状态恢复、重放和调试。

检查点结构:

复制代码
每个检查点都是一个 StateSnapshot 对象,其中包含:
values: 图状态的值
next: 下一个要执行的节点
config: 检查点配置,包括 thread_id 和 checkpoint_id
metadata: 关于检查点的元数据,如源节点和写入的内容
created_at: 创建时间
parent_config: 父检查点的配置
tasks: 与检查点相关的任务

②线程(Thread)

定义:关联特定执行实例的检查点集合,通过 thread_id 标识(可自定义为会话 ID、用户 ID 等)。

特性:调用图时指定 thread_id 即可绑定线程,未指定则自动生成。

持久化能力核心功能:状态的管理与操作

① 状态保存与启用

启用方式:编译图时指定检查点保存器(如 InMemorySaver 内存保存、SqliteSaver 数据库保存)。

自动保存:图执行时,每个步骤后自动生成检查点,覆盖初始状态、各节点执行后状态。

②状态获取

获取最新状态:通过 graph.get_state(config),传入 thread_id 即可。

获取历史状态:通过 graph.get_state_history(config),按时间顺序返回线程的所有检查点(最新在前)。

③状态重放

逻辑:指定 thread_id 和 checkpoint_id,图会跳过该检查点之前的已执行步骤,仅执行后续步骤。

用途:调试、复现执行流程、分支探索。

④状态更新

方法:通过 graph.update_state(config, values) 编辑状态,支持分支现有检查点。

规则:无 reducer 的状态字段直接覆盖,有 reducer 的字段按规则合并(如列表拼接)。

可选参数 as_node:指定更新来源节点,影响后续执行路径。

扩展:

内置:InMemorySaver(适合实验)。

扩展:SqliteSaver(本地生产)、PostgresSaver(分布式生产),需单独安装。

持久化的核心价值

人机循环:支持流程暂停(如人工审核)后恢复,保留中间状态。

记忆保留:跨对话 / 线程共享用户信息,无需重复输入。

时间旅行:重放执行流程,快速调试问题。

容错恢复:节点故障后,从最后一个成功检查点重启,避免重复执行。

二. 持久执行

持久执行是一种技术,其中流程或工作流在关键点保存其进度,使其能够暂停并在稍后从停止的确切位置恢复。

通过保留已完成的工作,持久执行使流程能够恢复而无需重新处理之前的步骤------即使在显著延迟后(例如,一周后)。

核心定义与价值:

①持久执行:工作流在关键点保存进度,可暂停并从停止位置恢复,无需重跑已完成步骤。

②核心场景:人在循环交互(如人工审核)、长时间任务(如 LLM 超时)、系统故障恢复(中断后免重复处理)。

③启用前提:编译图时指定 checkpointer(检查点),即默认开启持久执行。

三种持久性模式:

调用方式:通过 durability 参数指定(如 graph.stream(input, durability="sync"))。

模式 核心逻辑 性能 一致性 适用场景
exit 仅工作流完成(成功 / 失败)后持久化状态 最佳 最低 无需中途恢复的短任务
async 异步持久化(并行执行下一步与保存检查点) 良好 中等 多数常规场景
sync 同步持久化(保存检查点后再执行下一步) 较差 最高 数据不允许丢失的核心任务

三. 流式传输

LangGraph实现了一个流式传输系统,用于实时输出执行进度与数据。

支持的流式传输模式

模式 描述
values 在图的每个步骤后流式传输状态的完整值
updates 在图的每个步骤后流式传输状态的更新。如果在同一步骤中进行了多次更新(例如,运行了多个节点),这些更新会分别流式传输。
custom 从图节点内部流式传输自定义数据。
messages 从调用LLM的任何图节点流式传输2元组(LLM令牌,元数据)。
debug 在图执行过程中流式传输尽可能多的信息。

四. 中断

LangGraph 的中断(Interrupt) 功能允许在图执行的任意点动态暂停流程,等待外部输入(如人工审批、内容编辑)后再恢复,核心依赖检查点(持久化状态) 和thread_id(定位待恢复状态);

中断通过在图节点的任何点调用interrupt()函数来工作。该函数接受任何JSON可序列化的值,这些值会显示给调用者。当您准备好继续时,您通过使用Command重新调用图来恢复执行,然后它成为节点内部interrupt()调用的返回值。

中断定义:LangGraph 中用于动态暂停图执行、等待外部输入的功能,区别于静态断点(固定节点前后暂停),可在节点代码任意位置触发,适配人在循环场景。

价值: 解决 "流程需外部干预" 的需求,如关键操作审批、LLM 输出纠错、工具调用确认等,确保流程安全性和灵活性。

依赖基础:

① 检查点(Checkpointer):必须启用(如InMemorySaver、SqliteSaver),用于持久化暂停时的图状态,确保恢复时不丢失进度。

② thread_id:作为 "持久游标",通过config={"configurable": {"thread_id": ...}}配置,复用该 ID 可恢复对应状态,新 ID 则启动全新流程。

核心要求:必须使用与暂停时相同的 thread_id

相关推荐
serve the people2 分钟前
TensorFlow 2.0 手写数字分类教程之SparseCategoricalCrossentropy 核心原理(一)
人工智能·分类·tensorflow
lovingsoft2 分钟前
复用的Vibe Coding 提示词模板(含原型 / MVP、CRUD、UI 组件、调试反馈 4 类场景)
人工智能·ui·敏捷开发
乾元9 分钟前
LLM 自动生成安全基线与等保合规初稿——把“网络工程事实”转译为“可审计的制度语言”
运维·网络·人工智能·python·安全·架构
Das111 分钟前
【计算机视觉】05_不变性
人工智能·计算机视觉
全栈陈序员11 分钟前
【Python】基础语法入门(二十四)——文件与目录操作进阶:安全、高效地处理本地数据
开发语言·人工智能·python·学习
跨境卫士情报站19 分钟前
摆脱砍单魔咒!Temu 自养号系统化采购,低成本高安全
大数据·人工智能·安全·跨境电商·亚马逊·防关联
OAK中国_官方19 分钟前
将Roboflow工作流引入OAK4:简化实时计算机视觉
人工智能·计算机视觉
吴爃21 分钟前
N8N调用系统接口进行AI分析
运维·人工智能·ai
老鱼说AI22 分钟前
经典论文精读第一期:DeepSeek-R1-Zero ——RL奇迹
人工智能·分布式·深度学习·神经网络·自然语言处理·nlp·transformer
思通数据22 分钟前
市政道路无人机巡检:AI视觉技术的应用与挑战
人工智能·深度学习·安全·目标检测·机器学习·无人机·语音识别