在构建大模型应用从 Chatbot 走向 Agent 的过程中,"工具调用(Function Calling / Tool Use)"是最关键的一步。它决定了模型如何与外部系统交互、如何执行真实任务,以及如何从"会聊天"变成"能做事"。目前主流的大模型平台(OpenAI、Google Gemini、Anthropic Claude)都提供了各自的工具调用机制,但它们在设计理念、执行流程和控制粒度上却有明显差异。本文将从实际开发视角出发,对三种机制进行拆解与对比,帮助你理解 Agent 的核心运行方式,并建立一个统一的工具调用认知模型。

推荐阅读:
1️⃣ OpenAI Function Calling(工具调用机制)
📌 核心思想
让模型不直接"编造答案",而是:
判断什么时候该调用函数,并输出结构化参数,由你来执行函数。
本质:模型负责决策 + 你负责执行
🧠 工作流程
- 用户提问
- 模型判断是否需要工具
- 输出 function call(JSON结构)
- 你的代码执行函数
- 把结果再喂回模型
- 模型生成最终回答
📦 关键结构
模型输出类似:
{
"name": "get_weather",
"arguments": {
"city": "Beijing"
}
}
🔑 核心重点
1. 工具 = JSON schema 定义
你需要告诉模型:
- 函数名
- 参数结构
- 参数类型
2. 模型不执行函数
模型只负责:
- 选择工具
- 填参数
执行完全在你后端
3. 强约束输出结构
避免:
- 自由文本乱编
- 格式不可解析
💡 优点
- 结构稳定(工业级)
- 易接后端系统
- 适合 Agent loop
⚠️ 局限
- 需要你手写工具执行层
- 多轮工具调用需要自己编排
2️⃣ Gemini API Function Calling(Google)
📌 核心思想
和 OpenAI 类似,但更强调:
模型 + 工具 + 多轮推理 + 自动化编排
🧠 流程特点
- 用户输入
- Gemini 判断是否调用 tool
- 返回 tool_call
- 执行工具
- 可以自动继续推理(更"agent化")
📦 关键特点
1. 工具定义更"声明式"
类似:
{
"name": "search",
"description": "Search the web",
"parameters": {...}
}
2. 支持多工具链调用(multi-step)
Gemini 更强调:
👉 一次任务可以:
- 调用工具A
- 再调用工具B
- 自动继续推理
3. 更强"agent native"设计
相比 OpenAI:
| 能力 | OpenAI | Gemini |
|---|---|---|
| 工具调用 | ✔ | ✔ |
| 多步推理 | 手动 | 更自动 |
| Agent感 | 中等 | 更强 |
💡 优点
- 更接近"自动 Agent"
- 多步任务更自然
- 工具链支持更好
⚠️ 局限
- 工业生态不如 OpenAI 成熟
- 可控性略弱(有时太自动)
3️⃣ Claude Tool Use(Anthropic)
📌 核心思想
Claude 强调:
安全 + 可控 + 清晰的工具边界
🧠 工作机制
- 模型判断是否需要 tool
- 输出 tool_use block
- 你的系统执行工具
- 返回 tool_result
- Claude 再生成最终回答
📦 核心结构(非常规范)
tool_use:
{
"type": "tool_use",
"name": "calculator",
"input": {
"expression": "2+3"
}
}
tool_result:
{
"type": "tool_result",
"content": "5"
}
🔑 核心重点
1. 强结构 message block
Claude 不只是 JSON,而是:
- system
- user
- assistant
- tool_use
- tool_result
👉 全是"消息流"统一管理
2. tool_result 必须回传
不像 OpenAI 可以自由拼 message
Claude 更严格:
工具结果必须显式返回
3. 强调安全边界
Claude 很注重:
- 工具权限隔离
- 防止 prompt injection
- 工具输出可信性
💡 优点
- 非常稳定、安全
- 工具调用结构清晰
- 适合企业级 agent
⚠️ 局限
- 灵活性略低
- 写起来更"规范化偏重"
🧠 三者对比总结(非常重要)
| 维度 | OpenAI | Gemini | Claude |
|---|---|---|---|
| 工具调用方式 | function call | function calling | tool_use block |
| 控制粒度 | 中 | 低(更自动) | 高(更严格) |
| Agent能力 | 手动编排 | 半自动/自动 | 手动但安全 |
| 易用性 | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| 工业成熟度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
🚀 一句话理解三者
- OpenAI:你来写 Agent loop,我帮你标准化工具调用
- Gemini:我帮你尽量自动跑 Agent
- Claude:我帮你安全、规范地跑 Agent