时间旅行 ⏱️¶
前提条件
本指南假设您熟悉LangGraph的检查点和状态。如果不熟悉,请先查阅persistence概念。
当处理基于模型做出决策的非确定性系统(例如由LLM驱动的代理)时,详细检查其决策过程可能会很有用:
- 🤔 理解推理:分析导致成功结果的步骤。
- 🐞 调试错误:识别错误发生的位置和原因。
- 🔍 探索替代方案:测试不同的路径以发现更好的解决方案。
我们将这些调试技术称为**时间旅行**,它由两个关键操作组成:回放 🔁 和 分支 🔀 。
重放¶
重放功能允许我们重新访问并重现代理在特定步骤(检查点)之前的过去行为。
要重放某个特定检查点之前的动作,请首先检索该线程的所有检查点:
每个检查点都有一个唯一的ID。确定所需的检查点后,例如xyz
,将其ID包含在配置中:
config = {'configurable': {'thread_id': '1', 'checkpoint_id': 'xyz'}}
for event in graph.stream(None, config, stream_mode="values"):
print(event)
图会重放之前执行的步骤,在提供的checkpoint_id
之前执行的步骤,并且在checkpoint_id
之后执行新的步骤(即一个新的分支),即使这些步骤之前已经被执行过。
分支¶
分支功能允许您重新审视代理过去的动作,并在图中探索不同的路径。
要编辑特定的检查点,例如xyz
,在更新图的状态时提供其checkpoint_id
:
config = {"configurable": {"thread_id": "1", "checkpoint_id": "xyz"}}
graph.update_state(config, {"state": "updated state"})
这会从指定的检查点创建一个新的分支检查点xyz-fork
,您可以从中继续运行图:
config = {'configurable': {'thread_id': '1', 'checkpoint_id': 'xyz-fork'}}
for event in graph.stream(None, config, stream_mode="values"):
print(event)
额外资源 📚¶
- 概念指南:持久性: 阅读持久性指南以获取更多关于重播的背景信息。
- 如何查看和更新过去的图状态: 逐步说明如何使用图状态,演示了 重播 和 分支 操作。