- 发布日期
是什么
函数调用(function calling)是一种约定:应用把可用的外部操作、以及每个操作需要哪些参数告诉语言模型,模型据此判断要不要请求执行其中一个,而不是只回一段文字[1]。OpenAI 在 2023 年 6 月 13 日随 gpt-4 和 gpt-3.5-turbo 的更新版本一起推出了这项能力[1]。在目前的文档里,OpenAI 把同一套机制称为工具调用(tool calling),并把它说成模型接触训练数据之外的数据与动作的途径[2]。
没有这套约定,应用拿到一段生成的文字还得猜它想干什么;有了它,程序的接口和模型的输出就对上了,模型填的正是程序本来就会读的那个形状。
怎么工作
开发者把函数写进请求交给模型,发布时对应的模型是 gpt-4-0613 和 gpt-3.5-turbo-0613[1]。每个函数用 JSON Schema 描述:JSON Schema 本身就是一段 JSON,用来规定另一段 JSON 该长什么样,放在这里就是写清函数名、用途和参数结构[1]。模型读完用户的话自己判断,列出的函数里有合适的,就输出一个 JSON 对象,内容是传给这个函数的参数;没有合适的,就照常作答[1]。
为做到这一点,这些模型经过微调,既学会识别什么时候该调用函数,也学会按函数签名输出合规的 JSON[1]。模型交出来的是参数,真正去执行操作的是外面那层程序。上线时,这项能力通过 /v1/chat/completions 端点上的两个新参数提供:functions 和 function_call[1]。
由来
它是一次 API 更新的一部分,与模型版本更新一起发布,而不是一个单独的产品[1]。后来的说法变宽了:最初只是用来描述函数,在 OpenAI 的文档里则成了模型接触外部数据与动作的通路[2]。
用来做什么
OpenAI 当时列了三类用法:让聊天机器人在回答时调用外部工具;把自然语言转成 API 调用或数据库查询;从文本里抽取结构化数据[1]。前两类比较好想象——模型不再描述自己会怎么做,而是挑一个工具、把参数填好。第三类不那么显眼:模型读完一份材料,把内容填进某个函数的字段,结果就成了程序能直接存下、能拿来比较的数据,而不是一段还得有人去解析的话。
三类用法共一个形状:模型负责理解意图、组织参数,普通代码负责干活。
两类工具
文档把工具分成两类:一类是用 JSON Schema 定义的函数型工具,另一类是接收自由文本、也返回自由文本的自定义工具[2]。工具多起来之后,可以配合工具搜索(tool search),让不常用的工具只在模型需要时才载入[2]。
风险与局限
发布文章提醒:工具返回的内容不可信,里面可能有引导模型去做意料之外动作的文字;对会产生现实后果的操作,应当先让用户确认[1]。从机制上看有两个薄弱处。一是模型的判断取决于函数描述写得清不清楚,二是整条链路安不安全,取决于工具返回的内容被当成数据,还是被当成指令。
作为基础1
注释与来源
- Function calling and other API updateshttps://openai.com/index/function-calling-and-other-api-updates/
- Function callinghttps://platform.openai.com/docs/guides/function-calling
引用本页: 函数调用(工具调用). TellWorld, https://www.tellworld.net/zh/protocols/function-calling. 更新于 2026-11-07