DeepSeek API 使用指南:从申请 Key 到跑通调用

一切从一条报错开始,这个夏天我亲眼见了两次。同事照某篇教程敲了 pip install deepseek-api,pip 回了他一屏红字。另一回是装上了、示例一跑,服务器回 Model Not Exist——因为教程里写的 deepseek-chat,2026 年 7 月 24 日就跟 deepseek-reasoner 一起退役了。这两种失败都不怪键盘前的人:教程过期了,DeepSeek API 已经往前走了。

本文全部对齐 2026 年 8 月的现行口径:真正能解析的模型名、真实存在的取 Key 流程、GA 版上线的参数。一篇讲完从零到生产级调用链——Key、第一次调用、流式、思考模式、多轮对话、结构化输出、限流。顺带一张纠错表,把流传甚广的教程还在教错的东西逐条对清。

DeepSeek API 是什么

DeepSeek API 是一个说两种行业标准方言的 chat 接口:OpenAI 格式和 Anthropic 格式。双兼容就是它的全部设计哲学——你不需要装新 SDK、学新报文格式、重写任何东西,把现有 OpenAI 客户端指到另一个 base URL、换一个模型字符串就完事。会调 GPT 就会调 DeepSeek。

三个官方域名各司其职,分清它们比想象中重要——这个话题的搜索结果里至少混着八个仿冒站(deep-seek.com、deepseekv4pro.com 之流),既不是文档也不是控制台:

域名用途
platform.deepseek.com控制台:建 Key、查余额、看用量
api-docs.deepseek.com文档与指南
api.deepseek.com你的代码真正请求的端点

现行模型名,以及它们背后实际指向的 checkpoint:

模型字符串实际 checkpoint定位
deepseek-v4-flashV4-Flash-0731快且便宜,日常主力
deepseek-v4-proV4-Pro-0813深度推理旗舰
deepseek-v4-flash-vision-exp实验版文本+图像输入

这个映射是刻意设计的:调用名保持稳定,DeepSeek 在背后把它指到最新 checkpoint。但有两个名字不再解析deepseek-chatdeepseek-reasoner,2026 年 7 月 24 日全部退役。任何还在敲这两个名字的教程,描述的都是一个已经不存在的产品。(模型规格、跑分和完整价格见站内 DeepSeek V4 全解。)

申请 DeepSeek API Key

认证就是一个普通的 HTTP Bearer token——一个字符串、一个请求头。获取方式:登录 platform.deepseek.com,进 API Keys 页,点创建,立刻复制。Key 只显示一次。流程到此为止,没有更多仪式。

有两件事值得说透,因为中文圈在这两件事上噪音很大。

第一:没有 OAuth 流程、没有企业认证表单、没有权限范围勾选。有些流传很广的教程描述了一套"OAuth 2.0 双阶段认证+实名验证"——那套流程不存在。哪篇指南让你配 OAuth 凭证,你读到的就是小说。

第二:把 Key 当密码保管,因为它就是能花钱的密码。生产环境的标准纪律:

# .env —— 永不硬编码、永不提交
DEEPSEEK_API_KEY=sk-your-key-here
import os
from dotenv import load_dotenv
load_dotenv()
api_key = os.getenv("DEEPSEEK_API_KEY")
if not api_key:
    raise RuntimeError("Missing DEEPSEEK_API_KEY")

Key 只留在服务端。发到浏览器或打包进 App 的 Key 就不再是秘密了——那是捐款。

第一次调用 DeepSeek API

官方首个调用示例是裸 HTTP 写的,值得慢慢读一遍,因为每个字段之后都会以 SDK 的形态再出现——这段 curl 我到现在接到任何新账号都先跑一遍:一枪验证 key、网络、模型名三样全通,之后出了问题才好排查:

curl https://api.deepseek.com/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${DEEPSEEK_API_KEY}" \
  -d '{
        "model": "deepseek-v4-pro",
        "messages": [
          {"role": "system", "content": "You are a helpful assistant."},
          {"role": "user", "content": "Hello!"}
        ],
        "thinking": {"type": "enabled"},
        "reasoning_effort": "high",
        "stream": false
      }'

端点是 api.deepseek.com 上的 POST /chat/completions。messages 按角色堆叠——先 system 人设,再用户轮次。thinking 打开思维链开关,reasoning_effort 设定思考强度,stream: false 表示等整个 JSON 响应一次性回来。

Python 版

"OpenAI 兼容"在实际开发里买到的东西是这个——装标准 OpenAI SDK,不是任何第三方"deepseek"包(其中几个是非官方的,有一个著名的是纯编造的):

from openai import OpenAI

client = OpenAI(
    api_key=os.environ["DEEPSEEK_API_KEY"],
    base_url="https://api.deepseek.com",   # 那个转接头
)

response = client.chat.completions.create(
    model="deepseek-v4-flash",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "用两句话解释 HTTP cookie。"},
    ],
)
print(response.choices[0].message.content)

迁移只改两行:base_url 和模型字符串。其余一切——重试、类型、流式助手——都是你现有 OpenAI 代码换个工牌继续上班。用 Anthropic SDK 的代码库同理,指到 https://api.deepseek.com/anthropic

流式输出

stream=True,响应以服务器推送事件(SSE)到达:一串 JSON 块,每块带着装有几个新 token 的 delta。头几个词在模型想完全部内容之前就冒出来——这就是聊天"感觉活着"和"感觉在下文件"的区别。

stream = client.chat.completions.create(
    model="deepseek-v4-flash",
    messages=[{"role": "user", "content": "写一首关于延迟的俳句。"}],
    stream=True,
)
for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)

流式与否,响应里的 usage 字段都会报 prompt_tokenscompletion_tokens——你的账单就是从这两个数字算出来的。现在就养成记日志的习惯,下文 token 一节讲它们意味着什么。

流式有两个第一周就回本的习惯——我自己都是付过学费才养成的。给每个请求设显式超时——一条卡死的连接占着槽位不放,跟一个特别慢的模型没有区别,重连好过干等。流中途断掉时,重发整个请求:半截输出只是展示材料,服务端不记得它,没有断点续传 token 可发。低客单价的请求让这两个习惯都无痛——这也是"先在 flash 档上把业务跑起来、实测出差距再升 pro"的一个静默论据。

思考模式与 Effort:真正要紧的两个旋钮

跟老 API 的一个重大区别:思考模式默认开启,默认档位 high。回答之前,模型先走一遍思维链再作答——难题准确率上去,延迟跟着上去。

effort 参数是三个真实档位的油门。low 是市区代步——快速回答、最少盘算。high 是高速巡航,默认甜点位。max 是赛道模式:给证明题、架构决策、疑难调试用满额推理预算。还有个值得知道的怪癖——请求 mediumxhigh,平台都会映射成 high。映射表直接来自思考模式指南

你请求的模型实际跑的
lowlow
mediumhigh
highhigh
xhighhigh
maxmax

简单调用想关掉思考,传开关即可——注意 Python 细节:OpenAI SDK 不认识这个字段,所以要塞进 extra_body

response = client.chat.completions.create(
    model="deepseek-v4-pro",
    messages=[{"role": "user", "content": "9.11 和 9.8 哪个大?"}],
    reasoning_effort="high",
    extra_body={"thinking": {"type": "enabled"}},
)

两个多数教程跳过的深水细节。

其一,思考模式之内,采样参数——temperaturetop_ppresence_penaltyfrequency_penalty——全部无效。API 会静默收下(为了兼容既有软件)然后忽略。我曾为此安静地耗掉一个下午——调 temperature 死活没变化,最后在文档里翻到那行字。你遇到一样的情况:就是这个原因,不是你代码的 bug。

其二,思维链从 reasoning_content 字段返回,跟 content 并排。后续轮次里,历史 reasoning_content 在请求不带 tools 参数时会被服务端忽略——所以放心把旧推理从存储的上下文里剥掉,一点不亏。

多轮对话:没有记忆的服务员

chat 端点没有记忆,一点都没有。每个请求都是一位全新顾客:服务端只读你发来的 messages 数组,作答,然后把这一桌忘得干干净净。所谓多轮对话,是你——客户端——自己留着对话记录,每轮把整桌内容重新念给服务员听。

messages = [{"role": "user", "content": "世界上最高的山是什么?"}]

response = client.chat.completions.create(
    model="deepseek-v4-flash", messages=messages
)
messages.append(response.choices[0].message)   # 服务员的回答

messages.append({"role": "user", "content": "第二高呢?"})
response = client.chat.completions.create(
    model="deepseek-v4-flash", messages=messages
)
print(response.choices[0].message.content)

第二轮发出去三条:原始问题、存下来的回答、新问题。这个模式——追加回答、追加新轮次、全量重发——就是对话记忆的全部秘密,也是长 agent 会话每轮成本线性上涨的原因。(让这些越长越长的对话记录保持高效的提示词策略,见提示词技巧。)

结构化 JSON 输出

当输出要喂给解析器而不是人眼时,自由散文就是 bug。JSON 模式锁死输出形状,靠三条规则:设响应格式、在提示词里写 "json" 这个词并给示例、设 max_tokens 上限防止长答案把对象截断在半路。

system_prompt = """
The user will provide some exam text. Please parse the "question"
and "answer" and output them in JSON format.
EXAMPLE INPUT:
Which is the highest mountain in the world? Mount Everest.
EXAMPLE JSON OUTPUT:
{"question": "...", "answer": "..."}
"""

response = client.chat.completions.create(
    model="deepseek-v4-flash",
    messages=[
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": "世界上最长的河是什么?尼罗河。"},
    ],
    response_format={"type": "json_object"},
    max_tokens=512,
)
print(response.choices[0].message.content)

提示词里漏了示例,质量会掉;漏了 max_tokens,一个话痨回答可能停在半个花括号上——那是只在生产环境才炸给你看的 json.loads 崩溃。

限流与 user_id 救生索

并发按账号计数,跟用哪把 Key 发的请求无关。想象一家餐厅:你的账号有固定桌数,每个在途请求从发出到收完最后一个字节都占一张桌。

模型每账号并发上限
deepseek-v4-pro500
deepseek-v4-flash2,500
deepseek-v4-flash-vision-exp2,500

越过线就是 HTTP 429——退避重试,别硬怼。要更多桌子?扩容申请免费,平台按真实业务量匹配额度。现行数字以限流页为准。

如果你在一个账号下服务很多终端用户,user_id 把大堂隔成包间。按请求传它——字母数字连字符下划线、最长 512 字符、别塞隐私信息——平台按身份隔离三件事:内容安全处理、KV 缓存(一个用户缓存过的上下文绝不渗进另一个人的)、调度。OpenAI SDK 里它也走 extra_body

response = client.chat.completions.create(
    model="deepseek-v4-flash",
    messages=[{"role": "user", "content": "你好!"}],
    extra_body={"user_id": "customer-8801"},
)

对提额账号,每个 user_id 还有各自的并发上限——一个失控租户饿不死其他人。

Token 与账单

计费按 token,心算很友好:1 个英文字符约 0.3 token,1 个汉字约 0.6。一篇 1000 词的英文文章,模型还没作答就先吃掉约 1300 输入 token。精确数字永远以响应 usage 字段回传的为准——要对账就看它,别信任何估算器;官方文档另附 tokenizer demo 供离线计算。图像输入按尺寸走一套公式、每图有上限。

每个 token 多少钱、峰时谷时怎么算——那是定价问题,有自己的答案页,V4 全解带着现行价表和生效日期。

Chat API 之外

/chat/completions 是正门,不是整栋房子。文档里围绕它还有:

  • GET /models——列出你的 Key 能摸到哪些模型,含 owner 与可用性
  • GET /user/balance——钱包查询,给仪表盘和消费告警用
  • Files API——上传一次、按 ID 引用(免费)
  • Context Caching——自动前缀缓存,命中价是未命中的三十分之一
  • FIM completion——填空中段,给代码编辑流用
  • Responses API——更新的响应格式,8 月 13 日起 GA
  • Anthropic 格式接口——同一批模型,…/anthropic 路径

还有一扇完全不用写代码的门:编程 Agent。Claude Code、GitHub Copilot、OpenCode 都能纯配置把 DeepSeek 设为后端模型。Claude Code 接入教程把环境变量配方从头到尾走了一遍——如果你的目标是"DeepSeek 进我的终端",那就是绕过上面一切的捷径。

2026 年的常见坑

上面讲的一切对撞还在流传的一切,一张表收口:

旧教程说2026 年现实
pip install deepseek-apifrom deepseek_api import DeepSeekClient不存在这个官方包。pip install openaibase_urlhttps://api.deepseek.com
model="deepseek-chat" / "deepseek-reasoner"2026 年 7 月 24 日退役。用 deepseek-v4-flashdeepseek-v4-pro
OAuth 2.0、实名验证、企业认证才可用platform.deepseek.com 拿 Bearer Key,仅此而已
JWT 签名、HMAC 请求签名都不存在。Authorization: Bearer 请求头
思考模式里调 temperature思考开启时静默无效
把 deep-seek.com / deepseekv4pro.com 当官网官方三件套:platform.deepseek.com、api-docs.deepseek.com、api.deepseek.com

比所有条目更老的元规则:先看教程的发布日期,再看它的代码块。这个 API 七月退役了模型名、八月调了价——在那之前写的任何东西都是考古材料。

常见问题

DeepSeek API 怎么接入?三步:在 platform.deepseek.com 的 API Keys 页建 Key;装 OpenAI SDK(pip install openai);用 base_url="https://api.deepseek.com" 加你的 Key 构造客户端。第一个调用就是标准的 chat completion,model="deepseek-v4-flash"

DeepSeek API 用什么 SDK?没有专用 SDK。它同时兼容 OpenAI 和 Anthropic 两家 SDK——复用其中任何一个,只改 base URL(https://api.deepseek.comhttps://api.deepseek.com/anthropic)和模型名。

DeepSeek API 的 base URL 是什么?OpenAI 格式用 https://api.deepseek.com;Anthropic 格式用 https://api.deepseek.com/anthropic。对话请求发 POST /chat/completions

deepseek-chat 还能用吗?不能。deepseek-chatdeepseek-reasoner 已于 2026 年 7 月 24 日退役。替代品是 deepseek-v4-flashdeepseek-v4-pro,自动指向最新 checkpoint(V4-Flash-0731 和 V4-Pro-0813)。

API 免费吗?怎么查余额?按量付费,自动上下文缓存能摊薄重复输入的成本。实时余额一个调用就有——GET /user/balance——每个响应的 usage 字段给出逐次调用的 token 数供对账。

限流多少?429 什么意思?deepseek-v4-pro 并发 500,deepseek-v4-flash 和视觉模型并发 2500,按账号计。429 表示越过上限:退避重试。更高上限可通过免费扩容申请拿到。

能用 Anthropic 格式的代码调吗?能——Anthropic SDK 配 base_url="https://api.deepseek.com/anthropic",模型名不变。工具定义和消息结构都直接沿用。

从这里出发三步走:拿一把 Key,原样跑通 curl 片段直到看到回复,然后决定这个模型在你技术栈里的位置——今晚先写个脚本,还是让编程 Agent 干重活(Claude Code 接入教程)。兼容接口真正的承诺不是哪个模型的跑分,而是:集成代码永远是你的,模型变成一行就能换的决定。