Studio 各编码 Agent 对未内置名单模型(未知模型)工具调用全部失败(Claude Code 空调用 / Codex [1210] / PI 无回复 / ekko 与 Hermes 无 tool_calls);直连同一后端同一模型正常

Author: zmzwynzjCreated Aug 22, 2026Updated Sep 17, 2026

Studio 各编码 Agent 对未内置名单模型(未知模型)工具调用全部失败(Claude Code 空调用 / Codex [1210] / PI 无回复 / ekko 与 Hermes 无 tool_calls);直连同一后端同一模型正常

问题描述

在 Hermes Studio 内使用各编码 Agent(Claude Code、Codex、PI、ekko-Agent)与 Hermes 智能体,选用模型 ox-alpha-free(provider: custom:opencode31888 / https://opencode.ai/zen/go/v1,预期为 chat_completions / codex_responses 兼容),工具调用全部失败,且在 4 种 Agent 中表现出不同症状

Agent 现象(实测观察) 证据
Claude Code(CLI/SDK) 连续 51 次 Bash 调用,参数均缺失(command 为空) 每次返回 InputValidationError: The required parameter 'command' is missing;该会话所有请求 input_tokens 均为 0
Codex 首次请求即失败,无任何回复 [1210] Invalid API parameter(见下方原始错误);usage 记录为 0(请求未到后端)
PI 请求到达了后端(usage=22364 输入 token),但没有产生任何助理消息 页面无回复;工具调用数 0
ekko-Agent + Hermes 智能体 模型回复"好的,我来看一下……",但没有发生任何 tool_calls 会话第 2 轮起 tool_call_count=0;有 usage 记录但消息只存了文本声明

原始错误(Codex 会话,session mt53bv63ebrx1c):

json
Error: {"error":{"type":"api_error","message":"Error from provider (Console Go): Upstream request failed: [1210] Invalid API parameter, please check the documentation.","provider_error":{"error":{"type":"server_error","message":"Error from provider (Console Go): Upstream request failed: [1210] Invalid API parameter, please check the documentation."}}}}

可复现性 / 对照实验(关键)

实验 A:绕过 Studio,直连同一后端(https://opencode.ai/zen/go/v1,相同 API key,相同模型 ox-alpha-free,带工具定义)——成功。

chat/completions 格式(35 个真实 Hermes 工具):HTTP 200finish_reason: "tool_calls"{"command":"pwd && ls -la"},usage 正常。 codex_responses 格式(模拟 Codex):HTTP 200stop_reason: "tool_call"{"command":"pwd && ls -la"},usage 正常。

结论(实测):该模型与后端本身的工具调用能力正常,且能正确给出 command 参数。

另:直连时故意测试了若干"可疑 schema 变体"(additionalProperties: false、顶层 description、嵌套 input_schema 直接当 parameters)——均正常返回 200;只有把非法字段放入 properties(如 properties 含空 description)才复现 1210。这一组排除了"工具 schema 格式差异"作为失败原因。

对照组 B:同一 provider(custom:opencode31888)下,模型 deepseek-v4-flash(在 Studio 内置 model 列表中),任何 Agent 都正常调用工具(同一 codex_responses 路由下,Claude Code 已正常 120+ 次工具调用,usage 记录正常)。

会话证据(Web UI)

以下 4 个会话(均在 default profile)全部 model=ox-alpha-freeprovider=custom:opencode31888api_mode=codex_responsesagent_mode=scoped,且全部 tool_call_count=0

session_id agent 状态(实测)
mt53bv63ebrx1c codex ❌ 1210(usage 0 条,从未到后端)
mt53gkawx0f143 pi ❌ 请求到达后端(usage 1 条:in=22364, out=86)但无任何助理回复
mt53i8472yf0fc ekko-agent ❌ 有 usage 记录,但消息只存了文本"好的,我来看一下……",无 tool_calls
mt4nd2v11b14nl Hermes(cli) ❌ 同 ekko:仅文本承诺,0 tool_calls

观察到的事实(不推测原因)

现象与"具体模型是否进入 Studio 内置 model 名单"高度相关:

  • 已进入内置名单的模型(deepseek-v4-flash 等)全部正常(同一 codex-proxy 路由、同一 provider、同一 api_mode);
  • 未进入内置名单的模型(ox-alpha-free)在上面所有 Agent 中均失败,且失败形态因 Agent 而异:command 缺失(Claude Code)、[1210] Invalid API parameter(Codex)、请求到达后端但无助理消息(PI)、仅文本声明无 tool_calls(ekko/Hermes)。

(注:以上仅陈述实测到的行为;具体是哪一层(代理转发 / 请求构造 / 响应解析)导致,仍未抓到各个 Agent 发出的原始请求体与原始响应,故不归咎于具体代码路径。)

环境

  • Hermes Studio(Windows)
  • provider: custom:opencode31888 / custom:opencode-go / https://opencode.ai/zen/go/v1
  • model: ox-alpha-free(opencode 的临时免费 alpha 模型)
  • 涉及: Claude Code(SDK/CLI)、Codex、PI、ekko-Agent、Hermes 智能体

期望

希望修复:未在内置名单的 openai-chat / codex_responses 模型(未知模型)也能按标准适配工具调用,避免出现上述任意一种失败模式。ox-alpha-free 只是当前暴露该问题的样本(opencode 临时免费 alpha 模型,预计一周内会改名/被替换)——届时任何新增、尚未进入内置名单的模型都会命中同样的问题,这一改动对未来新模型开箱即用至关重要。


附件:实验 A 原始响应(直连后端, chat/completions, 35 个真实工具)

json
{"id":"20260823075339bc101e1f57994e80","object":"chat.completion","created":1787442824,"model":"ox-alpha-free","choices":[{"index":0,"finish_reason":"tool_calls","message":{"role":"assistant","content":"","reasoning_content":"The user is asking me to execute \"echo hello\" using the Bash tool, and to only reply with the tool call.","tool_calls":[{"index":0,"id":"call_-7323591247442999991","type":"function","function":{"name":"Bash","arguments":"{\"command\":\"echo hello\"}"}}]}}],"usage":{"prompt_tokens":252,"completion_tokens":38,"total_tokens":290,"prompt_tokens_details":{"cached_tokens":192},"completion_tokens_details":{"reasoning_tokens":8}},"cost":"0"}

附件:实验 A-2 原始响应(直连后端, responses 格式, 带工具)

json
{"id":"2026082309110328ff16497f5c4dc9","object":"response","model":"ox-alpha-free","output":[{"id":"call_-7323607843196628602","type":"function_call","name":"bash","call_id":"call_-7323607843196628602","arguments":"{\"command\":\"pwd && ls -la\"}"}],"stop_reason":"tool_call","usage":{"input_tokens":236,"output_tokens":39,"total_tokens":275}}

Source: EKKOLearnAI/hermes-studio