内置的持久层-检查点(Checkpoint) 机制实现

真正强大且以用户为中心的 AI 智能体不仅需要速度,还需要有连续性。用户期望AI 智能体能够记住过往交互,跨多个会话保持上下文,并能优雅地从中断或错误中恢复。这正是持久化技术的价值所在。

LangGraph 的持久化基于线程(Thread)和存档点(Checkpoint)两大概念之上。

线程代表图的独立执行上下文或会话,由 thread_id 唯一标识。

存档点本质上是图在执行的不同阶段的状态快照,由可插拔的存档点器(Checkpointer)管理。

本章节将深入探讨线程和存档点如何协同工作以提供连续性并实现高级智能体功能。

核心概念:线程(Thread)与检查点(Checkpoint)

1. 线程(Thread)

在LangGraph 框架中,线程代表图的独立执行上下文。可以将其理解为特定对话历史记录或工作流程执行的专属实例。每个线程都通过唯一的thread_id 进行标识,开发者在调用支持持久化的LangGraph 时必须提供该标识符。这个thread_id 作为命名空间,确保每个执行过程关联的存档点和状态数据与其他执行实例保持隔离。这种隔离机制对于处理并发用户交互或管理同一LangGraph 应用中的多个独立工作流程具有关键作用。

当启动支持持久化的LangGraph 运行时,必须在configurable 配置部分明确指定thread_id 参数。

在调用 LangGraph 时在 config 中传递 thread_id

config = {"configurable": {"thread_id": "user_conversation_123"}}

2. 检查点(Checkpoint)

LangGraph 中的检查点是图在特定时间点的状态快照。当启用持久化功能时,LangGraph 会在图执行的每个 Superstep 后自动创建这些快照。Superstep 通常对应图中一个或多个节点的执行,然后由控制流逻辑确定下一步。每个存档点都会完整捕获图的当前状态,包括所有已定义状态通道的值。此状态被封装在 StateSnapshot 对象中,该对象包含以下关键组成部分。

属性名称 描述
config 与此存档点关联的配置,包括 thread_id 和唯一的 checkpoint_id。
metadata 与存档点关联的元数据,包括执行步骤、存档点来源,以及写入操作的上下文信息。
values 包含存档点创建时所有状态通道值的字典。这是持久化的核心状态数据。
next 指示在图流程中计划执行的下一个节点的元组。
tasks 由 PregelTask 对象组成的元组,提供关于下一步任务的详细信息,包括任务 ID、节点名称,以及可能出现的错误或中断记录。

这些 StateSnapshot 对象由存档点器存储在持久化存储后端中,并与 thread_id 关联。LangGraph 自动处理存档点过程,在每个Superstep 后创建新的存档点。这确保了智能体状态的定期备份,从而实现状态的恢复、重放和检查。通过检索和加载这些存点,LangGraph 可以从先前保存的状态开始“回溯”或“恢复”智能体,从而支持诸如记忆保持和时间旅行等高级特性。

内存检查点保存器

LangGraph 提供了几种内置的存档点器实现,每种实现都利用不同的存储后端。

MemorySaver:内存存档点
  • 优点:快速、易于设置
  • 缺点:数据不持久,应用重启后丢失
  • 用途:开发、测试、原型设计
SqliteSaver:基于文件的持久化
  • 优点:轻量级、跨应用重启持久
  • 缺点:不适合高并发场景
  • 用途:本地应用、小规模部署
PostgresSaver:生产级持久化
  • 优点:可靠、可扩展、支持并发
  • 缺点:需要数据库服务器
  • 用途:生产环境、多用户应用

让我们通过实际例子来演示持久化的使用:

示例 1:使用 MemorySaver 实现持久化的笑话生成器

让我们创建一个带有持久化功能的笑话生成器,演示如何保存和恢复状态:

from langgraph.checkpoint.memory import MemorySaver# 使用 LLM 版本的笑话生成器,但添加持久化graph_persistent = (    StateGraph(State)    .add_node(refine_topic)    .add_node("generate_joke", generate_joke_with_llm)    .add_edge(START, "refine_topic")    .add_edge("refine_topic", "generate_joke")    .compile(checkpointer=MemorySaver())  # 启用持久化)# 定义线程配置config = {"configurable": {"thread_id": "my_thread_1"}}print("第一次运行:")for chunk in graph_persistent.stream(    {"topic": "ice cream"},    config=config,    stream_mode="updates",):    print(chunk)print("\n获取最终状态:")print(graph_persistent.get_state(config).values)第一次运行:{'refine_topic': {'topic': 'ice cream and cats'}}{'generate_joke': {'joke': 'Why did the cat wear a scarf around its ice cream cone?\n\nBecause it was a chilly day and the cat wanted to keep its "paws" cool!'}}获取最终状态:{'topic': 'ice cream and cats', 'joke': 'Why did the cat wear a scarf around its ice cream cone?\n\nBecause it was a chilly day and the cat wanted to keep its "paws" cool!'}
示例 2:使用 SqliteSaver 编译具有持久化的 LangGraph
import sqlite3from langgraph.checkpoint.sqlite import SqliteSaverconn = sqlite3.connect("checkpoints.sqlite", check_same_thread=False)checkpointer = SqliteSaver(conn)# 使用 LLM 版本的笑话生成器,但添加持久化graph_persistent = (    StateGraph(State)    .add_node(refine_topic)    .add_node("generate_joke", generate_joke_with_llm)    .add_edge(START, "refine_topic")    .add_edge("refine_topic", "generate_joke")    .compile(checkpointer=checkpointer)  # 启用持久化)# 定义线程配置config = {"configurable": {"thread_id": "my_thread_1"}}print("第一次运行:")for chunk in graph_persistent.stream(    {"topic": "ice cream"},    config=config,    stream_mode="updates",):    print(chunk)print("\n获取最终状态:")print(graph_persistent.get_state(config).values)第一次运行:{'refine_topic': {'topic': 'ice cream and cats'}}{'generate_joke': {'joke': 'Why did the cat refuse to eat the ice cream?\n\nBecause it was purr-fectly chilled!'}}获取最终状态:{'topic': 'ice cream and cats', 'joke': 'Why did the cat refuse to eat the ice cream?\n\nBecause it was purr-fectly chilled!'}

持久化的实际应用

1. 对话记忆

这种由 LangGraph 持久化实现的对话记忆,实际上是一种短期对话记忆。智能体会记住当前对话中的内容,因为消息历史记录和相关状态会在每个回合通过存档点器保存。这种短期记忆对于维持基本的对话连贯性和响应性至关重要。

2. 人机环路工作流

持久化机制在 LangGraph 中对于实现人机环路工作流至关重要。
这些工作流需要在智能体执行的各阶段引入人工干预,以实现批准、反馈或直接的状态编辑。持久化支持图执行的无缝中断和恢复,允许人工操作员检查存档点处的智能体状态、做出决策、提供输入或修改状态,然后指示图从该点继续执行。

3. 时间旅行调试和分支

LangGraph 的持久化机制在支持时间旅行方面展现了其强大能力,为高级开发和调试工作提供重要支持。时间旅行在此能指导并查看 LangGraph 执行的历史状态,使开发者能检查过去的决策、从特定点重放执行过程,甚至分支执行路径以探索替代结果。这一功能显著提升开发效率,使调试工作更高效,实验更加便捷,同时深化对复杂智能体行为的整体理解。

时间旅行的基础是浏览执行历史记录的能力。在 config 中提供 thread_id时,graph.get_state(config) 方法会返回指定线程的当前状态。graph.get_state_history(config) 方法会返回按时间顺序排列的 StateSnapshot 对象列表。此列表记录指定线程的完整执行历史,最新状态快照排在最前。

示例 3:使用 graph.get_state_history 浏览执行历史记录

持久化的一个强大功能是能够查看完整的状态历史:

print("状态历史回顾:")state_history = list(graph_persistent.get_state_history(config))for i, snapshot in enumerate(state_history):    print(f"\n存档点 {i + 1}:")    print(f"  ID: {snapshot.config['configurable']['checkpoint_id'][:8]}...")    print(f"  步骤: {snapshot.metadata}")    print(f"  状态: {snapshot.values}")    print(f"  下一个节点: {snapshot.next}")    print("-" * 50)状态历史回顾:存档点 1:  ID: 1f07dcca...  步骤: {'source': 'loop', 'step': 2, 'parents': {}}  状态: {'topic': 'ice cream and cats', 'joke': 'Why did the cat refuse to eat the ice cream?\n\nBecause it was purr-fectly chilled!'}  下一个节点: ()--------------------------------------------------存档点 2:  ID: 1f07dcca...  步骤: {'source': 'loop', 'step': 1, 'parents': {}}  状态: {'topic': 'ice cream and cats'}  下一个节点: ('generate_joke',)--------------------------------------------------存档点 3:  ID: 1f07dcca...  步骤: {'source': 'loop', 'step': 0, 'parents': {}}  状态: {'topic': 'ice cream'}  下一个节点: ('refine_topic',)--------------------------------------------------存档点 4:  ID: 1f07dcca...  步骤: {'source': 'input', 'step': -1, 'parents': {}}  状态: {}  下一个节点: ('__start__',)--------------------------------------------------

💡 状态历史的价值

通过查看状态历史,我们可以看到:

  • • 每个存档点的唯一 ID
  • • 执行的步骤和元数据信息
  • • 每个阶段的完整状态
  • • 计划执行的下一个节点

这对于调试、监控和理解智能体的行为非常有价值。

示例 4:使用 graph.stream(…, checkpoint_id=…) 重放执行
# 正确的重放方式:从检查点继续执行# 选择一个中间存档点(有下一个步骤的)# 第2个存档点,状态为刚完成refine_topiccheckpoint_to_replay = state_history[1]print(f"重放检查点:{checkpoint_to_replay.values}")print(f"下一个节点:{checkpoint_to_replay.next}")# 从该检查点继续执行replay_config = checkpoint_to_replay.configprint("\n从检查点继续执行:")for event in graph_persistent.stream(None, replay_config, stream_mode="values"):    print(event)重放检查点:{'topic': 'ice cream and cats'}下一个节点:('generate_joke',)从检查点继续执行:{'topic': 'ice cream and cats'}{'topic': 'ice cream and cats', 'joke': 'Why did the cat join the ice cream shop\'s loyalty program?\n\nBecause she heard they had a "paw-some" reward for paws-singly good reviewers!'}
更新状态(update_state)

功能: 允许用户或外部系统手动编辑图的状态。这可以用于强制纠正、注入信息或在特定检查点创建分叉(Fork)历史。

关键参数

config:必须包含thread_id。如果包含checkpoint_id,则会从该历史点开始分叉。只传递thread_id则更新当前最新状态。
values:用于更新状态的值。更新逻辑与节点输出完全相同,即会通过状态通道的归约器进行处理。对于有归约器的通道,它是累加/合并;对于没有归约器的通道,它是覆盖。
as_node:(可选)指定本次更新来自哪个节点。这很重要,因为它会影响图在更新后决定下一个执行哪个节点。

示例 5:使用 graph.update_state(…, values) 从存档点分支执行
# 让我们从历史记录中的第 2 个存档点分支checkpoint_to_branch = state_history[1]branch_config = checkpoint_to_branch.config# 创建一个新存档点,使用相同的 checkpoint_id 但更新状态new_branch = graph_persistent.update_state(    branch_config,    {"topic": "ice cream and dogs"})# 恢复图的执行 - 它现在将使用分支的存档点for event in graph_persistent.stream(None, new_branch, stream_mode="values"):    print(event){'topic': 'ice cream and dogs'}{'topic': 'ice cream and dogs', 'joke': 'Why did the dog refuse the ice cream?\n\nBecause he heard it was "paw-sicly" good!'}

普通人如何抓住AI大模型的风口?

为什么要学AI大模型

当下,⼈⼯智能市场迎来了爆发期,并逐渐进⼊以⼈⼯通⽤智能(AGI)为主导的新时代。企业纷纷官宣“ AI+ ”战略,为新兴技术⼈才创造丰富的就业机会,⼈才缺⼝将达 400 万!

DeepSeek问世以来,生成式AI和大模型技术爆发式增长,让很多岗位重新成了炙手可热的新星,岗位薪资远超很多后端岗位,在程序员中稳居前列。

在这里插入图片描述

与此同时AI与各行各业深度融合,飞速发展,成为炙手可热的新风口,企业非常需要了解AI、懂AI、会用AI的员工,纷纷开出高薪招聘AI大模型相关岗位。
在这里插入图片描述

AI大模型开发工程师对AI大模型需要了解到什么程度呢?我们先看一下招聘需求:

在这里插入图片描述

知道人家要什么能力,一切就好办了!我整理了AI大模型开发工程师需要掌握的知识如下:

大模型基础知识

你得知道市面上的大模型产品生态和产品线;还要了解Llama、Qwen等开源大模型与OpenAI等闭源模型的能力差异;以及了解开源模型的二次开发优势,以及闭源模型的商业化限制,等等。

img

了解这些技术的目的在于建立与算法工程师的共通语言,确保能够沟通项目需求,同时具备管理AI项目进展、合理分配项目资源、把握和控制项目成本的能力。

产品经理还需要有业务sense,这其实就又回到了产品人的看家本领上。我们知道先阶段AI的局限性还非常大,模型生成的内容不理想甚至错误的情况屡见不鲜。因此AI产品经理看技术,更多的是从技术边界、成本等角度出发,选择合适的技术方案来实现需求,甚至用业务来补足技术的短板。

AI Agent

现阶段,AI Agent的发展可谓是百花齐放,甚至有人说,Agent就是未来应用该有的样子,所以这个LLM的重要分支,必须要掌握。

Agent,中文名为“智能体”,由控制端(Brain)、感知端(Perception)和行动端(Action)组成,是一种能够在特定环境中自主行动、感知环境、做出决策并与其他Agent或人类进行交互的计算机程序或实体。简单来说就是给大模型这个大脑装上“记忆”、装上“手”和“脚”,让它自动完成工作。

Agent的核心特性

自主性: 能够独立做出决策,不依赖人类的直接控制。

适应性: 能够根据环境的变化调整其行为。

交互性: 能够与人类或其他系统进行有效沟通和交互。

img

对于大模型开发工程师来说,学习Agent更多的是理解它的设计理念和工作方式。零代码的大模型应用开发平台也有很多,比如dify、coze,拿来做一个小项目,你就会发现,其实并不难。

AI 应用项目开发流程

如果产品形态和开发模式都和过去不一样了,那还画啥原型?怎么排项目周期?这将深刻影响产品经理这个岗位本身的价值构成,所以每个AI产品经理都必须要了解它。

img

看着都是新词,其实接触起来,也不难。

从0到1的大模型系统学习籽料

最近很多程序员朋友都已经学习或者准备学习 AI 大模型,后台也经常会有小伙伴咨询学习路线和学习资料,我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师(吴文俊奖得主)
在这里插入图片描述

给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频 全系列的学习资料,这些学习资料不仅深入浅出,而且非常实用,让大家系统而高效地掌握AI大模型的各个知识点。

图片

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

适学人群

应届毕业生‌: 无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌: 非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能突破瓶颈: 传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。
在这里插入图片描述

AI大模型系统学习路线

在面对AI大模型开发领域的复杂与深入,精准学习显得尤为重要。一份系统的技术路线图,不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点,还能提供一条高效、有序的学习路径。

  • 基础篇,包括了大模型的基本情况,核心原理,带你认识了解大模型提示词,Transformer架构,预训练、SFT、RLHF等一些基础概念,用最易懂的方式带你入门AI大模型
  • 进阶篇,你将掌握RAG,Langchain、Agent的核心原理和应用,学习如何微调大模型,让大模型更适合自己的行业需求,私有化部署大模型,让自己的数据更加安全
  • 项目实战篇,会手把手一步步带着大家练习企业级落地项目,比如电商行业的智能客服、智能销售项目,教育行业的智慧校园、智能辅导项目等等

img

但知道是一回事,做又是另一回事,初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性,在这基础上,找到高质量的学习资源,不浪费时间、不走弯路,又是重中之重。

AI大模型入门到实战的视频教程+项目包

看视频学习是一种高效、直观、灵活且富有吸引力的学习方式,可以更直观地展示过程,能有效提升学习兴趣和理解力,是现在获取知识的重要途径

在这里插入图片描述
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

海量AI大模型必读的经典书籍(PDF)

阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。
在这里插入图片描述

600+AI大模型报告(实时更新)

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
在这里插入图片描述

AI大模型面试真题+答案解析

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下
在这里插入图片描述

在这里插入图片描述

AI时代,企业最需要的是既懂技术、又有实战经验的复合型人才,**当前人工智能岗位需求多,薪资高,前景好。**在职场里,选对赛道就能赢在起跑线。抓住AI这个风口,相信下一个人生赢家就是你!机会,永远留给有准备的人。

如何获取?

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐