本阶段课程 · 模型 API 与工具调用
API:一次模型请求与响应消息角色与对话历史调用参数、流式输出与错误处理Function Calling:模型怎样使用工具
LESSON 20 / 36阅读约 7 分钟

Function Calling:模型怎样使用工具

从工具定义、参数到实际执行和结果回传,完整拆开一次调用。

为什么语言模型需要工具

模型能够生成“我来查一下库存”,但这句话本身不会访问仓库数据库。要获得当前库存,应用需要一段真正能读取库存系统的程序。这个可以被应用调用的能力,就是这里说的工具。

工具可以是查询天气、搜索网页、计算金额,也可以是创建日程或写入记录。模型负责根据任务选择是否需要工具,并提出相应输入;程序或平台负责执行。工具调用,也常被称为function calling,就是让这两部分配合的一种方式。

先告诉模型有哪些工具

应用不能期待模型猜到某个数据库的地址和字段。它需要提供工具说明,包括名称、用途、需要哪些参数,以及可能返回什么。例如本课程的场地查询工具,可以接受场地名称、日期时段和人数,并返回营业状态、空位和总价。

下面是教学用工具请求示意,字段和工具名为本站定义,不是可直接调用的统一标准。

结构示例
{
  "tool": "query_venue",
  "arguments": {
    "venue": "B",
    "day": "示例周日",
    "people": 12
  }
}

它表达的是“请执行这个查询,并传入这些条件”。在这一刻,还没有发生查询结果,也没有任何预约。

一次完整调用怎样分工

步骤谁在做产生什么
1. 提交目标与工具说明应用带任务和工具定义的模型请求
2. 选择查询并填写参数模型一条工具请求
3. 检查参数和权限应用允许执行,或明确拒绝与补问
4. 运行实际查询工具或外部服务当前查询结果,或执行错误
5. 把结果交回模型应用加入工具反馈的新上下文
6. 解释或继续行动模型有依据的答复,或另一条请求

例如工具返回“B目标时段有空位,容量16人,总价520元”,模型才能据此比较12人的需求与600元预算。这个520元来自工具返回,而不是模型凭语言模式猜出的报价。

为什么必须让程序执行工具

在普通文本里模仿一个工具结果很容易。模型甚至可能自己写出“查询成功,库存20件”。如果没有实际调用记录,这仍然只是生成内容。应用必须区分模型提出的动作与真实工具返回的数据,不能让前者冒充后者。

参数也需要检查。人数应为有效数字,日期应明确,当前账户应有相应权限。缺少必要参数时,应请求补充或返回错误,不能靠“模型应该理解了”就执行。

查询工具与写入工具为什么要分开

查询空位只是读取状态,预约会改变外部系统。即使查到有空位,也不能立即报告“预约成功”。还需要预约能力、具体授权、执行请求,以及目标系统返回的成功证据。

工具调用完成一次外部交互。若应用把结果继续交给模型,让它决定下一步,并在适当条件下重复这个过程,就开始接近后面要讲的Agent。工具是其中一个部件,持续循环与任务管理是另外的部件。

交互演示 · Agent 透明实验室跟着一次真实机制的模拟,看助手如何行动。 8 分钟 · 教学模拟

检查一下理解

在工具调用中,模型与应用通常怎样分工?

本节参考与继续阅读

下列章节用于核对概念与机制。本站以中文重新组织讲解,例子和练习为独立编写。

可选练习读懂一条工具调用记录,区分请求、执行结果与最终答复。
练习目标

读懂一条工具调用记录,区分请求、执行结果与最终答复。

打开“Agent透明实验室”,保持默认条件。先不用理解整个Agent,只观察第一条查询怎样发出、怎样收到反馈。实验里的场地与查询是预设数据。

一份可读的工具约定
工具名称:查询场地
需要填写:场地名称、日期时段、人数
可返回:是否营业、是否有空位、容量、总价
不能做:发送消息、付款、完成预约

跟着做一遍

下面的结果是本站编写的对照示例。实际工具的措辞可能不同,按每步的关键条件检查即可。

01

先认出工具能做什么

读材料,区分查询与预约。再到实验中点击一次“下一步”,观察模型请求。

做完后,展开结果对照
对照示例 · 不要求逐字相同

第一步是提出查询A场地的请求,还没有获得营业或空位结果。

为什么这样做模型知道工具的名称、用途和参数,才可能选择它。写出“查A”不等于A的系统真的被访问了。

02

再看工具真正返回了什么

再次点击“下一步”,阅读工具反馈。

做完后,展开结果对照
对照示例 · 不要求逐字相同

A场地周日关闭。这是这次查询返回的信息,系统应据此放弃A,而不是继续推荐它。

为什么这样做真实应用通常由程序或平台检查参数、权限,然后运行查询并把结果送回模型。模型本身不靠一句话直接访问任何数据库。

03

分清三种容易混淆的句子

在普通对话中做一次分类,或者直接自己回答。

发给 AI 的内容
把这三句分别标成请求、工具结果、缺少依据的断言:①请查询B场地周日空位。②查询返回:B可用,总价520元。③B已预约成功。已知本次只有查询工具,没有预约工具。
做完后,展开结果对照
对照示例 · 不要求逐字相同

①请求;②工具结果;③缺少执行依据,不能把查询到空位说成预约成功。

为什么这样做最终答复可以总结数据,但不能超过工具实际做成的事。

刚才用到的一个新词

工具调用

模型提出一个带参数的操作请求;应用验证并执行工具,返回结果后,模型再继续。

没做出来?从这里排查

模型说查到了,但没有工具记录

把它视作未核实内容,检查应用是否实际调用工具并取得结果。

查询参数缺少日期

先补齐必要字段,或让应用明确请求补充,不要默认任意日期。

换一个例子验证

为一个查询工具写一张约定卡。

  1. 选择查库存、查天气或查活动名额。
  2. 写出必须输入的三项和可能返回的结果。
  3. 列出它明确不能执行的一项操作,避免结果越界。
检查标准能指出哪段是模型请求,哪段是外部结果,什么还没有被执行。

完成状态仅保存在当前浏览器,可再次点击取消。