messages[1]: missing field `content`(HTTP 400)— Codex
Quick fix
将 CC Switch 升级到 v3.20.4;转换器会跳过无 content 的 additional_tools 载体,避免严格上游返回 400。
Symptom
Section titled “Symptom”Invalid JSON data: Failed to deserialize the JSON body into the target type: messages[1]: missing field `content` at line 1 column 34911Codex Desktop 的标题生成及普通对话请求会在 input 开头放置一个有 role、无 content 的 additional_tools 载体。CC Switch 3.19.1 的 Responses→Chat 转换会把它变成 {"role":"system","content":null},Agnes 等要求 content 为字符串的严格上游因此返回 HTTP 400。
v3.20.4 已跳过该载体并将其中的工具并入顶层 tools,用户确认升级后恢复正常。不过,带 tool_calls 的 assistant 消息仍会输出 "content":null;这是 OpenAI Chat 规范允许的形态,但部分严格网关仍可能拒绝。
将 CC Switch 从 3.19.1 升级到包含 #7454 修复的 v3.20.4。
重新启用 apiFormat=openai_chat 的本地代理,并在 Codex Desktop 中发送消息验证标题生成和普通对话请求。
再执行一轮会调用工具的对话;如果工具调用后仍返回 400,保留出站请求体和报错,以确认是否为 assistant tool_calls 消息中的 content:null。
若暂时无法升级,可在本地反向代理中将消息里缺失或为 null 的 content 改写为 "";升级并验证修复后移除此绕过。
Affected Versions
Section titled “Affected Versions”Source Issues
Section titled “Source Issues”本页汇总自 1 个真实 issue
- 升级到 v3.20.4 后,Agnes 上的标题生成和普通对话是否恢复正常?
- 是。报告者升级后确认已正常可用。
- v3.20.4 是否也把带 tool_calls 的 assistant 消息中的 content:null 改成了空字符串?
- 没有。该版本只修复 additional_tools 载体被转换为空 system 消息的问题;assistant tool_calls 消息仍可能包含 "content":null。
- 如果工具调用之后仍返回 400,需要提供什么信息?
- 提供转换后的出站请求体和上游报错,以判断严格上游是否拒绝 assistant tool_calls 消息中的 content:null。
这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。