在本教程中,我们将使用 LangGraph 构建一个支持聊天机器人,具备以下功能:
我们将从一个基础聊天机器人开始,逐步添加更复杂的功能,并在此过程中介绍 LangGraph 的核心概念。让我们开始吧! 🌟
首先,安装所需的包并配置环境:
python%%capture --no-stderr
%pip install -U langgraph langsmith langchain_anthropic
import getpass
import os
def _set_env(var: str):
if not os.environ.get(var):
os.environ[var] = getpass.getpass(f"{var}: ")
_set_env("ANTHROPIC_API_KEY")
设置 LangSmith
注册 LangSmith 以快速发现问题并优化 LangGraph 项目的性能。LangSmith 允许你使用跟踪数据调试、测试和监控基于 LangGraph 构建的 LLM 应用。
我们将首先使用 LangGraph 创建一个简单的聊天机器人。这个机器人将直接响应用户消息。虽然简单,但它将展示使用 LangGraph 构建应用的核心概念。
步骤 1:创建 StateGraph
StateGraph
对象定义了聊天机器人作为“状态机”的结构。我们将添加节点来表示 LLM 和机器人可以调用的函数,并添加边来指定机器人如何在函数之间转换。
pythonfrom typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
class State(TypedDict):
messages: Annotated[list, add_messages]
graph_builder = StateGraph(State)
步骤 2:添加聊天机器人节点
节点代表工作单元,通常是普通的 Python 函数。
pythonfrom langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(model="claude-3-5-sonnet-20240620")
def chatbot(state: State):
return {"messages": [llm.invoke(state["messages"])]}
graph_builder.add_node("chatbot", chatbot)
步骤 3:添加入口点和结束点
入口点告诉图每次运行时从哪里开始,结束点指示图何时可以退出。
pythongraph_builder.add_edge(START, "chatbot")
graph_builder.add_edge("chatbot", END)
步骤 4:编译并运行图
调用 compile()
方法创建 CompiledGraph
,然后使用 invoke
运行。
pythongraph = graph_builder.compile()
步骤 5:可视化图
使用 get_graph
方法可视化图。
pythonfrom IPython.display import Image, display
try:
display(Image(graph.get_graph().draw_mermaid_png()))
except Exception:
pass
步骤 6:运行聊天机器人
通过循环与用户交互,运行聊天机器人。
pythondef stream_graph_updates(user_input: str):
for event in graph.stream({"messages": [{"role": "user", "content": user_input}]}):
for value in event.values():
print("Assistant:", value["messages"][-1].content)
while True:
try:
user_input = input("User: ")
if user_input.lower() in ["quit", "exit", "q"]:
print("Goodbye!")
break
stream_graph_updates(user_input)
except:
user_input = "What do you know about LangGraph?"
print("User: " + user_input)
stream_graph_updates(user_input)
break
恭喜! 你已经使用 LangGraph 构建了第一个聊天机器人。这个机器人可以通过 LLM 生成响应与用户进行基本对话。
为了让机器人回答更多问题,我们将集成一个网络搜索工具。
步骤 1:安装依赖并设置 API 密钥
python%%capture --no-stderr
%pip install -U tavily-python langchain_community
_set_env("TAVILY_API_KEY")
步骤 2:定义搜索工具
pythonfrom langchain_community.tools.tavily_search import TavilySearchResults
tool = TavilySearchResults(max_results=2)
tools = [tool]
tool.invoke("What's a 'node' in LangGraph?")
步骤 3:更新图定义
在 LLM 上绑定工具,让 LLM 知道如何使用搜索工具。
pythonllm_with_tools = llm.bind_tools(tools)
def chatbot(state: State):
return {"messages": [llm_with_tools.invoke(state["messages"])]}
graph_builder.add_node("chatbot", chatbot)
步骤 4:运行增强版聊天机器人
现在,机器人可以使用搜索工具回答更多问题。
我们将进一步扩展聊天机器人的功能,包括:
通过本教程,你学会了如何使用 LangGraph 构建一个支持聊天机器人,并逐步添加高级功能。LangGraph 的强大功能使得构建复杂的 AI 应用变得更加简单和灵活。继续探索 LangGraph 的更多功能,构建更强大的应用吧!
下一步
本文作者:yowayimono
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!