DeepSeek V4.1 / V4
用 OpenAI Chat Completions、OpenAI Responses 或 Anthropic Messages 调用 DeepSeek V4.1 与 V4。
| 项目 | 填写值 |
|---|---|
| Base URL | https://api.hop-base.com/v1 |
| 对话 | POST /v1/chat/completions |
| Responses | POST /v1/responses |
| Anthropic Messages | POST /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-flash | 1M | 393,216 |
deepseek-v4-pro-202606 | 1,048,576 | 393,216 |
deepseek-v4-flash-202605 | 1M | 384,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 | 可选 | 同 OpenAI | auto | 见工具调用 |
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。
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,含缓存命中部分 |
| 用量记录输入 Token | prompt 减去缓存命中部分 |
| 用量记录缓存输入 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
claudeClaude 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断言的客户端不会被打断。
/v1/responses 会透传 previous_response_id 与 store,续聊会回到产出上一轮响应的地方。回不去时返回 503 提示重开会话:请不带 previous_response_id、重新发送完整 input。
在 Responses 里做前缀续写,把最后一条 assistant 消息设 partial: true,而不是 prefix: true。
即使请求被换到另一条路由,响应里的 model 值也保持不变。
下一步
- DeepSeek Harness——
dshAgent 运行时的配置文件与自定义 provider 表单;本页是它背后的模型接入说明 - OpenAI SDK——Chat Completions 通用写法
- Claude Code——经 Anthropic Messages 直连
- 错误码与重试
- 并发、超时与计费