[Bug] v3.20.1: DeepSeek 400 "No tool output found for tool call" 发生于 Codex 图片工具调用(image_resize_notice 插队)
Author: ht6231997ByteCreated Sep 7, 2026Updated Sep 28, 2026
问题概述
通过 CC Switch 本地代理使用 DeepSeek + Codex 时,带有图片工具调用(例如 view_image)的会话会间歇性返回 HTTP 400,整段会话随后变得不可用。
实际错误:
CC Switch local proxy failed while handling Codex endpoint /responses.
Provider: DeepSeek; model: deepseek-v4-flash-vision-exp;
upstream_status: HTTP 400;
cause: No tool output found for tool call call_12_ZaRgh3ETocz52tDMM5wb8731.DeepSeek 上游返回:
{"error":{"message":"No tool output found for tool call call_12_ZaRgh3ETocz52tDMM5wb8731."}}同类错误也在其他 call ID 上出现,例如 call_01_yVmQs94yjXyhzVDKA0Tk4440。
环境
- CC Switch:v3.20.1(最新版)
- 接入方式:Codex
/responsesendpoint 本地代理 - Provider:DeepSeek
- Model:
deepseek-v4-flash-vision-exp - 触发工具:Codex 图片工具(
view_image)
期望
图片工具调用应正常完成。即使 Codex 在工具调用后插入了其他消息,CC Switch 也应保证发给 DeepSeek 的消息满足上游对工具调用对的顺序要求,而不是让会话直接 400 报废。
复现步骤
- 在 CC Switch 中配置 DeepSeek Provider,并让 Codex 通过本地代理使用
openai_responses。 - 在 Codex 中选择
deepseek-v4-flash-vision-exp,新开一个会话。 - 要求模型查看或分析一张图片,使 Codex 调用图片工具。
- 在日志中可以看到消息序列类似:
function_call (call_id=call_12_...)
developer message <image_resize_notice> ... resized ...
function_call_output (call_id=call_12_...)- 模型继续请求时,DeepSeek 返回
No tool output found for tool call call_...的 HTTP 400,会话无法继续。
原因分析
DeepSeek 严格要求 function_call_output 必须紧跟对应的 function_call。Codex 在两者之间插入了 image_resize_notice 这类 developer 消息,OpenAI 接口可以容忍这种顺序,但 DeepSeek 上游会拒绝。
问题不是 function_call_output 缺少 call_id(与 #7074 不同);这里 call_id 存在且配对正确,但被中间消息打断。
建议修复方向
- CC Switch 在转发给 DeepSeek 前,将每个
function_call_output重排到对应function_call之后,移除或归置中间注入的 developer 消息; - 或者针对这类上游错误对消息做顺序归一化,确保工具调用和工具输出保持相邻。
该问题在当前最新版 v3.20.1 下仍可复现,升级不能绕过,需要兼容层修复。
Source: farion1231/cc-switch