代码改变世界

LangGraph 官方教程:聊天机器人之三 - 实践

2025-11-22 15:20  tlnshuju  阅读(0)  评论(0)    收藏  举报

四、添加记忆

聊天机器人现在可以使用工具来回答用户问题,但它不记得之前交互的上下文。这限制了它进行连贯的多轮对话的能力。

LangGraph 通过持久化检查点解决了这个问题。如果你在编译图时提供一个 checkpointer,并在调用图时提供一个 thread_id,LangGraph 会在每一步之后自动保存状态。当你使用相同的 thread_id 再次调用图时,图会加载其保存的状态,允许聊天机器人从上次停止的地方继续。

我们稍后会看到检查点比简单的聊天记忆_强大得多_ - 它让你可以随时保存和恢复复杂状态,用于错误恢复、人机协作工作流、时间旅行交互等等。但首先,让我们添加检查点来启用多轮对话。

1. 创建一个 MemorySaver 检查点器

创建一个 MemorySaver 检查点器:

--- python ---

from langgraph.checkpoint.memory import InMemorySaver
memory = InMemorySaver()

--- js ---

import { MemorySaver } from "@langchain/langgraph";
const memory = new MemorySaver();

这是一个内存检查点器,对于教程来说很方便。但是,在生产应用程序中,你可能会将其更改为使用 SqliteSaverPostgresSaver 并连接数据库。

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. 与你的聊天机器人交互

现在你可以与你的机器人交互了!

  1. 选择一个线程作为此对话的键。

--- python ---

config = {"configurable": {"thread_id": "1"}}

--- js ---

const config = { configurable: { thread_id: "1" } };
  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 在调用我们的图时作为**