503 dan 429 kedua-duanya sementara, tetapi perlakuan berbeza: 503 biasanya pelayan sibuk, 429 bermaksud anda terlalu pantas. Sebelum retry, pastikan API Key & had kadar dikonfigurasi dengan betul.
Bezakan jenis ralat
| Kod | Maksud | Retry? |
|---|---|---|
| 503 | Perkhidmatan tidak tersedia sementara | Ya, dengan backoff |
| 429 | Melebihi rate limit | Ya, tunggu lebih lama |
| 401/403 | Auth atau kebenaran | Tidak — semak Key |
| 400 | Format permintaan salah | Tidak — betulkan parameter |
401/403? Kembali ke panduan API Key semak Key tamat tempoh atau campur environment.
Exponential backoff
Aliran asas:
- Gagal pertama: tunggu 1 saat
- Gagal kedua: 2 saat, ketiga: 4 saat
- Tambah jitter rawak (0–0.5s) supaya banyak klien tidak retry serentak
- Had
maxRetries = 4, lepas itu pulangkan mesej mesra kepada pengguna
Contoh Python:
import random, time
def call_with_retry(fn, max_retries=4):
for attempt in range(max_retries):
try:
return fn()
except TemporaryAPIError:
if attempt == max_retries - 1:
raise
wait = (2 ** attempt) + random.uniform(0, 0.5)
time.sleep(wait)
Circuit breaker
Jika 503/429 berulang, hentikan seketika permintaan baru:
- Ambang: 5 kegagalan berturut-turut
- Buka litar: 30–60 saat
- Separuh-buka: benarkan 1 permintaan ujian; jika berjaya, tutup litar
Khusus untuk 429
- Utamakan header
Retry-After - Kurangkan concurrency worker (contoh: dari 10 ke 2)
- Pecahkan batch job kepada slot masa berbeza
- Kurangkan panjang prompt — lihat asas prompt
Amalan production
- Jangan retry 401/403 — ia membazir kuota
- Log setiap retry dengan
attemptdanwait_ms - Uji dari rangkaian pejabat KL dengan VPN dimatikan sebelum salahkan API
Untuk ujian offline tanpa API awan, cuba Ollama tempatan. Masalah log masuk web? Lihat penyelesaian login.