这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

Function Calling

2023-06-13。工具调用收成 Chat Completions 的可校验 schema。协议不是 Agent;循环在宿主。

OpenAI,2023-06-13。gpt-4-0613 与 gpt-3.5-turbo-0613 微调成:判断要不要调函数,并吐出符合签名的 JSON。同日还有 16k 窗口的 gpt-3.5-turbo-16k。

  1. 材料 — 按当时公告转述:functions / function_call、模型、安全提示。
  2. 讲解 — 为何这是后面所有编排的地基,以及为何接口仍不是 Agent。

当时公告:Function calling and other API updates。

1 - Function Calling(材料)

按 2023-06-13 公告转述:函数描述、JSON 参数与 16k 窗口。

本页转述 2023-06-13 公告当时公开说了什么,不以后来的 tools 参数改名、并行工具调用回填。

主要出处:OpenAI,2023-06-13,Function calling and other API updates。本页不复制公告全文。


接口主张

开发者可以把函数描述交给 gpt-4-0613 和 gpt-3.5-turbo-0613,由模型决定是否输出一个含参数的 JSON 对象。公告把这写成更可靠地把 GPT 接到外部工具和 API 的方式。这两只快照被微调成两件事:根据用户输入判断要不要调用;以及输出符合函数签名的 JSON。

Chat Completions(/v1/chat/completions)新增参数:

  • functions: 用 JSON Schema 描述一组函数(名称、参数形状)。
  • function_call: 可选;让模型自动决定,或强制调用某一个。

模型并不在 OpenAI 一侧执行函数。开发者在自己的代码里跑完,把结果作为后续消息送回去,再生成给人看的回复。公告举例包括:用外部工具回答问题、把自然语言转成 API 或数据库查询、从文本抽出结构化数据。

同日还发布 gpt-3.5-turbo-16k:上下文从约 4k 拉到 16k。公告同时下调部分价格,并给出旧快照(gpt-3.5-turbo-0301、gpt-4-0314)的弃用时间表。

安全(公告自己写的)

工具返回的内容可能诱导模型做非预期动作。公告要求:只消费可信工具的信息;对有真实世界后果的动作(发邮件、上网发帖、下单等)加人确认。这与三个月前插件公告是同一类问题。

当时不是什么

这是模型层与 API 层能力。一次请求里「选不选函数、参数是什么」可以被可靠解析,不等于系统已经在环境里多步循环。循环、重试、停机策略仍由调用方自己写。

2 - Function Calling 讲解

工具调用从 prompt 把戏收成可校验 schema。协议,不是系统;循环仍由宿主写。

当时解决了什么问题

上半年开发者仍在 prompt 里逼模型吐 JSON,再正则抠字段。ReAct 的 Action 是自由文本。插件是 ChatGPT 产品里的私有协议。Function Calling 把同一件事做成 Chat Completions 的一等参数:schema 进、结构化调用出。模型还被专门微调过「何时调用」,不再只靠少样本示范。

模型输出的是 name + arguments。执行发生在调用方进程里:宿主跑完,把回执当后续消息送回去。单次 Function Call 是一次 I/O,没有「根据返回值再选」——那一跳仍要宿主再发一次请求。16k 窗口是并列的物理前提:单次循环能多看一点工具回执,仍然远不够装下一个仓库。

对后续 LLM 与 Agent 的影响

这是 2023 年工具接口的工程化节点。之后各家的 tool use 都沿着「模型选工具 + JSON 参数 + 宿主执行」走。LangChain 一类库很快把函数调用收进同一套 Agent 抽象。跨厂商总线是下一年的 MCP;今年只有一家方言。

按 AI Agent 定义,Function Calling 本身不是 Agent。它是协议:模型↔工具的第一种稳定 schema。它没有规定多步循环,也不对环境行动——副作用出在你的服务器上。缺了它,循环仍然能用文本协议硬撑;有了它,循环才变得可产品化。不可信工具输出仍可注入非预期动作:公告已经写明,不是后来才发现的漏洞。协议不是系统;schema 到位,循环仍在宿主。