welclaiAI·TREND·DIGEST
工具

函数调用与工具:把模型连接到行动

函数调用让模型能够决定使用你的代码——却从不真正运行它。本文讲清楚到底发生了什么,以及它会在哪里出错。

tools2026-05-12 12:05 KST·主编·7 分钟

单凭自身,语言模型只能生成文本。它无法查询今天的天气、查询你的数据库、发送邮件,也无法可靠地做算术。函数调用——也叫工具使用——正是弥合这道鸿沟的机制,它让模型能够超越文本,触及真实的行动和实时数据。它是几乎每一个 AI 智能体的基础,也是构建那些能做事而不只是空谈的应用时,最重要的单项能力。不过它的工作机制会让人意外,因为模型其实从不真正运行你的代码。这篇解析将带你走过真正发生的过程,以及它会在哪里出错。

函数调用填补的鸿沟

语言模型本质上是一个文本生成器。这让它在语言上表现卓越,却在一切需要实时信息或现实影响的事情上不可靠。问它天气,它会生成听起来合理、却没连接任何温度计的文本。让它做精确算术,它可能在瞎猜。让它去取某位顾客的订单,它根本无从查起。

函数调用通过给模型提供工具——由你定义和控制的函数——来解决这个问题,这些工具能够做这些事:调用某个 API、运行某个计算、查询某个数据库、触发某个动作。模型的任务是判断何时需要工具,以及用什么输入。你的代码的任务是真正去运行它。这种分工就是全部的核心思想,而把它理清楚,是理解后面一切的关键。

实际发生了什么(让人意外的那部分)

最常见的误解是模型会执行函数。它不会。模型永远只生成文本——包括在合适时生成一个结构化的请求,它想要运行某个工具。真正去运行的是你的应用。流程是这样的:

  1. 你向模型描述可用的工具——它们的名称、做什么、期望什么输入。
  2. 用户提出问题。模型判断要答好这个问题是否需要工具。
  3. 如果需要,模型返回一条结构化消息:"用这些参数调用这个工具。"它并不运行任何东西。
  4. 你的代码解析这个请求,运行真正的函数,得到结果。
  5. 你把结果送回给模型。
  6. 模型用这个结果来撰写它的最终答案。

模型是决策者;你的应用是双手。把这条界线分清至关重要,因为关于安全和可靠的一切,都取决于记住控制着执行,而不是模型。

描述工具,好让模型用好它们

一个工具的用处取决于它的描述,因为模型完全是根据你告诉它的内容来决定是否使用、如何使用工具的。一个工具需要一个清晰的名称、一段关于它做什么以及何时使用的说明,还有一份对其输入的规格说明——它接收什么参数、参数的类型,以及哪些是必填的。

这些描述的质量直接决定了行为。一个含糊其辞的工具会在错误的时机被调用,或被传入格式错误的参数;一个描述清晰的工具则会被恰当地使用。把描述想象成写给一位能干助手的指令会有帮助,这位助手只能看到你写下的内容——如果一个人都无法从你的描述判断何时该用这个工具,那模型也不能。Anthropic 和 OpenAI 的官方文档规定了声明工具的确切格式,精确地遵循它,正是让模型能返回你的代码可据以行动的、格式良好的调用的前提。

为什么这解锁了智能体

函数调用是整个 AI 智能体理念之下的基础构件。粗略地说,智能体就是一个循环:给模型一个目标和一套工具,它决定一个动作,你的代码执行它,结果反馈回来,模型再决定下一个动作——如此往复,直到任务完成。

这个循环的每一轮都是一次函数调用。模型审视手中的工具,选一个,你来运行它,结果塑造下一个决策。这就是一个系统如何把"找到最便宜的航班并订下来"这种模糊请求,拆解成一连串具体的工具使用——搜索、比较、预订——而其中没有一项是模型自己执行的,全都由它来编排。一旦你看清了智能体就是循环中的函数调用,那么智能体系统看似神奇的行为就不再那么神秘了:它就是同样的六步流程,朝着一个目标反复运行。

它会在哪里出错

函数调用引入了纯文本生成所没有的失效方式,而预见它们,是构建一个健壮系统的大部分工作。

  • 模型选错工具或选错参数。 它是根据你的描述来决策的,这意味着糟糕的描述会导致糟糕的决策。含糊或彼此重叠的工具是常见的祸根。
  • 工具失败。 API 宕机、查询报错、输入无效。你的代码必须处理工具失败,并决定向模型回报什么——如果告诉模型出了什么错,它往往能优雅地恢复。
  • 模型编造参数。 在缺少所需全部信息的情况下被要求调用工具,模型可能填入看似合理却错误的值。在据其行动之前要校验参数;永远不要盲目信任它们。
  • 循环失控。 在智能体场景中,模型可能陷入不断调用工具却无法收敛的状态。对步数设置护栏,能防止一个糊涂的智能体永远跑下去。

这些不是什么稀奇的边缘情况——它们是用工具构建系统时的日常质感,一个生产系统必须把每一种都处理好。

你绕不开的安全边界

由于工具会采取真实行动,函数调用也是一个安全面,而且是粗心代价最昂贵的地方。统领一切的原则是:模型发出的工具调用请求是不可信的输入。它被用户的提示词所塑造,而用户可以试图把模型引导到以你意料之外的方式去调用工具。

这意味着,凡是你不愿让一个不可信用户带着任意参数去触发的工具,就不要交给模型。在行动前校验每一个参数。把每个工具的能力范围收窄到任务所允许的最小程度。对它施加你会对系统任何其他入口施加的同样的授权和速率限制。一个会删除记录或花钱的工具,比一个读取公开数据流的工具需要谨慎得多。模型来决定;你的代码必须在行动前核实。

总结

函数调用是把文本生成器变成一个会行动的系统的关键——它让模型决定使用你的哪个工具、用什么输入,而由你的代码做真正的运行。这条界线就是全部要点:模型是决策者,你的应用是双手,而你始终掌控着执行。把工具描述得足够清晰,让一位能干的助手仅凭描述就能使用它们;处理那些不可避免的选错和工具失败;并把每一次工具调用都当作不可信输入,在行动前加以校验。把这些做对,函数调用就成了智能体、以及任何能做实事的应用的基础——它建立在一个你能从头到尾推理清楚的、简单的六步流程之上。

#function-calling#tools#agents#integration