使用 Server API 进行时间旅行¶
LangGraph 提供时间旅行功能,可以从先前的检查点恢复执行,可以选择重放相同状态或修改状态以探索其他可能性。在所有情况下,恢复过去的执行都会在历史记录中产生一个新的分支。
要使用 LangGraph Server API(通过 LangGraph SDK)进行时间旅行:
- 运行图 使用 LangGraph SDK 的
client.runs.wait
或client.runs.stream
API,并提供初始输入。 - 识别现有线程中的检查点:使用
client.threads.get_history
方法检索特定thread_id
的执行历史记录,并找到所需的checkpoint_id
。 或者,在希望执行暂停的节点之前设置一个断点。然后,您可以找到在该断点之前记录的最新检查点。 - (可选)修改图状态:使用
client.threads.update_state
方法修改检查点处的图状态,并从修改后的状态恢复执行。 - 从检查点恢复执行:使用
None
作为输入,并提供适当的thread_id
和checkpoint_id
,调用client.runs.wait
或client.runs.stream
API。
在工作流中使用时间旅行¶
示例图
from typing_extensions import TypedDict, NotRequired
from langgraph.graph import StateGraph, START, END
from langchain.chat_models import init_chat_model
from langgraph.checkpoint.memory import InMemorySaver
class State(TypedDict):
topic: NotRequired[str]
joke: NotRequired[str]
llm = init_chat_model(
"anthropic:claude-3-7-sonnet-latest",
temperature=0,
)
def generate_topic(state: State):
"""LLM 调用以生成一个笑话的主题"""
msg = llm.invoke("Give me a funny topic for a joke")
return {"topic": msg.content}
def write_joke(state: State):
"""LLM 调用以根据主题写一个笑话"""
msg = llm.invoke(f"Write a short joke about {state['topic']}")
return {"joke": msg.content}
# 构建工作流
builder = StateGraph(State)
# 添加节点
builder.add_node("generate_topic", generate_topic)
builder.add_node("write_joke", write_joke)
# 添加边以连接节点
builder.add_edge(START, "generate_topic")
builder.add_edge("generate_topic", "write_joke")
# 编译
graph = builder.compile()
1. 运行图¶
import { Client } from "@langchain/langgraph-sdk";
const client = new Client({ apiUrl: <DEPLOYMENT_URL> });
// 使用名为 "agent" 的已部署图
const assistantID = "agent";
// 创建一个线程
const thread = await client.threads.create();
const threadID = thread["thread_id"];
// 运行图
const result = await client.runs.wait(
threadID,
assistantID,
{ input: {}}
);
2. 识别检查点¶
3. 更新状态(可选)¶
update_state
将创建一个新的检查点。新检查点将与同一线程关联,但具有新的检查点 ID。
4. 从检查点恢复执行¶
了解更多¶
- LangGraph 时间旅行指南:详细了解如何在 LangGraph 中使用时间旅行。