Skip to content

错误代码参考

DeepSeek API 使用标准的 HTTP 状态码和自定义错误代码来表示请求结果。本文档详细介绍了所有可能的错误类型、原因和解决方案。

HTTP 状态码

2xx 成功状态码

状态码说明描述
200OK请求成功
201Created资源创建成功

4xx 客户端错误

状态码说明描述常见原因
400Bad Request请求参数错误参数格式不正确、缺少必需参数
401Unauthorized认证失败API 密钥无效或缺失
403Forbidden权限不足账户权限不足或配额用尽
404Not Found资源不存在请求的端点或资源不存在
422Unprocessable Entity请求格式正确但无法处理参数值超出范围或不符合要求
429Too Many Requests请求频率超限超过速率限制

5xx 服务器错误

状态码说明描述处理建议
500Internal Server Error服务器内部错误稍后重试
502Bad Gateway网关错误检查网络连接,稍后重试
503Service Unavailable服务不可用服务维护中,稍后重试
504Gateway Timeout网关超时请求超时,稍后重试

错误响应格式

所有错误响应都遵循统一的格式:

json
{
  "error": {
    "message": "错误描述信息",
    "type": "错误类型",
    "code": "错误代码",
    "param": "相关参数(可选)"
  }
}

详细错误代码

认证错误 (Authentication Errors)

invalid_api_key

json
{
  "error": {
    "message": "Invalid API key provided",
    "type": "invalid_request_error",
    "code": "invalid_api_key"
  }
}

原因: API 密钥格式错误或无效 解决方案:

  1. 检查 API 密钥格式是否正确(应以 sk- 开头)
  2. 确认密钥长度为 51 字符
  3. 验证密钥是否已激活且未过期

api_key_expired

json
{
  "error": {
    "message": "API key has expired",
    "type": "invalid_request_error",
    "code": "api_key_expired"
  }
}

原因: API 密钥已过期 解决方案: 创建新的 API 密钥

insufficient_quota

json
{
  "error": {
    "message": "You exceeded your current quota",
    "type": "insufficient_quota",
    "code": "insufficient_quota"
  }
}

原因: 账户配额不足 解决方案:

  1. 检查账户余额
  2. 升级订阅计划
  3. 等待配额重置

请求错误 (Request Errors)

invalid_request_error

json
{
  "error": {
    "message": "Invalid request format",
    "type": "invalid_request_error",
    "code": "invalid_request_error",
    "param": "messages"
  }
}

常见原因:

  • 请求体格式不正确
  • 缺少必需参数
  • 参数类型错误

model_not_found

json
{
  "error": {
    "message": "The model 'invalid-model' does not exist",
    "type": "invalid_request_error",
    "code": "model_not_found",
    "param": "model"
  }
}

原因: 指定的模型不存在 解决方案: 使用有效的模型名称(如 deepseek-chatdeepseek-reasoner

context_length_exceeded

json
{
  "error": {
    "message": "This model's maximum context length is 32768 tokens",
    "type": "invalid_request_error",
    "code": "context_length_exceeded"
  }
}

原因: 输入内容超过模型的最大上下文长度 解决方案:

  1. 减少输入文本长度
  2. 分割长文本进行多次请求
  3. 使用支持更长上下文的模型

invalid_parameter_value

json
{
  "error": {
    "message": "Invalid value for parameter 'temperature'",
    "type": "invalid_request_error",
    "code": "invalid_parameter_value",
    "param": "temperature"
  }
}

原因: 参数值超出有效范围 解决方案: 检查参数值是否在允许范围内

速率限制错误 (Rate Limit Errors)

rate_limit_exceeded

json
{
  "error": {
    "message": "Rate limit reached for requests",
    "type": "rate_limit_error",
    "code": "rate_limit_exceeded"
  }
}

原因: 超过 API 调用频率限制 解决方案:

  1. 实现指数退避重试策略
  2. 降低请求频率
  3. 升级到更高的速率限制套餐

服务器错误 (Server Errors)

server_error

json
{
  "error": {
    "message": "The server had an error while processing your request",
    "type": "server_error",
    "code": "server_error"
  }
}

原因: 服务器内部错误 解决方案: 稍后重试,如果问题持续请联系技术支持

service_unavailable

json
{
  "error": {
    "message": "The engine is currently overloaded",
    "type": "server_error",
    "code": "service_unavailable"
  }
}

原因: 服务暂时不可用 解决方案: 等待几分钟后重试

错误处理最佳实践

1. 实现重试机制

python
import time
import random
from openai import OpenAI

def api_call_with_retry(client, max_retries=3, base_delay=1):
    """带重试机制的 API 调用"""
    for attempt in range(max_retries):
        try:
            response = client.chat.completions.create(
                model="deepseek-chat",
                messages=[{"role": "user", "content": "Hello"}]
            )
            return response
            
        except Exception as e:
            error_code = getattr(e, 'code', None)
            
            # 对于某些错误类型不进行重试
            if error_code in ['invalid_api_key', 'model_not_found', 'insufficient_quota']:
                raise e
            
            # 最后一次尝试失败
            if attempt == max_retries - 1:
                raise e
            
            # 指数退避
            delay = base_delay * (2 ** attempt) + random.uniform(0, 1)
            time.sleep(delay)

2. 错误分类处理

python
def handle_api_error(error):
    """根据错误类型进行分类处理"""
    error_code = getattr(error, 'code', None)
    
    if error_code == 'invalid_api_key':
        return "请检查 API 密钥是否正确"
    elif error_code == 'insufficient_quota':
        return "账户配额不足,请充值或升级套餐"
    elif error_code == 'rate_limit_exceeded':
        return "请求频率过高,请稍后重试"
    elif error_code == 'context_length_exceeded':
        return "输入内容过长,请减少文本长度"
    elif error_code == 'model_not_found':
        return "指定的模型不存在,请使用有效的模型名称"
    else:
        return f"未知错误: {error}"

3. 日志记录

python
import logging

def log_api_error(error, request_data=None):
    """记录 API 错误信息"""
    logging.error(f"API Error: {error}")
    if request_data:
        logging.error(f"Request Data: {request_data}")
    
    # 记录错误详情
    if hasattr(error, 'response'):
        logging.error(f"Response Status: {error.response.status_code}")
        logging.error(f"Response Body: {error.response.text}")

4. 用户友好的错误提示

python
def get_user_friendly_error(error):
    """将技术错误转换为用户友好的提示"""
    error_messages = {
        'invalid_api_key': '认证失败,请检查您的 API 密钥',
        'insufficient_quota': '账户余额不足,请充值后继续使用',
        'rate_limit_exceeded': '请求过于频繁,请稍后再试',
        'context_length_exceeded': '输入内容过长,请缩短后重试',
        'model_not_found': '模型不可用,请联系技术支持',
        'server_error': '服务暂时不可用,请稍后重试'
    }
    
    error_code = getattr(error, 'code', 'unknown_error')
    return error_messages.get(error_code, '发生未知错误,请联系技术支持')

调试工具

1. 错误诊断脚本

python
import os
from openai import OpenAI

def diagnose_api_issues():
    """诊断 API 配置问题"""
    print("🔍 开始诊断 API 配置...")
    
    # 检查环境变量
    api_key = os.getenv("DEEPSEEK_API_KEY")
    if not api_key:
        print("❌ 未找到 DEEPSEEK_API_KEY 环境变量")
        return
    
    # 检查密钥格式
    if not api_key.startswith("sk-"):
        print("❌ API 密钥格式错误,应以 'sk-' 开头")
        return
    
    if len(api_key) != 51:
        print(f"❌ API 密钥长度错误,当前长度: {len(api_key)},应为 51")
        return
    
    print("✅ API 密钥格式正确")
    
    # 测试 API 连接
    try:
        client = OpenAI(
            api_key=api_key,
            base_url="https://api.deepseek.com"
        )
        
        # 测试模型列表
        models = client.models.list()
        print("✅ API 连接正常")
        print(f"✅ 可用模型数量: {len(models.data)}")
        
        # 测试简单请求
        response = client.chat.completions.create(
            model="deepseek-chat",
            messages=[{"role": "user", "content": "test"}],
            max_tokens=1
        )
        print("✅ API 调用成功")
        
    except Exception as e:
        print(f"❌ API 调用失败: {e}")

if __name__ == "__main__":
    diagnose_api_issues()

2. 网络连接测试

python
import requests
import time

def test_network_connectivity():
    """测试网络连接"""
    endpoints = [
        "https://api.deepseek.com",
        "https://api.deepseek.com/v1/models"
    ]
    
    for endpoint in endpoints:
        try:
            start_time = time.time()
            response = requests.get(endpoint, timeout=10)
            end_time = time.time()
            
            print(f"✅ {endpoint}: {response.status_code} ({end_time - start_time:.2f}s)")
        except Exception as e:
            print(f"❌ {endpoint}: {e}")

常见问题排查

Q: 收到 401 错误怎么办?

A: 401 错误通常表示认证问题:

  1. 检查 API 密钥: 确保密钥正确且未过期
  2. 检查请求头: 确保 Authorization 头格式正确
  3. 检查环境变量: 确认环境变量设置正确

Q: 收到 429 错误怎么办?

A: 429 错误表示请求频率过高:

  1. 降低请求频率: 在请求之间添加延迟
  2. 实现重试机制: 使用指数退避策略
  3. 升级套餐: 考虑升级到更高的速率限制

Q: 收到 500 错误怎么办?

A: 500 错误表示服务器问题:

  1. 稍后重试: 等待几分钟后重试
  2. 检查服务状态: 访问状态页面确认服务状态
  3. 联系支持: 如果问题持续,请联系技术支持

相关资源


最后更新: 2025年1月27日

基于 DeepSeek AI 大模型技术