工具调用详解:AI智能体如何决定下一步操作

工具调用详解:AI智能体如何决定下一步操作

工具调用详解:AI智能体如何决定下一步操作

📰 来源:Towards Data Science | 📅 翻译日期:2026年6月22日
🔗 原文查看原文
🤖 翻译:DeepSeek AI · 仅供参考

从被动响应到主动行动

在我上一篇博客中,我们讨论了如何通过 JSON Mode、函数调用和结构化输出来让LLM返回机器可读的结构化响应。在那篇文章中,我们简要提到了函数调用,将其视为获取结构化响应的一种方法。然而,函数调用的能力远不止从模型获取结构化数据,它本质上是智能体AI工作流的支柱。因此,在今天的文章中,我们将深入探讨这个主题。

在此之前的所有示例中,LLM仅仅扮演被动响应者的角色——它接收问题并生成答案,仅此而已。但如果我们希望LLM不仅回答问题,而是执行某项操作呢?更准确地说,如果我们希望根据模型的响应触发一个动作呢?这个动作可以是任何事:查询实时数据、发送消息、检索数据库、调用外部API等等。

这正是工具调用的用武之地。工具调用将LLM从一个非常智能的文本生成器转变为能够触发操作并与外界交互的实体。

什么是工具调用?

工具调用(也称为函数调用)是一种机制,LLM通过它可以在生成响应时请求执行外部函数或API。换句话说,模型不是仅仅返回文本,而是根据用户请求,用特定的参数执行特定的函数。

需要理解的关键点是:模型本身并不执行工具。它只决定调用哪个工具以及使用什么参数。实际执行所选工具的工作发生在我们自己的代码中——即包含AI模型请求的代码中。然后我们将工具的结果反馈给AI模型,模型利用该结果生成对用户的最终响应。

这就是工具调用循环,包含以下步骤:

  1. 用户提交一条消息
  2. AI模型将消息作为输入,输出一个结果——实质上是决定使用哪个工具以及使用哪些参数
  3. 模型包含工具选择和相应参数的响应被传回代码。代码(不涉及AI模型)使用所选参数执行所选工具。执行产生某种结果(例如,计算结果、从API获取的信息等),然后将该结果传回AI模型。
  4. AI模型将工具结果作为输入,基于此生成对用户的最终响应。

再次强调:模型生成工具调用,而不是工具执行。这是两个截然不同的概念,混淆它们是常见的误解来源。

那么,工具调用具体是什么?实际上,它意味着模型使用函数调用返回结构化的、机器可读的响应,就像我们在上一篇博客中看到的那样。在这个响应中,content 字段为 None;没有自然语言答案,只有结构化的指令,指明调用哪个工具以及使用什么参数。只有当我们执行工具并将结果传回后,模型才会生成给用户的实际文本响应。

实践:一个简单的天气示例

让我们从一个简单的例子开始,只使用一个工具和一次调用,然后逐步构建更有趣的场景。

1. 单个工具:天气API

最常见的AI工具使用示例之一就是天气API(自定义、实时数据的基石)。假设我们要构建一个天气助手。具体来说,我们希望创建一种机制:用户询问天气时,我们不希望AI模型随意编造(它很乐意这样做🙃),而是调用真正的天气函数,从LLM外部的其他地方获取实际天气数据。我将使用 Open-Meteo,这是一个免费的开源天气API,并且不需要API密钥。

要使用工具,我们首先需要在 tools 中声明它。

from openai import OpenAI
import json

client = OpenAI(api_key="your_api_key")

# 第1步:定义工具
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_current_weather",
            "description": "Get the current weather for a given city",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "The name of the city, e.g. Athens"
                    },
                    "unit": {
                        "type": "string",
                        "enum": ["celsius", "fahrenheit"],
                        "description": "The temperature unit to use"
                    }
                },
                "required": ["city"]
            }
        }
    }
]

注意,此时尚未提及实际使用的工具(天气API)。相反,模型基于三个方面决定调用哪个工具:函数描述(“获取指定城市的当前天气”)、参数描述(“城市名称,例如Athens”)以及强制模式。模型仅凭这些信息判断对于给定的用户消息,这是否是合适的工具以及应该使用哪些参数。因此,在定义工具时编写清晰准确的描述对于模型根据用户输入成功识别并调用正确工具至关重要。

定义好 tools 变量后,我们可以向AI模型发出请求:

# 第2步:发送用户消息以及工具定义
messages = [
    {"role": "user", "content": "What's the weather like in Athens right now?"}
]

response = client.chat.completions.create(
    model="gpt-4o-mini",
    tools=tools,
    messages=messages
)

print(response.choices[0].message)

当我们发出这个请求时,模型读取用户消息“Athens现在的天气怎么样?”,并理解到...(原文未完成,但此处可自行补全逻辑:模型识别出需要天气工具并返回工具调用)。

模型生成工具调用,而不是工具执行。这是一个核心区别。

参考资料

  • OpenAI API文档:函数调用
  • Open-Meteo 开源天气API

📌 *本文由 DeepSeek AI 自动翻译排版,如有不准确之处欢迎指正* 🏠 [返回首页](https://www.suiyuanlu.cn) · 📖 [查看原文](https://towardsdatascience.com/tool-calling-explained-how-ai-agents-decide-what-to-do-next/)
©版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

评论已关闭