← 全部文章

DeepSeek V4-Pro + Codex:Responses API 编码智能体接入指南

把 DeepSeek V4-Pro 和 V4-Flash 接入 Codex 以及其他基于 Responses API 的编码智能体。本文覆盖配置步骤、兼容性边界、踩坑记录和成本计算,帮你判断 DeepSeek 是否适合放进你的智能体技术栈。

· TheRouter

DeepSeek 的 API 现在原生支持 Responses API 格式。也就是说,OpenAI 的编码智能体 Codex 可以直接和 DeepSeek V4-Pro、V4-Flash 通信,不需要额外的兼容层。把 base URL 指向 https://api.deepseek.com,注册模型,智能体就能跑起来了。

我们测过这个组合,原因很简单。编码智能体的工作负载正好覆盖了 API 选型最在意的几个维度,包括工具调用可靠性、流式响应延迟、推理深度和单次调用成本。DeepSeek V4-Pro 在这四项上表现都不错,尤其是成本。这篇文章讲清楚配置步骤、你能依赖的兼容性范围,以及正式投入生产之前应该注意的那些坑。

OpenAI 兼容指供应商提供一个 chat-completions 接口,其请求与响应结构与 OpenAI API 契约足够接近——只需替换三个值(API key、base URL、模型名),原来的 OpenAI SDK 调用即可直接工作。最小实践面是POST /v1/chat/completions 带 messages、model, 并返回 OpenAI 形式的流式响应。

三分钟上手

第一步,拿到 API 密钥。 到 platform.deepseek.com 注册,进 API Keys 页面新建一个密钥。密钥只显示一次,复制好存起来。

第二步,在 Codex 里注册 DeepSeek。 DeepSeek 官方发布了一份 Codex 集成指南,里面带了现成的模型配置。集成脚本会把 deepseek-v4-flash 和 deepseek-v4-pro 注册为 Codex 可用模型,设好 base URL,并配好 Codex 专用参数,包括 apply_patch_tool_type、multi_agent_version 和截断策略。

简单来说,跑一下 DeepSeek 提供的安装脚本,设好 DEEPSEEK_API_KEY 环境变量,Codex 的模型列表里就会出现这两个 DeepSeek 模型。

第三步,跑一次冒烟测试。 让智能体拿到你的仓库写权限之前,先确认基本的 Responses API 调用能通。

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_DEEPSEEK_KEY",
    base_url="https://api.deepseek.com",
)

response = client.responses.create(
    model="deepseek-v4-flash",
    instructions="You are a helpful coding assistant.",
    input="Write a Python function that reverses a linked list.",
)

print(response.output_text)

如果返回了正常的回答,工具调用和流式输出也不会有问题。DeepSeek 的 Responses API 支持和 OpenAI 相同的 SSE 事件流。

Responses API 在 DeepSeek 上的兼容情况

DeepSeek 的 Responses API 兼容性页面写得很详细,什么能用、什么不能用,列得很清楚。下面是编码智能体场景下的实际情况。

完全支持

功能说明
modeldeepseek-v4-flash、deepseek-v4-pro、deepseek-v4-flash-vision-exp
input字符串或结构化 input item 列表
instructions作为第一条 system message 注入
stream完整的 SSE 事件流,带语义事件类型
tools (function)标准函数调用工具
tool_choicenone、auto、required 或指定某个工具
reasoning支持 effort 参数(low / high / max)
temperature、top_p标准范围(思考模式下不生效)
max_output_tokens最大 384K
top_logprobs范围 0–20

部分支持

功能现状
tools (web_search)支持,但 code_interpreter 和 file_search 会被忽略
text.format完全支持,但 verbosity 不生效
reasoning.summary接受参数但不会生成推理摘要
parallel_tool_calls被忽略;并行工具调用始终开启

不支持

功能对 Codex 的影响
previous_response_idDeepSeek 的 API 是无状态的,没有服务端对话历史
conversation同上;多轮状态必须客户端管理
background不支持后台执行
store响应始终返回 store: false
truncation超过上下文窗口直接返回 400

对 Codex 来说,缺少 previous_response_id 不是问题,因为 Codex 本身就在客户端管理对话状态。没有 background 模式意味着 Codex 所有 turn 都同步执行,这也是默认行为。

编码智能体的工具调用

编码智能体能不能用,取决于工具调用靠不靠谱。DeepSeek V4-Pro 和 V4-Flash 在 Chat Completions 和 Responses API 两种接口上都支持完整的 OpenAI 函数调用 schema,思考模式和非思考模式都能用。

一个典型的编码智能体工具调用流程长这样。

tools = [
    {
        "type": "function",
        "function": {
            "name": "read_file",
            "description": "Read the contents of a file at the given path.",
            "parameters": {
                "type": "object",
                "properties": {
                    "path": {
                        "type": "string",
                        "description": "Absolute path to the file",
                    }
                },
                "required": ["path"],
            },
        },
    },
]

response = client.responses.create(
    model="deepseek-v4-pro",
    instructions="You are a coding agent with file system access.",
    input="Read the contents of /src/main.py and suggest improvements.",
    tools=tools,
)

DeepSeek 还支持 strict 模式(通过 /beta base URL,用于 Chat Completions),保证模型输出的工具调用严格匹配你的 JSON Schema。对那些因为格式不对就会级联报错的智能体流程来说,这个功能值得试试。不过 beta 端点和 Responses API 是分开的。

Codex 专用的工具类型

Codex 用一个叫 apply_patch 的专有工具来写文件改动。DeepSeek 的 Codex 集成把它配成了 "apply_patch_tool_type": "freeform",意思是模型用自由文本而非结构化 JSON 来生成 patch 内容。web_search_tool_type 设成了 "text",对应 DeepSeek 原生的 web search 工具。

思考模式和推理深度

V4-Pro 和 V4-Flash 都默认开启思考模式。对需要深度推理的编码任务(重构复杂代码库、定位微妙的竞态条件),思考模式产出的结果明显更好。对简单任务(改个变量名、加条注释),它只会增加延迟,收益不大。

Responses API 上的 reasoning.effort 参数有三个档位。

档位行为适合场景
low快速,轻量推理简单编辑、格式化、模板代码
high默认;更深的思考链大多数编码任务
max最大推理深度架构决策、复杂调试

Codex 会把这三个档位映射到自己的推理级别选择器上。DeepSeek 集成把默认值设为 high,三个档位都可用。

reasoning.summary 参数被接受了,但 DeepSeek 不会生成推理摘要,这一点要留意。如果你的智能体流程依赖摘要来决定下一步动作,从 DeepSeek 这边拿不到这个信息。

成本计算:编码智能体到底花多少钱

成本是 DeepSeek 最大的优势。编码智能体开销高,因为它们会生成长串的工具调用链,每一步都带着大量上下文。下表列出了 DeepSeek V4-Pro 和 Codex 常用模型的对比。

模型输入(缓存未命中)输入(缓存命中)输出上下文
DeepSeek V4-Pro(非高峰)$0.66 / 1M$0.022 / 1M$1.98 / 1M1M
DeepSeek V4-Pro(高峰)$1.32 / 1M$0.044 / 1M$3.96 / 1M1M
DeepSeek V4-Flash(非高峰)$0.22 / 1M$0.007 / 1M$0.66 / 1M1M
DeepSeek V4-Flash(高峰)$0.44 / 1M$0.014 / 1M$1.32 / 1M1M

高峰时段是 UTC 时间周一到周五的 01:00–04:00 和 06:00–10:00,其余时间都是非高峰,价格减半。

缓存命中价格是编码智能体场景的关键数字。智能体的工作流会反复发送相同的系统提示、文件内容和对话历史。DeepSeek 的自动上下文缓存意味着第一轮之后,你的大部分输入都会命中缓存。V4-Pro 非高峰缓存命中价 $0.022/百万 token,可以让你用某些竞品一次未缓存调用的费用跑几百轮智能体调用。

对成本敏感的工作负载来说,V4-Flash 非高峰缓存命中价 $0.007/百万 token,便宜得令人吃惊。如果你的编码智能体主要处理不需要 Pro 级推理的任务,Flash 是最合适的默认选择。

并发限制

DeepSeek 用并发连接数而非 RPM/TPM 来限流。

模型并发限制
deepseek-v4-pro500
deepseek-v4-flash2,500
deepseek-v4-flash-vision-exp2,500

一个请求从发出到模型响应完成算一个并发连接。超过限制返回 HTTP 429。

在团队环境里跑编码智能体的话,V4-Pro 的 500 并发可能会成为瓶颈。每个开发者跑 Codex 的每个活跃 turn 消耗一个连接。如果 50 个人同时跑多轮编码会话,就可能接近上限。DeepSeek 提供免费的容量扩展申请。

路由与 Fallback 策略

把编码智能体挂在单一供应商上有风险。DeepSeek 在高峰期出现过容量相关的慢响应。配一层路由能在供应商出问题时自动切到备用模型,保护开发者的工作流不中断。

这个模式实现起来很直接,因为 DeepSeek 说的就是 OpenAI 兼容协议。一个模型 fallback 配置示例如下。

# 路由配置示例
primary:
  provider: deepseek
  model: deepseek-v4-pro
fallback:
  - provider: anthropic
    model: claude-sonnet-5
  - provider: openai
    model: gpt-5.5-pro

DeepSeek 返回 429(并发超限)或 5xx(服务端错误)时,路由层会在下一个供应商上重试。编码智能体完全感知不到这次故障,因为请求和响应格式是一样的。

这也让你可以做基于成本的路由。简单编码任务走 V4-Flash(最便宜),复杂推理走 V4-Pro,DeepSeek 不可用时回退到 Claude 或 GPT。TheRouter 上的 DeepSeek 供应商页面有当前的模型阵列和路由状态。

投产前的冒烟测试清单

在让 DeepSeek 驱动的编码智能体拿到你的生产代码库写权限之前,逐项验证以下内容。

  1. 基础补全。 发一条简单提示,确认返回正常。
  2. 工具调用。 定义一个假工具,发一条应该触发它的提示,验证工具调用输出是格式正确的 JSON。
  3. 流式输出。 启用 stream=True,确认收到连续的 response.output_text.delta 事件。
  4. 思考模式。 发一个复杂推理提示,设 reasoning={"effort": "max"},验证模型输出了思考链。
  5. 长上下文。 发一个包含大文件(50K+ token 代码上下文)的请求,确认没有截断或报错。
  6. 错误处理。 故意触发并发限制,确认你的 fallback 逻辑能捕获 429。
# 工具调用冒烟测试
response = client.responses.create(
    model="deepseek-v4-pro",
    instructions="You are a coding agent.",
    input="What files are in the current directory?",
    tools=[{
        "type": "function",
        "function": {
            "name": "list_directory",
            "description": "List files in a directory.",
            "parameters": {
                "type": "object",
                "properties": {
                    "path": {"type": "string"}
                },
                "required": ["path"],
            },
        },
    }],
)

# 验证模型发出了工具调用
for item in response.output:
    if item.type == "function_call":
        print(f"Tool call: {item.name}({item.arguments})")

常见报错和修复方法

报错原因修复
400: input_image must have image_url or file_id图片输入缺少必填字段用 deepseek-v4-flash-vision-exp 处理图片输入;提供 image_url 或 file_id
400: context length exceeded请求超过 1M token 窗口截断对话历史;DeepSeek 不支持 truncation 参数
429: rate limit exceeded触发并发限制加上指数退避重试;配一个 fallback 供应商
reasoning.summary 返回空DeepSeek 接受参数但不生成摘要不要在控制流中依赖推理摘要,直接读输出
previous_response_id 不工作DeepSeek 的 API 是无状态的在客户端管理对话状态(Codex 本来就是这么做的)

什么时候该用 DeepSeek V4-Pro 跑编码智能体

适合用 V4-Pro 的场景

  • 成本是主要考量。 V4-Pro 的非高峰价格远低于大多数前沿模型,编码智能体场景下的高缓存命中率会进一步放大这个优势。
  • 需要深度推理但不需要绝对的天花板。 V4-Pro 的思考模式在复杂重构、调试和架构问题上表现稳定。
  • 团队工作时间处于非高峰时段。 如果你的团队在亚太区按正常工作时间办公,刚好落在 DeepSeek 的非高峰定价窗口内(除 UTC 01:00–04:00 和 06:00–10:00 之外都算非高峰)。

适合用 V4-Flash 的场景

  • 吞吐量比推理深度更重要。 Flash 有 2,500 并发上限和更低成本,在高频、低复杂度任务上更有优势。
  • 你在搭多模型管线。 简单任务走 Flash,复杂任务走 Pro。

应该考虑其他供应商的场景

  • 需要后台执行。 DeepSeek 不支持 background 参数。
  • 需要服务端对话状态。 previous_response_id 和 conversation 参数不被支持。
  • Pro 的 500 并发不够用。 可以申请容量扩展,或者用路由层把负载分摊到多个供应商。

延伸阅读

本文涉及的模型

帮助与联系