跳到内容

时间旅行 ⏱️

先决条件

本指南假设您熟悉 LangGraph 的检查点和状态。如果不熟悉,请先阅读持久化概念。

在使用基于模型做出决策的非确定性系统(例如,由 LLMs 驱动的代理)时,详细检查其决策过程可能会很有用

  1. 🤔 理解推理:分析导致成功结果的步骤。
  2. 🐞 调试错误:识别错误发生的位置和原因。
  3. 🔍 探索替代方案:测试不同的路径以发现更好的解决方案。

我们将这些调试技术称为 时间旅行,它由两个关键操作组成:回放 🔁 和 分叉 🔀。

回放

回放允许我们重访和重现代理过去的动作,包括达到某个特定步骤(检查点)。

要在特定检查点之前回放动作,首先需要检索该线程的所有检查点

all_checkpoints = []
for state in graph.get_state_history(thread):
    all_checkpoints.append(state)

每个检查点都有一个唯一的 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)

附加资源 📚

评论