news 2026/6/2 9:57:52

Langgraph-Checkpointing 和中断机制源码分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Langgraph-Checkpointing 和中断机制源码分析

第四篇:Checkpointing 和中断机制源码分析

请关注公众号【碳硅化合物AI】

概述

Checkpointing(检查点)机制使 LangGraph 能够持久化执行状态,支持故障恢复、状态回滚和人机交互。中断机制允许在执行过程中暂停,等待人工干预。本文档深入分析检查点的保存和恢复流程,以及中断机制的实现原理。

入口类及说明

核心类关系

Checkpointing 系统的核心是BaseCheckpointSaver接口,中断机制通过GraphInterrupt异常和interrupt()函数实现。

关键类说明

BaseCheckpointSaver

BaseCheckpointSaver类位于libs/checkpoint/langgraph/checkpoint/base/__init__.py:116,定义了检查点保存器的接口。它必须实现:

  1. 获取检查点

    • get_tuple():根据配置获取检查点元组
    • list():列出匹配的检查点
  2. 保存检查点

    • put():保存检查点和元数据
    • put_writes():保存待处理的写入
  3. 异步版本:如果支持异步执行,需要实现aget_tuple()aput()等异步方法

Checkpoint

Checkpoint是一个 TypedDict,定义在libs/checkpoint/langgraph/checkpoint/base/__init__.py,包含:

  1. 版本信息

    • v:检查点格式版本
    • id:检查点唯一标识符
    • ts:时间戳
  2. 状态数据

    • channel_values:通道的当前值
    • channel_versions:通道的版本号
    • versions_seen:已看到的版本(用于中断检测)
  3. 元数据

    • updated_channels:本次更新的通道列表
GraphInterrupt

GraphInterrupt类位于libs/langgraph/langgraph/errors.py:84,是中断异常。它:

  1. 包含中断信息args包含Interrupt对象序列
  2. 传播机制:在子图中被捕获,只在根图抛出
  3. 恢复支持:中断信息包含恢复所需的 ID

关键流程描述

检查点保存流程

每个 super-step 结束后,PregelLoop 会保存检查点:

检查点恢复流程

从检查点恢复执行时:

中断机制流程

中断机制支持两种方式:静态中断(interrupt_before/after)和动态中断(interrupt() 函数)。

静态中断流程

动态中断流程(interrupt() 函数)

实现关键点说明

1. Thread 和 Checkpoint 概念

  • Thread:一个线程 ID 对应一系列相关的检查点,用于多租户场景
  • Checkpoint:线程在某个时间点的状态快照
  • Checkpoint ID:可以指定检查点 ID 从特定点恢复

2. 检查点版本控制

通道使用版本号跟踪更新:

  • 每次更新通道时,版本号递增
  • versions_seen记录上次中断时看到的版本
  • 通过比较版本号判断是否有新更新

3. 待处理写入(Pending Writes)

当节点执行失败时:

  • 其他成功节点的写入被保存为pending_writes
  • 恢复执行时,这些写入会被应用到相应的任务
  • 避免重复执行已成功的节点

4. 中断检测机制

should_interrupt()函数检查是否需要中断:

def should_interrupt( checkpoint: Checkpoint, interrupt_nodes: All | Sequence[str], tasks: Iterable[PregelExecutableTask], ) -> list[PregelExecutableTask]: # 检查是否有通道更新 any_updates_since_prev_interrupt = any( version > seen.get(chan, null_version) for chan, version in checkpoint["channel_versions"].items() ) # 检查任务是否在中断列表中 return [ task for task in tasks if task.name in interrupt_nodes ] if any_updates_since_prev_interrupt else []

5. 中断恢复机制

恢复中断时:

  1. 使用Command(resume=...)提供恢复值
  2. 恢复值通过map_command()映射到相应的中断
  3. 中断值存储在PregelScratchpad
  4. 节点重新执行时,interrupt()函数返回恢复值

6. 序列化支持

检查点使用SerializerProtocol序列化:

  • 默认使用JsonPlusSerializer
  • 支持 LangChain 和 LangGraph 原语
  • 支持日期时间、枚举等类型

总结说明

Checkpointing 和中断机制通过以下方式实现了持久化执行和人机交互:

  1. 检查点保存:每个 super-step 保存状态,支持故障恢复
  2. 版本控制:使用版本号跟踪更新,支持中断检测
  3. 待处理写入:保存部分成功的结果,避免重复执行
  4. 静态中断:通过interrupt_before/after在特定节点中断
  5. 动态中断:通过interrupt()函数在节点内部中断
  6. 恢复机制:使用Command(resume=...)恢复执行

关键设计决策:

  • 版本跟踪:通过版本号高效检测状态变化
  • 延迟应用:待处理写入在恢复时应用,避免重复执行
  • 异常机制:使用异常实现中断,简化控制流
  • 序列化抽象:通过SerializerProtocol支持多种序列化格式

理解 Checkpointing 和中断机制有助于:

  • 实现故障恢复(从检查点恢复执行)
  • 实现人机交互(在关键点中断等待输入)
  • 优化性能(避免重复执行)
  • 实现状态回滚(回到之前的检查点)

下一篇文档将深入分析状态管理和节点执行,了解状态更新、合并和错误处理机制。

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

HunyuanVideo-Foley详细步骤:如何用AI自动生成逼真环境音?

HunyuanVideo-Foley详细步骤:如何用AI自动生成逼真环境音? 1. 技术背景与核心价值 随着视频内容创作的爆发式增长,音效制作逐渐成为制约效率的关键环节。传统音效添加依赖专业音频工程师手动匹配动作与声音,耗时且成本高昂。尤其…

作者头像 李华
网站建设 2026/6/1 11:02:20

HunyuanVideo-Foley + Stable Video Diffusion:AI视频全流程闭环

HunyuanVideo-Foley Stable Video Diffusion:AI视频全流程闭环 1. 技术背景与行业痛点 在当前的数字内容创作领域,高质量视频制作对音效的依赖日益增强。传统音效添加流程通常需要专业音频工程师手动匹配动作、环境和情绪,耗时且成本高昂。…

作者头像 李华
网站建设 2026/6/1 10:02:41

AnimeGANv2社区生态:插件扩展与用户共创模式

AnimeGANv2社区生态:插件扩展与用户共创模式 1. 引言:AI二次元转换的技术演进与社区驱动 随着深度学习在图像风格迁移领域的持续突破,AnimeGAN系列模型因其出色的动漫风格生成能力,迅速在AI艺术创作社区中崭露头角。从最初的Ani…

作者头像 李华
网站建设 2026/5/29 4:06:03

STLink识别不出来:NRST引脚电平状态核心要点

当STLink连不上?别急着重装驱动,先查NRST引脚!你有没有遇到过这样的场景:手里的STLink插上电脑,目标板也通了电,但STM32CubeIDE、Keil或者STVP就是报“No target connected”、“stlink识别不出来”&#x…

作者头像 李华
网站建设 2026/5/29 9:13:42

为什么你的容器总被OOMKilled?深入解析内存监控盲区

第一章:容器资源占用监控 在现代云原生架构中,容器化应用的资源使用情况直接影响系统稳定性与成本控制。对 CPU、内存、网络和磁盘 I/O 的实时监控,是保障服务 SLA 的关键环节。Kubernetes 等编排平台提供了基础资源指标采集能力,…

作者头像 李华
网站建设 2026/5/24 2:10:30

每天数千镜像如何确保安全?,揭秘头部厂商的自动化扫描架构

第一章:每天数千镜像如何确保安全?在现代云原生环境中,企业每天可能构建并推送数千个容器镜像。这些镜像来源复杂、层级嵌套深,若缺乏有效的安全管控机制,极易引入漏洞或后门。确保如此庞大数量的镜像安全,…

作者头像 李华