据说 Opus 4.7 工具错误降了2/3,我拿30个MCP工具实测了一下

6 阅读6分钟

Opus 4.7 昨天上线,官方说"tool errors reduced to a third"。巧了,我昨天刚做完一个 MCP 工具数量与调用准确率的实验。同一套测试跑一遍 Opus 4.7,看看这个说法到底硬不硬。

背景:我昨天刚测完工具数量的影响

昨天我做了一个实验:逐步给 AI 增加 MCP 工具数量(5→30 个),测试工具选择的准确率。结论是工具超过 12 个之后准确率断崖式下降。当时用的模型是 DeepSeek V4。

昨晚 Anthropic 发布了 Opus 4.7,发布博客里有一句话很吸引我:

"a 14% improvement in multi-step agentic reasoning with a third of the tool errors"

工具调用错误降到三分之一?那我正好有一套现成的测试框架,跑一遍就知道了。

Opus 4.7 速览(30 秒版)

先过一遍关键参数,不展开讲:

项目Opus 4.6Opus 4.7
SWE-bench Pro~51%64.3%(+13pp)
Agent 任务推理基线+14%
工具错误率基线降到 1/3
图片分辨率标准2576px 长边(3.75MP)
定价5/5/25 MTok5/5/25 MTok(没涨)
effort 参数high/maxhigh/xhigh/max
thinking.budget_tokens支持移除了

两个重点:价格没涨(这很少见),effort 参数新增了 xhigh 档位。

实验一:重跑 30 工具准确率测试

用和昨天完全相同的实验框架:

  • 40 个固定测试任务,8 个类别
  • 工具数量从 5 递增到 30
  • 每组跑 3 次取平均
  • temperature 0.3

唯一的变量:把模型从 DeepSeek V4 换成 Opus 4.7(xhigh effort)。

通过 TheRouter 网关调用,改一行 model 参数就行:

from openai import OpenAI

client = OpenAI(
    base_url="https://api.therouter.ai/v1",
    api_key="your-key"
)

# 昨天: model="deepseek/deepseek-v4"
# 今天: model="anthropic/claude-opus-4-7"
response = client.chat.completions.create(
    model="anthropic/claude-opus-4-7",
    messages=messages,
    tools=tool_definitions,
)

结果对比

工具数DeepSeek V4Opus 4.7 (xhigh)差距
595.0%97.5%+2.5pp
1091.7%95.8%+4.1pp
1584.2%92.5%+8.3pp
2071.7%87.5%+15.8pp
2560.8%80.0%+19.2pp
3053.3%74.2%+20.9pp

几个观察:

1. 工具越多,Opus 4.7 的优势越大。 5 个工具时差距只有 2.5pp(大家都很准),30 个工具时差距扩大到了 20.9pp。这说明 Opus 4.7 的改进重点确实在复杂场景——工具少的时候大家差不多,工具多了才拉开差距。

2. "错误降到 1/3" 的说法基本成立。 30 个工具场景下,DeepSeek V4 的错误率是 46.7%(100%-53.3%),Opus 4.7 是 25.8%。25.8/46.7 ≈ 0.55——没有降到 1/3 那么夸张,但降了将近一半。考虑到 Anthropic 的基准测试条件和我的测试条件不同,这个差距可以接受。

3. 拐点推迟了。 DeepSeek V4 的拐点在 12-15 个工具,Opus 4.7 的拐点推迟到了 18-20 个。也就是说你可以给 Opus 4.7 挂更多工具而不用担心准确率暴跌——但 20 个还是上限,超过了还是会掉。

幻觉率对比

这个差距更明显:

工具数DeepSeek V4 幻觉率Opus 4.7 幻觉率
100.8%0%
152.5%0%
205.8%0.8%
259.2%2.5%
3012.5%4.2%

30 个工具时,DeepSeek V4 有 12.5% 的概率编造不存在的工具。Opus 4.7 只有 4.2%。降到了 1/3——这一项上 Anthropic 的说法完全准确。

实验二:effort 参数对比

Opus 4.7 新增了 xhigh 档位。Claude Code 已经把默认值从 high 改成了 xhigh。那这几档之间差距多大?

固定 20 个工具、40 个任务,分别测 high、xhigh、max:

# 通过 API 设置 effort 参数
response = client.messages.create(
    model="claude-opus-4-7",
    messages=messages,
    tools=tool_definitions,
    # effort 参数控制推理深度
    thinking={"type": "enabled", "effort": "xhigh"}
)
effort准确率幻觉率平均延迟输出 token
high82.5%1.7%2.4s~1200
xhigh87.5%0.8%3.8s~2100
max89.2%0.8%6.7s~3800

xhigh 是性价比最优档。 从 high 到 xhigh,准确率提升 5pp,延迟多 1.4 秒。从 xhigh 到 max,准确率只多 1.7pp,延迟却多了 2.9 秒。

用一个图来理解:

准确率
90% ──────────────────── max (89.2%)
     ↑ +1.7pp, +2.9s
88% ──────────────────── xhigh (87.5%)  ← 甜蜜点
     ↑ +5.0pp, +1.4s
82% ──────────────────── high (82.5%)

xhigh 花了 1.4 秒换来 5pp 提升。max 花了 2.9 秒只换来 1.7pp。边际收益断崖了。

所以 Claude Code 把默认值改成 xhigh 是有道理的。 除非你在做特别关键的任务(比如最终的代码 review),否则 max 的额外延迟不值得。

迁移踩坑:thinking.budget_tokens 没了

这是最容易中招的地方。

Opus 4.6 可以用 thinking.budget_tokens 精确控制思考深度:

# Opus 4.6 的写法——在 4.7 上会报错
response = client.messages.create(
    model="claude-opus-4-6",
    thinking={"type": "enabled", "budget_tokens": 8000},
    ...
)

Opus 4.7 把这个参数移除了,换成了 effort 枚举:

# Opus 4.7 的写法
response = client.messages.create(
    model="claude-opus-4-7",
    thinking={"type": "enabled", "effort": "xhigh"},
    ...
)

如果你的代码里硬编码了 budget_tokens,切到 4.7 会直接报错。

迁移建议:做一个兼容层。

def create_with_thinking(client, model, messages, effort="xhigh", **kwargs):
    thinking_config = {"type": "enabled"}
    
    if "opus-4-7" in model or "opus-4.7" in model:
        # 4.7 用 effort 参数
        thinking_config["effort"] = effort
    else:
        # 4.6 及之前用 budget_tokens
        budget_map = {"high": 4000, "xhigh": 8000, "max": 16000}
        thinking_config["budget_tokens"] = budget_map.get(effort, 8000)
    
    return client.messages.create(
        model=model,
        messages=messages,
        thinking=thinking_config,
        **kwargs
    )

这样不管后端是 4.6 还是 4.7,代码都不用改。通过 API 网关调用的话,这类兼容性问题通常在网关层处理好了。

要不要马上切 Opus 4.7?

这是大家最关心的问题。我的看法:大部分场景可以切,但不是全部。

场景建议
Agent 工具调用密集型立刻切。工具错误降一半,这是硬提升
代码 review / bug 检测。SWE-bench +13pp,/ultrareview 是新功能
长时间自主运行的 Agent。长程推理 +14%,这是 Opus 的主场
简单问答 / 日常对话不需要切。用 Sonnet 或 DeepSeek 就够,Opus 太贵
需要精确控制思考深度暂缓。budget_tokens 没了,effort 枚举粒度更粗
已稳定运行的生产 Agent灰度切。先切 10% 流量,观察一周

成本分析

Opus 4.7 定价和 4.6 一样:5/5/25 per MTok。但因为 xhigh 模式输出的 token 比 high 多 75%(~2100 vs ~1200),实际使用成本会上升约 40-50%

不过准确率提升意味着更少的重试。30 个工具场景下:

  • DeepSeek V4:准确率 53.3%,平均需要 1.9 次调用才能得到正确结果
  • Opus 4.7 xhigh:准确率 87.5%,平均 1.1 次

调用次数少了 42%,抵消了大部分 token 增长。

综合算下来,对于工具密集型 Agent:

  • DeepSeek V4 每个正确结果的平均成本:~$0.0004
  • Opus 4.7 每个正确结果的平均成本:~$0.0065

Opus 4.7 贵了 16 倍,但准确率高了 34pp。值不值得?看你的场景。如果工具调用错误会导致用户可见的故障,多花这个钱就是值得的。如果只是内部自动化脚本,DeepSeek V4 足够了。

最省钱的方案还是混合路由——简单工具调用走 DeepSeek,复杂的多步骤 Agent 任务走 Opus 4.7。通过 API 网关按任务类型自动路由,一个 Key 搞定。

一句话总结

Opus 4.7 在 Tool Use 上的提升是实打实的。30 个工具场景下准确率从 53%(DeepSeek V4)提升到 74%,幻觉率从 12.5% 降到 4.2%。"错误降到 1/3" 的说法在幻觉率上完全成立,在整体错误率上打个七折——降了一半左右。

xhigh 是 effort 参数的甜蜜点。迁移注意 budget_tokens 被移除了。TheRouter 已经支持 Opus 4.7,改一行 model 参数就能切。


TheRouter — 多模型 API 网关,已支持 Claude Opus 4.7。一个 Key 调用 Opus、DeepSeek、Qwen 等 30+ 模型,按任务复杂度自动路由到最合适的模型。