跳到正文

DeepSeek V4.1 / V4

用 OpenAI Chat Completions、OpenAI Responses 或 Anthropic Messages 调用 DeepSeek V4.1 与 V4。

项目填写值
Base URLhttps://api.hop-base.com/v1
对话POST /v1/chat/completions
ResponsesPOST /v1/responses
Anthropic MessagesPOST /v1/messages

用 Bearer 鉴权,模型 ID 以 GET /v1/models 返回的精确写法为准。在 /v1/messages 上也可以用 x-api-key 请求头。

curl https://api.hop-base.com/v1/chat/completions \
  -H "Authorization: Bearer sk-your-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-pro-202606",
    "messages": [{
      "role": "user",
      "content": "用五条要点总结本季度的风险。"
    }]
  }'

模型

模型 ID上下文单次最多输出 Token
deepseek-v4.1-flash1M393,216
deepseek-v4-pro-2026061,048,576393,216
deepseek-v4-flash-2026051M384,000

V4.1 Flash 的思考过程在 reasoning_content 返回。它以 DeepSeek 官方价为基准,随官方峰谷时段浮动,见峰谷计价。

三个模型都在「DeepSeek」分组里,一把密钥即可全部调用。

裸名调不通:

只有上表中的 ID 是正式模型。请从 GET /v1/models 读取完整 ID,不要自己缩写。

下面这些裸名都返回同一种 404 model_not_found,不会点名替代 ID:deepseek-v4-flash、deepseek-v4-pro、deepseek-chat、deepseek-reasoner,以及 DeepSeek 自家对 V4.1 Flash 的简称 deepseek-flash。文案按请求的 Accept-Language 返回对应语言,默认英文:

当前分组不支持所请求的模型:<模型名>
The current group does not support the requested model: <model>

峰谷计价

deepseek-v4.1-flash 随 DeepSeek 官方峰谷时段浮动,时段按北京时间(UTC+8)算。

  • 高峰:周一至周五 09:00–12:00 与 14:00–18:00。
  • 低峰:其余时间,包括夜间、两段高峰之间的中午空档和整个周末。
  • 低峰的输入、缓存输入与输出单价一律减半。
  • 时段左闭右开:09:00:00 已经算高峰,12:00:00 已经算低峰。

每笔请求按它完成的那一刻计价,不按发起的那一刻。17:59 发起、18:01 结束的请求整笔按低峰价;08:59 发起、09:01 结束的请求整笔按高峰价。

一笔请求永远只带一个单价,不会在边界处被拆成两段。所以同一个模型,相隔一分钟的两条用量记录可能显示不同的单价。适用于你这把密钥的单价见登录后的模型广场。

端点与请求参数

POST /v1/chat/completions、POST /v1/responses 和 POST /v1/messages 三个模型都可用,流式均正常。Codex CLI 走 Responses;Claude Code 走 Anthropic Messages,见 Claude Code 与 Anthropic Messages。

  • 中间填充(FIM)补全不可用,它所在的路径 HopBase 不做转发。
  • 前缀续写可用,见前缀续写。

下表针对 POST /v1/chat/completions。网关只拦截空 messages,其余限制来自模型服务。

参数必填类型与限制默认值说明
model必填上表三个 ID 之一—精确匹配;裸名返回 404
messages必填非空数组—role 取值见下方
max_tokens可选非负整数,上限见模型服务默认思考与正文共用
temperature可选数值 0–2服务默认—
thinking可选{"type": …}V4.1 Flash 开启取值见下方
reasoning_effort可选low / medium / high 实测可用服务默认仅在开启思考时生效
tools、tool_choice可选同 OpenAIauto见工具调用
stream可选布尔false为 true 时以 SSE 流式返回
stream_options.include_usage可选布尔false流式下要收到 usage 必须设 true
prefix可选布尔false前缀续写
image_url.url可选data: URI 或 https:// 链接—仅 deepseek-v4.1-flash
  • messages 的 role 取 system / user / assistant / tool / developer。
  • thinking.type 取 enabled / disabled / adaptive,其他取值(如 auto)返回 400。
  • max_tokens 为负数返回 400;超过输出上限不报错,输出静默截断,见推理输出。
  • stream_options.include_usage 不影响计费。
  • prefix 只能加在最后一条 assistant 消息上。
  • image_url.url 所在的整个请求体 ≤ 60 MB。

报错原文取自 2026-09 生产记录:

400 missing messages field                   messages 缺失(网关)
400 messages must not be an empty array      messages 为空数组(网关)
400 expected a value <= 2                    temperature 大于 2

/v1/responses 用 max_output_tokens 限制输出,取值 1–393,216。temperature 同为 0–2;请求带 caching 时 store 必须为 true。超出上限的报错:

400 max_output_tokens must be less than or equal to 393216

完整参数见 API 参考:Chat Completions,选择 DeepSeek 模型种类查看。

图片输入

deepseek-v4.1-flash 原生支持读图,用的还是同一个端点、标准的 OpenAI 内容分片写法。image_url.url 可以是 data: URI,也可以是公网可访问的 https:// 链接;一条消息里可以放多张图。

整个请求体上限 60 MB。base64 约膨胀 1/3,多张图合计须在约 45 MB 以内;大图请改用 https:// 链接。超出时返回:

413 Request body exceeds the size limit (60 MB)

图片按普通输入计,计入 prompt_tokens。

V4 Pro 和 V4 Flash 不收图片:

deepseek-v4-pro-202606 与 deepseek-v4-flash-202605 看不了图。带图的请求在到达模型之前就会被拒,返回 400,不计费;Chat Completions、Responses 与 Anthropic Messages 都一样。往 Claude Code 里贴的截图、它读取的图片文件也算在内;凡是带图的任务请用 deepseek-v4.1-flash。

400 Model deepseek-v4-pro-202606 does not accept image input. Remove the image from the request, including earlier turns of the conversation, or use a model that supports images.
{
  "model": "deepseek-v4.1-flash",
  "messages": [
    {
      "role": "user",
      "content": [
        { "type": "text", "text": "这两张图里分别是什么?" },
        { "type": "image_url", "image_url": { "url": "data:image/png;base64,iVBORw0KGgo..." } },
        { "type": "image_url", "image_url": { "url": "https://example.com/chart.png" } }
      ]
    }
  ]
}

推理输出

DeepSeek 把思考过程放在独立的 reasoning_content 字段里,不在 content 中。需要的话请单独读取。

completion_tokens 已经包含推理 Token,把它当作真实输出长度即可,不要再加 reasoning_tokens。这一点与 Grok 不同:Grok 的 chat 端点是分开报的,必须相加。

思考与回答共用同一份 max_tokens 预算,而且思考在前。预算给得太小,整份预算会被思考吃光,请求照样返回 200,特征是:

  • finish_reason 是 length。
  • content 是空字符串。
  • completion_tokens_details.reasoning_tokens 正好等于你给的预算。

看到这个组合请当作「把 max_tokens 调大」,而不是请求失败。实测 max_tokens: 16 时,这个模型只返回一段被截断的思考,正文一个字都没有。

上面的预算规则只适用于 deepseek-v4.1-flash。deepseek-v4-pro-202606 与 deepseek-v4-flash-202605 开启思考时,max_tokens 管不住思考:实测 max_tokens: 64 时,Chat Completions 返回 144–161 个输出 Token,Anthropic Messages 最多返回 1,299 个,全部计费。关闭思考后上限精确。

两个上限的行为并不对称。输入超出上下文窗口(实测 1,048,576 Token)会在开始生成之前以 400 拒绝,且零计费。Chat Completions 上 max_tokens 超过输出上限却不会被拒绝,请求返回 200,输出在真实上限处被静默截断;请求成功并不代表你给的预算被接受了。

工具调用与前缀续写

工具调用

标准的 OpenAI Function Calling 全链路可用:单个调用、一轮里并行多个调用、tool_choice 取 auto / none / required 或指名某个函数,以及把 role: "tool" 的结果回灌下一轮。

这是个推理模型,但它照样接受 required。思考不必关掉,返回的 finish_reason 就是 tool_calls。

前缀续写

把回答的开头交给模型,让它接着往下写:把 messages 的最后一条设成 assistant 角色,并在这条上加 prefix: true。返回的 content 只包含续写部分,你给的前缀不会被重复一遍。

这个模式下模型不产生思维链:reasoning_content 不会出现、reasoning_tokens 为 0,整份预算都花在续写上。

{
  "model": "deepseek-v4.1-flash",
  "messages": [
    { "role": "user", "content": "List three primary colors, comma separated, nothing else." },
    { "role": "assistant", "content": "red, green,", "prefix": true }
  ]
}

上面这笔返回的 content 就是 blue,只花 1 个输出 Token。

前缀缓存与对账

前缀缓存是隐式的,没有开关,也不需要传任何缓存控制参数。命中情况体现在标准 OpenAI 字段 usage.prompt_tokens_details.cached_tokens 里。命中需要至少 256 个 Token 的公共前缀,短于这个长度 cached_tokens 会一直是 0。

HopBase 的用量记录与响应体对输入的口径不同,对账时要注意:

字段含义
响应体 prompt_tokens整个 prompt,含缓存命中部分
用量记录输入 Tokenprompt 减去缓存命中部分
用量记录缓存输入 Token缓存命中的那部分,单列

也就是说,用量记录里的输入加缓存输入,等于响应体的 prompt_tokens。缓存读与普通输入分开计价,适用于你这把密钥的单价见登录后的模型广场。

Claude Code 与 Anthropic Messages

POST /v1/messages 接受标准的 Anthropic Messages 请求,三个模型都可用,请求直接交给模型自己的 Anthropic 兼容接口,所以 Claude Code 和 Anthropic SDK 都能直连。SDK 的 Base URL 填 https://api.hop-base.com,不带 /v1。

用 CC Switch 时,在控制台密钥行的 ··· 菜单里选「导入 CCS」,再选 Claude Code。导入会自动填好模型;接口格式保持默认的 Anthropic,不需要本地路由。手动配置如下:

export ANTHROPIC_BASE_URL="https://api.hop-base.com"
export ANTHROPIC_AUTH_TOKEN="sk-your-key"
export ANTHROPIC_MODEL="deepseek-v4-pro-202606"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="deepseek-v4-flash-202605"
export CLAUDE_CODE_MAX_CONTEXT_TOKENS=1000000
claude

Claude Code 不认识这些 ID,所以要用 CLAUDE_CODE_MAX_CONTEXT_TOKENS 告诉它真实的上下文窗口;不设的话,它会在 200K Token 时压缩对话。三个模型在同一个分组里,一把密钥即可。更多选项见 Claude Code。

  • 思考在 thinking 块里返回,计入 output_tokens。thinking: {"type": "disabled"} 可以关闭思考。
  • tool_choice 指定工具名({"type": "tool", "name": …})时会照做;{"type": "any"} 会被忽略,模型可能直接用文字回答。
  • 只有 deepseek-v4.1-flash 能看图;给另外两个模型发图会返回 400,见图片输入。
  • max_tokens 超过输出上限不会被拒。
  • cache_control 断点会在发出前移除,所以不支持显式缓存;自动前缀缓存照常生效。2026-10-03 实测,Claude Code 从第二轮起有 94%–99% 的 prompt 命中缓存。

用 Anthropic Messages 对账时,input_tokens 不含缓存命中部分,对应用量记录的「输入 Token」;cache_read_input_tokens 对应「缓存输入 Token」。

网关行为

行为对请求的影响
空 messages在请求发出前就以 400 拒绝
模型不收的 Responses 字段静默删除
不支持的 input[].type / tools[].type不删除,仍返回 400
  • 被静默删除的 Responses 字段包括 stream_options、truncation、user、reasoning.summary、text.verbosity 等。
  • 不支持的类型如 local_shell_call、file_search、code_interpreter。
  • 响应体里的 model 字段始终回显你请求的公开 ID,做 response.model == request.model 断言的客户端不会被打断。

下一步