Embedding API hata yönetimi
Bu sayfayı neden okuyorsunuz? Bu sayfa embedding sağlayıcıları (OpenAI, Azure, Gemini, Mistral vb.) hata verdiğinde mevcut davranışı ve production için timeout, retry ve rate-limit eklemeyi açıklar. Canlıda 429/timeout/5xx yönetimi arıyorsanız doğru yerdesiniz.
Bu belge, embedding sağlayıcıları (OpenAI, Azure, Gemini, Mistral vb.) hata verdiğinde mevcut davranışı ve production için timeout, retry ve rate-limit eklemenin nasıl yapılacağını açıklar.
Mevcut davranış
- HTTP hataları: Her sağlayıcı
response.EnsureSuccessStatusCode()çağırır. 2xx dışı (örn. 401, 429, 500) durumdaHttpRequestExceptionfırlatılır. Çağıran (örn.LlmIntentModel.Infer) yakalamaz; istisna yukarı yayılır. - Timeout: Sağlayıcı içinde açık timeout yok. DI ile verilen
HttpClientkendi varsayılan timeout'unu (genelde 100 saniye) kullanır. Bekleme süresini sınırlamak için istemci kaydederkenHttpClient.Timeoutayarlayın. - Retry / circuit breaker: Sağlayıcılar retry veya circuit breaker uygulamaz. Geçici hatalar (ağ, 429, 503) tek denemede kalır.
Öneriler
1. Timeout
Embedding sağlayıcısı için kullanılan HttpClient üzerinde timeout verin; yavaş veya takılı API çağrıları sınırsız beklemesin:
services.AddHttpClient<OpenAIEmbeddingProvider>(client =>
{
client.Timeout = TimeSpan.FromSeconds(30);
});
(OpenAI sağlayıcısını nasıl kaydettiğinize göre istemci adını uyarlayın; bkz. Sağlayıcılar ve AI sağlayıcıları how-to.)
2. Retry (geçici hatalar)
Geçici hatalar (örn. 429 rate limit, 503 service unavailable) için HTTP istemcisine retry ekleyin:
- Polly: Polly’nin
RetryPolicyveyaResiliencePipelinekullanan birDelegatingHandlerekleyin (örn. 429/503’te 2–3 kez exponential backoff ile retry). Embedding sağlayıcısı içinHttpClienteklerken bu handler’ı kaydedin. - Özel handler: 429 veya 503’te bekleyip sınırlı sayıda yeniden deneyen bir
DelegatingHandleryazın; tükendikten sonra fırlatın.
Retry’lar bittikten sonra sağlayıcı yine fırlatır; uygulama HttpRequestException yakalayıp loglayabilir veya “inference failed” event’i üretebilir (aşağıya bakın).
3. Rate limit (429)
API 429 (Too Many Requests) döndüğünde sağlayıcı fırlatır. 429’ları azaltmak için:
- Rate limiting kullanın (örn. Intentum.Runtime MemoryRateLimiter veya token bucket); embedding sağlayıcısını çağırmadan önce istek hızını API limitinin altında tutun.
- Retry with backoff (örn. Polly) ile birleştirin; ara sıra 429’lar gecikmeyle yeniden denensin (API
Retry-Aftergönderiyorsa buna uyun).
4. Loglama ve “inference failed” event’leri
- Loglama: Uygulama katmanında
model.Infer(space)çağrısını try/catch ile sarın;HttpRequestException(veya benzeri) durumunda hatayı loglayın, isteğe bağlı fallback intent dönün veya yeniden fırlatın. - Event’ler: Intentum.Events kullanıyorsanız, embedding veya inference başarısız olduğunda yayınlanacak özel bir event türü (örn.
InferenceFailed) tanımlayabilirsiniz; böylece izleme veya downstream sistemler haberdar olur.
Özet
| Konu | Mevcut davranış | Öneri |
|---|---|---|
| HTTP hataları | EnsureSuccessStatusCode() → fırlatır |
Uygulama katmanında yakala; logla; isteğe bağlı fallback/event |
| Timeout | HttpClient varsayılanı (örn. 100 s) | HttpClient.Timeout ayarla (örn. 30 s) |
| Retry | Yok | 429/503 için Polly veya özel handler + backoff |
| Rate limit | 429 → fırlatır | Çağrıları rate limit’le; 429’da backoff ile retry |
Bu uygulamalar tüm HTTP tabanlı embedding sağlayıcıları (OpenAI, Azure OpenAI, Gemini, Mistral) için geçerlidir; her sağlayıcının kaydında kullanılan aynı HttpClient (ve handler’lar) yapılandırılmalıdır.
Sonraki adım: Bu sayfayı bitirdiyseniz → Üretim hazırlığı veya Sağlayıcılar.