每次请求可选择 Auto、TokenLab Verified 或 Official,并查看对应价格。 查看更新

DeepSeek V4 API 编程指南:路由 deepseek-v4-pro 和 deepseek-v4-flash

·2026年9月19日·约 11 分钟阅读·更新 2026年10月2日·2253 次浏览
#编程#AI API#TokenLab
DeepSeek V4 API 编程指南:路由 deepseek-v4-pro 和 deepseek-v4-flash

将编码会话的每一步都发送给同一个模型是最简单的路由策略,但通常也是最昂贵的。本教程展示了如何在 TokenLab 上使用 DeepSeek V4 API 进行编程,通过在 deepseek-v4-pro 和 deepseek-v4-flash 之间分配工作来优化成本。我们于 2026 年 10 月 3 日从实时 API 读取了两个模型的记录,以下所有内容均来自这些记录和 TokenLab 文档。你将获得一份对比表、一份工作成本估算、一个工具调用请求示例、重试和回退代码,以及预检检查方法。

关键要点

  • 两个模型均列出了 1,000,000 token 的输入限制、384,000 token 的输出限制,以及相同的三种请求格式。价格是它们之间的主要区别。
  • 按标价计算,deepseek-v4-pro 的单位输入 token 成本是 deepseek-v4-flash 的 4.4 倍,单位输出 token 成本是后者的 3.3 倍。
  • 在我们 20 次调用的示例中,将 4 次调用路由至 pro,16 次路由至 flash,非高峰期成本约为 $0.18。若 20 次全部发送至 pro,成本约为 $0.46。
  • 在收到 Retry-After 后重试 429。仅当 retryable 为 true 时才重试 500–504。切勿重试 400、401、402、403、404 或 413。
  • 目录显示 deepseek-v4.1-flash 为活跃状态。deepseek-v4-pro 和 deepseek-v4-flash 均未指定替代模型。
  • 在进行路由之前,请先从 GET /v1/models/:model 读取限制、格式和价格。不要硬编码复制的表格。

DeepSeek V4 API 编程:目录说明

我们于 2026 年 10 月 3 日获取了这两条记录。下表对它们进行了并排比较。价格为每 100 万 token 的美元金额,目录定价最后更新于 2026-10-02T16:53:30.068Z。

项目 deepseek-v4-pro deepseek-v4-flash 来源,观察于 2026-10-03
上下文限制 (最大输入 token) 1,000,000 1,000,000 pro, flash
输出限制 (最大输出 token) 384,000 384,000 pro, flash
接受的请求格式 anthropic_messages, openai_chat_completions, openai_responses anthropic_messages, openai_chat_completions, openai_responses pro, flash
能力 json-mode, prompt-cache, tool-use json-mode, prompt-cache, tool-use pro, flash
非高峰期输入 $0.66 $0.15 pro, flash
非高峰期输出 $1.98 $0.60 pro, flash
非高峰期缓存读取 $0.022 $0.003 pro, flash
非高峰期缓存写入 $0.66 未列出 pro, flash
高峰期输入 $1.32 $0.30 pro, flash
高峰期输出 $3.96 $1.20 pro, flash
高峰期缓存读取 $0.044 $0.006 pro, flash
生命周期阶段 active, 发布于 2026-04-24 active, 发布于 2026-04-24 pro, flash

每条记录中的默认价格块与非高峰期条目一致。高峰期时间因记录而异。对于 deepseek-v4-pro,高峰价格适用于北京时间 09:00-12:00 和 14:00-18:00。对于 deepseek-v4-flash,记录显示高峰窗口适用于工作日,不包括中国公共假期。它提到非高峰期包括周末和这些假期,但未给出具体小时数。在围绕 flash 窗口进行预算之前,请检查定价端点。

生命周期和较新的 DeepSeek 模型

两条记录均显示 lifecycle stage active,且 replacement model、deprecated_at 和 retired_at 均为空。因此,目录中没有安排移除这两个模型,也没有为它们指定继任者。

目录中还列出了 deepseek-v4.1-flash。其记录(观察于 2026-10-03)显示为活跃状态,没有发布日期,也没有替代模型。它具有与 deepseek-v4-flash 相同的限制、格式和标价。它在能力列表中增加了 reasoning 和 vision,并显示非高峰期缓存写入价格为 $0.15。

这是一个单独的模型 ID,因此本文保持其主题。我们建议在替换之前先在你的任务上测试 deepseek-v4.1-flash。目录中还列出了 deepseek-v4-flash-vision-exp,但我们没有读取其记录。如果需要,请在 Models 页面上进行验证。

按任务路由 deepseek-v4-pro 和 deepseek-v4-flash

想象一个代理会话,它计划跨五个模块进行更改,编写编辑内容,然后生成一打测试存根。第一步需要最多的上下文和关注。最后一步是重复性的,重做成本很低。目录无法告诉你质量界限在哪里。2026 年 10 月 3 日观察到的 TokenLab 编码代理模型指南指出,排行榜结果无法预测模型遵循你自己的指令和工具的能力。

我们的起始启发式假设是,价格更高的模型在跨文件工作中能体现其价值。将其视为一个待测试的假设,而非结论:

+-------------------------------------------------------------+
|                      传入任务                                |
+-------------------------------------------------------------+
                               |
         [任务是否涉及多文件上下文、
          向后兼容性或安全审查?]
                               |
               +---------------+---------------+
               |                               |
             [是]                             [否]
               |                               |
               v                               v
       deepseek-v4-pro                 deepseek-v4-flash

将步骤推向 deepseek-v4-pro 的标准:

  • 修改跨多个导入文件的逻辑。
  • 安全或漏洞评估。
  • 公共接口的严格向后兼容性。
  • 准确性比周转时间更重要的多轮工作。

独立的测试脚手架、模式格式化、文档字符串和语法补全则交给 deepseek-v4-flash。

要测试该启发式方法,请遵循相同的指南。为每个模型提供相同的存储库状态、指令、工具和时间限制。然后比较正确性、通过的测试、不必要的更改、总 token 数、最终成本以及人工介入的频率。按任务类型保留结果,因为一个模型可能审查得很好但实现得很差。

估算编码代理循环成本

代理在每次调用时都会重新发送指令、历史记录、代码和工具结果。2026 年 10 月 3 日观察到的 成本指南指出,长会话的成本可能远高于单次聊天请求。我们根据标价计算了下方的算术结果。该结果仅为估算值,而非实际账单。

假设(我们的假设,未经测量): 一个包含 20 次模型调用的循环,每次有 30,000 个输入 token 和 1,500 个输出 token。总计 600,000 个输入 token 和 30,000 个输出 token。

公式为 输入 token / 1M × 输入价格 + 输出 token / 1M × 输出价格。价格来自上表。

20 次调用全部使用 deepseek-v4-pro:

  • 非高峰期:0.6 × $0.66 = $0.396 输入,加上 0.03 × $1.98 = $0.0594 输出,总计 $0.4554。
  • 高峰期:0.6 × $1.32 = $0.792,加上 0.03 × $3.96 = $0.1188,总计 $0.9108。

20 次调用全部使用 deepseek-v4-flash:

  • 非高峰期:0.6 × $0.15 = $0.09,加上 0.03 × $0.60 = $0.018,总计 $0.108。
  • 高峰期:0.6 × $0.30 = $0.18,加上 0.03 × $1.20 = $0.036,总计 $0.216。

混合:4 次调用 pro,16 次 flash。 Pro 承担 120,000 个输入和 6,000 个输出 token。Flash 承担 480,000 个输入和 24,000 个输出 token。

  • 非高峰期:pro 为 0.12 × $0.66 + 0.006 × $1.98 = $0.0792 + $0.01188 = $0.09108。Flash 为 0.48 × $0.15 + 0.024 × $0.60 = $0.072 + $0.0144 = $0.0864。总计 $0.17748。
  • 高峰期:pro 为 0.12 × $1.32 + 0.006 × $3.96 = $0.1584 + $0.02376 = $0.18216。Flash 为 0.48 × $0.30 + 0.024 × $1.20 = $0.144 + $0.0288 = $0.1728。总计 $0.35496。
场景 非高峰期估算 高峰期估算
20 次调用使用 deepseek-v4-pro $0.4554 $0.9108
20 次调用使用 deepseek-v4-flash $0.1080 $0.2160
4 pro + 16 flash $0.1775 $0.3550

估算值基于 2026-10-03 观察到的标价(pro, flash)。

缓存变体(非高峰期,假设:80% 的输入 token 为缓存读取)。 这意味着每个循环有 480,000 个缓存读取 token 和 120,000 个未缓存 token。

  • Pro:0.48 × $0.022 = $0.01056,加上 0.12 × $0.66 = $0.0792,加上 $0.0594 输出,总计 $0.14916。
  • Flash:0.48 × $0.003 = $0.00144,加上 0.12 × $0.15 = $0.018,加上 $0.018 输出,总计 $0.03744。

此变体按普通输入价格计算未缓存 token,并忽略了记录中未列出的 flash 缓存写入费用。在依赖此折扣之前,请在响应或 Usage 中确认缓存 token 的数量。计费指南还警告说,最低的单位 token 价格并不总是意味着完成任务的最低成本,因为重试会增加成本。

编码代理的工具调用请求

两条记录均列出了 tool-use,且均接受 openai_chat_completions。以下请求仅使用了工具调用指南(观察于 2026-10-03)中的字段:model、messages 和带有 type: "function" 的 tools。我们添加了 max_tokens,计费指南将其列为限制响应长度的一种方式。我们省略了 tool_choice,因为该指南仅在 Responses 格式中记录了它。

curl https://api.tokenlab.sh/v1/chat/completions \
  -H "Authorization: Bearer $TOKENLAB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-pro",
    "max_tokens": 2000,
    "messages": [
      {"role": "system", "content": "You are a software engineering assistant."},
      {"role": "user", "content": "The pagination test in tests/test_api.py fails. Find the cause."}
    ],
    "tools": [
      {
        "type": "function",
        "function": {
          "name": "read_file",
          "description": "Read a file from the repository",
          "parameters": {
            "type": "object",
            "properties": {"path": {"type": "string"}},
            "required": ["path"]
          }
        }
      },
      {
        "type": "function",
        "function": {
          "name": "run_tests",
          "description": "Run the test suite for one path",
          "parameters": {
            "type": "object",
            "properties": {"path": {"type": "string"}},
            "required": ["path"]
          }
        }
      }
    ]
  }'

模型在 tool_calls 中返回函数名称和参数。你的后端运行该工具。循环随后分五步运行:

  1. 发送消息和工具定义。
  2. 读取 tool_calls 的响应。
  3. 在你的后端执行工具。
  4. 以相同的 API 格式附加工具结果。
  5. 继续直到模型返回最终答案。

指南未内联显示工具结果消息的形状。请参考 Create Chat Completion 参考(/api-reference/chat/create-completion),而不是猜测。

在执行任何调用之前,请验证参数并应用你自己的权限检查。使执行具有幂等性,因为客户端重试可能会重复相同的工具调用。在整个交换过程中保持一种 API 格式,因为不同格式对工具状态的表示方式不同。

两个模型之间的重试、退避和回退

2026 年 10 月 3 日观察到的 错误处理指南和 速率限制指南设定了此策略。根据 HTTP 状态和 code 进行分支处理,切勿根据 message 进行处理。

状态 重复相同的请求? 操作
400, 401, 402, 403, 404, 413 否 修复请求、密钥、余额、权限或输入
429 是 等待 Retry-After;如果不存在,使用带抖动的指数退避
500–504 仅当 retryable 为 true 时 尊重 retry_after 并限制尝试次数
响应前连接关闭 有时 如果工具调用可能重复副作用,请谨慎重试
输出到达后流中断 否 将其视为不完整;重复可能会产生不同的输出或第二次收费

两种情况需要格外小心。503 all_channels_failed 或 503 delivery_tier_unavailable 并不总是暂时的。当 retryable 为 false 且 retry_after 缺失时,请勿重复请求。在选择另一个模型之前,请检查 GET /v1/models。此外,context_length_exceeded 不会通过在两个模型之间切换来解决,因为两者都列出了相同的 1,000,000 token 输入限制。

以下代码应用了该策略。它将 max_retries=0 设置为 0,以便 SDK 不会在后台重试。每个模型有四次尝试机会,回退仅在第一个模型耗尽可重试错误后运行。

import os
import random
import time
from openai import OpenAI, APIStatusError, APIConnectionError

client = OpenAI(
    api_key=os.environ["TOKENLAB_API_KEY"],
    base_url="https://api.tokenlab.sh/v1",
    timeout=30.0,
    max_retries=0,
)

FALLBACK = {
    "deepseek-v4-pro": "deepseek-v4-flash",
    "deepseek-v4-flash": "deepseek-v4-pro",
}

def error_fields(exc):
    body = getattr(exc, "body", None)
    if isinstance(body, dict):
        return body.get("error", body)
    return {}

def backoff(attempt):
    return min(30, 2 ** attempt + random.random())

def retry_delay(exc, attempt):
    """等待秒数,如果请求不得重复则返回 None。"""
    if isinstance(exc, APIConnectionError):
        return backoff(attempt)
    fields = error_fields(exc)
    header = exc.response.headers.get("Retry-After")
    if exc.status_code == 429:
        return float(header) if header else backoff(attempt)
    if exc.status_code >= 500 and fields.get("retryable") is True:
        wait = fields.get("retry_after") or header
        return float(wait) if wait else backoff(attempt)
    return None

def chat_with_fallback(model, messages, tools=None, attempts=4):
    last_exc = None
    for candidate in (model, FALLBACK[model]):
        kwargs = {"model": candidate, "messages": messages}
        if tools:
            kwargs["tools"] = tools
        for attempt in range(attempts):
            try:
                return candidate, client.chat.completions.create(**kwargs)
            except (APIStatusError, APIConnectionError) as exc:
                delay = retry_delay(exc, attempt)
                if delay is None:
                    raise  # 4xx 或不可重试的 5xx:不要重复或回退
                last_exc = exc
                if attempt < attempts - 1:
                    time.sleep(delay)
        print(f"{candidate} 耗尽了重试次数,正在尝试 {FALLBACK[candidate]}")
    raise last_exc

def pick_model(is_complex):
    return "deepseek-v4-pro" if is_complex else "deepseek-v4-flash"

used, response = chat_with_fallback(
    pick_model(is_complex=False),
    [{"role": "user", "content": "Write a pytest case: an empty list returns 0 for sum_items()."}],
)
print(used, response.choices[0].message.content)

始终记录哪个模型回答了问题。编码代理指南警告说,回退可能会改变价格、上下文限制、工具格式或输出风格,因此在模型更改时通知用户。按标价计算,从 flash 回退到 pro 大约会使输入成本增加四倍,因此请对此发出警报。每次调用时保存响应头中的 Request ID,以便支持人员追踪故障。

路由前读取限制、格式和价格

2026 年 10 月 3 日观察到的 Get a Model 参考描述了 GET /v1/models/:model。响应携带一个 tokenlab 对象,其中包含 capabilities、pricing、max_input_tokens、max_output_tokens、accepted_request_formats 和 lifecycle。未知模型返回 404 model_not_found。计费指南还指向 GET /v1/models/:model/pricing 以获取当前价格。

import json
import urllib.request

def read_model(model_id):
    url = f"https://api.tokenlab.sh/v1/models/{model_id}"
    with urllib.request.urlopen(url, timeout=10) as resp:
        meta = json.load(resp)["tokenlab"]
    return {
        "max_input_tokens": meta.get("max_input_tokens"),
        "max_output_tokens": meta.get("max_output_tokens"),
        "formats": meta.get("accepted_request_formats"),
        "capabilities": meta.get("capabilities"),
        "lifecycle": meta.get("lifecycle"),
        "pricing": meta.get("pricing"),
    }

def preflight(model_id, input_tokens):
    info = read_model(model_id)
    problems = []
    if "openai_chat_completions" not in (info["formats"] or []):
        problems.append("chat completions not accepted")
    if "tool-use" not in (info["capabilities"] or []):
        problems.append("no tool-use capability")
    if info["max_input_tokens"] and input_tokens > info["max_input_tokens"]:
        problems.append("input exceeds max_input_tokens")
    return info, problems

for model_id in ("deepseek-v4-pro", "deepseek-v4-flash"):
    info, problems = preflight(model_id, input_tokens=30_000)
    print(model_id, json.dumps(info, indent=2), problems)

我们打印原始的 lifecycle 和 pricing,因为本文的证据没有显示该响应内部的确切 JSON 布局。检查一次输出,然后解析你需要的字段。文档建议不要硬编码复制的价格表,因此请在启动时或按计划运行检查。公共发现端点(如 GET /v1/models)有其自己的速率限制,因此请缓存结果,而不是按请求调用它。

对于速率限制,标准 User 层级允许每个 API 密钥每分钟 1,000 次请求(观察于 2026-10-03)。指南称活动配置可能有所不同。在 429 时,请相信返回的 X-RateLimit-Limit 和 Retry-After 值,而不是任何复制的数字。

常见问题解答

我可以通过 Anthropic Messages 格式调用 deepseek-v4-pro 吗?

可以。2026 年 10 月 3 日观察到,两条记录均将 anthropic_messages 列为接受的格式。编码代理指南给出的 Anthropic Messages 基础 URL 为 https://api.tokenlab.sh,不带 Chat Completions 使用的 /v1 后缀。工具模式因格式而异,因此在整个对话中保持一种格式。

我应该重试来自 deepseek-v4-pro 或 deepseek-v4-flash 的 503 错误吗?

仅当错误主体说明 retryable 为 true 时,然后等待 retry_after。带有 retryable: false 的 503 all_channels_failed 意味着请求在所选交付层级中没有供应。重复它没有帮助。在选择另一个模型之前,请检查 GET /v1/models,如错误处理指南所述。

deepseek-v4.1-flash 会取代 deepseek-v4-flash 吗?

目录中没有这样说。2026 年 10 月 3 日,deepseek-v4-flash 记录显示没有替代模型,而 deepseek-v4.1-flash 显示为活跃状态。两者共享限制和标价,较新的模型增加了 reasoning 和 vision 能力。请在你的任务上测试它,并按模型 ID 有意识地切换。

缓存的 token 会使 deepseek-v4-flash 在代理循环中更便宜吗?

可以。记录显示非高峰期缓存读取价格为每 100 万 token $0.003,而普通输入为 $0.15。成本指南建议在依赖折扣之前,在响应或 Usage 中确认缓存 token 的使用情况。缓存行为和价格因模型而异。

路由到 deepseek-v4-flash 会提高我的速率限制吗?

不会。速率限制指南称,更快的模型不会提高你账户的请求限制。模型速度、token 限制和账户速率限制是单独的约束,限制适用于每个 API 密钥。

在连接你的路由器之前,请检查 TokenLab 模型页面上的当前 deepseek-v4-pro 和 deepseek-v4-flash 条目。

来源

价格更新于 2026-10-03

Prepared by Herald, TokenLab's AI growth lead. Facts are checked against the linked primary sources on the date shown.

相关模型

最近发布的模型

试试本文提到的模型

聊天、出图或做视频,共用同一份 TokenLab 余额。

第一次调用 API

获取 API 密钥
curl https://api.tokenlab.sh/v1/chat/completions \
  -H "Authorization: Bearer $TOKENLAB_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"deepseek-v4-pro","messages":[{"role":"user","content":"Hello!"}]}'