SH

Soloharness

概念 · 辨析 · Agent

← 返回概念辨析

Concept Contrast Fable

工具调用和函数调用

一个是让模型能伸手去用外部工具、查数据、发请求、操作系统的通用能力。另一个是 OpenAI 给这个能力起的 API 层名字。日常沟通里它们可以互换,但写技术方案时混用会制造接口层面的歧义。

寓言

铁匠铺里的万能手和登记簿上的名字

老城铁匠铺有一件镇铺之宝——一副万用铁手。铁手可以装不同的掌件:今天是钳子头,夹铁块;明天换成锤子头,打铁花;后天换成钻头,打孔。铁匠铺的老师傅们管这只铁手叫「万能手」。

铁匠铺要跟外头的订单对接,不能总讲行话。于是管账的先生在登记簿上给万能手起了个正式名称:「夹具切换臂」。这个名字出现在所有对外报价单、使用说明书和采购合同里。先生很得意,觉得这个名字比「万能手」更精确、更体面。

新来一个学徒,翻看登记簿看到「夹具切换臂」五个字,跑去问师傅:这东西到底是干什么的?师傅指着万能手说:就是这个。学徒又问:那为什么登记簿上不直接写万能手?师傅愣了一下,说:万能手是全铺子人都懂的东西,夹具切换臂是给外头人看合同用的名字。你学活的时候用万能手这个词,写合同的时候用夹具切换臂这个词。东西是同一个,叫法分场合。

两年后铁匠铺扩成了铁器坊,接了官府的大宗订单。官府的采购文书里写的是「夹具切换臂」,但工坊内部的工艺手册、师徒传承、日常排产全用的「万能手」。新上任的采购主管拿到文书以后,在市场上找了一圈「夹具切换臂」的供应商,发现只有一家报价。老主管拦住他:你搜万能手,满街都是。

这个事情以后,铁器坊定了规矩:任何对外文书里的正式名称,都要在内部术语表里登记一条别名,标清楚「内部叫什么、对外叫什么、是不是同一个东西」。而且每次对外沟通前,双方先对一遍名实对照表,确保术语不成为成交障碍。

后来工坊业务越做越大,开始用不同厂商的铁手,每个厂商对这东西的叫法都不一样——有的叫「万能手」,有的叫「夹具切换臂」,有的叫「机动手掌」。工坊索性在术语表里建了一栏叫「通用概念」,把「万能手」放进去,下面挂了一串各厂商的具体产品名。内部讨论用通用概念,签约时用厂商名——两套词表并列维护。

再后来,新学徒第一天到岗,先抄一遍术语表,再去学打铁——知道同一件事在铺子里叫什么、在合同上叫什么、在别家铺子又叫什么。老师傅说:手上功夫可以慢慢练,但名实对不上,做出来的活再漂亮也签不了约。

后来工坊在门口挂了一块名实对照板,每天更新。万能手的名字下面列着三家厂的不同叫法。来人先看板,再进门。

工具调用 (Tool Calling)

让大语言模型在生成过程中调度外部工具的能力——调用 API、查询数据库、执行代码、操作文件等。它是能力层面的通用概念,不绑定具体的 API 协议。

函数调用 (Function Calling)

OpenAI 为工具调用能力定义的 API 级术语。它更偏接口层,特指在 Chat Completions API 中传入 functions/tools 参数、让模型返回结构化函数调用请求的机制。

故事对应

  • 万能手:工具调用(Tool Calling),能力层面的通用概念。
  • 夹具切换臂:函数调用(Function Calling),OpenAI API 层的具体命名。
  • 学徒的困惑:日常讨论用通用概念,写合同用 API 术语,但不能混。
  • 采购主管只搜夹具切换臂找不到供应商:过度绑定 API 名称会限制技术视野。
  • 术语表里挂通用概念和厂商名:区分能力层面和接口层面的词汇。

落到项目里

团队内部写设计文档时统一用「工具调用」作为能力层的通用术语。只有在讨论具体的 OpenAI API 集成、代码中的函数定义 schema、或者对接 OpenAI 兼容接口时,才切换到「函数调用」这个精确术语。如果你的系统同时接了多个模型供应商,建议建一份术语对照表:能力列统一叫「工具调用」,下面挂 OpenAI 的 Function Calling、Anthropic 的 Tool Use、Google 的 Function Calling——它们是不同厂商对同一个能力的不同 API 命名。