الانتقال إلى المحتوى الرئيسي

تنسيق استجابة الخطأ

تعيد جميع الأخطاء تنسيق JSON ثابتاً:
{
  "error": {
    "message": "Human-readable error description",
    "type": "error_type",
    "code": "error_code",
    "param": "parameter_name"  // اختياري، لأخطاء التحقق من الصحة
  }
}

رموز حالة HTTP

الرمزالوصف
400Bad Request - معلمات غير صالحة
401Unauthorized - مفتاح API غير صالح أو مفقود
402Payment Required - رصيد غير كافٍ
403Forbidden - تم رفض الوصول أو النموذج غير مسموح به
404Not Found - النموذج أو المورد غير موجود
413Payload Too Large - تم تجاوز حجم المدخلات أو الملف
429Too Many Requests - تم تجاوز حد المعدل (Rate limit)
500Internal Server Error
502Bad Gateway - خطأ من المزود الرئيسي (Upstream)
503Service Unavailable - فشلت جميع القنوات
504Gateway Timeout - انتهت مهلة الطلب

أنواع الأخطاء

أخطاء المصادقة (401)

النوعالرمزالوصف
invalid_api_keyinvalid_api_keyمفتاح API مفقود أو غير صالح
expired_api_keyexpired_api_keyتم إلغاء مفتاح API
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
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 هذا
{
  "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)

عندما تتجاوز حدود المعدل (rate limits):
{
  "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"
  }
}
الأسباب الشائعة:
  • ملف الصورة كبير جداً (بحد أقصى 20 ميجابايت)
  • ملف الصوت كبير جداً (بحد أقصى 25 ميجابايت)
  • نص المدخلات يتجاوز طول سياق (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}")
بعض النماذج لها متطلبات محددة (مثل الحد الأقصى للرموز المميزة “tokens”، تنسيقات الصور). تحقق من صحة المدخلات قبل إجراء الطلبات.