OpenAI 和 Anthropic 都在告诉开发者:”我们的模型更强了。”但资深开发者 Armin Ronacher 最近的发现,让这个说法变得有点尴尬——新模型在某些工具调用场景下,比老模型更差。
一篇 146 分的技术文章
Ronacher 是 Flask 和 Pocoo 的作者,在 Hacker News 上发布了《Better Models: Worse Tools》,获得了 146 分。他的核心发现:
新版 Claude(Opus 4.8 和 Sonnet 5)在调用 Pi 编辑器的
edits[]嵌套数组工具时,会发明不存在的字段。比如requireUnique、oldText2、newText2、type、kind、in_file这样的键,schema 里根本没有,模型自己编出来的。
这个问题只在多轮 agentic 场景下出现,单轮简单提示词完全正常。而且老版 Claude 模型(Opus 4.5)根本没有这个问题。
为什么模型会”发明”工具参数?
Ronacher 挖得很深。他的分析指向了 Anthropic 的 RL 训练环境——Claude Code 本身。
Claude Code 的客户端代码是闭源的,但可以从 minified 代码里看到它做了什么:
- 参数别名容忍:既接受
old_str(旧版 schema),也接受old_string(新版 schema),还接受path作为file_path的别名 - 自动修复 Unicode:修复破损的
\uXXXX序列 - 静默过滤未知键:工具 call 里多了陌生的字段?直接忽略
- 不使用 strict 模式:因为 strict 模式对工具定义有复杂度限制,会导致 API 请求失败
换句话说,Claude Code 的 harness 极度宽容,即使模型生成了略微畸形的工具调用,整个任务仍然能完成,RL 仍然会给 reward。
Ronacher 的核心判断:
“If reinforcement learning happens in a harness like that, or a simulation of one, then slightly malformed tool calls can still complete the task and receive reward.”
这就形成了一个非常反直觉的现象:Claude Code 越成功,Anthropic 的模型就越被训练成适应 Claude Code 特定 schema 的形状。其他工具 harness 如果 schema 不同,就变成了”离分布”(off-distribution),模型反而更难正确调用。
真正值得注意的几组事实
1. Opus 4.8 和 Sonnet 5 都退化了,但原因不同
Ronacher 观察到,这两个模型都有相同的工具调用退化问题,但退化方式不同。Opus 4.8 的”先验”是:编辑工具可能有一个额外可选字段,但不知道叫什么名字,所以每次随机生成一个。Sonnet 5 可能机制不同,但结果是类似的——同一技术方向的两代模型,都有同样症状。
2. 开启 strict 模式可以修复,但 Anthropic 自己不用
严格模式下,Anthropic 服务端会拒绝采样 schema 不允许的键,退化完全消失。但 Claude Code 没有使用 strict 模式,原因是 strict 对工具定义的复杂度限制会导致 API 失败。换句话说:Claude Code 为了功能完整性,主动放弃了正确的工具调用。
3. Codex 模型没有这个问题
Ronacher 测试了所有可用的 Codex 模型,没有发现这种退化。OpenAI 的模型没有在 Claude Code 的环境里做 RL,所以没有学会”宽容 harness”的那些习惯。
这对整个 AI 工具生态意味着什么
Ronacher 提出了一个非常不舒服的问题:
“Tool schemas are somewhere in the distribution and some shapes are close to what the model saw during post-training and some are far away.”
过去我们假设:只要工具 schema 写清楚,模型是通用推理器,会老老实实按 schema 调用。但现在这个假设在动摇——模型不是在遵循 schema,而是在遵循它见过的最类似的训练样本。
如果 Anthropic 的 RL 继续在 Claude Code 上迭代,其他工具 harness 将面临越来越大的适配压力。Ronacher 的原话是:
“The more post-training happens inside one dominant harness, the more every other harness will have to inherit its quirks.”
这意味着 AI 编程工具的战场,不只是模型能力的战场,也是谁能主导 RL 训练环境的战场。Claude Code 现在不只是一个产品,它正在成为事实上的标准工具 schema 定义者——不是因为它公开了标准,而是因为它主导了最强模型的 RL 环境。
Cursor 和 Copilot 接下来怎么应对,会是一个很有趣的观察角度。
我的判断
Ronacher 这篇文章最大的价值,是把一个很多从业者隐约感觉到但没有系统验证的现象,说清楚了。
“模型越强工具越差”这个现象,本质上是 RL 在特定环境里的过拟合。它不是 Claude 模型的能力问题,而是 Anthropic 的 post-training 策略选择问题——选择了让模型适应 Claude Code 的宽容 harness,而不是追求更通用的工具调用能力。
对于使用第三方工具的开发者来说,这意味着:如果你用的工具 schema 和 Claude Code 差异较大,你需要更主动地使用 strict 模式,或者在 prompt 里做更强的约束。不要默认模型会遵守你的 schema——它更可能遵守它 RL 时见过的那个版本。
对于 AI 编程工具的竞争格局来说:这场战争的胜负,可能不取决于谁发布了更强的模型,而取决于谁能成为其他工具的”RL 环境标准”。Anthropic 正在用 Claude Code 做到这件事,而这件事的影响会比任何一个新模型发布都更深远。
本文相关平台: