Penanganan Kesalahan dan Batas Laju
Tangani kesalahan API umum, termasuk pengecualian batas laju, kesalahan autentikasi, dan batas waktu, dengan logika percobaan ulang serta pola jeda mundur eksponensial.
Penanganan Kesalahan dan Batas Laju adalah pelajaran AI Engineering Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Engineering Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Engineering Academy mencakup 4 pelajaran total.
Mengapa Kesalahan API Terjadi
Banyak hal dapat gagal saat pemanggilan API: kelebihan beban, kuota rendah, jaringan terputus, atau permintaan yang salah. Menganggap pemanggilan selalu berhasil akan menghasilkan kode yang rapuh—pahami jenis kesalahan terlebih dahulu.
Ikhtisar Jenis Kesalahan OpenAI
SDK memunculkan pengecualian tertentu seperti RateLimitError dan AuthenticationError. Hanya kesalahan sementara, seperti batas laju dan jaringan yang terputus, yang layak dicoba ulang—kesalahan lainnya tidak akan terselesaikan sendiri.
Menangkap Kesalahan dengan Try-Except
Bungkus setiap pemanggilan dalam try-except dan tangkap pengecualian yang spesifik, bukan except tanpa jenis. Dengan begitu, Anda dapat merespons setiap kegagalan secara tepat, alih-alih menyembunyikan kesalahan. Kodenya menunjukkan caranya.
import openai
client = openai.OpenAI()
try:
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': 'Hello!'}]
)
print(response.choices[0].message.content)
except openai.AuthenticationError as e:
print('Bad API key. Check OPENAI_API_KEY environment variable.')
raise # do not retry
except openai.RateLimitError as e:
print('Rate limited. Back off and retry.')
except openai.APIConnectionError as e:
print('Network error:', e)
except openai.APIStatusError as e:
print('Server error', e.status_code, e.message)Memahami Batas Laju
OpenAI menerapkan dua batas laju sekaligus: permintaan per menit (RPM) dan token per menit (TPM). Satu prompt yang sangat besar dapat menghabiskan TPM Anda dalam satu permintaan. Keduanya mengembalikan 429.
Exponential Backoff: Strategi Percobaan Ulang yang Tepat
Mencapai batas laju? Tunggu, lalu coba lagi dengan exponential backoff: 1 detik, 2 detik, 4 detik, yang berlipat ganda setiap kali. Tambahkan sedikit variasi acak dan jumlah maksimum percobaan ulang agar perulangan tidak berlangsung selamanya. Lihat kodenya.
import time
import random
import openai
client = openai.OpenAI()
def call_with_backoff(messages, max_retries=5):
for attempt in range(max_retries):
try:
return client.chat.completions.create(
model='gpt-4o-mini',
messages=messages
)
except openai.RateLimitError:
if attempt == max_retries - 1:
raise
wait = (2 ** attempt) + random.uniform(0, 1)
print(f'Rate limited. Waiting {wait:.1f}s (attempt {attempt+1})')
time.sleep(wait)
except (openai.APIConnectionError, openai.APIStatusError):
if attempt == max_retries - 1:
raise
time.sleep(2 ** attempt)Menggunakan Pustaka tenacity
Jangan membuat mekanisme percobaan ulang sendiri—pustaka tenacity melakukannya dengan rapi. Hiasi fungsi Anda dengan @retry, lalu pustaka tersebut menangani backoff, variasi acak, dan kondisi percobaan ulang untuk Anda.
from tenacity import retry, wait_random_exponential, stop_after_attempt
import openai
client = openai.OpenAI()
@retry(
wait=wait_random_exponential(min=1, max=60),
stop=stop_after_attempt(6)
)
def completion_with_backoff(**kwargs):
return client.chat.completions.create(**kwargs)
response = completion_with_backoff(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': 'Tell me a joke.'}]
)
print(response.choices[0].message.content)Konfigurasi Timeout
Permintaan yang macet dapat membekukan aplikasi Anda selamanya, jadi selalu tetapkan timeout. SDK menerima timeout dalam satuan detik, baik pada klien maupun per pemanggilan. Pilih nilainya sesuai dengan panjang respons yang diharapkan.
import openai
# Set a default timeout for all requests from this client
client = openai.OpenAI(timeout=30.0)
# Or override per request
try:
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': 'Summarize the French Revolution.'}],
timeout=60.0
)
except openai.APITimeoutError:
print('Request timed out. Try a shorter prompt or increase timeout.')Menangani Kesalahan Autentikasi
AuthenticationError (401) berarti kunci Anda salah, kedaluwarsa, atau dicabut—mencoba lagi tidak akan membantu. Catat kesalahan, kirimkan peringatan, lalu hentikan dengan cepat alih-alih menghabiskan jatah percobaan ulang.
import os
import openai
api_key = os.environ.get('OPENAI_API_KEY')
if not api_key:
raise EnvironmentError(
'OPENAI_API_KEY not set. Export it before running.'
)
client = openai.OpenAI(api_key=api_key)
try:
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': 'Hello'}]
)
except openai.AuthenticationError:
# Do NOT retry - the key itself is invalid
raise RuntimeError('Invalid API key. Check OPENAI_API_KEY.')Kuota vs Batas Laju
Keduanya tampak seperti RateLimitError, tetapi berbeda: batas laju adalah pembatasan per menit yang akan diatur ulang sendiri, sedangkan batas kuota adalah batas pengeluaran yang memerlukan kredit tambahan.
Mencatat Kesalahan untuk Penelusuran
Di lingkungan produksi, catat setiap kesalahan beserta konteksnya: jenis, model, parameter, jumlah token, waktu, dan ID permintaan. ID permintaan itulah yang diperlukan dukungan OpenAI. Lihat kodenya.
import logging
import openai
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
client = openai.OpenAI()
def safe_completion(model, messages):
try:
response = client.chat.completions.create(
model=model, messages=messages
)
return response
except openai.RateLimitError as e:
logger.warning(
'Rate limit hit',
extra={'model': model, 'error': str(e)}
)
raise
except openai.APIStatusError as e:
logger.error(
'API server error',
extra={
'status_code': e.status_code,
'request_id': e.request_id,
'model': model
}
)
raisePenanganan Kesalahan dalam Aplikasi Produksi
Strategi produksi yang baik: hentikan dengan cepat saat terjadi kesalahan yang tidak dapat dipulihkan, coba ulang kesalahan sementara dengan backoff, dan sediakan fallback yang anggun. Jangan pernah membiarkan satu kesalahan API menghentikan seluruh server Anda.
Pemeriksaan Singkat
Uji pemahaman Anda tentang konsep Rekayasa AI dari pelajaran ini.
Rangkuman Pelajaran
Anda telah mempelajari cara menangani kegagalan: OpenAI memunculkan pengecualian tertentu, batas laju memerlukan backoff dengan variasi acak, dan kesalahan autentikasi harus dihentikan dengan cepat. Berikutnya: menulis prompt yang ampuh.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Penanganan Kesalahan dan Batas Laju” gratis?
Ya — teks lengkap “Penanganan Kesalahan dan Batas Laju” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Engineering Academy, upgrade ke CoddyKit PRO. Kursus AI Engineering Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Penanganan Kesalahan dan Batas Laju”?
Tangani kesalahan API umum, termasuk pengecualian batas laju, kesalahan autentikasi, dan batas waktu, dengan logika percobaan ulang serta pola jeda mundur eksponensial. Kamu berlatih AI Engineering Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Engineering Academy?
Tidak diperlukan pengalaman sebelumnya. AI Engineering Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Penanganan Kesalahan dan Batas Laju” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Engineering Academy ini?
Ya. Setiap pelajaran AI Engineering Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menyiapkan Lingkungan Python Anda
- Titik Akhir Penyelesaian Obrolan
- Mengendalikan Perilaku Model dengan Parameter
- Penanganan Kesalahan dan Batas Laju