Kazanimlar:
- API anahtarını istemcide tutmayıp arka uç proxy üzerinden giden güvenli bir bulut LLM mimarisi kurabilme
- Akış (streaming) ile algılanan hızı yükseltip zaman aşımı, ağ hatası ve hız sınırı gibi durumları nazikçe ele alan dayanıklı entegrasyonlar yazabilme
- Gönderilen token'ı kısaltarak maliyeti düşürebilme ve kişisel verinin buluta gitmeden önce gerekliliğini sorgulayabilme
Cihaz üzeri YZ güçlüdür ama sınırlıdır. Bir uygulamaya gerçek anlamda "akıllı sohbet asistanı", uzun metin özetleme veya karmaşık yaratıcı üretim eklemek istediğinizde, telefona sığmayacak kadar büyük modellere ihtiyaç duyarsınız. İşte burada bulut YZ devreye girer: uygulamanız bir API (Application Programming Interface — iki yazılımın birbirine veri gönderip aldığı standart arayüz) üzerinden büyük bir dil modeline (LLM — Large Language Model — insan gibi metin üreten büyük yapay zeka modeli) bağlanır. Bu ünitede bir mobil uygulamaya bulut LLM'i güvenli, hızlı ve maliyet-bilinçli biçimde entegre etmeyi öğreneceğiz. Kritik vurgu güvenlik olacak: yanlış kurulan bir LLM entegrasyonu, API anahtarınızı sızdırıp binlerce liralık faturaya yol açabilir.
Mimarinin altın kuralı: anahtarı istemcide tutma
Bulut YZ entegrasyonunda yapılabilecek en tehlikeli hata, API anahtarını (servisi kullanma yetkisi veren gizli parola) doğrudan mobil uygulama koduna gömmektir. Mobil uygulamalar kullanıcının cihazına indirilir ve kod tersine mühendislikle (reverse engineering — derlenmiş uygulamayı çözümleyip içindekini görme) okunabilir. Anahtarınız uygulamanın içindeyse, birileri onu çıkarıp sizin hesabınızdan sınırsız istek yapabilir.
Doğru mimari şudur: mobil uygulama sizin kendi arka uç sunucunuza (backend — sizin kontrolünüzdeki ara sunucu) istek atar; anahtar yalnızca sunucuda durur; sunucu LLM servisine gider ve cevabı uygulamaya döner. Bu ara katman aynı zamanda hız sınırı koyma, kötüye kullanımı engelleme ve maliyet kontrolü sağlar.
Yaklaşım
Anahtar nerede
Güvenlik
Anahtar uygulamada (YANLIŞ)
İstemcide, herkese açık
Sızar, fatura patlar
Anahtar arka uçta (DOĞRU)
Sunucuda, gizli
Güvenli, kontrol edilebilir
Dikkat: YZ'den bulut LLM entegrasyonu istediğinizde, kolaylık olsun diye anahtarı doğrudan uygulama koduna yazan bir örnek üretebilir. Bunu asla canlıya almayın. İstemin içine mutlaka "API anahtarı istemcide olmasın, arka uç proxy üzerinden git" cümlesini koyun.
Akış (streaming): algılanan hızı yükseltmek
LLM cevapları uzun olabilir ve tamamının üretilmesi saniyeler sürer. Kullanıcıyı boş ekranda bekletmek kötü deneyimdir. Çözüm akıştır (streaming — cevabı kelime kelime, üretildikçe göstermek). Kullanıcı, ChatGPT'de olduğu gibi metnin yazılışını izler; bu, algılanan hızı ve akıcılığı dramatik biçimde artırır. Mobilde akış, sunucudan gelen parçaları (token — modelin ürettiği metin parçası) geldikçe arayüze eklemek demektir. YZ'ye entegrasyon yazdırırken akışı açıkça isteyin.
İpucu: Akışlı yanıtta "durdur" butonu ekleyin. Kullanıcı istediği cevabı aldığında üretimi durdurabilmeli; bu hem deneyimi iyileştirir hem de gereksiz token üretimini keserek maliyeti düşürür. Uzun yanıtın ortasında kullanıcı zaten cevabını bulmuş olabilir.
Maliyet, gecikme ve hata yönetimi
Bulut LLM her istekte para maliyeti (token başına ücret) ve zaman maliyeti (gecikme) taşır. Üç disiplin şarttır. Maliyet: istem ve yanıt uzunluğunu sınırlayın, gereksiz uzun sistem talimatı göndermeyin, mümkünse küçük ve ucuz modeli varsayılan yapın. Gecikme: akış kullanın, zaman aşımı (timeout) koyun, ağ yavaşsa kullanıcıyı bilgilendirin. Hata: ağ kopması, servis 429 (çok fazla istek) veya 500 (sunucu hatası) döndürebilir; her birini nazikçe ele alın, uygulamayı çökertmeyin. Ayrıca LLM bazen anlamsız veya yanlış (halüsinasyon) cevap verir; kritik alanlarda cevabı doğrulama katmanı ekleyin.
Üç mini vaka
Vaka 1 — Sızan anahtar. Bir startup, hızlı çıkmak için OpenAI anahtarını doğrudan React Native uygulamasına gömdü. Uygulama yayınlandıktan 3 hafta sonra anahtar tersine mühendislikle çıkarıldı ve bir gecede 2.400 dolarlık kullanım yapıldı. Ekip anahtarı iptal edip arka uç proxy kurmak zorunda kaldı. Ders: kolaylık için atılan kestirme, en pahalı yol oldu.
Vaka 2 — Akış ile terk azaldı. Bir eğitim uygulaması, soru-cevap özelliğini önce akışsız yayınladı; kullanıcılar 6 saniyelik boş beklemede çıkıyordu. Akış eklenince ilk kelime 0,8 saniyede görünmeye başladı ve özelliği yarıda bırakma oranı %48'den %12'ye düştü. Aynı model, aynı hız — sadece sunum farkı.
Vaka 3 — Maliyet kontrolü. Bir uygulama, her kullanıcı mesajında tüm sohbet geçmişini modele gönderiyordu; uzun sohbetlerde tek istek 8.000 token'a ulaşıp maliyeti şişiriyordu. Ekip, yalnızca son birkaç mesajı ve bir özeti göndererek istek başı token'ı %70 azalttı, aylık faturayı üçte bire indirdi. Ders: ne gönderdiğinizi ölçün.
Zayıf prompt / Güçlü prompt
Zayıf prompt:"Uygulamama ChatGPT gibi bir sohbet ekle."
Güçlü prompt:"iOS/Swift uygulamama bir sohbet asistanı ekle.Mimari: uygulama kendi arka ucuma istek atsın, LLM API anahtarıİSTEMCİDE OLMASIN, proxy üzerinden gitsin.- Yanıt akışlı (streaming) gelsin, kelime kelime gösterilsin- 'Durdur' butonu üretimi kessin- Zaman aşımı, ağ hatası, 429 ve 500 durumlarını nazikçe ele al- Sohbet geçmişini kısalt: son 6 mesaj + özet gönder (maliyet kontrolü)Mimari diyagramı önce açıkla, sonra istemci ve proxy kodunu ayrı ver."
Kopyalanabilir şablonlar
Güvenli mimari şablonu:"[Platform] uygulamama bulut LLM entegrasyonu tasarla.Kural: API anahtarı sadece arka uçta. İstemci -> benim proxy'im -> LLM.Proxy'de: kimlik doğrulama, kullanıcı başı hız sınırı, istek loglama.İstemci ve proxy sorumluluklarını ayrı listele, sonra kodu ver."
Akış (streaming) şablonu:"Bu sohbet ekranına akışlı yanıt ekle:- Parçaları geldikçe mesaj balonuna ekle- Yazılırken bir imleç/animasyon göster- 'Durdur' butonu akışı iptal etsin- Akış biterken hata olursa kısmi metni koru ve uyar[mevcut kod]"
Maliyet-gecikme şablonu:"Bu LLM entegrasyonunda maliyet ve gecikmeyi düşür:- Gönderilen token'ı nasıl azaltırım (geçmiş kısaltma, özet)?- Hangi durumda daha küçük/ucuz model yeter?- Zaman aşımı ve yeniden deneme stratejisi öner[kod]"
Hata dayanıklılığı şablonu:"Bu LLM çağrısını dayanıklı yap:- Ağ yok, timeout, 429 (rate limit), 500 (server) için ayrı davranış- Kullanıcıya teknik olmayan, nazik mesaj- Kritik yanıtlarda halüsinasyon riskine karşı doğrulama notu[kod]"
Sık yapılan hatalar
- API anahtarını uygulamaya gömmek. En pahalı ve en yaygın güvenlik hatası; anahtar mutlaka arka uçta durur.
- Akış kullanmamak. Uzun yanıtlarda boş bekletmek kullanıcıyı kaçırır.
- Tüm sohbet geçmişini her istekte göndermek. Token maliyetini ve gecikmeyi katlar.
- Hata durumlarını atlamak. 429/500/timeout ele alınmazsa uygulama çöker veya donar.
- LLM cevabını sorgusuz doğru saymak. Halüsinasyon gerçektir; kritik alanda doğrulama katmanı ekleyin.
- Kullanıcı verisini gereksiz LLM'e göndermek. Kişisel veri buluta gitmeden önce gerekli mi, maskelenmeli mi diye sorun.
Özetle
Bulut LLM, cihaza sığmayan büyük yetenekleri mobile taşır ama güvenlik ve maliyet disiplini ister. Altın kural: API anahtarı asla istemcide olmaz, arka uç proxy üzerinden gidilir. Akış, algılanan hızı ve elde tutmayı büyük ölçüde artırır; "durdur" butonuyla desteklenir. Maliyet, gönderilen token'ı kısaltarak; dayanıklılık, tüm hata durumlarını nazikçe ele alarak sağlanır. LLM cevapları halüsinasyon içerebilir; kritik alanlarda doğrulama şarttır ve kişisel veri buluta göndermeden önce gözden geçirilir.
Uygulama görevi
Bir "metin özetleme" veya "sohbet" özelliği için "Güvenli mimari şablonu"nu kullanarak YZ'den istemci + arka uç proxy tasarımı isteyin. Üretilen tasarımda API anahtarının yalnızca arka uçta durduğunu doğrulayın. Ardından "Maliyet-gecikme şablonu" ile gönderilen token'ı azaltmanın en az iki yolunu çıkarın ve bir hata durumu (örneğin 429) için kullanıcıya gösterilecek nazik mesajı yazın.
Kontrol listesi
- [ ] API anahtarının istemcide değil, arka uçta durduğunu doğruladım
- [ ] Yanıtı akışlı (streaming) hale getirip 'durdur' butonu ekledim
- [ ] Zaman aşımı, ağ hatası, 429 ve 500 durumlarını ele aldım
- [ ] Gönderilen token'ı geçmiş kısaltma/özet ile azalttım
- [ ] LLM cevabında halüsinasyon riskine karşı doğrulama düşündüm
- [ ] Kişisel verinin buluta gitmeden önce gerekliliğini/maskelenmesini kontrol ettim