SH

Soloharness

概念 · 辨析 · Agent

← 返回概念辨析

Concept Contrast Fable

工具调用和工具使用

「工具调用」通常是 OpenAI 生态里的说法,「工具使用」是 Anthropic 生态里的说法。指的都是同一件事——让模型能调用外部函数和 API。同一个能力,两块牌子。

寓言

同一条街,两家铺子的招牌

城东商业街上开了两家五金铺。东头那家叫「顺发」,西头那家叫「利达」。两家卖的东西几乎一模一样——扳手、螺丝刀、电钻、水平仪。连进货渠道都是同一家批发商。但如果你走进顺发,伙计管扳手叫「旋紧器」。走进利达,伙计管同一个东西叫「转拧工具」。

一个工程队同时在两家铺子采购。工头老郑每周要填两张采购单:给顺发的单子上写「旋紧器 x 20」,给利达的单子上写「转拧工具 x 20」。仓库入库的时候,仓管员又填第三张单子——他自己把这两个名字统一记成「扳手」,写在仓库台账上。三张单子,三种名字,同一个铁疙瘩。

新来的采购助理被绕晕了,问老郑:这三样东西是不是不一样?老郑把三个名字对应的货放在桌上,一模一样。助理又问:那为什么名字不同?老郑说:顺发老板喜欢叫旋紧器,显得专业。利达老板喜欢叫转拧工具,显得亲切。我用扳手。我管的是手里的活,他们管的是铺子招牌。名字不同,不妨碍东西一样。

后来工程队接了外地一个大项目,需要从第三家供应商紧急补货。助理打电话过去问:你们家有没有旋紧器?对方说没有。助理又问:转拧工具呢?还是没有。老郑抢过电话:扳手,八号到十四号各五十把。对方说:有,下午送到。

老郑事后在队里立了规矩:库房台账上的名字叫「通用名」,所有内部流转、派活、盘点、培训,全部用通用名。采购单上保留各家供应商的原名,但必须在旁边标注对应的通用名。如果某个工具只有一家供应商在用某个名字,台账上也要登记,但不作为默认的检索入口。

这个规矩执行了半年,采购出错率降了一半。供应链没有突然变好,变化发生在所有人开始用同一套词汇表干活之后。老郑说了一句:你可以尊重每家铺子的叫法,但工程队内部必须有自己统一的那一个。

后来工程队把这份对照表印成了小册子,新入职的人第一周就背。册子封面上只有一行字:先问东西是什么,再问铺子叫什么。

后来采买组墙上有三列:物料图样放在中间,左边挂着顺发的叫法,右边挂着利达的叫法。新来的人先看图样,再看左右两边的名字。

工具调用 (Tool Calling)

OpenAI 生态中的常用术语,指模型在 Chat Completions API 中通过 tools 参数定义可调用函数、并返回结构化函数调用请求的能力。

工具使用 (Tool Use)

Anthropic 生态中的常用术语,指 Claude 模型通过 tool_use 内容块调用外部函数的能力。与 Function Calling 在概念层面指向同一个能力,但 API 协议、参数结构和响应格式不同。

故事对应

  • 顺发铺子(旋紧器):OpenAI 生态的 Tool Calling / Function Calling 命名。
  • 利达铺子(转拧工具):Anthropic 生态的 Tool Use 命名。
  • 仓库台账上的扳手:能力层的通用概念,统一的内部术语。
  • 新助理被三种名字绕晕:厂商术语差异导致的沟通成本。
  • 采购单保留原名、旁边标通用名:保留厂商精度同时确保内部一致性。

落到项目里

在你的代码和文档里区分两个层次。抽象层(工具定义 schema、工具注册、工具调度器)统一叫「工具调用」或直接用 tool calling 的英文。适配层(对接 OpenAI SDK 的 tools 参数、对接 Anthropic SDK 的 tool_use 块)保留各家厂商的原生命名。这样做的好处是:当你换模型供应商时,抽象层代码不用改,只改适配层。如果你在抽象层就到处出现 function_calling 或 tool_use 的字样,未来换厂商等于一次大重构。