实测 DeepSeek V4 Pro:为什么它不适合直接接入 Codex,却可以通过 Claude Code 跑起来?
2026/7/6 7:43:03 网站建设 项目流程

实测 DeepSeek V4 Pro:为什么它不适合直接接入 Codex,却可以通过 Claude Code 跑起来?

最近很多人会把一个问题问得很简单:

DeepSeek V4 Pro 能写代码,那它能不能直接作为 Codex 的后端模型?

如果只看“模型会不会写代码”,答案很容易被误判。真正决定 Codex / Claude Code 这类 coding agent 能不能稳定工作的,不只是模型能力,而是客户端和后端之间的协议合同

我在 2026-07-05 对deepseek-v4-pro做了一轮实际 API 测试。结论是:

  • deepseek-v4-pro可以作为 OpenAI-compatible chat 模型使用;
  • 它在本轮测试中没有跑通 Codex 更依赖的/v1/responses
  • 它可以通过 Claude Messages 兼容层给 Claude Code 使用;
  • 所以问题不是“DeepSeek V4 Pro 不会写代码”,而是“它当前更适合 chat completions,不适合被直接当作 Codex Responses 模型”。

本文会按工程排查方式展开,而不是只给一句结论。

1. 测试环境

测试时间:2026-07-05
Base URL:https://cn.crazyrouter.com/v1
测试模型:deepseek-v4-pro

测试覆盖了三个入口:

GET /v1/models POST /v1/chat/completions POST /v1/responses POST /v1/messages

这三个 endpoint 是理解本文的关键:

Endpoint主要面向可以简单理解为
/v1/chat/completions普通 OpenAI-compatible 应用发 messages,拿 assistant 回复
/v1/responsesCodex / OpenAI agent workflow发 input items,拿 response items / tool events
/v1/messagesClaude Code / Anthropic SDK发 Claude Messages,拿 content blocks / tool_use

很多“模型兼容性问题”的根源,就在于把这三条路径混成了一条。

2./v1/models里能看到 DeepSeek V4 Pro,但这不等于 Codex 可用

先看模型列表。GET /v1/models返回 HTTP 200,其中deepseek-v4-pro的关键信息如下:

{"id":"deepseek-v4-pro","object":"model","owned_by":"custom","supported_endpoint_types":["openai"],"public_endpoint_types":["openai"]}

这里最值得注意的是:

supported_endpoint_types: ["openai"] public_endpoint_types: ["openai"]

这通常表示它可以作为 OpenAI-compatible 模型使用,尤其是/v1/chat/completions这一类接口。

但不能从这里直接推导出:

它完整支持 /v1/responses 它适合作为 Codex agent runtime 后端 它能稳定处理 Codex 的工具调用和续写状态

这是很多接入问题的第一个误区:模型列表里出现了,不等于所有 agent 协议都支持。

3. 实测结果:chat completions 可用,responses 失败,messages 可跑工具闭环

本轮结果如下:

测试项EndpointHTTP结果
模型列表GET /v1/models200能看到deepseek-v4-pro,endpoint type 为openai
普通聊天,小 token 预算POST /v1/chat/completions200只返回DSfinish_reason=length
普通聊天,正常 token 预算POST /v1/chat/completions200返回DS_V4_PRO_CHAT_OK
Codex-style ResponsesPOST /v1/responses400返回convert_request_failed
Claude Messages 文本POST /v1/messages200返回 Claude 风格 text content block
Claude Messages 工具调用POST /v1/messages200返回tool_use get_city_timezone({"city":"Beijing"})
Claude 工具结果续写POST /v1/messages200接受tool_result并返回最终文本

这个结果很清楚:

DeepSeek V4 Pro 在线 DeepSeek V4 Pro chat completions 可用 DeepSeek V4 Pro responses 本轮不可用 DeepSeek V4 Pro messages 兼容层可用

如果只看第一行和第二行,很容易得出“它能用于 Codex”的错误结论。真正关键的是第三行:/v1/responses失败。

4. 一个容易被忽略的细节:reasoning tokens 会吃掉可见输出预算

我第一次跑 chat completions 时,设置了很小的输出预算:

{"model":"deepseek-v4-pro","messages":[{"role":"user","content":"Return exactly: DS_V4_PRO_CHAT_OK"}],"max_tokens":30}

结果 HTTP 200,但可见内容只有:

DS

响应里显示:

finish_reason: length completion_tokens: 30 reasoning_tokens: 28

也就是说,30 个 completion tokens 里,有 28 个被 reasoning 消耗了,可见正文空间几乎没剩下。

max_tokens提高到 128 后,返回正常:

DS_V4_PRO_CHAT_OK finish_reason: stop

这说明在接入 DeepSeek V4 Pro 时,不能只判断 HTTP 200,还要记录:

  • finish_reason
  • message.content
  • usage.completion_tokens
  • usage.completion_tokens_details.reasoning_tokens
  • 可见输出是否为空或被截断

在 coding agent 场景里,这个问题会更明显。因为 agent 需要输出工具调用、解释、patch 或下一步计划,如果 token 预算太小,表面上请求成功,实际可见输出已经不可用。

5. 为什么 Codex 不能直接按 chat completions 来理解?

Codex 不是一个普通聊天客户端。

普通聊天客户端大概是:

用户问题 -> 模型回复文本 -> 展示给用户

Codex 的工作方式更接近:

用户任务 -> 规划 -> 读文件 -> 生成工具调用 -> 执行命令或编辑文件 -> 接收工具结果 -> 继续推理 -> 再调用工具 -> 形成最终修改和总结

也就是说,Codex 需要的是一个agent loop。这个 loop 里,模型输出不能只是普通文本,还要包含客户端能理解的结构化事件。

一个 Codex custom provider 可能会这样配置:

model_provider = "custom" model = "deepseek-v4-pro" [model_providers.custom] base_url = "https://your-router.example/v1" wire_api = "responses"

重点是:

wire_api = "responses"

这意味着 Codex 会按 Responses API 语义请求后端,而不是普通 chat completions 语义。

在 Responses 语义里,客户端可能期待这些东西:

Codex 需要的能力为什么重要
response output items区分文本、工具调用、reasoning 等输出片段
function/tool call item让客户端知道该调用哪个工具、参数是什么
tool result continuation工具执行完后,把结果接回同一轮 agent loop
reasoning state多轮任务中延续推理状态
streaming events客户端按事件顺序更新状态
非空最终输出避免 HTTP 200 但没有可用答案

如果后端只会返回 chat completion:

{"choices":[{"message":{"role":"assistant","content":"..."}}]}

那它不一定能满足 Codex 需要的 Responses item 结构。

这就是为什么“DeepSeek V4 Pro 能写代码”和“DeepSeek V4 Pro 适合直接作为 Codex 后端”是两件事。

6. 本轮/v1/responses为什么能说明问题?

本轮 Responses 测试请求类似:

{"model":"deepseek-v4-pro","input":"Return exactly: DS_V4_PRO_RESPONSES_OK","max_output_tokens":128}

返回结果:

HTTP: 400 Error code: convert_request_failed Error type: new_api_error Message: Invalid request.

这个结果不能证明 DeepSeek V4 Pro “能力差”,但可以证明一件事:

在本轮测试窗口里,deepseek-v4-pro 不能被当作可直接工作的 /v1/responses 模型。

所以如果你把它直接配置给 Codex,并且 Codex 使用wire_api = "responses",就很可能遇到协议转换失败、工具调用异常、流式事件不匹配等问题。

7. 为什么 Claude Code 反而可以跑起来?

Claude Code 的入口通常不是/v1/responses,而是 Claude Messages 形态:

POST /v1/messages

Claude Messages 的核心结构是 content blocks,例如:

{"role":"assistant","content":[{"type":"text","text":"hello"}]}

工具调用也是 content block:

{"type":"tool_use","id":"call_xxx","name":"get_city_timezone","input":{"city":"Beijing"}}

如果中转网关支持 Claude Messages 兼容层,它可以做这样的转换:

Claude Code -> POST /v1/messages -> 网关把 Claude Messages 转成 OpenAI-compatible chat request -> DeepSeek V4 Pro 输出文本或 tool_calls -> 网关把结果转回 Claude content blocks -> Claude Code 接收 text / tool_use / tool_result

本轮实测里,这条路径是跑通的。

文本测试返回:

DS_V4_PRO_MESSAGES_OK

工具调用测试返回:

{"type":"tool_use","id":"call_00_85VnDZJN9knCdt3l4aX67165","name":"get_city_timezone","input":{"city":"Beijing"}}

随后把工具结果传回:

{"type":"tool_result","tool_use_id":"call_00_85VnDZJN9knCdt3l4aX67165","content":"Asia/Shanghai"}

模型继续返回:

The timezone for Beijing is Asia/Shanghai.

这说明 Claude Code 兼容层至少完成了一个基础工具闭环。

8. 但这不代表 Claude Code 原生支持 DeepSeek

这里要避免另一个误区:

Claude Code 能跑 DeepSeek V4 Pro

不等于:

Claude Code 原生支持 DeepSeek V4 Pro

更准确的说法是:

网关把 Claude Code 的 /v1/messages 请求转换成 DeepSeek V4 Pro 能处理的 OpenAI-compatible chat 请求, 再把 DeepSeek 的输出转换回 Claude Code 能理解的 content blocks。

这个兼容层需要处理很多细节:

Claude Code 需要DeepSeek / OpenAI-compatible 侧可能返回网关要做的事
textblockmessage.content转成 Claude text block
tool_useblocktool_calls映射工具名、参数、tool id
tool_resultblocktool role message还原成下一轮 chat 上下文
stop_reasonfinish_reason映射end_turn/tool_use/max_tokens
usagetoken usage转成 Claude Code 可记录字段
streaming eventsdelta chunks转成 Claude SSE event

所以 Claude Code 能跑,依赖的是网关适配质量。只测一句hello没意义,至少要测工具调用和工具结果续写。

9. 三种接入方式应该怎么选?

方式一:普通 API 调用

推荐路径:

POST /v1/chat/completions model: deepseek-v4-pro

适合:

  • 代码解释;
  • 单文件重构建议;
  • SQL / shell / regex 辅助;
  • API 文档问答;
  • 普通聊天应用。

注意:给足max_tokens,不要用太小的输出预算。

方式二:Claude Code 兼容层

推荐路径:

Claude Code -> /v1/messages -> gateway -> /v1/chat/completions -> deepseek-v4-pro

适合:

  • 轻量代码 agent;
  • 工具调用可控的任务;
  • 有日志、fallback、重试机制的环境;
  • 想用 Claude Code 客户端,但后端测试 DeepSeek 的场景。

上线前至少验证:

  • 文本输出非空;
  • tool_use能正确产生;
  • tool_result能正确续写;
  • 长上下文不会丢工具状态;
  • usage / cache 字段记录正常;
  • 超时重试不会打乱 tool id。

方式三:直接接 Codex

不建议直接这样做:

Codex -> /v1/responses -> deepseek-v4-pro

除非你已经完整验证:

/v1/responses 可用 response output items 格式正确 tool call item 格式正确 tool result continuation 可用 streaming events 顺序正确 reasoning state 能延续 多轮仓库任务能完成

本轮实测里,/v1/responses返回 400,所以不应直接把它当成 Codex Responses 模型。

10. 如果你已经接入失败,应该怎么排查?

建议按下面顺序排查。

第一步:先查模型列表

curlhttps://cn.crazyrouter.com/v1/models\-H"Authorization: Bearer YOUR_API_KEY"

看两个字段:

supported_endpoint_types public_endpoint_types

如果只看到openai,不要默认它支持/v1/responses

第二步:单独测 chat completions

curlhttps://cn.crazyrouter.com/v1/chat/completions\-H"Authorization: Bearer YOUR_API_KEY"\-H"Content-Type: application/json"\-d'{ "model": "deepseek-v4-pro", "messages": [ { "role": "user", "content": "Return exactly: DS_V4_PRO_CHAT_OK" } ], "max_tokens": 128 }'

不要只看 HTTP 状态,要看:

choices[0].message.content choices[0].finish_reason usage

第三步:单独测 responses

curlhttps://cn.crazyrouter.com/v1/responses\-H"Authorization: Bearer YOUR_API_KEY"\-H"Content-Type: application/json"\-d'{ "model": "deepseek-v4-pro", "input": "Return exactly: DS_V4_PRO_RESPONSES_OK", "max_output_tokens": 128 }'

如果这里失败,就不要直接上 Codex。

第四步:单独测 Claude Messages

如果你走 Claude Code 兼容层,要测:

文本请求 tool_use 请求 tool_result 续写

只测文本不够。Claude Code 的核心价值就是工具闭环,不测工具就无法证明兼容层可用。

11. 最容易踩的 6 个坑

典型表现正确处理
把 OpenAI-compatible 当成 Responses-compatiblechat 可用,Codex 失败分别测试/chat/completions/responses
只看 HTTP 200请求成功但正文为空检查 content、finish_reason、usage
max_tokens太小只返回几个字符给 reasoning 模型留足输出预算
没测工具续写工具调用后断掉tool_use -> tool_result -> final answer
混淆 Claude Code 和 Claude 模型以为 Claude Code 原生支持 DeepSeek明确中间有网关转换
没有 fallback长任务中途失败做 retry、fallback、空输出检测

12. 最终结论

本轮测试支持一个比较明确的工程结论:

DeepSeek V4 Pro 可以用作 OpenAI-compatible chat 模型。 DeepSeek V4 Pro 可以通过 Claude Messages 兼容层给 Claude Code 使用。 DeepSeek V4 Pro 不适合在当前状态下直接作为 Codex Responses 模型。

核心原因不是模型不会写代码,而是协议层不匹配。

Codex 需要的是/v1/responses语义下的 agent loop,包括 output items、工具调用、工具结果续写、reasoning state 和流式事件。DeepSeek V4 Pro 在本轮实测中没有跑通/v1/responses

Claude Code 能跑,是因为网关可以把/v1/messages转换成 OpenAI-compatible chat,再把结果转回 Claude content blocks。本轮测试里,文本、tool_usetool_result续写都成功,因此这条路径有实用价值。

如果你要在生产环境里接入,建议按下面的优先级:

普通 API:优先走 /v1/chat/completions Claude Code:走 /v1/messages 兼容层,并测试工具闭环 Codex:不要直接接,除非 /v1/responses 完整验证通过

原始长文和测试记录:

https://crazyrouter.com/blog/deepseek-v4-pro-codex-claude-code-compatibility-2026?utm_source=csdn&utm_medium=article&utm_campaign=deepseek_v4_pro_codex_claude_code_20260705&utm_content=csdn_deepseek-v4-pro-codex-claude-code_20260705__canonical&utm_term=DeepSeek%20V4%20Pro%20Codex%20Claude%20Code

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询