LLM sağlayıcısını (Ollama → Bedrock/OpenAI) nasıl soyutlamalıyım?
Soru
Uygulamaya kod analizi ve metin özetleme yapan bir AI özelliği ekliyoruz. Geliştirici makinelerinde maliyet olmasın diye Ollama + yerel LLM (Llama 3) kullanıyoruz; üretimde AWS Bedrock veya OpenAI planlıyoruz. LLM sağlayıcısını soyutlamak için hangi tasarım kalıbını uygulamalıyım? Lokaldeki token sınırları ve yanıt süreleriyle üretimdeki yapısal farkları mimaride nasıl tolere ederim?
Cevap
Kısa cevap: Sağlayıcının etrafına değil, yeteneğin etrafına dar bir port/adapter (Strategy) kur. Küçük bir arayüz + config’le seçilen gerçek implementasyonlar; daha fazlası değil.
Senin asıl tehliken aşırı soyutlama: insanlar bunu jenerik bir “AI framework”e çevirmeye çalışıp aylarını yiyor. İhtiyacın olan tek bir ince arayüz.
- Arayüzü yetenek üzerinden tanımla, vendor üzerinden değil.
complete(prompt, opts): Resultgibi minik bir kontrat yeter. Ollama, Bedrock ve OpenAI bunun üç implementasyonu olur; hangisinin çalışacağınıconfig/envseçer. Sağlayıcıya özel parametreleri core mantığa sızdırma — arayüz küçük ve yetenek-tabanlı kalsın. - Farkları açık timeout + ucuz fallback ile tolere et. Üretimde sağlayıcı yavaşlar veya rate-limit yer; her çağrıya net bir timeout koy ve gerektiğinde ucuz/yerel bir fallback’e düş. Bu, mimariyi tek bir sağlayıcının kapris yapmasına bağımlı olmaktan kurtarır.
- Token bütçesini kenarda yönet. Her modelin context penceresi farklı; girdiyi modele sığacak şekilde kenarda truncate/özetle. “Lokalde küçük, üretimde büyük pencere” gibi farklar iş mantığında
ifolmamalı — config olmalı. - Streaming’i aynı arayüzün arkasına koy. İhtiyaç varsa stream desteğini opsiyonel olarak aynı kontratta tut; çağıran taraf sağlayıcının stream API’sını bilmesin.
- Golden-prompt test seti tut. Aynı prompt setini her sağlayıcıya karşı çalıştır; çıktı kalitesi ve regresyon kıyaslamasını otomatikleştir. Sağlayıcı değiştirdiğinde neyin bozulduğunu bu yakalar.
Sonuç: Ben olsam tek bir küçük arayüz, üç gerçek implementasyon ve config-tabanlı seçim kurardım — fazlası YAGNI. Yerel Ollama dev maliyeti ve hızlı iterasyon içindir; üretimdeki context penceresi, gecikme, rate-limit ve maliyet farklarını konfigürasyon olarak ele al, iş mantığına dallanma olarak değil. Soyutlama dar oldukça sağlam olur.
İlgili Yazılar
Yorumlar
Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.