跳转到内容

422 格式转换错误: Responses upstream upstream_error: Upstream service temporarily unavailable

Quick fix

升级 CC Switch 到包含 #7787 修复的版本:上游暂不可用会改报为 502(UpstreamError),不再被包装成 422。

报错原文
API Error: 422 格式转换错误: Responses upstream upstream_error: Upstream service temporarily unavailable

在 CC Switch 3.20.3 中,某些上游错误并不是通过 HTTP 非 2xx 状态码返回的,而是以“HTTP 2xx 成功响应 + 业务失败内容”的形式出现,例如 `status:"failed"` 文档、流式过程中的 `response.failed`/error SSE 事件,以及 Anthropic 的 `type:"error"` 2xx 响应。

这些失败信封此前被归类为“格式转换错误”,最终统一包装成 422 返回给客户端。因此当上游实际是“服务暂时不可用(Upstream service temporarily unavailable)”时,用户看到的却是 422,容易误导为请求格式或协议转换问题。维护者在 #7787 中已将这类情况改为 `UpstreamError` 502,并保留上游原始的 `error.type` 与 `error.message`。另外,issue 中还提到另一种 `invalid_request_error: Unsupported parameter: max_tool_calls` 参数不兼容错误,但维护者明确表示该问题不在 #7787 中处理,需要单独设计。

  1. 升级 CC Switch 到包含 #7787 修复的版本。该修复会把 HTTP 2xx 但业务失败的上游响应改为 502(UpstreamError),而不是 422 格式转换错误。

  2. 升级后重新通过 CC Switch 本地代理访问 Claude Code,观察日志中是否不再出现 `[FWD-003] ... 响应转换失败: Responses upstream upstream_error: Upstream service temporarily unavailable` 这类 422 包装错误。

  3. 如果暂时无法升级,可临时使用社区提供的重试代理作为 workaround:在 Claude 客户端与 CC Switch 本地路由之间加入 https://github.com/HKLHaoBin/cc-switch-422-retry-proxy ,对 422 过载类错误以及 502/503/504 和连接错误进行退避重试。注意这是第三方临时方案,不是官方修复,并存在重复请求、流式整段缓冲等风险。

ToolClaude Code
Version3.20.3(报告版本);#7787 已修复,但具体修复版本未说明
PlatformsWindows
为什么上游服务不可用时会报 422 格式转换错误?
因为部分上游错误是通过 HTTP 2xx 响应里的失败内容返回的,旧版本把这类响应误归类为格式转换错误,所以最终包装成 422。
这个修复会影响故障转移(failover)吗?
不会。维护者说明旧的 422 分类本来就是可重试的,新的 502 也在同一类可重试错误中,因此 failover 语义不变。
`Unsupported parameter: max_tool_calls` 也一起修了吗?
没有。维护者明确表示该参数不兼容问题不包含在 #7787 中,需要单独设计请求整形层的处理方式。
有没有临时解决办法?
有用户提供了一个第三方临时重试代理 https://github.com/HKLHaoBin/cc-switch-422-retry-proxy ,可拦截 422 过载类错误并进行重试,但存在重复请求、重复计费、流式不实时输出等风险。

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