编辑
2025-02-11
后端
00
请注意,本文编写于 135 天前,最后修改于 135 天前,其中某些信息可能已经过时。

目录

构建支持聊天机器人:从基础到高级功能
概述
环境设置
第一部分:构建基础聊天机器人
第二部分:增强聊天机器人功能
第三部分:添加高级功能
总结

构建支持聊天机器人:从基础到高级功能


概述

在本教程中,我们将使用 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 和机器人可以调用的函数,并添加边来指定机器人如何在函数之间转换。

python
from 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 函数。

python
from 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:添加入口点和结束点
入口点告诉图每次运行时从哪里开始,结束点指示图何时可以退出。

python
graph_builder.add_edge(START, "chatbot") graph_builder.add_edge("chatbot", END)

步骤 4:编译并运行图
调用 compile() 方法创建 CompiledGraph,然后使用 invoke 运行。

python
graph = graph_builder.compile()

步骤 5:可视化图
使用 get_graph 方法可视化图。

python
from IPython.display import Image, display try: display(Image(graph.get_graph().draw_mermaid_png())) except Exception: pass

步骤 6:运行聊天机器人
通过循环与用户交互,运行聊天机器人。

python
def 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:定义搜索工具

python
from 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 知道如何使用搜索工具。

python
llm_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 许可协议。转载请注明出处!