犀速AI
文档目录
更新于 2026-10-04

API 与错误码

工具的参数 schema 被拒(Invalid schema for function)

调用带工具或 MCP 的客户端时报 400 Invalid schema for function?原因是函数参数 schema 的顶层必须是纯 object,不能用 oneOf、anyOf 等组合关键字。本页给出定位方法和修改示例。

如果你用的客户端会自动挂上工具(尤其是接了 MCP 的那类),可能会看到这样一条 400:

Invalid schema for function 'mcp__example__do_something':
schema must have type 'object' and not have 'oneOf'/'anyOf'/'allOf'/'enum'/'const'/'not'
at the top level.
param: tools[14].function.parameters

这不是你的账号、也不是我们的限制

它来自模型厂商的 API 规范:OpenAI、Anthropic、Google 三家都要求 函数(工具)的 parameters 顶层是一个纯 object,不能是 oneOf / anyOf / allOf / enum / const / not 这些组合关键字。

实测过:同一个请求,只把那个工具的顶层换成纯 object,三家全部通过。 所以拒绝的是那个 schema 的形状,与你的密钥、余额、我们的链路都无关。

怎么修

改那个工具的 schema —— 把组合关键字挪进属性里,顶层留一个 object:

// 被拒
{ "anyOf": [ {"type": "object", "properties": {"a": {"type": "string"}}},
             {"type": "object", "properties": {"b": {"type": "number"}}} ] }

// 可用
{ "type": "object",
  "properties": { "payload": { "anyOf": [ {"type": "string"}, {"type": "number"} ] } },
  "required": ["payload"] }

组合关键字在属性内部是允许的,被禁的只有顶层。

报文里的 param: tools[N].function.parameters 直接告诉你是第几个工具 (从 0 数)。客户端如果一次挂了几十个工具,先按这个下标定位,别逐个看。

换个模型能绕过吗

能,但那是绕过,不是解法:并非所有上游都这么严。 不过那个 schema 仍然是坏的 —— 它会在你换回三家原厂模型的那天再次失败, 而那时你多半已经忘了这件事。优先改 schema。

如果你确实只是想先跑起来,可以在模型广场上换一个别家的模型试; 哪些能通会随在售清单变化,这里不列具体型号。

相关

错误码与限流的完整清单见「错误码与限流」; 带工具调用的请求走的仍然是 POST /v1/chat/completions,见「端点与鉴权」。