中转站检测ZHONGZHUANJIANCE.COM · 独立第三方

检测项目一览 / 工具调用协议

工具调用协议检测

中转站检测:强制调用一个工具,检查返回的 tool_use / tool_calls 结构、名称、入参是否符合官方 schema。适用于 Claude 和 OpenAI。

适用协议:Claude、OpenAI计入真假三档评分

测什么

定义一个简单工具(回显一个字符串),用 tool_choice 强制模型必须调用它,检查响应里有没有返回结构规范的工具调用块——Claude 是 content 数组里的 tool_use block,OpenAI 是 message.tool_calls 数组——名称是否对得上、入参是否是能被正常解析的合法 JSON。Claude 开启思考的模型按官方协议不允许强制调用,这类模型改用 tool_choice=auto 并在指令里要求调用。

为什么能判真假 / 来路

官方协议对「强制工具调用」的返回结构是固定的。协议实现不完整或做了转换的网关,往往拿不出规范的 tool_use / tool_calls 结构,或者入参不是合法 JSON——这是判断这条通道协议实现是否完整的一项硬指标。

结果怎么读

  • 通过:返回了名称正确、入参是合法 JSON 且字段符合 schema 的工具调用块。
  • 存疑:强制要求调用工具,响应里却没有工具调用块;或者有工具调用块但名称不对、入参不是合法 JSON、字段不符合 schema。
  • 未通过:这个探针不会给出「未通过」,只有通过/存疑/信息不足三档。
  • 信息不足:请求失败或超时;或回答被输出上限截断(推理模型的思考也占输出上限);或 auto 模式下模型本次没有调用工具——本次无法判断。

局限:它判不了什么

仅 Claude 和 OpenAI 两个协议有这项检测,Gemini 官方走的是不同的 function calling 字段形状,本站目前未实现这一项。存疑不代表掉包,在供货层它被归为「功能残缺/非官方后端直通」——说明这条通道没把工具调用这个功能做全,不是身份不符(掉包嫌疑)的证据。

自己怎么验

强制模型调用一个简单工具,看响应里有没有规范的工具调用结构。

curl -s https://YOUR_RELAY_BASE_URL/v1/messages \
  -H "x-api-key: YOUR_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-opus-5","max_tokens":1024,"tools":[{"name":"echo_check","description":"echo the token back","input_schema":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]}}],"tool_choice":{"type":"tool","name":"echo_check"},"messages":[{"role":"user","content":"Call echo_check with token \"ZZC\"."}]}' \
  | grep -o '"type":"tool_use"'

OpenAI 把 tools/tool_choice 换成官方 function-calling 的字段形状(type: function),请求体和响应里找的是 tool_calls 而不是 tool_use,其余思路一样。如果返回 400 说不支持这种 tool_choice(开启思考的模型常见),把 tool_choice 改成 {"type":"auto"} 再试。

用检测工具实测你的中转站 →

相关检测项

常见问题

为什么工具调用检测判不了「掉包」?

这一项测的是协议实现完不完整,不是模型身份。没做好工具调用支持,更可能是这条通道功能残缺或没走官方直通,而不是把模型换成了别的——判断掉包要看 thinking 签名和模型名回显。

为什么 Gemini 没有工具调用检测?

官方 Gemini 的 function calling 走的是不同的字段形状(和 Claude 的 tool_use、OpenAI 的 tool_calls 都不一样),本站引擎目前没有针对 Gemini 实现这一项探针,不代表 Gemini 的工具调用功能一定有问题。