此功能需要 LangGraph Agent Server。使用
langgraph dev 在本地运行您的代理,或 将其部署到 LangSmith 以使用此模式。检查点的工作原理
LangGraph 在每次节点执行后都会持久化智能体状态。每个持久化的状态都是一个ThreadState 对象,它捕获了:
- checkpoint:标识此特定快照的元数据(ID、时间戳)
- values:此时刻的完整智能体状态(消息、自定义键)
- tasks:计划接下来要运行的图节点
- next:执行计划中即将运行的节点名称
设置 useStream
通过向useStream 传递 fetchStateHistory: true 来启用检查点历史记录。这会告知该钩子加载当前线程的完整检查点时间线。
定义一个与你的智能体状态模式匹配的 TypeScript 接口,并将其作为类型参数传递给 useStream,以便对状态值进行类型安全访问。在下面的示例中,将 typeof myAgent 替换为你的接口名称:
ThreadState 对象
history 数组中的每个条目都是一个 ThreadState,代表时间线中的一个检查点:
构建检查点时间线
时间线侧边栏将每个检查点显示为可点击的条目。每个条目显示运行的节点以及此时刻存在的消息数量:检查检查点状态
点击检查点应显示该时刻的完整状态。JSON 查看器为开发者提供了对智能体所知和所做决策的完全可见性:从检查点恢复
时间旅行的核心是能够从任何先前的检查点恢复执行。当用户选择一个检查点时,使用null 输入调用 submit 并传递检查点引用:
- 回滚到所选检查点的状态
- 从该点开始重新执行图
- 将新结果流式传输到客户端
从检查点恢复不会删除原始时间线。先前的检查点仍保留在历史记录中。这意味着用户始终可以返回并尝试不同的路径,而不会丢失任何先前的工作。
SplitView 布局
时间旅行在分屏布局下效果最佳,左侧是主聊天区,右侧是时间线:提取检查点元数据
将原始检查点数据转换为适合时间线显示的条目:使用场景
时间旅行在许多场景中都非常宝贵:- 调试智能体行为:逐步查看智能体的决策,以理解它为何选择特定路径
- 撤销操作:如果智能体走错了方向,可以从较早的检查点恢复并重试
- 探索替代方案:从对话中途的检查点分叉,查看不同输入如何改变结果
- 审计:审查智能体操作的完整历史,用于合规性、质量保证或事后分析
- 教学:逐步讲解智能体的执行过程,解释多步推理的工作原理
时间旅行与人在回路模式结合使用时尤其强大。如果人类审核员在中断处拒绝了智能体的操作,他们可以从操作执行前的检查点恢复并提供纠正性输入。
处理时间线中的中断
包含中断(人在回路暂停)的检查点需要特殊的视觉处理。它们代表了智能体停止并等待人类输入的时刻:最佳实践
- 延迟加载历史记录:对于包含数百个检查点的线程,进行分页或仅加载最近的 N 个条目,以保持 UI 响应性。
- 显示有意义的标签:显示节点名称和消息数量,而不是原始检查点 ID。用户需要的是上下文,而不是 UUID。
- 恢复前确认:从旧检查点恢复会替换当前的执行路径。显示确认对话框,以免用户意外丢失当前的对话状态。
- 高亮当前检查点:在视觉上明确指示哪个检查点对应于对话的当前状态。
- 支持键盘导航:高级用户会希望使用方向键逐步浏览检查点。为时间线添加键盘处理程序,以提供流畅的调试体验。
- 比较检查点间的状态差异:对于高级用户,显示两个连续检查点之间的变化可以揭示智能体状态在每个步骤中是如何演变的。
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

