422 格式转换错误: Responses upstream upstream_error: Upstream service temporarily unavailable
Quick fix
升级 CC Switch 到包含 #7787 修复的版本:上游暂不可用会改报为 502(UpstreamError),不再被包装成 422。
Symptom
Section titled “Symptom”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 中处理,需要单独设计。
升级 CC Switch 到包含 #7787 修复的版本。该修复会把 HTTP 2xx 但业务失败的上游响应改为 502(UpstreamError),而不是 422 格式转换错误。
升级后重新通过 CC Switch 本地代理访问 Claude Code,观察日志中是否不再出现 `[FWD-003] ... 响应转换失败: Responses upstream upstream_error: Upstream service temporarily unavailable` 这类 422 包装错误。
如果暂时无法升级,可临时使用社区提供的重试代理作为 workaround:在 Claude 客户端与 CC Switch 本地路由之间加入 https://github.com/HKLHaoBin/cc-switch-422-retry-proxy ,对 422 过载类错误以及 502/503/504 和连接错误进行退避重试。注意这是第三方临时方案,不是官方修复,并存在重复请求、流式整段缓冲等风险。
Affected Versions
Section titled “Affected Versions”Source Issues
Section titled “Source Issues”本页汇总自 1 个真实 issue
- 为什么上游服务不可用时会报 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。本站不分发任何软件。