Percobaan Ulang dengan Jeda Eksponensial
Gunakan tenacity untuk mengulangi operasi yang gagal sementara, dengan jeda yang meningkat secara eksponensial dan sedikit pengacakan.
Percobaan Ulang dengan Jeda Eksponensial adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 2 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 Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.
Mengapa Melakukan Percobaan Ulang
Panggilan eksternal (LLM, API pencarian, basis data vektor) dapat mengalami kegagalan sementara. Percobaan ulang sederhana dapat memulihkan sebagian besar kegagalan sementara tanpa mengganggu pengguna.
Yang TIDAK Boleh Dilakukan
Jangan langsung melakukan percobaan ulang dalam perulangan ketat — Anda akan membebani layanan dan pembatas laju akan memblokir akses Anda:
# BAD
for _ in range(10):
try:
return call_api()
except Exception:
passPenundaan Eksponensial
Tunggu lebih lama setelah setiap kegagalan. Eksponen 2 adalah konvensi yang umum digunakan:
import time
def call_with_backoff(fn, attempts=5):
for i in range(attempts):
try:
return fn()
except TransientError:
if i == attempts - 1:
raise
time.sleep(2 ** i) # 1, 2, 4, 8, 16 secondsTambahkan Jitter
Tanpa jitter, percobaan ulang dari banyak klien akan tersinkronisasi — menciptakan lalu lintas gerombolan yang mengamuk. Tambahkan jeda acak:
import random
sleep = (2 ** i) + random.uniform(0, 1)
time.sleep(sleep)Gunakan Tenacity
Pustaka tenacity mengimplementasikan hal ini untuk Anda:
from tenacity import retry, wait_exponential_jitter, stop_after_attempt, retry_if_exception_type
import requests
@retry(
wait=wait_exponential_jitter(initial=1, max=30),
stop=stop_after_attempt(5),
retry=retry_if_exception_type((requests.Timeout, requests.ConnectionError))
)
def search(query):
return requests.get('https://api.tavily.com/search', timeout=10).json()Lakukan Percobaan Ulang Hanya untuk Error Sementara
Jangan pernah melakukan percobaan ulang untuk:
- error 4xx (permintaan buruk — percobaan ulang tidak akan membantu)
- kegagalan autentikasi
- error validasi
Lakukan percobaan ulang untuk:
- batas waktu
- error server 5xx
- batas laju (dengan waktu tunggu yang lebih lama)
Percobaan Ulang yang Menyadari Batas Laju
Patuhi header Retry-After:
if response.status_code == 429:
wait = int(response.headers.get('Retry-After', 5))
time.sleep(wait)
continueBatasi Total Waktu Percobaan Ulang
Batasi durasi total percobaan ulang — biasanya 30–60 detik untuk panggilan yang ditujukan kepada pengguna:
from tenacity import stop_after_delay
@retry(
wait=wait_exponential_jitter(initial=1, max=10),
stop=stop_after_delay(60)
)
def call_api():
...Header Idempotensi
Untuk API yang tidak idempoten (Stripe, dan sebagainya), sertakan kunci idempotensi pada setiap percobaan ulang agar duplikasi digabungkan:
headers = {'Idempotency-Key': f'agent-call-{run_id}-{tool_id}'}Lakukan Percobaan Ulang pada Panggilan LLM Juga
SDK OpenAI dan Anthropic secara otomatis melakukan percobaan ulang 1–2 kali. Anda dapat mengonfigurasinya:
client = OpenAI(max_retries=5, timeout=30.0)Percobaan Ulang Asinkron
Untuk kode asinkron:
from tenacity import AsyncRetrying
async for attempt in AsyncRetrying(wait=wait_exponential_jitter(), stop=stop_after_attempt(5)):
with attempt:
result = await call_api()Mencatat Percobaan Ulang
Setiap percobaan ulang harus mencatat: nomor percobaan, durasi tidur, dan alasan error. Tanpa itu, proses debug untuk pertanyaan "mengapa sangat lambat?" menjadi mustahil.
Percobaan Ulang vs Batas Waktu
Tetapkan batas waktu yang ketat pada setiap percobaan (misalnya 10 detik) dan batas total melalui stop_after_delay (misalnya 60 detik). Tanpa keduanya, koneksi yang macet dapat menggantung selamanya.
Mengapa Jitter
Mengapa menambahkan jitter acak pada jeda percobaan ulang?
Ringkasan
Penundaan eksponensial + jitter + batas total waktu + percobaan ulang hanya untuk error sementara. Gunakan tenacity agar tidak perlu menulis kode berulang.
Belajar AI Agents dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 60
- Pelajaran
- 239
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Percobaan Ulang dengan Jeda Eksponensial” gratis?
Ya — teks lengkap “Percobaan Ulang dengan Jeda Eksponensial” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Percobaan Ulang dengan Jeda Eksponensial”?
Gunakan tenacity untuk mengulangi operasi yang gagal sementara, dengan jeda yang meningkat secara eksponensial dan sedikit pengacakan. Kamu berlatih AI Agents 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 Agents?
Tidak diperlukan pengalaman sebelumnya. AI Agents 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 2 dari 4.
Berapa lama pelajaran “Percobaan Ulang dengan Jeda Eksponensial” 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 Agents ini?
Ya. Setiap pelajaran AI Agents 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
- Alat Idempoten dan Efek Samping
- Percobaan Ulang dengan Jeda Eksponensial
- Batas Waktu dan Pemutus Sirkuit
- Memvalidasi Keluaran Alat (Pydantic)