Anthropic Claude 模型在工具调用 Schema 中的退化

Anthropic Claude 模型在工具调用 Schema 中的退化

SOTA 模型在工具 Schema 遵循度上出现退化

Anthropic 的较新 SOTA 模型,特别是 Opus 4.8Sonnet 5,越来越容易通过在嵌套数组中发明不存在的字段来发出格式错误的工具调用。虽然旧模型能够遵循提供的 schema,但这些新版本经常在工具参数中添加“slop”(即编造的键),导致外部 harness 在即使主要负载正确的情况下也会拒绝这些调用。

这种行为表明,随着模型在通用推理能力方面变得更加强大,它们在处理特定、未记录的工具形状时可能会变得不够灵活,或者更倾向于在训练阶段遇到的特定形状。

工具调用失败的机制

LLM 工具调用并非原生函数,而是使用带内信号(in-band signaling)生成的文本。模型会生成一个序列化字符串(通常类似于 XML 或 JSON),客户端 API 将其解释为函数调用。对于文件编辑工具,模型可能会被预期生成一个包含编辑内容的 JSON 数组:

{
 "path": "some/file.py",
 "edits": [
 {
 "oldText": "text to replace",
 "newText": "replacement text"
 }
 ]
}

在 Opus 4.8 和 Sonnet 5 的失败案例中,模型生成了正确的 oldTextnewText,但附加了诸如 requireUniquetypeidkindmatchCasein_file 等编造的键。这些幻觉通常发生在生成过程中的最高熵点:即在关闭一个长转义字符串之后,此时模型必须决定是关闭对象 (}) 还是添加另一个字段 (, "...")。

根本原因:“Slop Harness” 假设

这种退化很可能是由于在宽容的环境(例如闭源的 Claude Code harness)中进行强化学习 (RL) 产生的训练伪影。

宽容客户端的角色

Claude Code 的内部客户端设计得非常具有韧性。它采用了几种策略来处理格式错误的输出:

  • 参数别名 (Parameter Aliasing): 它接受同一个参数的多个名称(例如,old_strold_string)。
  • 静默过滤 (Silent Filtering): 它会自动剥离不在 schema 中的意外键。
  • Unicode 修复 (Unicode Repair): 它会修复损坏的 \uXXXX 序列和孤立的代理项。
  • 重试循环 (Retry Loops): 它使用状态机来捕获泄露的 markup 并提示模型重试。

RL 诱导的偏差

如果一个模型是在一个能够静默修复错误的 harness 中通过 RL 进行训练的,那么无论工具调用是否完全符合 schema,模型都会因为完成任务而获得奖励。因此,不存在推动模型避免发明别名或添加多余字段的梯度。随着时间的推移,模型会对 Claude Code 使用的特定扁平 schema 产生强烈的先验概率,使得其他替代的嵌套 schema(如 Pi harness 中使用的那些)看起来“偏离分布”。

缓解策略

几种技术方法可以缓解这些 schema 退化问题:

1. 严格模式与约束解码

在 Anthropic API 中启用 strict 模式似乎可以消除这些失败。这很可能是因为服务器端推理栈采用了 语法约束解码 (grammar-constrained decoding),从而屏蔽了会违反 JSON schema 的 token。

2. 错误驱动纠正

一些开发者发现,通过向模型提供详细的错误消息可以取得成功。通过解释工具调用为何失败以及如何修复语法,智能体 (agent) 通常可以在随后的轮次中纠正错误,并在剩余的上下文窗口中保持这种正确性。

3. 客户端“自我修复”

类似于 Claude Code 的方法,一些用户已经构建了扩展程序来修补编辑工具,使其能够静默忽略编造的字段,或者将别名映射回正确的 schema,从而减少往返重试的次数。

对 AI Agent 开发的影响

这一现象表明,工具 schema 并非中立的抽象契约。相反,它们受到模型后训练分布的影响。

  • Harness Dependency (Harness 依赖性): 智能体的“智能”越来越是模型与 harness 的总和。在专有、宽容的生态系统中训练过的模型,在严格的开源环境中使用时可能会遇到困难。

  • The Moat of the Closed Harness (闭源 harness 的护城河): 闭源 harness 结合在客户提示词上的 RL 微调,创造了一种技术护城河。如果前沿模型仅在其自身的专有 harness 模式下表现最佳,那么第三方开发者必须要么模仿那些怪癖,或者依赖严格的约束解码,这可能会带来自身的质量权衡。

Sources