时光回溯 ⏱️¶
前提条件
本指南假设你熟悉 LangGraph 的检查点和状态。如果不熟悉,请先回顾 持久化 概念。
在处理基于模型进行决策的非确定性系统(例如由大语言模型驱动的智能体)时,详细检查其决策过程会很有帮助:
- 🤔 理解推理过程:分析促成成功结果的步骤。
- 🐞 调试错误:确定错误发生的位置和原因。
- 🔍 探索替代方案:测试不同路径以发现更好的解决方案。
我们将这些调试技术称为**时光回溯**,它由两个关键操作组成:重放 🔁 和 分叉 🔀 。
重放¶
重放功能使我们能够回顾并重现智能体过去的操作,直至特定步骤(检查点),包括该步骤。
若要重放特定检查点之前的操作,首先需检索该线程的所有检查点:
每个检查点都有一个唯一的 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)
额外资源 📚¶
- 概念指南:持久化:阅读持久化指南,了解更多关于重放的背景信息。
- 如何查看和更新过往图状态:有关处理图状态的分步说明,展示了**重放**和**分叉**操作。