格式转换错误: No choices in response - CC Switch / Claude Code
Quick fix
ClinePass 把响应套了一层 data 信封导致解析失败,可升级含修复的 CC Switch 版本,或临时用本地代理解包 response.data 再转发。
Symptom
Section titled “Symptom”Gateway returned HTTP 422
格式转换错误: No choices in response
probedModel: claude-sonnet-4-6ClinePass(api.cline.bot)的非流式 OpenAI Chat Completions 响应把真正的结果包在了一层顶层 data 字段里:choices 位于 response.data.choices,而不是标准的 response.choices。CC Switch 本地路由在做非流式响应格式转换时只读取顶层 choices,找不到就抛出 422「格式转换错误: No choices in response」。
同一 endpoint 的流式(SSE)响应分片里 choices 在顶层、不套信封,所以 stream=true 时完全正常;直连上游用 stream:false 请求 100% 复现 {"data":{"choices":[...]},"success":true} 信封。该问题不止出现在 Claude Desktop 的模型映射路径:Claude Code 的本地路由 claude 通道、Codex 的 Responses→Chat 转换路径(报错文案略为不同:No choices in chat response,说明存在独立的解析点)都会命中,且与具体模型无关(cline-pass/kimi-k3、cline-pass/deepseek-v4.1-flash 均复现)。另外该失败不会写入 proxy_request_logs,只能从 cc-switch.log 中发现。
升级到包含修复 PR #5671 的 CC Switch 版本(该 PR 在非流式 openai_chat 响应转换前,若顶层没有 choices 而 response.data.choices 存在,就先解包 response.data 再转换)。本 issue 仍为 open,升级前请确认所用版本已合并该 PR;报告者已确认 3.18.0 和 3.20.4 均受影响。
临时绕过方案:在 CC Switch 与 ClinePass 之间加一个小型本地代理(例如 Node.js),把上游响应中的 response.data 解包后再转发给 CC Switch。报告者确认这样可以消除解析错误,缺点是需要额外进程、端口和启动配置。
如果客户端支持,尽量走流式(stream: true)请求:流式 SSE 分片的 choices 在顶层,不套 data 信封,不会触发该错误。
Affected Versions
Section titled “Affected Versions”Source Issues
Section titled “Source Issues”本页汇总自 1 个真实 issue
- 直连上游 API 返回 200,为什么 CC Switch 还是报错?
- 因为上游返回的 Chat Completions 结果被包在顶层 data 字段里(response.data.choices),CC Switch 非流式转换路径只找 response.choices,找不到就返回 422「No choices in response」。API key、模型、订阅本身都是正常的。
- 为什么同样的 ClinePass 配置在 GitHub Copilot / VS Code 里能用?
- 报告者推测 GitHub Copilot / VS Code 默认使用流式请求,而流式 SSE 分片的 choices 在顶层、不套 data 信封,所以不会触发这个问题。
- 为什么流式(stream: true)请求不会报错?
- 因为流式响应的 SSE 分片中 choices 就在顶层;data 信封只出现在非流式(stream: false)的响应里,只有非流式转换路径会撞上。
- 为什么 CC Switch 的用量/请求日志里看不到这些 422 失败?
- 有用户确认该失败不会写入 proxy_request_logs(status_code=422 的记录为 0),因为转换在记账之前就返回了;只能从 cc-switch.log 的 ERROR 日志(如 proxy::handlers 的「转换响应失败」)中发现。
这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。