Neden Tek Bir Yapay Zeka Sağlayıcısına Güvenmeyi Bıraktım
Bir topluluk forumu için gerçek zamanlı bir sohbet botu geliştirdim. Tek bir API kullanmanın yeterli olacağını düşünmüştüm. Yanılmışım.
Üçüncü haftada, yoğun saatlerde bir 5xx hatasıyla karşılaştım. Sohbet botum sustu. Kullanıcılar hayal kırıklığına uğradı. Üretim aşamasındaki uygulamalar için tek bir sağlayıcıya güvenemeyeceğimi anladım.
GPT-4 kullandım. Sorun çıkana kadar iyi çalışıyordu. Hız sınırları (rate limits), zaman aşımı (timeouts) ve tamamen kesintilerle karşılaştım. Daha üst paketler için ödeme yapmak, sorunu çözmek yerine sadece belirtileri gidermek gibi hissettiriyordu.
Diğer sağlayıcıları denedim ancak hepsinin farklı formatları ve kimlik doğrulama (auth) yöntemleri vardı. Kodum bir switch-case yığınına dönüştü. Şunları yapabilen bir sisteme ihtiyacım vardı:
- Sağlayıcı farklılıklarını gizlemek.
- Hata durumunda yedek bir sağlayıcıya geçmek.
- Yanıtları önbelleğe almak.
- Tedarikçiye bağımlı kalmaktan (vendor lock-in) kaçınmak.
Üçüncü taraf kütüphanelerden kaçındım çünkü çok karmaşıklardı ve kolayca bozulabiliyorlardı. Bunun yerine basit bir yönlendirici (router) inşa ettim.
İlk olarak, tüm sağlayıcılar için ortak bir arayüz (interface) tanımladım. Her sağlayıcı bir generate metodu ve bir sağlık kontrolü (health check) uygular.
Ardından bir yönlendirici sınıfı (router class) oluşturdum. Sağlayıcıları belirli bir sırayla dener. Üstel geri çekilme (exponential backoff) ve basit bir önbellek kullanır. İlk sağlayıcı başarısız olursa, sistem bekler ve bir sonrakini dener.
Bu sistem, üç farklı kesinti sırasında hafta sonlarımı kurtardı. Büyük bir sağlayıcı çöktüğünde bile uygulamamın çalışmaya devam etmesini sağlıyor.
Eğer bunu inşa edecekseniz, şu noktaları aklınızda bulundurun:
- Üretim ortamında yerel bir sözlük (dictionary) yerine önbelleğe alma için Redis kullanın.
- Sağlık kontrolleri başarıyı garanti etmez. Bir sağlayıcı kontrolü geçebilir ancak gerçek bir isteği karşılayamayabilir.
- Hız sınırlarını düzgün yönetmek için
Retry-Afterbaşlıklarını ayrıştırın (parse). - Maliyetleri takip etmek için token kullanımı için günlükleme (logging) ekleyin.
- Daha yüksek performans için
asynciokullanın.
Projeniz küçükse, aşırı mühendislikten (over-engineer) kaçının. Eğer akış (streaming) gerekiyorsa, bu desen gecikmeye (latency) neden olur. Ölçeğinize uygun doğru aracı seçin.
Siz sağlayıcı güvenilirliğini nasıl yönetiyorsunuz? Tek bir sağlayıcıya mı bağlı kalıyorsunuz yoksa bir yedekleme katmanı (fallback layer) mı oluşturuyorsunuz?
İsteğe bağlı öğrenme topluluğu: https://t.me/GyaanSetuAi