许多 AI 应用程序直接与人类交互。在这些情况下,模型以自然语言响应是合适的。但如果我们需要模型与数据库或 API 等系统进行_直接_交互呢?这些系统通常有特定的输入模式;例如,API 通常有必需的负载结构。您可以使用工具调用来请求符合特定模式的模型响应。

工具是一种封装函数及其输入模式的方式,可以将其传递给支持工具调用的聊天模型。这允许模型请求使用特定输入执行此函数。

工具可以传递给支持工具调用聊天模型,允许模型请求使用特定输入执行特定函数。

您可以创建自定义工具或使用预构建工具。

Diagram of a tool call by a model

工具调用的一个关键原则是模型根据输入的关联性决定何时使用工具。模型并不总是需要调用工具。例如,如果给定一个与工具_无关_的输入,模型就不会调用工具

<span id="__span-0-1">result = llm_with_tools.invoke("Hello world!")

结果将是一个包含模型自然语言响应(例如,“Hello!”)的AIMessage。然而,如果我们传递一个与工具_相关_的输入,模型应该选择调用它

<span id="__span-1-1">result = llm_with_tools.invoke("What is 2 multiplied by 3?")

和以前一样,输出result将是一个AIMessage。但是,如果工具被调用,result将具有tool_calls属性。此属性包含执行工具所需的一切,包括工具名称和输入参数

<span id="__span-2-1">result.tool_calls
<span id="__span-2-2">{'name': 'multiply', 'args': {'a': 2, 'b': 3}, 'id': 'xxx', 'type': 'tool_call'}

有关用法的更多详细信息,请参阅操作指南

LangGraph 提供预构建的组件——[ToolNode](https://langgraph.com.cn/reference/agents.1.html#langgraph.prebuilt.tool_node.ToolNode ToolNode”) 和 [create_react_agent](https://langgraph.com.cn/reference/agents.1.html#langgraph.prebuilt.chat_agent_executor.create_react_agent create_react_agent")——它们代表用户调用工具。

有关工具调用的信息,请参阅此操作指南

LangChain 支持广泛的预构建工具集成,用于与 API、数据库、文件系统、网络数据等进行交互。这些工具扩展了代理的功能并支持快速开发。

您可以在LangChain 集成目录中浏览可用集成的完整列表。

一些常用的工具类别包括

  • 搜索:Bing、SerpAPI、Tavily
  • 代码解释器:Python REPL、Node.js REPL
  • 数据库:SQL、MongoDB、Redis
  • 网络数据:网页抓取和浏览
  • API:OpenWeatherMap、NewsAPI 等

这些集成可以使用上面示例中所示的相同tools参数进行配置并添加到您的代理中。