LangGraph系列-2:用Tools增强聊天机器人

将其他tools集成到聊天机器人中可以显著增强其功能并改善用户交互。在LangGraph(通常用于开发聊天机器人的框架)的上下文中,这种集成可以通过合并web搜索功能等工具来实现。本教程旨在逐步指导用户如何通过集成工具来增强他们的聊天机器人,特别是关注Python编程语言。

总体概述

在开发聊天机器人时,必须认识到,可能存在仅基于其现有知识无法回答的问题。通过集成外部tools,聊天机器人可以搜索网页或访问外部api来检索实时信息或相关数据,从而提升用户体验。本教程将主要关注如何利用LangGraph预构建的ToolNode进行工具调用,它允许聊天机器人调用这些附加功能。
在这里插入图片描述

搭建环境

在深入研究工具集成之前,第一步是设置必要的环境。这包括安装基本包和配置API密钥,以允许聊天机器人访问外部服务。

步骤1:安装所需的Packages

首先,用户应该安装所需的软件包。这可以使用Python中的pip命令来完成:

%pip install --quiet -U langgraph langchain_anthropic

步骤2:设置环境变量

接下来,为API键设置环境变量是很重要的。这些密钥对于对外部服务的请求进行身份验证至关重要。下面的Python函数用于提示用户输入他们的API密钥:

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")

_set_env函数检查指定的环境变量是否已经设置。如果不是,它会提示用户安全地输入他们的API密钥。

定义Tools

设置好环境后,下一步是定义聊天机器人将用于处理特定查询的工具。在此上下文中,工具可以定义为聊天机器人可以调用的函数,以检索信息或执行操作。

步骤3:实现工具功能

这里演示了两个示例工具函数:一个用于检索当前天气,另一个用于列出最冷的城市。

from langchain_core.messages import AIMessage
from langchain_core.tools import tool
from langgraph.prebuilt import ToolNode

@tool
def get_weather(location: str):
    """Call to get the current weather."""
    if location.lower() in ["sf", "san francisco"]:
        return "It's 60 degrees and foggy."
    else:
        return "It's 90 degrees and sunny."


@tool
def get_coolest_cities():
    """Get a list of coolest cities"""
    return "nyc, sf"
  • get_weather(location: str):该函数接受一个位置作为输入,并根据预定义的条件返回当前天气。它识别“sf”或“san francisco”并返回特定的天气状况,而其他位置则产生不同的响应。
  • get_coolest_cities():这个函数只是返回一个包含“最冷”城市名称的字符串。

步骤4:创建工具Node

在定义工具之后,用户可以创建一个ToolNode实例,它将管理这些工具函数的调用。

tools = [get_weather, get_coolest_cities]
tool_node 
### LangGraph Plan and Execute 的功能实现 LangGraph 中的 `Plan and Execute` 是一种基于代理模式的设计方案,旨在通过分阶段的方式解决复杂的任务。该设计将整个过程分为 **规划 (Planning)** 和 **执行 (Execution)** 两个主要部分。 #### 核心概念 `Plan and Execute` 的核心在于分离任务的决策制定与具体操作实施。这种分离使得模型能够更专注于每一步的具体目标,从而提高整体效率和准确性[^3]。 #### 创建计划器 以下是创建计划器的关键代码片段及其解释: ```python def create_planner(llm: BaseChatModel, tools: Sequence[BaseTool], base_prompt: ChatPromptTemplate): # 初始化计划器的相关参数 prompt = PromptTemplate.from_template(base_prompt.template) planner = Planner( llm=llm, tools=tools, prompt=prompt ) return planner ``` 上述代码展示了如何初始化一个计划器对象。其中: - 参数 `llm` 表示用于生成自然语言响应的语言模型。 - 参数 `tools` 定义了一系列工具集,这些工具将在后续的任务中被调用。 - 参数 `base_prompt` 提供了一个基础模板,指导模型如何生成合理的行动计划[^1]。 #### 计划步骤的异步执行 在实际运行过程中,计划器会接收输入并返回相应的行动步骤。这一过程通常由以下函数完成: ```python async def plan_step(state: PlanExecute): plan = await planner.ainvoke({"messages": [("user", state["input"])]}) return {"plan": plan.steps} ``` 此代码段实现了异步化的计划生成流程。当接收到用户的输入后,计划器会解析输入内容,并依据预设逻辑生成一系列具体的行动步骤。最终,这些步骤将以结构化数据的形式返回给调用方[^2]。 #### 实际应用场景 为了更好地理解 `Plan and Execute` 的工作方式,可以考虑这样一个场景:假设我们需要开发一款聊天机器人来帮助用户预订餐厅。在这个例子中: - 规划阶段可能涉及分析用户的需求(例如用餐时间、人数偏好等),并将这些需求转化为清晰的操作指令; - 执行阶段则负责联系外部服务提供商,查询可用选项,并向用户提供反馈。 通过这种方式,`Plan and Execute` 不仅简化了复杂任务的管理难度,还增强了系统的灵活性和可扩展性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值