此功能需要 LangGraph Agent Server。使用
langgraph dev 本地运行您的智能体,或将其部署到 LangSmith,以使用此模式。Checkpoints 的工作原理
LangGraph 会在每个节点执行后持久化代理状态。每个持久化状态都是一个 ThreadState 对象,捕获以下内容:- checkpoint:标识该特定快照的元数据(ID、时间戳)
- values:该点的完整代理状态(messages、自定义键)
- tasks:计划接下来运行的图节点
- next:执行计划中即将运行的节点名称
设置 useStream
为你的代理创建流,然后从 LangGraph client 显式获取活动线程的 checkpoint 历史。从 checkpoint 恢复时使用 forkFrom: { checkpointId }。
The code examples use
useStream<typeof myAgent> for type-safe stream state. See Type inference for Python or JavaScript backends.构建 checkpoint 时间线
时间线侧边栏会将每个 checkpoint 显示为可点击条目。每个条目显示运行过的节点,以及该点存在的消息数量:检查 checkpoint 状态
点击 checkpoint 应显示该点的完整状态。JSON 查看器让开发者完整了解代理知道什么以及做出了什么决策:从 checkpoint 恢复
时间旅行的核心能力是从任意先前 checkpoint 恢复执行。用户选择 checkpoint 时,使用null input 调用 submit 并传入 checkpoint ID:
- 回滚到所选 checkpoint 的状态
- 从该点开始重新执行图
- 将新结果流式传输到客户端
从 checkpoint 恢复不会删除原始时间线。先前 checkpoints 仍会保留在历史中。这意味着用户始终可以回去尝试不同路径,而不会丢失任何先前工作。
SplitView 布局
时间旅行最适合使用分栏布局,主聊天位于左侧,时间线位于右侧:提取 checkpoint 元数据
将原始 checkpoint 数据转换为适合在时间线中显示的条目:用例
时间旅行在许多场景中都很有价值:- 调试代理行为:逐步查看代理决策,理解它为什么选择特定路径
- 撤销动作:如果代理走错方向,从较早的 checkpoint 恢复并重试
- 探索替代路径:从对话中途的 checkpoint fork,查看不同输入如何改变结果
- 审计:查看代理动作的完整历史,用于合规、质量保证或事故后分析
- 教学:逐步走查代理执行过程,解释多步推理如何工作
时间旅行与 human-in-the-loop 模式结合时尤其强大。如果人工审核者在 interrupt 处拒绝了代理动作,可以从该动作执行前的 checkpoint 恢复,并提供纠正输入。
在时间线中处理 interrupts
包含 interrupts(human-in-the-loop 暂停)的 checkpoints 应该有特殊视觉处理。它们代表代理停止并等待人工输入的时刻:最佳实践
- 惰性加载历史:对于包含数百个 checkpoints 的线程,使用分页或只加载最近 N 个条目,以保持 UI 响应。
- 显示有意义的标签:显示节点名称和消息数,而不是原始 checkpoint ID。用户需要上下文,而不是 UUID。
- 恢复前确认:从旧 checkpoint 恢复会替换当前执行路径。显示确认对话框,避免用户意外丢失当前对话状态。
- 高亮当前 checkpoint:让用户清楚看到哪个 checkpoint 对应当前对话状态。
- 支持键盘导航:高级用户会想用方向键逐步浏览 checkpoints。为时间线添加键盘处理器,提供流畅的调试体验。
- 对比 checkpoints 之间的状态差异:对于高级用户,展示两个连续 checkpoints 之间发生了什么变化,可以揭示代理状态在每一步的具体演化。
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

