Appearance
DeepSeek API 使用标准 HTTP 状态码返回错误。本文列出所有错误码、常见触发原因及对应解决方案,是 API 调用调试的第一参考文档。
DeepSeek API 错误码
错误码一览
| HTTP 状态码 | 含义 | 常见原因 | 解决方案 |
|---|---|---|---|
| 400 | 请求格式错误 | JSON 格式不合法、必填字段缺失、Strict 模式 schema 不规范 | 检查请求体结构 |
| 401 | 认证失败 | API Key 错误、Key 已过期、Header 格式错误 | 检查 Authorization: Bearer <key> |
| 402 | 余额不足 | 账户余额耗尽 | 充值账户 |
| 422 | 参数错误 | 参数值超出范围、类型不匹配 | 检查具体参数值 |
| 429 | 超出限速 | 请求频率过高 | 降低请求频率,实现退避重试 |
| 500 | 服务器内部错误 | DeepSeek 服务端故障 | 等待后重试 |
| 503 | 服务不可用 | 服务器负载过高 | 等待后重试,监控 状态页 |
常见错误详解
400 - 请求格式错误
触发场景:
JSON 格式不合法
{"error": {"message": "JSON parse error", "type": "invalid_request_error"}}检查请求体是否是合法 JSON,特别是中文字符和特殊字符的转义。
Strict 模式 schema 不合规(最常见)
{"error": {"message": "strict mode requires all properties to be in required"}}确认
required数组包含了所有properties的 key,且设置了"additionalProperties": false。messages 格式错误
json// ❌ 错误:content 不能是 null {"role": "user", "content": null} // ✅ 正确 {"role": "user", "content": "你好"}
401 - 认证失败
检查清单:
typescript
// ❌ 常见错误写法
headers: { "Authorization": "sk-xxxxx" } // 缺少 "Bearer "
// ✅ 正确写法
headers: { "Authorization": "Bearer sk-xxxxx" }- 确认 API Key 在 平台控制台 仍然有效(未被删除)
- 确认没有多余的空格或换行
402 - 余额不足
通过 API 查询余额:
bash
curl https://api.deepseek.com/user/balance \
-H "Authorization: Bearer $DEEPSEEK_API_KEY"429 - 超出限速
DeepSeek 对请求频率有限制,推荐实现指数退避重试:
typescript
async function callWithRetry(fn: () => Promise<any>, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await fn();
} catch (error: any) {
if (error.status === 429 && i < maxRetries - 1) {
const delay = Math.pow(2, i) * 1000; // 1s, 2s, 4s
await new Promise(resolve => setTimeout(resolve, delay));
continue;
}
throw error;
}
}
}限速策略详见:限速说明
500 / 503 - 服务端错误
这类错误与你的请求无关,是 DeepSeek 服务端问题:
- 直接重试,503 通常是短暂的高负载
- 查看 DeepSeek 状态页 确认是否有服务中断
- 在重试逻辑中给 5xx 错误加上退避时间
错误处理模板
typescript
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.deepseek.com",
apiKey: process.env.DEEPSEEK_API_KEY,
});
try {
const response = await client.chat.completions.create({
model: "deepseek-v4-pro",
messages: [{ role: "user", content: "你好" }],
});
return response.choices[0].message.content;
} catch (error) {
if (error instanceof OpenAI.APIError) {
switch (error.status) {
case 400: console.error("请求格式错误:", error.message); break;
case 401: console.error("API Key 无效"); break;
case 402: console.error("余额不足,请充值"); break;
case 429: console.error("超出限速,请稍后重试"); break;
case 500:
case 503: console.error("服务端错误,稍后重试"); break;
}
}
throw error;
}常见问题
Q: 收到 400 但不知道哪里出问题,怎么定位?
A: 查看 error response 中的 message 字段,一般有具体说明。最常见的是 Strict 模式 schema 违规(required 不完整)和 messages 格式问题。
Q: 429 错误发生后等多久再重试合适?
A: 建议从 1 秒开始,每次失败翻倍(1s → 2s → 4s),最多重试 3~5 次。也可以读取 response header 中的 Retry-After 字段(若有)。
Q: 500 和 503 有什么区别?
A: 503 通常是服务器负载过高的临时状态,几秒到几分钟后会自动恢复;500 是未预期的服务端错误,持续出现时可联系 api-service@deepseek.com。