更新于

Claude vs GPT 工具调用准确率对比:怎么测、差在哪


工具调用(Tool Use / Function Calling)是 Agent 系统的地基——模型选对了工具、填对了参数,Agent 才能正常跑。但”哪个模型工具调用更准”这个问题,公开评测给出的数字经常互相矛盾,原因是评测维度不统一。本文不比较 Tool Use 的语法和最佳实践(那部分参考 Claude Tool Use 最佳实践与陷阱),只聚焦”准确率怎么测、Claude 和 GPT 系列在哪些维度上表现不同”。

一、为什么”哪个模型工具调用更准”很难给单一答案

工具调用准确率不是一个数字,至少要拆成三个独立维度分别看:

  1. 单工具参数填充准确率:给定一个工具和明确指令,模型能不能把参数填对(类型、必填项、格式)
  2. 多工具选择准确率:给一堆功能相近的工具,模型能不能选中正确的那个
  3. 多轮工具链准确率:需要连续调用多个工具、且后一步依赖前一步结果时,链路能不能不断裂

同一个模型在这三个维度上的排名经常不一致——这也是为什么”Claude 更准”或”GPT 更准”这种笼统结论价值有限,必须结合具体场景。

二、维度一:单工具参数填充

这是最基础的场景,也是两家模型差距最小的维度。给定清晰的 JSON Schema 和明确指令,Claude 系列和 GPT 系列在这一层的准确率都已经很高,常见的失误模式反而是共性问题,不是厂商差异:

常见错误模式表现
枚举值幻觉模型给出 schema 里没定义的枚举值(比如 status 只允许 “active”/“inactive”,模型填了 “enabled”)
必填项遗漏嵌套对象内的必填字段被漏填,尤其是 schema 层级较深时
类型隐式转换数字字段被填成字符串(“123” 而非 123),JSON 层面能解析但下游校验失败

实测建议:想验证这一层的准确率,不要只测”正常输入”,一定要加入边界 case——参数值恰好在枚举边界、必填字段缺失、schema 嵌套 3 层以上。两家模型在简单场景下差距很小,边界场景才是真正拉开差距的地方。

三、维度二:多工具选择——差异开始显现

当工具集变大(10+ 个功能相近的工具,比如 search_orderssearch_userssearch_products 并存),选择准确率开始出现明显分化。核心变量是工具描述的语义相似度——工具描述写得越含糊、越相似,模型选错的概率越高。

一个简化的测试框架:

# 伪代码:多工具选择准确率测试框架
test_cases = [
    {
        "query": "帮我查一下订单 #10293 的物流状态",
        "expected_tool": "search_orders",
        "distractor_tools": ["search_shipments", "get_order_detail", "track_logistics"],
    },
    # ... 覆盖工具集合里所有相似功能的组合
]

correct = 0
for case in test_cases:
    result = call_model_with_tools(case["query"], all_tools)
    if result.tool_name == case["expected_tool"]:
        correct += 1

accuracy = correct / len(test_cases)

实测中观察到的普遍规律(不针对具体模型版本给绝对数字,因为模型更新频繁,具体准确率请以自己业务场景实测为准):

  • 工具数量在 5 个以内,两家模型选择准确率都很稳定,差距可以忽略
  • 工具数量到 15–20 个且存在功能重叠时,准确率开始明显下降,此时工具描述的区分度比模型本身的选型影响更大
  • 加入清晰的”何时使用/何时不使用”(when to use / when NOT to use)描述后,两家模型的准确率提升幅度都很显著——说明很多”选错工具”问题本质是工具设计问题,不是模型能力问题

四、维度三:多轮工具链——差距最大的场景

这是最能体现模型差异的维度:任务需要连续调用多个工具,且后一步的参数依赖前一步的返回结果(比如”先查用户 ID,再用这个 ID 查订单,再用订单里的商品 ID 查库存”)。

这类场景常见的断链模式:

  1. 提前终止:模型在拿到第一步结果后就直接生成最终答案,跳过了后续该调用的工具
  2. 参数拼接错误:把前一步返回结果里错误的字段填进下一步调用(比如该填 order_id 却填了 user_id)
  3. 重复调用:因为没有正确维护”已经查过什么”的状态,同一个工具被无意义地重复调用
  4. 错误恢复能力差:某一步工具返回错误或空结果时,不会重试或调整策略,直接把错误信息当结果往下传

测试这个维度必须构造真实的多步依赖链,不能只测单步。一个可复用的评测思路:设计 3–5 步的任务链,每一步的正确参数都必须从上一步的返回值里提取,人工标注每一步的”标准答案”,逐步比对模型的实际调用序列,而不是只看最终答案对不对——最终答案偶然对了不代表中间链路是对的。

五、Prompt 设计对准确率的影响,经常大于模型选择本身

一个容易被忽视的事实:同一个模型,工具描述质量不同,准确率可以相差一倍以上。在下结论”哪个模型更准”之前,先确认自己的工具定义是否满足这几条:

  • 每个工具的 description 字段是否清楚说明了”输入是什么、返回什么、什么时候该用”
  • 功能相近的工具是否有明确的边界说明(避免语义重叠导致模型犹豫)
  • 参数的 description 是否给了具体例子,而不只是类型说明
  • 是否在 system prompt 里给了工具调用的整体策略指导(比如”先查询确认再执行修改类操作”)

这也是为什么很多”模型 A 比模型 B 准”的评测结论不可靠——如果两家的工具定义质量本身就不对等,比较出来的是 prompt 工程水平,不是模型能力。

六、实测方法论:如何跑一个可信的对比

  1. 固定工具集和 system prompt,只换模型,避免同时改多个变量
  2. 分维度测试,不要只跑一个综合分数——单工具、多工具选择、多轮工具链分开统计
  3. 加入边界 case 和对抗性 case(相似工具、模糊指令、错误返回值),不要只测”理想输入”
  4. 人工标注每一步的标准答案,尤其是多轮工具链场景,不能只看最终结果
  5. 多次运行取统计值,单次结果容易被 sampling 随机性影响,尤其在温度不为 0 时

七、结论:怎么选,取决于场景

  • 如果 Agent 只涉及少量工具、单步调用,模型选择的影响很小,重点应该放在工具描述质量上
  • 如果涉及大量功能相近的工具,优先测试多工具选择准确率,并投入时间优化工具描述的区分度
  • 如果涉及长链路、强依赖的多步任务,多轮工具链的稳定性是决定性因素,值得针对自己的实际任务链跑一遍完整评测,而不是依赖通用榜单结论

八、相关阅读

想同时对比多个模型在自己业务场景下的工具调用准确率?YoTradeApi 一个 Key 同时接入 Claude 与 GPT 全系模型,方便跑 A/B 对比测试。