本阶段课程 · 模型 API 与工具调用
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。工具是其中一个部件,持续循环与任务管理是另外的部件。
检查一下理解
本节参考与继续阅读
下列章节用于核对概念与机制。本站以中文重新组织讲解,例子和练习为独立编写。
- Hugging Face · What are Tools?
对应工具定义、输入参数和模型与外部执行的分工。
- OpenAI · 工具调用流程
- Hugging Face · 从API与工具构建最小Agent
对应从一次调用到工具执行、结果回传与继续生成的教学顺序;本站用白话伪代码和自写场地示例讲解。
可选练习读懂一条工具调用记录,区分请求、执行结果与最终答复。
读懂一条工具调用记录,区分请求、执行结果与最终答复。
打开“Agent透明实验室”,保持默认条件。先不用理解整个Agent,只观察第一条查询怎样发出、怎样收到反馈。实验里的场地与查询是预设数据。
工具名称:查询场地 需要填写:场地名称、日期时段、人数 可返回:是否营业、是否有空位、容量、总价 不能做:发送消息、付款、完成预约
跟着做一遍
下面的结果是本站编写的对照示例。实际工具的措辞可能不同,按每步的关键条件检查即可。
先认出工具能做什么
读材料,区分查询与预约。再到实验中点击一次“下一步”,观察模型请求。
做完后,展开结果对照
第一步是提出查询A场地的请求,还没有获得营业或空位结果。
为什么这样做模型知道工具的名称、用途和参数,才可能选择它。写出“查A”不等于A的系统真的被访问了。
再看工具真正返回了什么
再次点击“下一步”,阅读工具反馈。
做完后,展开结果对照
A场地周日关闭。这是这次查询返回的信息,系统应据此放弃A,而不是继续推荐它。
为什么这样做真实应用通常由程序或平台检查参数、权限,然后运行查询并把结果送回模型。模型本身不靠一句话直接访问任何数据库。
分清三种容易混淆的句子
在普通对话中做一次分类,或者直接自己回答。
把这三句分别标成请求、工具结果、缺少依据的断言:①请查询B场地周日空位。②查询返回:B可用,总价520元。③B已预约成功。已知本次只有查询工具,没有预约工具。
做完后,展开结果对照
①请求;②工具结果;③缺少执行依据,不能把查询到空位说成预约成功。
为什么这样做最终答复可以总结数据,但不能超过工具实际做成的事。
工具调用
模型提出一个带参数的操作请求;应用验证并执行工具,返回结果后,模型再继续。
没做出来?从这里排查
模型说查到了,但没有工具记录
把它视作未核实内容,检查应用是否实际调用工具并取得结果。
查询参数缺少日期
先补齐必要字段,或让应用明确请求补充,不要默认任意日期。
换一个例子验证
为一个查询工具写一张约定卡。
- 选择查库存、查天气或查活动名额。
- 写出必须输入的三项和可能返回的结果。
- 列出它明确不能执行的一项操作,避免结果越界。
完成状态仅保存在当前浏览器,可再次点击取消。