Claude/GPT Function Calling 实战教程:2026 工具调用 API 国内怎么用(含完整代码)
2026 年 AI Agent 已经从 demo 走向真实落地,而支撑 Agent 跑起来的最底层能力,就是 Function Calling(GPT/Gemini 叫法) 或 Tool Use(Claude 叫法)。无论你是接入数据库、调用搜索、自动化办公,还是搭建 MCP Agent,都绕不开它。
这篇文章一次讲清:Function Calling 到底是什么、Claude Opus 4.8 / GPT-5.5 / Gemini 3 Pro 三家的差异、能直接复制的完整代码,以及国内开发者最关心的——怎么免翻墙稳定调用。
Function Calling / Tool Use 到底是什么?
简单说,Function Calling 让大模型可以「说出自己想调用哪个函数、传什么参数」,然后由你的代码去真正执行,再把结果回喂给模型,完成一个闭环。
一次典型的工具调用流程:
- 你定义一组工具(函数名 + JSON Schema 参数描述)给模型
- 用户提问,模型判断需要调用哪个工具,返回结构化的
tool_use消息 - 你的程序按模型的指示执行真实函数(查数据库、调 API、读文件……)
- 把执行结果作为
tool_result喂回模型 - 模型基于结果继续推理,直到给出最终答案或继续调更多工具
所有 Agent 框架(LangChain、Claude Code Subagents、MCP、AutoGen)本质上都是在这套机制上包了一层调度逻辑。
Claude / GPT / Gemini 三家工具调用对比
2026 年三大主流模型都已经把 Function Calling 做到非常成熟,但接口细节和能力差异依然明显:
| 维度 | Claude Opus 4.8 | GPT-5.5 | Gemini 3 Pro |
|---|---|---|---|
| 字段名 | tools / tool_use / tool_result | tools / tool_calls / tool | tools / functionCall / functionResponse |
| 并行调用 | 原生支持,稳定性最佳 | 支持,偶有顺序错乱 | 支持,需开 parallel_tool_calls |
| 强制调用 | tool_choice: {type: "tool", name} | tool_choice: {type:"function",function:{name}} | function_calling_config: ANY |
| JSON 严格输出 | Schema 校验最严 | strict:true(2026 默认开) | response_schema 严格模式 |
| 典型场景 | Agent、长链路工具编排 | 通用、生态最丰富 | 多模态 + 工具混合调用 |
实测一句话总结:Claude 在复杂 Agent 编排上最稳,GPT 生态和工具最广,Gemini 在「图片+工具」这种多模态场景最强。三家在不同业务里都有用武之地,所以越来越多团队会同时接入多家。
实战:Claude 工具调用完整代码(Python)
下面是一个能直接跑通的最小示例:让模型调用一个「查询天气」的工具。
import os, json, requests
API_BASE = os.environ['ANTHROPIC_BASE_URL'] # 例如 https://aisafa.xyz/v1
API_KEY = os.environ['ANTHROPIC_API_KEY']
# 1) 定义工具
tools = [{
'name': 'get_weather',
'description': '查询指定城市当前天气',
'input_schema': {
'type': 'object',
'properties': {
'city': {'type': 'string', 'description': '城市名,例如 上海'}
},
'required': ['city']
}
}]
# 2) 第一次请求,模型决定调用哪个工具
messages = [{'role':'user','content':'今天上海多少度?'}]
resp = requests.post(
f'{API_BASE}/messages',
headers={'x-api-key': API_KEY, 'anthropic-version':'2023-06-01','content-type':'application/json'},
json={'model':'claude-opus-4-8','max_tokens':1024,'tools':tools,'messages':messages}
).json()
# 3) 解析 tool_use
tool_use = next(b for b in resp['content'] if b['type']=='tool_use')
args = tool_use['input']
print('模型要调:', tool_use['name'], args)
# 4) 真实执行(这里写死示例)
result = {'city': args['city'], 'temp_c': 28, 'desc': '多云'}
# 5) 回喂结果
messages.append({'role':'assistant','content':resp['content']})
messages.append({'role':'user','content':[{
'type':'tool_result','tool_use_id':tool_use['id'],
'content': json.dumps(result, ensure_ascii=False)
}]})
resp2 = requests.post(
f'{API_BASE}/messages',
headers={'x-api-key': API_KEY, 'anthropic-version':'2023-06-01','content-type':'application/json'},
json={'model':'claude-opus-4-8','max_tokens':1024,'tools':tools,'messages':messages}
).json()
print('最终回答:', resp2['content'][0]['text'])
GPT-5.5 和 Gemini 3 Pro 的代码结构几乎一致,只是字段名换成 tool_calls / functionCall。如果你用 OpenAI 兼容协议接入(下面会讲),还可以用同一份代码同时跑三家模型。
国内开发者:免翻墙稳定调用 Function Calling
真到国内生产环境,Function Calling 比普通对话更怕「断流」:每次工具回喂都是一次完整请求,任何一次网络抖动都可能让整个 Agent 链路失败。直连 Anthropic / OpenAI / Google 又面临三大问题:
- 网络不通:官方 API 在国内不可直连,自建代理稳定性差、风险高
- 付费门槛:海外信用卡 + 海外手机号,团队报销流程长
- 三套 SDK 维护成本高:Claude / GPT / Gemini 三套字段、三套鉴权、三套 SDK
这也是为什么越来越多 Agent 团队选择走 API 中转方案。以 Safa API 为例,它把三家官方 API 用 OpenAI 兼容协议统一封装,部署在国内可直连节点上:
- 一个接口,三家模型全覆盖:Claude Opus 4.8 / GPT-5.5 / Gemini 3 Pro 都能用同一份
base_url+api_key调用,Function Calling 字段自动适配 - 官方直连不降智:转发原始请求,工具调用能力、JSON Schema 严格度与官方一致
- 免翻墙、人民币付费:国内节点直连,微信/支付宝充值,公司报销无障碍
- 稳定性更适合 Agent:连接复用 + 重试,长链路工具调用断流概率显著降低
调用方式非常简单,把官方 base_url 换成中转地址就行:
# Claude 兼容调用
export ANTHROPIC_BASE_URL=https://aisafa.xyz
export ANTHROPIC_API_KEY=sk-xxxxxx
# OpenAI 协议(同一 key 还能调 GPT/Gemini)
export OPENAI_BASE_URL=https://aisafa.xyz/v1
export OPENAI_API_KEY=sk-xxxxxx
然后无论是上面的 Claude Tool Use 示例、OpenAI Function Calling 示例,还是 LangChain、Claude Code、Cursor,直接复用代码就能跑通,不用改一行业务逻辑。
常见问题与避坑
1. 模型不调用工具,直接瞎答?
大概率是 description 写得太模糊。把工具描述写成「什么时候必须用、输入输出长什么样」,效果立刻提升。必要时用 tool_choice 强制调用。
2. 并行工具调用顺序乱?
Claude 默认并行最稳,GPT 建议关闭 parallel_tool_calls 改成串行调试,排错后再开。
3. JSON Schema 校验失败?
开启 strict / 严格模式,所有字段都加 required 并禁止额外属性(additionalProperties:false),模型输出会规整很多。
4. 长链路工具调用经常 timeout?
除了客户端加超时重试,优先选官方直连稳定的中转(如 Safa API),减少链路抖动。
2026 年 Agent 落地的胜负手,已经从「能不能调用工具」变成「能不能在生产环境里稳定地调用工具」。把 Function Calling 这套机制吃透,再配上一个稳定、统一的 API 入口,你的 Agent 项目就能少走 80% 的弯路。
官方直连 · 一个接口接入 Claude / GPT / Gemini · 7×24 稳定
免费注册试用 →