本文档介绍如何使用 langgraph
库来构建一个简单的聊天机器人。逐步解释代码,并展示如何定义状态、节点和边。
1. 导入必要的模块
首先,我们需要导入相关模块和函数:
from config import llm
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
llm
:导入LLM配置,用于处理聊天消息。Annotated
:用于类型注解。TypedDict
:定义类型字典。StateGraph
,START
,END
:langgraph
库中的图和状态常量。add_messages
:定义如何更新消息列表。
2. 定义状态类型
我们定义一个状态类型 State
,其中包含一个消息列表。add_messages
函数用于将新消息添加到列表中。
class State(TypedDict):
messages: Annotated[list, add_messages]
3. 创建状态图构建器
使用 StateGraph
类创建一个图构建器实例,并指定状态类型为 State
。
graph_builder = StateGraph(State)
4. 定义聊天机器人函数
定义一个函数 chatbot
,它接受一个状态参数,并返回一个包含新消息的字典。该函数调用 llm.invoke
来生成响应。
def chatbot(state: State):
return {"messages": [llm.invoke(state["messages"])]}
5. 添加节点和边
使用 graph_builder
添加节点和边:
graph_builder.add_node("chatbot", chatbot)
graph_builder.add_edge(START, "chatbot")
graph_builder.add_edge("chatbot", END)
add_node("chatbot", chatbot)
:添加名为chatbot
的节点,并指定其处理函数。add_edge(START, "chatbot")
:添加从START
到chatbot
的边。add_edge("chatbot", END)
:添加从chatbot
到END
的边。
6. 编译图
编译图以便使用。
graph = graph_builder.compile()
7. 运行聊天机器人
使用 while
循环持续运行聊天机器人,直到用户输入 quit
、exit
或 q
。每次用户输入后,图会处理输入并生成响应。
while True:
user_input = input("User: ")
if user_input.lower() in ["quit", "exit", "q"]:
print("Goodbye!")
break
for event in graph.stream({"messages": ("user", user_input)}):
for value in event.values():
print("Assistant:", value["messages"][-1].content)
结果如下:
User: hello
Assistant: Hello 👋! I'm ZhiPuQingYan(智谱清言), you can call me Xiaozhi🤖, the artificial intelligence assistant, nice to meet you. Feel free to ask me any questions.
User: