DeepSeek API“无法使用”要先拿到实际 HTTP 状态码。401、402、429 和 5xx 的原因不同:反复更换提示词或重发请求,不能解决密钥、余额或限流问题。以下针对开发者直接调用 https://api.deepseek.com 的情境,不包括第三方中转服务和 DeepSeek 网页聊天。
先用一个最小请求复现
确认已在本机设置 DEEPSEEK_API_KEY 环境变量,且密钥来自你有权使用的账号。不要把密钥写入脚本、截图或工单。DeepSeek 的首次调用文档当前给出的基础地址是 https://api.deepseek.com,示例模型包括 deepseek-flash。以下 Python 标准库示例只输出状态码和回答片段,不打印密钥;模型名与可用性以官方实时文档为准。

import json
import os
import urllib.error
import urllib.request
key = os.environ.get("DEEPSEEK_API_KEY")
if not key:
raise SystemExit("缺少 DEEPSEEK_API_KEY 环境变量")
payload = json.dumps({
"model": "deepseek-flash",
"messages": [{"role": "user", "content": "只回答:你好"}],
"stream": False
}).encode("utf-8")
request = urllib.request.Request(
"https://api.deepseek.com/chat/completions",
data=payload,
headers={
"Content-Type": "application/json",
"Authorization": "Bearer " + key
},
method="POST"
)
try:
with urllib.request.urlopen(request, timeout=30) as response:
result = json.load(response)
print("HTTP", response.status)
print(result["choices"][0]["message"]["content"][:200])
except urllib.error.HTTPError as error:
print("HTTP", error.code)
print("请在本机查看脱敏后的错误信息和官方错误码说明")
except urllib.error.URLError as error:
print("网络连接失败;先检查域名、证书和连接环境")
先看 HTTP 状态。若是 URLError,请求可能尚未到达 DeepSeek 服务,先查 DNS、网络、代理与证书,不能当作 401 或 429。若拿到 200 且有非空回答,只说明这次最小调用成功;你的业务模型、并发和额度仍须另测。
按状态码处理,不盲目重试
| 状态码 | 官方含义 | 可执行的下一步 |
|---|---|---|
| 400 | 请求格式无效 | 对照接口文档检查 JSON 结构、字段名和错误消息;修正后再发 |
| 401 | 身份验证失败 | 确认实际读取的是正确 API 密钥,去掉多余空格;密钥失效时在官方平台处理 |
| 402 | 余额不足 | 到官方账号后台核对余额和计费状态;无需重发相同请求 |
| 422 | 参数无效 | 按错误提示检查模型、参数和值的类型 |
| 429 | 请求过快 | 降低并发和频率,设置限次退避;不要用循环立即重试 |
| 500 或 503 | 服务器错误或过载 | 短暂等待后限次重试;持续出现时保留时间和请求标识联系官方支持 |
这张表依据 DeepSeek 的官方错误码文档,核对日期为 2026 年 10 月 1 日。对于 401、402、400、422,先修账号或请求,不应自动重试;对于 429 和部分 5xx,可做有上限的退避。重试次数、等待时间要结合应用流量和官方实时策略设置,本文不虚构固定额度。
确认故障已经解决
每改动一个原因,只重跑一次最小请求,记录状态码、时间、所用模型名和是否得到非空回答;之后再恢复业务请求。若最小请求成功而业务仍失败,对比两者的地址、模型、参数、并发与代理,逐项缩小差异。向他人求助时提供脱敏后的状态码和错误消息,绝不提供完整密钥或含密钥的请求头。
本文依据官方接口和错误码说明提供诊断步骤,没有使用你的密钥或账号实测,也不能判断你当前账号的余额和服务状态。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/29760.html