跳转到内容

Error from provider (Console Go): Upstream request failed - cc-switch

Quick fix

检查模型映射是否被正确应用,若映射目标模型已下线或请求体含上游不支持的 tool_choice/图片格式,需调整配置或等待 cc-switch 修复翻译层。

报错原文
{"error":{"param":null,"code":"invalid_request_error","type":"invalid_request_error","message":"Error from provider (Console Go): Upstream request failed: [invalid_request_error] Thinking mode does not support this tool_choice"}}

该错误是 OpenCode Go(Console Go)网关返回的通用上游失败提示,在 cc-switch 本地代理链路中出现时有多种根因。第一种是模型映射被静默跳过:技能重新导入后代理内部状态重载,导致 session 上下文丢失,原始模型名(如 `claude-sonnet-4-6`)被直接透传给上游,上游无法识别而返回 400(#5312)。第二种是请求体中的 `tool_choice` 或工具定义不符合上游严格校验:Claude Code 内置 WebSearch 强制发送 Anthropic 风格 `server_tool`,而上游只接受 `auto` 或 `{"type":"web_search"}`(#6367);Codex 原生 Responses 透传时,grok-* 模型对 `custom`/`tool_search`/缺失 `parameters` 的 function 工具一律 422(#7138)。第三种是模型能力声明与实际网关能力不匹配:DeepSeek 声明支持图片,但 Console Go 网关只认 `text` 内容块,粘贴图片即 400(#6450)。第四种是 failover 目标模型已下线,cc-switch 的 `categorize_proxy_error()` 将这类 400 一律归为 NonRetryable,不熔断不转移,导致请求反复失败(#6821)。

  1. 确认本地代理版本:技能重导入导致映射丢失的问题已在 4.0 重写本地路由接管方式后修复,请升级到最新版 cc-switch 并重新导入技能后验证。

  2. 若报错含 'Thinking mode does not support this tool_choice',请检查模型映射配置,确保 `claude-*` 模型名已映射到上游实际支持的模型名(如 `deepseek-v4-flash`),而非直接透传原始名。

  3. 若 failover 队列中某供应商映射的目标模型已下线(如 `deepseek-v4-flash-free`),请将该供应商的模型映射改为存活模型名(如 `hy3-free`),或从队列中移除该供应商。

  4. 若粘贴图片即 400,说明当前链路不支持 `image_url` 内容块,请避免在 Claude Code 中直接粘贴图片,或改用支持视觉的供应商/协议,等待 Vision Proxy 功能落地。

  5. 若 Codex 经 OpenCode Zen Go 使用 grok-* 模型返回 422,目前无配置层解法,需等待 cc-switch 扩展 sanitize gate 或自行在客户端与代理间加前置转换层。

ToolClaude Code / Codex
Version3.16.5 - 3.20.1(受影响范围;#5312 在 4.0 已修复)
PlatformsWindows
为什么重新导入技能后 Claude Code 突然全部 400?
这是 cc-switch 3.16.5 的已知问题:技能重导入触发代理内部状态重载,清除了 session 到供应商的关联,导致模型映射被静默跳过,原始模型名直接透传给上游。4.0 已重写本地路由接管方式,请升级验证。
WebSearch 一用就报 Thinking mode does not support this tool_choice,普通对话却正常?
Claude Code 对内置 WebSearch 强制发送 Anthropic 风格 `server_tool` tool_choice,而上游 DeepSeek Responses API 只接受 `auto` 或 `{"type":"web_search"}`。这是 cc-switch 翻译层未做适配所致,需等待修复。
为什么模型声明支持图片,粘贴图片还是 400?
模型能力声明(如 DeepSeek 支持图片)不等于实际转发网关能力。Console Go 网关只认 `text` 内容块,serde 反序列化遇到 `image_url` 直接拒绝。cc-switch 的 media_sanitizer 因能力判定为 Supported 而跳过剥离,导致图片原样转发。
上游 400 提示 Model is unavailable,为什么不自动切到下一个供应商?
cc-switch 的 `categorize_proxy_error()` 将所有 400 一律归为 NonRetryable,不触发熔断也不参与故障转移。即使响应体明确是模型已下线,也不会自动跳过坏供应商。需要手动调整 failover 队列或等待分类器改进。

这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。