更好的模型:更差的工具
Armin Ronacher 报告了一个奇怪的问题:较新的 Claude 模型(如 Opus 4.8 和 Sonnet 5)在调用 Pi 的编辑工具时会凭空添加额外字段,导致工具调用失败。而较旧的模型却没有这个问题。他推测,这是因为 Anthropic 通过强化学习让新模型更擅长使用 Claude Code 内置的编辑工具,但副作用是其他代码框架(如 Pi)的自定义工具被误用的概率增加了。这引发了疑问:第三方代码框架是否应该针对不同模型实现多种编辑工具?
在最新的博客文章中,Armin Ronacher 分享了一个他在开发 Pi(一个 AI 编程助手)时遇到的令人困惑的问题。他发现,较新的 Claude 模型(包括强大的 Opus 4.8 和 Sonnet 5)在调用 Pi 的编辑工具时,会在嵌套的 edits[] 数组中凭空添加一些不存在的字段。尽管编辑操作本身通常是正确的,但由于附加了模式中未定义的键,Pi 会拒绝该工具调用,并要求模型重试。
这本身并不罕见——模型有时确实会输出格式错误的工具调用,尤其是小型模型。但令人惊讶的是,这个问题在较新的模型中反而更频繁地出现。Opus 4.8 和 Sonnet 5 都表现出这种倾向,而较旧的模型(如 Opus 3 和 Sonnet 4)则没有。换言之,Anthropic 系列中最先进的模型在遵循特定工具模式方面的表现反而不如它们的“前辈”。
Armin 推测,这种反常现象是由于 Anthropic 通过强化学习(Reinforcement Learning, RL)对较新模型进行了专门训练,使其更擅长使用 Claude Code 中内置的编辑工具(基于搜索和替换)。这种训练虽然提高了模型在 Claude Code 中的表现,但也产生了负面效应——模型开始将类似的行为“推广”到其他代码框架的自定义工具上,导致 Pi 等工具收到不符合预期的调用。
这一观察引出了更广泛的问题:如果模型供应商继续针对自家工具优化模型,第三方框架是否被迫需要实现多种编辑工具?例如,OpenAI 的 Codex 使用 apply_patch 机制,并且 OpenAI 也公开讨论过如何训练模型有效使用该工具。那么,Pi 是否应该同时支持搜索-替换和 apply_patch 等多种编辑工具,以便根据底层模型选择最兼容的一种?
目前,这个问题还没有简单的答案。但它凸显了 AI 工具生态中一个潜在的分裂趋势:随着模型越来越针对特定平台优化,跨框架的通用性可能会下降。开发者可能需要考虑如何在保持灵活性的同时,应对模型行为的非预期变化。