更强模型,却更差的工具调用

Simon Willison··作者 Simon Willison

关键信息

Armin 怀疑这个回归可能来自 Anthropic 最近的训练方式,可能是为了提升 Claude Code 内置编辑工具而做的强化学习。Simon 还指出,Claude 的编辑工具采用的是搜索并替换语义,而 OpenAI 的 Codex 使用的是 apply_patch 机制,这说明不同模型家族的工具行为可能差异很大。

资讯摘要

2026 年 7 月 4 日,Simon Willison 发表了一篇名为《Better Models: Worse Tools》的链接文章,介绍了 Armin 在开发 Pi 时遇到的一个 bug。问题在于,较新的 Claude 模型有时会生成编辑工具调用,并在嵌套的 edits[] 数组中加入额外的、臆造出来的字段。虽然模型给出的编辑内容通常是正确的,但工具参数不符合 Pi 的 schema,因此系统会拒绝这次调用并要求模型重试。Willison 说,工具调用格式错误本身并不罕见,尤其是在较小模型上。

真正令人意外的是,这种情况似乎在更新的 Anthropic 模型中更严重,例如 Opus 4.8 和 Sonnet 5,而旧模型并没有这个问题。Armin 认为,这可能与 Anthropic 近期的训练有关,尤其是为了让模型更擅长 Claude Code 内置编辑工具而进行的优化。这样的训练可能提升了 Claude 自家工具的表现,却让第三方工具框架,比如 Pi,更容易遇到错误的工具调用。Willison 最后提出一个问题:Pi 这类工具是否应该支持多种编辑工具格式,以便根据用户选择的模型切换到表现最佳的那一种。

资讯正文

2026年7月4日 - 链接博客

更好的模型:更差的工具。Armin 报道了他在为 Pi 做 hack 时遇到的一个怪问题:

简短来说,较新的 Claude 模型有时会在嵌套的 edits[] 数组里调用 Pi 的编辑工具时,附带额外的、凭空捏造的字段。而且并不是 Haiku 之类的小模型:是 Opus 4.8。编辑本身通常是正确的,但参数并不符合 schema,因为模型编造了不存在的键,于是 Pi 会拒绝这次工具调用并要求重试。单看这一点并不算太令人惊讶,因为模型有时会发出格式错误的工具调用,尤其是小模型。不过让我意外的是,这种情况在更新的 Anthropic 模型上反而更严重:Opus 4.8 和 Sonnet 5 都有这个问题,而更老的模型都没有。换句话说,这个家族里最新的 SOTA 模型在这一特定工具 schema 上,表现反而不如它们的老前辈。

简短来说,较新的 Claude 模型有时会在嵌套的 edits[] 数组里调用 Pi 的编辑工具时,附带额外的、凭空捏造的字段。而且并不是 Haiku 之类的小模型:是 Opus 4.8。编辑本身通常是正确的,但参数并不符合 schema,因为模型编造了不存在的键,于是 Pi 会拒绝这次工具调用并要求重试。

单看这一点并不算太令人惊讶,因为模型有时会发出格式错误的工具调用,尤其是小模型。不过让我意外的是,这种情况在更新的 Anthropic 模型上反而更严重:Opus 4.8 和 Sonnet 5 都有这个问题,而更老的模型都没有。换句话说,这个家族里最新的 SOTA 模型在这一特定工具 schema 上,表现反而不如它们的老前辈。

Armin 推测,这是因为 Anthropic 较新的模型被专门训练过(大概是通过强化学习),以更好地使用内置于 Claude Code 的编辑工具。不幸的是,这带来的副作用是,其他编码 harness,比如 Pi,可能会发现它们自己的自定义编辑工具更容易被错误使用。

Claude 的编辑工具使用的是搜索和替换。OpenAI 的 Codex 则使用 apply_patch 机制,OpenAI 过去也谈到过,他们的模型是如何被训练来有效使用这个工具的。

这是否意味着,像 Pi 这样的第三方编码 harness 应该实现多个编辑工具,好让它们能够针对用户所选的底层模型使用其中性能最佳的那个?

来源与参考

  1. 原始链接
  2. Better Models: Worse Tools

收录于 2026-07-06