news 2026/4/2 8:21:20

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/3/28 6:15:22

HunyuanVideo-Foley保姆级教程:从安装到输出的每一步解析

HunyuanVideo-Foley保姆级教程:从安装到输出的每一步解析 1. 引言 1.1 技术背景与趋势 随着AI生成内容(AIGC)技术的快速发展,音视频内容创作正经历一场效率革命。传统音效制作依赖专业音频工程师手动匹配环境音、动作音效和背景…

作者头像 李华
网站建设 2026/3/26 16:54:01

VibeVoice-TTS容灾备份:生产级部署保障措施

VibeVoice-TTS容灾备份:生产级部署保障措施 1. 引言 随着生成式AI在语音合成领域的快速演进,VibeVoice-TTS凭借其对长文本、多说话人对话场景的卓越支持,正逐步成为播客、有声书、虚拟角色交互等高阶应用的核心技术方案。该模型由微软研究院…

作者头像 李华
网站建设 2026/3/11 11:54:21

终极指南:如何用ESP32打造你的第一架开源无人机 | 完整教程

终极指南:如何用ESP32打造你的第一架开源无人机 | 完整教程 【免费下载链接】esp-drone Mini Drone/Quadcopter Firmware for ESP32 and ESP32-S Series SoCs. 项目地址: https://gitcode.com/GitHub_Trending/es/esp-drone 还在为昂贵的无人机价格望而却步吗…

作者头像 李华
网站建设 2026/3/31 8:43:24

VibeVoice-TTS低成本方案:按需GPU计费部署实战指南

VibeVoice-TTS低成本方案:按需GPU计费部署实战指南 1. 引言 随着生成式AI技术的快速发展,高质量文本转语音(TTS)系统在内容创作、播客制作、虚拟助手等场景中展现出巨大潜力。然而,传统TTS模型往往受限于合成时长、说…

作者头像 李华
网站建设 2026/3/27 20:39:12

音频视频标签编辑神器:Tag Editor快速上手全攻略

音频视频标签编辑神器:Tag Editor快速上手全攻略 【免费下载链接】tageditor A tag editor with Qt GUI and command-line interface supporting MP4/M4A/AAC (iTunes), ID3, Vorbis, Opus, FLAC and Matroska 项目地址: https://gitcode.com/gh_mirrors/ta/taged…

作者头像 李华
网站建设 2026/3/28 11:58:18

跨架构镜像构建实战(从零到生产级部署)

第一章:跨架构镜像构建实战(从零到生产级部署)在现代云原生环境中,应用需要在多种CPU架构(如x86_64、ARM64)上无缝运行。传统Docker构建方式仅支持当前主机架构,难以满足多平台分发需求。借助Bu…

作者头像 李华