#7190·cc-switch

[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 上游返回:

json
{"error":{"message":"No tool output found for tool call call_12_ZaRgh3ETocz52tDMM5wb8731."}}

同类错误也在其他 call ID 上出现,例如 call_01_yVmQs94yjXyhzVDKA0Tk4440。

环境

  • CC Switch:v3.20.1(最新版)
  • 接入方式:Codex /responses endpoint 本地代理
  • Provider:DeepSeek
  • Model:deepseek-v4-flash-vision-exp
  • 触发工具:Codex 图片工具(view_image)

期望

图片工具调用应正常完成。即使 Codex 在工具调用后插入了其他消息,CC Switch 也应保证发给 DeepSeek 的消息满足上游对工具调用对的顺序要求,而不是让会话直接 400 报废。

复现步骤

  1. 在 CC Switch 中配置 DeepSeek Provider,并让 Codex 通过本地代理使用 openai_responses。
  2. 在 Codex 中选择 deepseek-v4-flash-vision-exp,新开一个会话。
  3. 要求模型查看或分析一张图片,使 Codex 调用图片工具。
  4. 在日志中可以看到消息序列类似:
function_call              (call_id=call_12_...)
developer message          <image_resize_notice> ... resized ...
function_call_output       (call_id=call_12_...)
  1. 模型继续请求时,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 下仍可复现,升级不能绕过,需要兼容层修复。