HTTP 400 Invalid JSON /responses - CC Switch
Quick fix
将 Codex 提供商的 meta.apiFormat 改为 openai_responses 以直通转发请求。
Symptom
Section titled “Symptom”Expecting ',' delimiter: line 1 column 87 (char 86)当使用 ChatGPT Powered by Codex & OWL 版本 26.715.72359 时,CC Switch 默认将该提供商(对应 agnes)的 meta.apiFormat 设置为 "openai_chat"。这导致 CC Switch 尝试把客户端发来的 /responses 请求转换为 /chat/completions 格式。在序列化包含 instructions、tools、tool_choice、reasoning 和 message input 的多轮对话请求时,转换器生成了语法非法的 JSON。上游服务(如 agnes)无法解析该非法 JSON,从而返回 HTTP 400 错误。
此外,由于转换逻辑的问题,用户还可能遇到其他相关的 400 错误,例如 "No user query found in messages" 或 "Input items must contain at least one message",以及关于 ID 格式不匹配的错误(如 Expected an ID that begins with 'rs')。这些错误的根本原因均在于 API 格式不匹配导致的请求转换失败。
打开 cc-switch 的配置文件,找到当前使用的 codex 提供商配置。
将该提供商的 meta.apiFormat 字段从 "openai_chat" 修改为 "openai_responses"。这将使 CC Switch 不再进行格式转换,而是直接将 /responses 请求透传给上游。
Affected Versions
Section titled “Affected Versions”Source Issues
Section titled “Source Issues”本页汇总自 2 个真实 issue
- 为什么新开了对话窗口还是报错?
- 这个问题不是由历史对话缓存引起的,而是 API 格式转换机制本身的缺陷。无论是否新建对话,只要 meta.apiFormat 设置为 "openai_chat",多轮请求中的复杂字段就会被错误序列化为非法 JSON。请按照修复步骤更改 apiFormat。
- 除了 JSON 语法错误,我还看到了 "No user query found in messages",这也是同一个问题吗?
- 是的。当 CC Switch 错误地将 /responses 结构转换为 /chat/completions 结构时,它可能无法正确提取或映射用户消息字段,导致上游认为没有用户查询。将 apiFormat 改为 "openai_responses" 可以解决所有这类 400 错误。
这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。