🦾 AI Agent 🟡 进阶 ⏱ 7 分钟

🔀 Function Calling 和 Tool Calling:到底啥区别

模型侧它俩是同一件事,但概念范围不同。拆清术语、演进、执行主体和三个易错点。

1

先记住:模型侧是同一件事

📖 官方口径直接说了

OpenAI 文档第一句就写:Function calling, also known as tool calling。

在模型侧,两者就是同一个东西——模型都只输出意图,不执行代码。

区别不在执行能力,而在概念范围。

🧩 Google / Anthropic 同口径

Google Gemini:模型能返回 functionCall JSON,但「不会自行执行函数,应用程序负责处理」

Anthropic:模型从不自己执行任何东西,只 emit 结构化请求,你的代码跑操作、把结果塞回对话。

2

那差异到底在哪?概念范围

维度🧠 Function Calling🛠️ Tool Calling
定位早期/狭义:模型输出「调哪个函数 + JSON 参数」现代/广义:工具箱里选工具 + Agent 循环
范围函数是工具的一种函数、搜索、代码执行、MCP 都是工具
API 形态functions / function_call(老 API)tools / tool_choice / tool_calls(新 API)
并行/多类型主要单个函数支持并行 tool_calls + 多工具类型
执行主体模型侧不执行模型侧也不执行,是应用/框架/平台跑

「升级」是概念升级,不是执行升级。

历史上 OpenAI 最早叫 functions / function_call,后来改成 tools / tool_calls。

老 function calling 主要表达「我能调一个函数」;新 tools 是一个更大的概念——function 是 tool 的一种,tool 还可能有 code interpreter、retrieval、web_search、MCP、custom tool 等。

🗣️
原来

模型只能说「我要调这个函数」

🧰
现在

模型说「我用工具箱里的某个工具」

📐
本质

「函数」太窄了——改数据库不是函数?搜网页不是工具?MCP server 不是工具?所以行业往 Tool / Tool Calling 这个更大词汇归一。

3

执行主体:四个「执行」别混成一层

⚠️ 错觉从哪来

「tool calling 真执行、function calling 只输出参数」这个错觉,来自把三层「执行」混成一层。

真拆开,执行主体有好几个。

🧑‍💻 谁在真执行?

• 你的代码:收到 tool_call 后跑函数
• 框架(LangChain 等):包了 executor
• 平台 server tool:Anthropic 服务端执行
• 模型本体:永远只出意图,不执行

🎬 最容易骗到你的:LangChain
表面现象
你写 agent.invoke("北京天气"),它自动完成「模型出 call → 找 tool → 执行 → 回模型」,看起来像「模型会执行」
真相
不是模型突然能执行,是 LangChain 帮你写了个循环:if tool_calls: for t in tool_calls: tools[t.name](**t.args)
另一坑:server tool
Anthropic 的 web_search/code_execution 是官方服务端执行,那也是白名单能力,不是 Claude 本体跑你业务代码

准确版本,焊死这句:

Function Calling 是早期/狭义说法——模型输出「调哪个函数 + 啥 JSON 参数」。
Tool Calling 是现代/广义说法——模型在「工具箱」里选工具,输出 tool call;再由应用/Agent 循环去执行、回传、继续推理。

两者在模型侧都不执行代码;执行代码的是你、框架、或服务商 server tool。

4

一条链路全打通

🎬 北京明天天气?完整 tool calling 链路
1
你传 messages + tools=[get_weather] 给模型
2
模型:不懂实时天气,出 tool_call: {name: get_weather, arguments: {city: 北京}}
3
你的代码:收到 JSON,调真实天气 API
4
天气 API:{temp: 32}
5
你把 tool result 塞回 messages
6
模型:根据结果说「北京明天 32 度」

OpenAI 官方 tool calling flow 就是这五步:Make request with tools → Receive tool call → Execute code on app side → Send tool output back → Receive final response。

Anthropic 也是经典 agentic loop:模型 stop_reason: tool_use → 你执行 → 你 tool_result 塞回去 → 继续 loop。

5

保留精华、修掉 bug

✅
对的部分

Tool Calling 确实是 Function Calling 的概念/生态升级——functions → tools、单函数 → 多工具 → Agent loop、模型只吐 JSON → 框架帮你做成可调用的 Tool 抽象。

❌
要修的部分

不是「Tool Calling 里模型执行了代码」。准确说 Tool Calling 指整套工具使用系统:模型决策 + schema + runtime executor + result feedback + agent loop;Function Calling 指模型生成函数调用 JSON 这个机制。

🔑
终极一句话

模型永远只产结构化意图,真正摸数据库的永远是你的代码 / 平台沙箱。

一句话总结

Function Calling 和 Tool Calling 在模型侧是同一件事(官方口径 also known as tool calling),差异在概念范围:FC 是早期/狭义说法(模型输出调哪个函数 + JSON 参数),Tool Calling 是现代/广义说法(工具箱选工具 + Agent 循环)。两者模型侧都不执行代码,执行的是你的应用、框架或平台 server tool。

🎤 面试问答 · 口语化回答
这道术语辨析题常被面试官挖,尤其看你是否分得清执行主体:
面试官Function Calling 和 Tool Calling 有什么区别?
你

在模型侧它俩其实是同一个东西,OpenAI 文档直接写 Function calling also known as tool calling,模型都只输出意图不执行代码。区别在概念范围:Function Calling 是早期狭义的说法,指模型输出调哪个函数加 JSON 参数;Tool Calling 是现代广义的说法,指模型在工具箱里选工具,再加 Agent 循环去执行回传。函数是工具的一种,工具还可以是搜索、代码执行、MCP。

💡 加分点:先亮官方口径「also known as tool calling」再展开,说明你真查过文档,不是背的。
面试官Tool Calling 里模型会执行代码吗?
你

不会。这是个常见误区。模型永远只输出一个结构化的调用意图,真正执行的是我们的应用代码、框架,或者平台的服务端 tool。比如 LangChain 把 @tool 装饰器、schema、executor、结果回传全包了,你写 agent.invoke 它自动完成调用,看起来像模型会执行,其实是框架帮你写了 if tool_calls 的循环。Anthropic 的 server tool 是官方白名单能力,但那也不是 Claude 本体跑你业务代码。

💡 加分点:能主动纠正这个误区非常加分,说明你真的理解三层执行主体(模型/你的代码/框架和平台)。
面试官那官方为什么从 functions 改成 tools?
你

这是一个概念升级。最早 OpenAI 的 API 是 functions 和 function_call,主要表达我能调一个函数;后来改成 tools、tool_choice、tool_calls,因为函数太窄了——改数据库不是函数、搜网页不是工具、MCP server 也不是函数。新的 tools 是一个更大的概念,function 只是 tool 的一种,tool 还可能有 code interpreter、retrieval、web_search、MCP、custom tool。所以整个行业在往 Tool / Tool Calling 这个更大的词汇归一。

💡 加分点:能讲出这段 API 演进历史,说明你对生态熟悉,不是停留在概念表面。
📝 读完打卡 · 写下你的收获 读完了?来打卡吧
用一句话写下你从这篇学到的最大收获,检验自己是否真的懂了 👇
⏱ 00:00 🔥0分