跳轉到主要內容

錯誤回應格式

所有錯誤都會回傳一致的 JSON 格式:
{
  "error": {
    "message": "Human-readable error description",
    "type": "error_type",
    "code": "error_code",
    "param": "parameter_name"  // 選填,用於驗證錯誤
  }
}

HTTP 狀態碼

代碼描述
400Bad Request - 參數無效
401Unauthorized - API key 無效或缺失
402Payment Required - 餘額不足
403Forbidden - 存取被拒絕或不允許使用該模型
404Not Found - 找不到模型或資源
413Payload Too Large - 輸入或檔案大小超過限制
429Too Many Requests - 超過速率限制
500Internal Server Error - 伺服器內部錯誤
502Bad Gateway - 上游供應商錯誤
503Service Unavailable - 所有管道皆失敗
504Gateway Timeout - 請求逾時

錯誤類型

認證錯誤 (401)

類型代碼描述
invalid_api_keyinvalid_api_keyAPI key 缺失或無效
expired_api_keyexpired_api_keyAPI key 已被撤銷
from openai import OpenAI, AuthenticationError

try:
    response = client.chat.completions.create(...)
except AuthenticationError as e:
    print(f"Authentication failed: {e.message}")

支付錯誤 (402)

類型代碼描述
insufficient_quotainsufficient_quota帳戶餘額過低
quota_exceededquota_exceeded已達到 API key 使用限制
from openai import OpenAI, APIStatusError

try:
    response = client.chat.completions.create(...)
except APIStatusError as e:
    if e.status_code == 402:
        print("Please top up your account balance")

存取錯誤 (403)

類型代碼描述
access_deniedaccess_denied存取資源被拒絕
access_deniedmodel_not_allowed此 API key 不允許使用該模型
{
  "error": {
    "message": "You don't have permission to access this model",
    "type": "access_denied",
    "code": "model_not_allowed"
  }
}

驗證錯誤 (400)

類型描述
invalid_request_error請求參數無效
context_length_exceeded輸入內容對模型而言過長
model_not_found請求的模型不存在
{
  "error": {
    "message": "model: 'invalid-model' is not a valid model",
    "type": "model_not_found",
    "param": "model"
  }
}

速率限制錯誤 (429)

當您超過速率限制時:
{
  "error": {
    "message": "Rate limit exceeded. Please slow down.",
    "type": "rate_limit_error",
    "code": "rate_limit_exceeded"
  }
}
包含的標頭 (Headers):
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1234567890
Retry-After: 60

內容過大 (413)

當輸入或檔案大小超過限制時:
{
  "error": {
    "message": "Input size exceeds maximum allowed",
    "type": "invalid_request_error",
    "code": "payload_too_large"
  }
}
常見原因:
  • 圖片檔案過大 (最大 20MB)
  • 音訊檔案過大 (最大 25MB)
  • 輸入文字超過模型上下文長度 (context length)

上游錯誤 (502, 503)

類型描述
upstream_error供應商回傳錯誤
all_channels_failed無可用供應商
timeout_error請求逾時

在 Python 中處理錯誤

from openai import OpenAI, APIError, RateLimitError, APIConnectionError

client = OpenAI(
    api_key="sk-your-api-key",
    base_url="https://api.lemondata.cc/v1"
)

def chat_with_retry(messages, max_retries=3):
    for attempt in range(max_retries):
        try:
            return client.chat.completions.create(
                model="gpt-4o",
                messages=messages
            )
        except RateLimitError as e:
            if attempt < max_retries - 1:
                import time
                time.sleep(2 ** attempt)  # Exponential backoff
                continue
            raise
        except APIConnectionError as e:
            print(f"Connection error: {e}")
            raise
        except APIError as e:
            print(f"API error: {e.status_code} - {e.message}")
            raise

在 JavaScript 中處理錯誤

import OpenAI from 'openai';

const client = new OpenAI({
  apiKey: 'sk-your-api-key',
  baseURL: 'https://api.lemondata.cc/v1'
});

async function chatWithRetry(messages, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    try {
      return await client.chat.completions.create({
        model: 'gpt-4o',
        messages
      });
    } catch (error) {
      if (error instanceof OpenAI.RateLimitError) {
        if (attempt < maxRetries - 1) {
          await new Promise(r => setTimeout(r, 2 ** attempt * 1000));
          continue;
        }
      }
      throw error;
    }
  }
}

最佳實踐

當遇到速率限制時,在重試之間逐漸增加等待時間:
wait_time = 2 ** attempt  # 1s, 2s, 4s, 8s...
務必設定合理的逾時時間,以避免請求掛起:
client = OpenAI(timeout=60.0)  # 60 秒逾時
記錄完整的錯誤回應(包括 request ID)以便尋求支援:
except APIError as e:
    logger.error(f"API Error: {e.status_code} - {e.message}")
某些模型有特定要求(例如:最大 token 數、圖片格式)。 在發送請求前驗證輸入。