LangGraph 官方教程:聊天机器人之三
四、添加记忆
聊天机器人现在可以使用工具来回答用户问题,但它不记得之前交互的上下文。这限制了它进行连贯的多轮对话的能力。
LangGraph 通过持久化检查点解决了这个问题。如果你在编译图时提供一个 checkpointer,并在调用图时提供一个 thread_id,LangGraph 会在每一步之后自动保存状态。当你使用相同的 thread_id 再次调用图时,图会加载其保存的状态,允许聊天机器人从上次停止的地方继续。
我们稍后会看到检查点比简单的聊天记忆_强大得多_ - 它让你可以随时保存和恢复复杂状态,用于错误恢复、人机协作工作流、时间旅行交互等等。但首先,让我们添加检查点来启用多轮对话。
1. 创建一个 MemorySaver 检查点器
创建一个 MemorySaver 检查点器:
--- python ---
from langgraph.checkpoint.memory import InMemorySavermemory = InMemorySaver()
--- js ---
import { MemorySaver } from "@langchain/langgraph";const memory = new MemorySaver();
这是一个内存检查点器,对于教程来说很方便。但是,在生产应用程序中,你可能会将其更改为使用 SqliteSaver 或 PostgresSaver 并连接数据库。
2. 编译图
使用提供的检查点器编译图,它将在图处理每个节点时检查点 State:
--- python ---
graph = graph_builder.compile(checkpointer=memory)
--- js ---
const graph = new StateGraph(State).addNode("chatbot", chatbot).addNode("tools", new ToolNode(tools)).addConditionalEdges("chatbot", toolsCondition, ["tools", END]).addEdge("tools", "chatbot").addEdge(START, "chatbot").compile({ checkpointer: memory });
3. 与你的聊天机器人交互
现在你可以与你的机器人交互了!
- 选择一个线程作为此对话的键。
--- python ---
config = {"configurable": {"thread_id": "1"}}
--- js ---
const config = { configurable: { thread_id: "1" } };
- 调用你的聊天机器人:
--- python ---
user_input = "Hi there! My name is Will."# config 是 stream() 或 invoke() 的**第二个位置参数**!
events = graph.stream({"messages": [{"role": "user", "content": user_input}]},config,stream_mode="values",
)
for event in events:event["messages"][-1].pretty_print()
================================ Human Message =================================
Hi there! My name is Will.
================================== Ai Message ==================================
Hello Will! It's nice to meet you. How can I assist you today? Is there anything specific you'd like to know or discuss?
config 在调用我们的图时作为**
