Penanganan Error

Panduan ini memperkenalkan format respons kesalahan 诺玛AI, skenario kesalahan umum, dan strategi penanganan yang direkomendasikan.

Format Respons Kesalahan#

Semua respons kesalahan mengikuti format JSON yang seragam:

Kode
{
  "error": {
    "code": "invalid_api_key",
    "message": "API Key yang diberikan tidak valid, silakan periksa dan coba lagi.",
    "type": "authentication_error"
  }
}

HTTP Kode Status#

Kode Status

Tipe

Deskripsi

Perlu Dicoba Ulang

`400`

`invalid_request_error`

Parameter permintaan tidak valid

❌ Perbaiki parameter lalu coba ulang

`401`

`authentication_error`

API Key tidak valid atau tidak ada

❌ Periksa API Key

`403`

`permission_error`

Izin tidak mencukupi

❌ Periksa izin akun

`404`

`not_found_error`

Model atau sumber daya tidak ditemukan

❌ Periksa ID model

`429`

`rate_limit_error`

Batas kecepatan terlampaui

✅ Tunggu lalu coba ulang

`500`

`internal_error`

Kesalahan server internal

✅ Coba lagi nanti

`502`

`upstream_error`

Kesalahan penyedia model hulu

✅ Ganti model atau coba ulang

`503`

`service_unavailable`

Layanan sementara tidak tersedia

✅ Coba lagi nanti

Kesalahan Umum dan Solusi#

401 — API Key Tidak Valid

Kode
{"error": {"code": "invalid_api_key", "message": "The API key provided is invalid."}}

Solusi:

  • Periksa apakah API Key disalin dengan benar (termasuk awalan `sk-`)
  • Pastikan Key belum kedaluwarsa atau dinonaktifkan
  • Periksa apakah variabel lingkungan dimuat dengan benar

429 — Batas Kecepatan

Solusi:

  • Periksa `x-ratelimit-reset-requests` di header respons
  • Implementasikan percobaan ulang dengan backoff eksponensial
  • Jika butuh kuota lebih tinggi, hubungi dukungan untuk penyesuaian

502 — Kesalahan Hulu

Solusi:

  • Gunakan Fallback untuk beralih otomatis ke model cadangan
  • Coba lagi nanti
  • Periksa halaman status penyedia model

Strategi Percobaan Ulang#

Direkomendasikan menggunakan strategi **Exponential Backoff (Mundur Eksponensial)**:

Kode
import time
import random
from openai import OpenAI, APIError, RateLimitError, APIConnectionError
 
client = OpenAI(
    base_url="https://as.apinoma.com/v1",
    api_key="<APINOMA_API_KEY Anda>"
)
 
def chat_with_retry(max_retries=5, **kwargs):
    """Pembungkus percobaan ulang dengan backoff eksponensial"""
    for attempt in range(max_retries):
        try:
            return client.chat.completions.create(**kwargs)
 
        except RateLimitError:
            # 429: tunggu lalu coba ulang
            wait = (2 ** attempt) + random.uniform(0, 1)
            print(f"Batas kecepatan terlampaui, menunggu {wait:.1f}s sebelum mencoba ulang...")
            time.sleep(wait)
 
        except APIConnectionError:
            # Kesalahan jaringan: tunggu sebentar lalu coba ulang
            wait = 2 ** attempt
            print(f"Kesalahan koneksi, menunggu {wait}s sebelum mencoba ulang...")
            time.sleep(wait)
 
        except APIError as e:
            if e.status_code and e.status_code >= 500:
                # 5xx: kesalahan server, coba ulang
                wait = 2 ** attempt
                time.sleep(wait)
            else:
                # 4xx: kesalahan klien, jangan coba ulang
                raise
 
    raise Exception(f"Gagal setelah {max_retries} kali percobaan ulang")
 
# Penggunaan
response = chat_with_retry(
    model="openai/gpt-4o",
    messages=[{"role": "user", "content": "Halo"}]
)

Pengaturan Timeout#

Disarankan untuk menetapkan waktu timeout yang wajar untuk panggilan API:

Kode
# Python OpenAI SDK
client = OpenAI(
    base_url="https://as.apinoma.com/v1",
    api_key="<APINOMA_API_KEY Anda>",
    timeout=60.0,  # timeout 60 detik
    max_retries=3  # percobaan ulang bawaan SDK
)

Permintaan streaming disarankan menggunakan waktu timeout yang lebih lama (120-300 detik), karena model mungkin membutuhkan waktu lebih lama untuk menghasilkan konten lengkap.

Praktik Terbaik#

  • Bedakan kesalahan yang dapat dicoba ulang dan yang tidak — 4xx biasanya perlu modifikasi permintaan, 5xx dapat dicoba ulang
  • Gunakan backoff eksponensial — hindari percobaan ulang yang sering saat ada pembatasan kecepatan
  • Tetapkan jumlah percobaan ulang maksimum — cegah percobaan ulang tanpa batas
  • Catat log kesalahan — memudahkan pemecahan masalah
  • Konfigurasikan Fallback — gunakan parameter `provider.fallback` 诺玛AI untuk beralih model secara otomatis
  • Pantau tingkat kesalahan — perhatikan tren kesalahan di Konsol

Terakhir diperbarui pada 23 Juni 2026