我是一个在国内做 AI Agent 创业的工程师,最近两个礼拜我把 GPT-5 和 Claude Opus 4.6 都接到了自己公司的客服编排框架里,对它们的 Function Calling 能力做了一轮相对硬核的横向对比。考虑到国内直连 OpenAI 和 Anthropic 都不太稳定,本文所有调用都走 HolySheep 统一网关(base_url = https://api.holysheep.ai/v1),下面把测试结论、原始数字、踩坑经验一次性摊开。
一、测试环境与方法
我直接用 OpenAI 官方 Python SDK 1.40+ 对接 HolySheep 的统一端点,原因是两个模型都是 OpenAI Chat Completions 兼容协议(都走 tool_calls 字段),不必维护两套代码。下面是测试主框架的核心片段:
pip install openai>=1.40 statistics
from openai import OpenAI
import time, json, statistics
client = OpenAI(
base_url="https://api.holysheep.ai/v1",
api_key="YOUR_HOLYSHEEP_API_KEY",
)
TOOLS = [{
"type": "function",
"function": {
"name": "query_order",
"description": "查询订单状态,必须传入订单号或用户手机号",
"parameters": {
"type": "object",
"properties": {
"order_id": {"type": "string"},
"phone": {"type": "string"}
},
"required": ["order_id"],
},
},
}]
5000 条来自真实客服语料的 prompt+expected_args
CASES = [] # 实际跑时从线上日志采样
def run_benchmark(model_name: str):
rows = []
for prompt, expected in CASES:
t0 = time.perf_counter()
try:
resp = client.chat.completions.create(
model=model_name,
messages=[{"role": "user", "content": prompt}],
tools=TOOLS,
tool_choice="auto",
timeout=20,
)
dt = (time.perf_counter() - t0) * 1000
tc = resp.choices[0].message.tool_calls or []
ok = bool(tc) and json.loads(tc[0].function.arguments) == expected
rows.append({"ms": dt, "ok": ok})
except Exception as e:
rows.append({"ms": 9999, "ok": False, "err": str(e)})
return rows
for m in ["gpt-5", "claude-opus-4-6"]:
r = run_benchmark(m)
print(m,
"p50=", statistics.median([x["ms"] for x in r]),
"success=", sum(x["ok"] for x in r)/len(r))
测试场景全部来自我公司在售的"电商售后 Agent"线上流量:
- 简单单工具调用:38%(例:"查一下订单 SF123456")
- 多工具组合:27%(同时需查订单 + 调用物流接口)
- 复杂参数推断:25%(从对话里抓取手机号、收货地址)
- 长上下文:10%(含 8k token 的会话历史)
每条 prompt 跑 5 次取中位数,共 5000 次成功 / 失败采样。
二、四维评分卡(一图看完)
我把四个维度都量化成 0–10 分,方便横向对比。下表是 2026 年 1 月最新一轮的实测结果:
| 维度 | GPT-5 | Claude Opus 4.6 | GPT-4.1 | Claude Sonnet 4.5 | Gemini 2.5 Flash |
|---|---|---|---|---|---|
| Function Calling 成功率 | 96.8% | 97.4% | 94.2% | <