Üstel Geri Çekilmeyle Yeniden Denemeler
Geçici hataları giderek artan gecikmeler ve titreşimle yeniden denemek için tenacity kullanın.
Üstel Geri Çekilmeyle Yeniden Denemeler, CoddyKit'te ücretsiz bir AI Agents dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Agents öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Agents kursu toplamda 4 dersten oluşur.
Yeniden Denemeler Neden Gerekli
Harici çağrılar (LLM'ler, arama API'leri, vektör veritabanları) geçici olarak hata verebilir. Basit bir yeniden deneme, kullanıcıyı rahatsız etmeden çoğu geçici hatadan kurtulmayı sağlar.
Yapılmaması Gerekenler
Sıkı bir döngüde anında yeniden deneme yapmayın — hizmeti aşırı yükler ve hız sınırlayıcı sizi engeller:
# BAD
for _ in range(10):
try:
return call_api()
except Exception:
passÜstel Bekleme
Her hatadan sonra daha uzun süre bekleyin. 2'nin üssünü kullanmak geleneksel yaklaşımdır:
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 secondsDeğişken Gecikme Ekleyin
Değişken gecikme olmadan birçok istemcinin yeniden denemeleri aynı ana denk gelir ve sürü trafiği oluşturur. Rastgele bir ofset ekleyin:
import random
sleep = (2 ** i) + random.uniform(0, 1)
time.sleep(sleep)Tenacity Kullanın
tenacity kütüphanesi bunu sizin için uygular:
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()Yalnızca Geçici Hataları Yeniden Deneyin
Şu durumlarda asla yeniden deneme yapmayın:
- 4xx hataları (hatalı istek — yeniden denemek yardımcı olmaz)
- Kimlik doğrulama hataları
- Doğrulama hataları
Şu durumlarda yeniden deneme yapın:
- Zaman aşımları
- 5xx sunucu hataları
- Hız sınırları (daha uzun beklemelerle)
Hız Sınırlarını Dikkate Alan Yeniden Denemeler
Retry-After üst bilgisini dikkate alın:
if response.status_code == 429:
wait = int(response.headers.get('Retry-After', 5))
time.sleep(wait)
continueToplam Yeniden Deneme Süresini Sınırlayın
Yeniden denemelerin toplamda ne kadar sürebileceğini sınırlayın — kullanıcıya gösterilen bir çağrı için genellikle 30-60 saniye yeterlidir:
from tenacity import stop_after_delay
@retry(
wait=wait_exponential_jitter(initial=1, max=10),
stop=stop_after_delay(60)
)
def call_api():
...İdempotentlik Üst Bilgileri
İdempotent olmayan API'lerde (Stripe vb.) her yeniden denemeye bir idempotentlik anahtarı ekleyin; böylece yinelenen işlemler birleştirilir:
headers = {'Idempotency-Key': f'agent-call-{run_id}-{tool_id}'}LLM Çağrısını da Yeniden Deneyin
OpenAI ve Anthropic SDK'leri 1-2 kez otomatik olarak yeniden deneme yapar. Bunları yapılandırabilirsiniz:
client = OpenAI(max_retries=5, timeout=30.0)Asenkron Yeniden Denemeler
Asenkron kod için:
from tenacity import AsyncRetrying
async for attempt in AsyncRetrying(wait=wait_exponential_jitter(), stop=stop_after_attempt(5)):
with attempt:
result = await call_api()Yeniden Denemeleri Günlüğe Kaydetme
Her yeniden deneme şunları günlüğe kaydetmelidir: deneme numarası, uyuma süresi ve hata nedeni. Aksi hâlde "neden bu kadar yavaş?" sorusunun hata ayıklaması imkânsızdır.
Yeniden Denemeler ve Zaman Aşımları
Her deneme için kısa bir zaman aşımı (örneğin 10 saniye), toplam süre için de stop_after_delay aracılığıyla bir üst sınır (örneğin 60 saniye) belirleyin. İkisi de olmazsa takılı kalan bir bağlantı sonsuza kadar bekleyebilir.
Değişken Gecikme Neden Gerekli
Yeniden deneme gecikmelerine neden rastgele değişkenlik eklenir?
Özet
Üstel bekleme + değişken gecikme + sınırlı toplam süre + yalnızca geçici hatalarda yeniden deneme. Tekrarlayan yardımcı kodları atlamak için tenacity kullanın.
Sıkça Sorulan Sorular
“Üstel Geri Çekilmeyle Yeniden Denemeler” dersi ücretsiz mi?
Evet — “Üstel Geri Çekilmeyle Yeniden Denemeler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Agents kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Agents kursu toplamda 4 dersten oluşur.
“Üstel Geri Çekilmeyle Yeniden Denemeler” dersinde ne öğreneceğim?
Geçici hataları giderek artan gecikmeler ve titreşimle yeniden denemek için tenacity kullanın. AI Agents ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Agents öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Agents, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Üstel Geri Çekilmeyle Yeniden Denemeler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Agents dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Agents dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- İdempotent Araçlar ve Yan Etkiler
- Üstel Geri Çekilmeyle Yeniden Denemeler
- Zaman Aşımları ve Devre Kesiciler
- Araç Çıktılarını Doğrulama (Pydantic)