概述
LangGraph 通过检查点支持时间旅行: 两者都通过从先前的检查点恢复执行来实现。检查点之前的节点不会重新执行(结果已保存)。检查点之后的节点会重新执行,包括任何 LLM 调用、API 请求和中断(这些操作可能产生不同的结果)。重放
使用先前检查点的配置调用图,即可从该点开始重放。
get_state_history 查找要重放的检查点,然后使用该检查点的配置调用 invoke:
分叉
分叉从过去的检查点创建一个新分支,并修改状态。在先前检查点上调用update_state 以创建分叉,然后使用 None 调用 invoke 以继续执行。

从特定节点
当您调用update_state 时,值会使用指定节点的写入器(包括归约器)进行应用。检查点记录该节点产生了更新,并从该节点的后继节点恢复执行。
默认情况下,LangGraph 从检查点的版本历史推断 as_node。当从特定检查点分叉时,这种推断几乎总是正确的。
在以下情况下显式指定 as_node:
- 并行分支:多个节点在同一步骤中更新了状态,且 LangGraph 无法确定哪个是最后一个(
InvalidUpdateError)。 - 无执行历史:在新线程上设置状态(常见于测试)。
- 跳过节点:将
as_node设置为较晚的节点,使图认为该节点已经运行。
中断
如果您的图使用interrupt 实现人机交互工作流,则在时间旅行期间中断总是会重新触发。包含中断的节点会重新执行,并且 interrupt() 会暂停以等待新的 Command(resume=...)。
多个中断
如果您的图在多个点收集输入(例如,多步骤表单),您可以在中断之间分叉,以更改后续答案而无需重新询问之前的问题。子图
使用子图进行时间旅行取决于子图是否拥有自己的检查点器。这决定了您可以进行时间旅行的检查点粒度。- 继承的检查点器(默认)
- 子图检查点器
默认情况下,子图继承父图的检查点器。父图将整个子图视为单个超级步骤——整个子图执行只有一个父级检查点。从子图之前进行时间旅行会从头重新执行子图。您无法在默认子图中定位到节点之间的点进行时间旅行——只能从父级进行时间旅行。
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

