Appearance
22. Function Calling 和 Tool Calling 有什么区别?
难度 P1 高频 · 岗位 应用 · 频率 ★★★ · 预计阅读 5 min
本题阅读地图
- 💡 简要回答
- 📝 详细解析
- 🎯 面试总结
👔面试官:Function Calling 和 Tool Calling 有什么区别?
🙋♂️我:差不多吧,都是调工具。
👔面试官:概念上确实容易混,但严格说:Function Calling 更偏模型侧的"结构化调用机制",Tool Calling 更偏生态层的叫法。OpenAI 早期叫 Function Calling,后来也统称 Tools。你能讲清楚这个概念演变吗?
🙋♂️我:那就是 Function Calling 是 OpenAI 的术语?
👔面试官:对,OpenAI 最早提出 Function Calling,后来 Anthropic、智谱等用 Tool Calling。本质上都是:模型决定调用外部能力、输出结构化参数。现在两者经常混用,但面试时能说出这个演变,会显得你关注生态动态。
💡 简要回答
概念演变:
| 术语 | 来源 | 现状 |
|---|---|---|
| Function Calling | OpenAI 早期术语 | 仍常用,但 OpenAI 现在也统称 Tools |
| Tool Calling | Anthropic、智谱等 | 更通用的叫法 |
本质相同:
- 模型决定调用外部能力
- 输出结构化参数(JSON)
- 宿主程序执行后回传结果
当前趋势:两者概念融合,常混用。OpenAI API 现在也支持 tools 参数(原 functions)。
📝 详细解析
历史演变
OpenAI Function Calling(2023 年中):
- 最初叫
functions参数 - 模型输出
function_call字段 - 后来升级为
tools,functions作为兼容保留
Anthropic Tool Use:
- 直接叫
tools - 模型输出
tool_use块
开源生态:
- LangChain:
bind_tools()统一接口 - 内部兼容各家 API 差异
当前状态
OpenAI 最新 API:
python
# 新写法(推荐)
response = client.chat.completions.create(
model="gpt-4",
messages=messages,
tools=[{"type": "function", "function": {...}}] # 注意 tools 包裹 function
)
# 旧写法(兼容)
response = client.chat.completions.create(
model="gpt-4",
messages=messages,
functions=[...] # 直接 functions
)面试建议
- 两者本质相同,可以混用
- 提到演变历史,显示关注生态
- LangChain 等框架已做统一抽象
🎯 面试总结
Function Calling 和 Tool Calling 本质相同,概念演变中。OpenAI 从 Function 升级到 Tools,生态统一用 Tool Calling。面试时知道演变历史即可。