missing field `call_id`:Codex 自动化 HTTP 400
Quick fix
原帖尚无已发布的可验证修复;需在代理转发时规范化无 call_id 的孤立输出,并保留跨任务消息内容。
Symptom
Section titled “Symptom”CC Switch local proxy failed while handling Codex endpoint /responses.
Provider: DeepSeek; model: deepseek-v4-flash; upstream_status: HTTP 400;
cause: Failed to deserialize the JSON body into the target type: input: missing field `call_id`这些报告的共同点是 Codex 会话历史中存在孤立的 `function_call_output`,其没有可用的 `call_id` 或未与前置 `function_call` 配对。严格校验的上游会拒绝整次请求;由于该条目会随历史重发,报告者观察到重试后仍持续 HTTP 400。自动化中的 `automation_update` 被描述为任务元数据,且任务指令另有 `user` 消息;跨任务 `send_message_to_thread` 的输出则可能是任务文本的唯一载体,因此直接丢弃会造成指令丢失。评论中的本地测试称,请求转发时清洗可让已受影响的会话恢复,但这不是已确认发布的修复。
#6697 同样描述会话持续 400,但触发原因不同:无视觉能力上游在转换过程中丢弃纯图片 tool 输出,留下未配对的 `tool_calls`。它不是缺少 `call_id` 的同一数据形状,应使用占位 tool 消息或配对校验来保留响应关系。#7230 的评论提到拟议 PR 和转换策略,但原帖均为 open,不能据此认定已修复。
原帖尚未提供可验证、已发布的解法。请保留受影响会话与代理请求日志,并在源讨论中跟踪代理转发层对孤立 `function_call_output` 的处理。
对于 `automation_update` 一类无 `call_id` 的元数据输出,讨论中的建议是仅在转发时过滤或本地拒绝空、缺失的 `call_id`,不要伪造或复用 `call_id`。
对于 `send_message_to_thread`、`create_thread` 等跨任务输出,不能只过滤;讨论建议仅对已识别的委派内容转换为普通 `user` 消息,以保留投递文本。
对于纯图片 tool 输出且上游不支持视觉的情况,#6697 建议发送文本占位 tool 消息,避免留下未配对的 `tool_calls`。
Affected Versions
Section titled “Affected Versions”Source Issues
Section titled “Source Issues”本页汇总自 4 个真实 issue
- #6697[Bug] Codex 纯图片 tool 输出在无视觉能力的上游被整条丢弃 → 孤儿 tool_calls 导致会话永久 400
- #6995[Bug] Codex 心跳自动化注入的 function_call_output 缺失 call_id,DeepSeek /responses 400 导致会话永久卡死
- #7074[Bug] Codex 自动化 automation_update 孤立 function_call_output 无 call_id 导致 DeepSeek 400
- #7230[Bug] v3.20.2:Codex 跨任务消息 send_message_to_thread 触发 HTTP 400,提示缺少 call_id/name
- 有人试过用 DeepSeek 官方连接 Codex 的方法,能否避免这类问题?
- 该线程中的回复称已自行尝试,但仍出现相同错误。
这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。