Function Calling (Tool Use)
函数调用(也称工具使用)让语言模型通过 JSON 参数请求外部函数,再由应用程序执行该函数并返回结果。
函数调用,也称为工具调用或工具使用,是指大型语言模型(LLM)不以纯文本作答,而是请求运行外部函数的能力。应用会通过名称、用途和参数的 JSON Schema 来描述每种可用工具。当请求需要实时数据或执行操作时,模型会返回工具名称和 JSON 参数,应用运行函数后,模型再根据结果生成答案。模型本身不会执行任何操作。Meta 的 Toolformer 于 2023 年 2 月展示了模型可以学会在自己的文本中插入 API 调用;OpenAI 于 2023 年 6 月 13 日在其 API 中加入函数调用,并针对模型进行了微调,使其能检测何时需要调用函数,并生成符合函数签名的参数。如今,各大模型提供商都支持函数调用,开源模型则通过指令微调和聊天模板学习这一能力。
函数调用的工作原理#
一次工具调用是模型与应用之间的一次往返交互,这个过程会重复进行,直到模型获得所需信息:
下面的代码按照 OpenAI 的函数调用指南格式,模拟了一次往返交互的两端,并直接写出模型回复,因此无需 API 密钥即可运行。
import json
from jsonschema import validate
# 随请求发送的工具定义:名称、用途,以及用于参数的 JSON Schema
tool = {
"type": "function",
"name": "get_order_status",
"description": "Look up the shipping status of an order by its number.",
"parameters": {
"type": "object",
"properties": {"order_id": {"type": "string", "pattern": "^[0-9]+$"}},
"required": ["order_id"],
},
}
# 模型的输出是一个函数调用,其参数以 JSON 字符串形式传入
call = {"type": "function_call", "call_id": "call_1", "name": "get_order_status", "arguments": '{"order_id": "4417"}'}
args = json.loads(call["arguments"])
validate(args, tool["parameters"]) # 如果参数不符合 schema,会在任何操作运行前引发错误
# 应用运行自己的函数,并在同一个 call_id 下返回结果
orders = {"4417": "Shipped, arriving Thursday"}
print({"type": "function_call_output", "call_id": call["call_id"], "output": orders[args["order_id"]]})它会打印 {'type': 'function_call_output', 'call_id': 'call_1', 'output': 'Shipped, arriving Thursday'},这是应用在再次调用模型前追加到对话中的项目。在工具上设置 "strict": true 后,API 会应用受约束解码,因此模型生成的参数始终符合 schema。
选择和串联工具#
模型可以在一轮中发出多个彼此独立的调用,例如同时查询两笔订单;应用也可以强制使用某个特定工具、要求使用工具,或禁止在某一轮使用工具。跨轮次串联调用时,每个结果都会决定下一个调用,这种循环能让模型成为运行在智能体运行框架中的AI 智能体。《伯克利函数调用排行榜》会评估这些能力:选择正确的函数、填写函数参数、进行并行和多轮调用,以及在没有合适工具时拒绝调用。由于工具结果会作为输入返回给模型,工具获取的网页或文档可能包含提示注入,因此应用会只授予工具完成工作所需的最低权限,并在购买、删除或发送消息前征求用户确认。
视觉模型很适合作为工具,因为它们的输出本身就是结构化的。在 Ultralytics YOLO 中,Results.summary() 会将 YOLO26 模型检测到的每个对象作为字典返回,其中包含类别名称、类别索引、置信度和边界框坐标;json.dumps 会将这个列表直接转换为工具结果,因此聊天模型或视觉语言模型(VLM)可以通过调用预测模式来统计照片中的对象并定位对象。
函数调用与相关术语的对比#
- 计算机操作智能体:通过截图、点击和按键操作软件,因此也适用于没有 API 的应用。只要存在 API,函数调用就能通过一次结构化请求实现相同结果。
- 结构化输出:约束模型的最终回复,使其符合某个 schema,例如从发票中提取字段。函数调用使用相同的 schema 来请求执行操作,并期待收到操作结果。
- 检索增强生成(RAG):将检索到的文档添加到提示中。搜索工具可以实现 RAG,而智能体式 RAG让模型决定何时搜索以及搜索什么。
- 模型上下文协议(MCP):由 Anthropic 于 2024 年 11 月推出的一种开放协议,应用可通过它发现由外部程序提供的工具。模型仍然通过函数调用来调用 MCP 工具。










