DeepAI Paper Hermes Agent 教程,Hermes 模型与 Provider API GPT-5 模型报 unsupported_api_for_model?Hermes Agent 自动切换 Responses API 的排错指南

GPT-5 模型报 unsupported_api_for_model?Hermes Agent 自动切换 Responses API 的排错指南

在 Hermes Agent 里接入 GPT-5.x、Copilot、OpenRouter 或其它 OpenAI-compatible provider 时,一个很容易让人误判的错误是:配置里明明写了 api_mode: codex_responses,但运行一段时间后,请求却漂移到了 /chat/completions,最后返回:

model "gpt-5.4" is not accessible via the /chat/completions endpoint
code: unsupported_api_for_model

这类问题表面像“OpenRouter 不能用 GPT-5”或“Copilot 配置失效”,但更准确地说,它暴露的是一个 API 模式选择策略问题:有些模型不是普通 Chat Completions 模型,而是必须走 Responses API / Codex Responses 路径。

本文基于 Hermes Agent 中一个已关闭并完成修复的真实问题,整理 GPT-5.x 模型在 Copilot、OpenRouter、OpenAI-compatible 端点之间切换时的排查思路。标题不写 issue 编号,直接面向搜索这个报错的人。


先说结论:GPT-5.x 不能只按 provider 判断 API 模式

如果你看到类似错误:

{
  "error": {
    "message": "model \"gpt-5.4\" is not accessible via the /chat/completions endpoint",
    "code": "unsupported_api_for_model"
  }
}

重点不是先去怀疑:

  • API Key 是否一定错了;
  • OpenRouter 是否完全不支持这个模型;
  • Copilot 是否突然坏了;
  • Telegram / Discord 网关是否把消息弄丢了。

更应该先确认:

> 当前模型是否必须使用 Responses API,而客户端却把它发到了 /v1/chat/completions

在 Hermes 这次修复里,维护者给出的根因是:GPT-5.x 模型在 OpenAI 和 OpenRouter 上都需要 Responses API 路径;旧逻辑只按 provider / base_url 判断 API mode,导致 fallback 到 OpenRouter 时错误使用 chat_completions


典型场景:配置是 Copilot,失败请求却去了 OpenRouter

问题报告里的典型配置类似:

model:
  default: gpt-5.4
  provider: copilot
  base_url: https://api.githubcopilot.com
  api_mode: codex_responses

正常预期是:

  • provider 保持 Copilot;
  • GPT-5.4 使用 codex_responses
  • 不应该自动漂到 OpenRouter 的 /chat/completions

但实际失败日志里出现了:

Endpoint: https://openrouter.ai/api/v1/chat/completions
model: gpt-5.4
code: unsupported_api_for_model

这就说明故障不只是“配置文件写错”。更像是 agent 在某次 provider fallback、gateway cached agent、会话恢复或内部重试路径中,把 provider / base_url / api_mode 的组合状态弄乱了。


为什么 fallback 会把问题放大?

Agent 系统通常会有 fallback 机制:主 provider 暂时失败时,切到备用 provider 继续完成任务。

这本来是提高可用性的设计,但对 GPT-5.x 这类模型有一个坑:

判断方式看起来合理隐患
按 provider 判断OpenAI direct 用 Responses,OpenRouter 用 Chat CompletionsGPT-5.x 在 OpenRouter 也可能要求 Responses
按 base_url 判断api.openai.com 用 Responsesfallback 到其它兼容端点时会漏判
按模型判断GPT-5.x 统一走 Responses更符合模型契约

Hermes 旧逻辑的问题就在这里:当 Copilot 用户的主 provider 出现临时失败,fallback 链路切到 OpenRouter,但 api mode 重新按 provider 默认值设成了 chat_completions。于是 GPT-5.4 被发到了不支持它的接口上。


官方修复思路:模型级 API mode 检测

对应修复里,Hermes 增加了一个模型级判断函数,大意是:

def _model_requires_responses_api(model: str) -> bool:
    m = model.lower()
    if "/" in m:
        m = m.rsplit("/", 1)[-1]
    return m.startswith("gpt-5")

然后在两个关键位置使用:

1. Agent 初始化时:如果模型本身需要 Responses API,即使 provider 不是 direct OpenAI,也切到 codex_responses; 2. fallback 激活时:如果 fallback provider 仍然承载 GPT-5.x,也必须保留 codex_responses,不能回退到 chat_completions

这个设计比“OpenRouter 特判一下”更稳,因为真正的约束来自模型能力和接口契约,而不是某一个 provider 名称。


排查清单:遇到 unsupported_api_for_model 先看这 6 件事

1. 看失败 URL 是 /chat/completions 还是 Responses 路径

如果错误里明确写:

not accessible via the /chat/completions endpoint

优先怀疑 api mode 错了。

不要只看配置文件里的 api_mode,要看实际 request dump / 日志里的 URL。很多问题恰恰发生在运行时 fallback 或 cached session 中。

2. 看模型名是否属于 GPT-5.x / Codex Responses 类

例如:

gpt-5
gpt-5.4
gpt-5-codex
openai/gpt-5.4

这类模型更应该被视为“Responses API 模型”,而不是普通 chat completions 模型。

3. 看 provider fallback 是否改变了 api_mode

如果日志里一边显示:

provider=copilot model=gpt-5.4

另一边 request dump 又显示:

base_url=https://openrouter.ai/api/v1
url=/chat/completions

说明状态可能已经漂移:provider 标签、base_url、api_mode 三者不一致。

4. 看 gateway 是否缓存 agent runtime

很多 messaging gateway 为了性能会缓存 agent 实例。如果 fallback 后没有在下一轮恢复 primary runtime,就可能让后续消息继续沿用错误状态。

Hermes 这次修复也顺手更正了一个注释:gateway 并不是每条消息都创建全新 agent,而是会通过 _agent_cache 缓存,所以 _restore_primary_runtime() 对 gateway 场景同样重要。

5. 区分认证错误和 API 模式错误

不要把所有 400 都混在一起。

错误更可能的问题
unsupported_api_for_model模型被发到不支持的 endpoint
invalid_api_key / User not foundAPI Key、Authorization header 或 provider auth
Personal Access Tokens are not supportedCopilot token 类型不符合 endpoint 要求
model not found模型名、供应商权限或路由表问题

如果错误已经明确说 /chat/completions endpoint,就先查 API 模式,不要先改 key。

6. 升级到包含模型级检测的版本

如果你用的是旧版 Hermes,最直接的修复是升级到包含 _model_requires_responses_api() 这类逻辑的版本。

如果你维护的是自己的 OpenAI-compatible client,也可以参考这个策略:

  • 不要只按 provider 决定 API path;
  • 把模型能力也纳入路由决策;
  • fallback 时复制/重算 api mode;
  • gateway 缓存 agent 时,每轮开始恢复 primary runtime。

对 OpenAI-compatible API 代理的启发

很多人会把多个模型接到统一代理或中转站,例如:

  • DeepAI API 中转站;
  • OpenRouter;
  • 自建 New API / One API;
  • 公司内部统一 LLM Gateway;
  • Cherry Studio、Cline、Dify、Open WebUI 等工具的统一 Base URL。

这里有一个关键经验:

> OpenAI-compatible 不等于所有模型都能走同一个 /chat/completions

统一 Base URL 很有价值,但客户端仍需要知道:

  • 哪些模型支持 Chat Completions;
  • 哪些模型必须走 Responses API;
  • 哪些模型有特殊 tool calling / reasoning / multimodal 约束;
  • fallback 到备用 provider 时是否要重算 API mode。

DeepAI API 中转站适合用来统一 API Key、Base URL、模型选择和账单管理,但前提是你的客户端把模型名、接口路径、参数契约配置正确。否则,把 GPT-5.x 发到错误 endpoint,换哪个兼容代理都可能继续报错。


推荐的配置思路

如果你在 Hermes 或类似 agent 中使用 GPT-5.x,建议这样检查:

model:
  default: gpt-5.4
  provider: your-provider
  api_mode: codex_responses
  base_url: https://your-endpoint.example.com

然后再确认运行时日志里:

model = gpt-5.4
api_mode = codex_responses
endpoint != /chat/completions

如果你配置了 fallback,还要确认 fallback 后:

fallback_model = gpt-5.4
fallback_api_mode = codex_responses

而不是:

fallback_model = gpt-5.4
fallback_api_mode = chat_completions

临时绕法和长期修复

临时绕法

如果你现在必须先恢复可用:

  • 暂时禁用会漂移到错误 endpoint 的 fallback;
  • 显式指定 api_mode: codex_responses
  • 换一个确定支持当前接口路径的模型;
  • 清理旧 session / cached agent 状态;
  • 查看 request dump,确认实际 URL。

这些能缓解,但不一定根治。

长期修复

更稳的长期修复应该是:

  • 按模型能力选择 API path;
  • provider fallback 时重新计算 api mode;
  • gateway cached agent 每轮恢复 primary runtime;
  • 把模型能力表集中维护,而不是到处手写 if;
  • unsupported_api_for_model 提供更明确的错误提示。

Hermes 的修复方向就是这个:模型级 helper + fallback 路径统一应用。


FAQ

unsupported_api_for_model 一定是模型不可用吗?

不一定。它可能表示模型可用,但你用了错误的接口路径。例如 GPT-5.x 被发到 /chat/completions,供应商会拒绝。

配了 api_mode: codex_responses 为什么还会走 chat_completions?

可能是 fallback、会话恢复、gateway cached agent 或内部 helper client 没有继承/重算 api_mode。要看实际 request dump,而不是只看配置文件。

OpenRouter 上的 GPT-5.x 也需要 Responses API 吗?

在这次 Hermes 修复结论里,维护者明确提到 GPT-5.x 在 OpenAI 和 OpenRouter 上都会被 /chat/completions 拒绝,因此要按模型强制走 Responses API 路径。

DeepAI API 中转站能解决这个错误吗?

DeepAI 可以帮助统一 OpenAI-compatible API 的 Base URL、API Key、模型和账单管理,但如果客户端把 GPT-5.x 发到错误 endpoint,仍然可能报错。正确做法是先保证模型与 API path 匹配,再接入统一中转。

这个问题和 Telegram / Discord 网关有关吗?

网关可能放大问题,因为 agent runtime 会缓存、fallback 状态可能跨消息残留。但根因仍然是模型、provider、base_url、api_mode 的组合状态不一致。


小结

当 Hermes Agent 使用 GPT-5.x 报:

unsupported_api_for_model
not accessible via /chat/completions

最重要的排查方向是:

> 不要只按 provider 判断接口路径,要按模型能力强制选择 Responses API。

对 agent、LLM gateway、OpenAI-compatible 中转和多 provider fallback 系统来说,这个问题很典型:统一入口很方便,但模型契约不能被抹平。GPT-5.x 这类模型需要 Responses API,就必须让主路径、fallback 路径、gateway 缓存路径都保持一致。

Related Post

Telegram 里 /model 不生效?Hermes Gateway 远程切换模型失效排查Telegram 里 /model 不生效?Hermes Gateway 远程切换模型失效排查

Hermes Telegram Gateway 里 /model 看得到却不生效?本文解释 /model 被移除、CLI 切换不影响 Telegram session、Agent 幻觉式声称已切换,以及如何用日志和 provider 账单验证真实模型。

Agent 排障时一条 pkill 把自己杀了:Hermes Gateway 自终止为什么需要危险命令拦截Agent 排障时一条 pkill 把自己杀了:Hermes Gateway 自终止为什么需要危险命令拦截

Hermes Gateway Agent 误判自己没运行后执行 pkill -f "cli.py --gateway",结果把承载自己的 Gateway 进程杀掉。本文复盘 #3397:为什么 kill/pkill/killall 命中 hermes/gateway/cli.py 必须进入审批流。

Gemini 报 missing thought_signature?Hermes Agent 工具调用历史丢签名的排错指南Gemini 报 missing thought_signature?Hermes Agent 工具调用历史丢签名的排错指南

Hermes Agent 使用 Gemini 3 / preview 模型时报 Function call is missing a thought_signature?这通常不是 API Key 或网络问题,而是 tool call 历史消息丢失 extra_content / thought_signature。本文整理升级、复现和源码排查清单。