Akıllı Android uygulamaları oluşturma: Bulut ve karma çıkarım
Okuma süresi 8 dakika
Temel bir Android uygulamasını kişiselleştirilmiş, akıllı ve aracı bir deneyime dönüştürdüğümüz "Akıllı Android uygulamaları oluşturma" blog yayınları serisine tekrar hoş geldiniz. Önceki yayınımızda, Makine Öğrenimi Kiti'nin Prompt API'si aracılığıyla Gemini Nano'yu kullanarak cihaz üzerinde akıllı özellikler oluşturmayı ele almıştık.
Bu yayında, bulutta barındırılan ve hibrit yapay zeka özellikleri oluşturmak için Firebase AI Logic özelliğinden nasıl yararlanabileceğinizi ele alacağız:
- Yanıtları gerçek dünya bağlamında temellendirme
- Karma çıkarımı kullanarak istekleri bulut ve yerel yürütme arasında dinamik olarak yönlendirme
- Özel yönlendirme sistemleriyle içerik çevirme
Bazı kullanım alanlarında daha fazla dünya bilgisine, çok daha büyük bir bağlam penceresine veya karmaşık sorguları işleme yeteneğine sahip yapay zeka modelleri gerekir. Bu gibi durumlarda bulut modellerinden yararlanabiliriz.
Bazı durumlarda ise her iki dünyanın da en iyisini istersiniz: Maliyetleri düşürmek için uygun olduğunda cihaz üzerinde çalıştırmak üzere hibrit çıkarım kullanırken tüm cihazlarda uyumluluğu sağlamak için buluta geri dönmek.
Jetpacker'da üç bulut ve hibrit özelliği nasıl uyguladığımıza bakalım:
- Web temelli bir müze asistanı
- karma restoran yorumu taslağı oluşturma
- Özel yönlendirmeli canlı çeviri içeren otel destek sohbeti
Güncel bilgiler için LLM temellendirmesini kullanmaMüze asistanı chatbot'u
Müze asistanı , kullanıcıların müze ziyaretlerini planlamalarına yardımcı olmak için tasarlanmış etkileşimli bir chatbot'tur. Ziyaretçilere belirli sergiler, güncel çalışma saatleri, bilet fiyatları ve daha fazlası hakkında güncel bilgiler sağlar.
Yapay zeka özellikleri geliştirirken modelin güncel, doğru ve gerçek dünyayla ilgili bilgilerle yanıt vermesini sağlamak yaygın bir zorluktur. Bulut modelleri, dünya bilgisi açısından çok zengin olsa da sezonluk sergiler veya o günkü açılış saatleri hakkında bilgi sahibi olmayabilir.
Bu boşluğu doldurmak için modelin bağlam penceresine ekstra bağlam eklemek üzere temellendirme tekniklerini kullanabiliriz. Firebase AI Logic SDK'sı üç tür temellendirmeyi destekler:
- URL temellendirme: Belirli bir web sayfasındaki içerikleri (ör. güncel bilet fiyatları veya müze kuralları) kullanarak yanıtları temellendirme.
- Google Arama temellendirmesi: Modelin güncel ayrıntılar için gerçek zamanlı Google Arama dizinini sorgulamasına olanak tanır.
- Haritalar'da temellendirme: Google Haritalar konum verilerini kullanır.
Jetpacker'da, etkinleştirilen özellik işaretlerine göre kullanılabilir araçları dinamik olarak oluştururuz ve Firebase AI SDK'yı kullanarak üretken modeli başlatırız:
// implementation("com.google.firebase:firebase-ai-logic") private var toolList = mutableListOf<Tool>() init { if (ENABLE_SEARCH_GROUNDING) { toolList.add(Tool.googleSearch()) } if (ENABLE_URL_GROUNDING) { toolList.add(Tool.urlContext()) } } private val generativeModel = Firebase.ai(backend = GenerativeBackend.googleAI()) .generativeModel( modelName = "gemini-3-flash", systemInstruction = content { text("You are a helpful museum assistant answering questions about a museum. Use plain text.") }, tools = toolList )
Kullanıcı asistana sorgu gönderdiğinde URL temellendirme etkinse belirli müze kaynağı URL'lerini doğrudan isteme ekleriz:
val groundingText = if (FeatureFlags.ENABLE_URL_GROUNDING) { "\n If the following message above is about the rules and terms to visit Le Louvre, " + "if needed answer this urls ${urlList.joinToString()}" } else { "" } val prompt = "$text $groundingText" var response = chat.sendMessage(prompt)
Hibrit çıkarım: Haritalar derin bağlantısı ile cihaz üzerinde yorum oluşturma
Her yapay zeka görevi için bulut tabanlı bir model gerekmez ve her cihaz internete bağlı değildir. Geliştiricilerin gecikme, maliyet ve çevrimdışı kullanılabilirlik arasında denge kurmasına yardımcı olmak için kısa süre önce Hibrit Çıkarım için Firebase API'yi kullanıma sunduk.
Jetpacker'daki restoran yorumu özelliği, kullanıcıların belirli konuları incelemesine ve otomatik olarak yorum taslağı oluşturmasına olanak tanır. Bu özelliği tüm kullanıcılar için etkinleştirmek amacıyla Gemini Nano ile yerel yürütmeye öncelik veriyoruz ve Gemini Nano'yu desteklemeyen cihazlarda bulut modellerine geri dönüyoruz.
// implementation("com.google.firebase:firebase-ai-logic") // implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta03") // Initialize the model with hybrid routing configuration val reviewModel = Firebase.ai.generativeModel( modelName = "gemini-3.1-flash-lite", onDeviceConfig = OnDeviceConfig( inferenceMode = InferenceMode.PREFER_ON_DEVICE ) )
Hibrit çıkarım API'si dört farklı yönlendirme modunu destekler:
- PREFER_ON_DEVICE: Yerel yürütmeye öncelik verir ve Gemini Nano kullanılamıyorsa buluta geri döner.
- PREFER_IN_CLOUD: Bulutta yürütmeye öncelik verir ve cihaz çevrimdışı kalırsa cihaz üzerinde yürütmeye geri döner.
- ONLY_ON_DEVICE: Yürütmeyi kesinlikle cihazla sınırlar.
- ONLY_IN_CLOUD: Yürütmeyi kesinlikle bulutla kısıtlar.
Yorum oluşturulduktan sonra, yorumu panoya kopyalayıp Google Haritalar'ı doğrudan restoranın yorum sayfasına açmak için bir amaç kullanırız. Böylece sorunsuz bir kullanıcı deneyimi sunarız:
private fun copyAndOpenMapsReview(context: Context, reviewText: String, placeId: String) { val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager val clip = ClipData.newPlainText("User Review", reviewText) clipboard.setPrimaryClip(clip) val uri = Uri.parse("https://search.google.com/local/writereview/mobile?placeid=$placeId") val intent = Intent(Intent.ACTION_VIEW, uri).apply { setPackage("com.google.android.apps.maps") } context.startActivity(intent) }
Özel karma yönlendirme: Simüle edilmiş karakterlerle otel destek sohbeti çevirisi
Otel destek sohbeti, kullanıcıların lojistik işlemlerini tamamlamasına ve otel bilgilerini kontrol etmesine olanak tanımak için geliştirilmiştir. Bu özellik, yerelleştirilmiş bir resepsiyonist asistanı yapılandırmak için sistem talimatlarını kullanır. Talimatlarda tercih edilen dil ve otel bilgileri gibi belirli bilgileri ileterek belirli bir oteli temsil eden bir sohbet kişiliği oluşturabiliriz.
private val generativeModel = Firebase.ai(backend = GenerativeBackend.googleAI()) .generativeModel( systemInstruction = content { text(""" You are a helpful hotel receptionist at $hotelName only speaking $language. Answer politely in $language. The bar closes at 10pm and breakfast is from 7am to 10am. There's someone at the desk 24/7. You can retrieve your luggage from the storage room at the back of the lobby at any time. """) }, modelName = "gemini-3-flash-preview" )
Resepsiyonist yanıtları otelin yerel dilinde (örneğin, Paris'teki Hotel Le Meurice için Fransızca) olduğundan mesajları kullanıcının tercih ettiği dile çevirmemiz gerekir.
Karma modeller basit yönlendirme tercihlerini yapılandırabilirken karmaşık senaryolar özel yönlendirme mantığı gerektirir. Jetpacker'da, aşağıdakileri dikkate alan özel bir yönlendirme yığını uyguluyoruz:
- Dil tanımlama: Cihaz üzerinde ML Kit Language Identification API'yi kullanarak gelen mesajın dilini algılayabiliriz.
- Cihaz üzerinde çeviri (Gemini Nano): ML Kit'in Prompt API'si, yaygın dil çiftlerini doğrudan cihaz üzerinde çevirmemize olanak tanıyarak bant genişliğinden ve bulut maliyetinden tasarruf etmemizi sağlar.
- Bulut çevirisi (Gemini 3 Flash): Daha karmaşık dillerde daha kaliteli çeviri elde etmek için Gemini Flash 3'ü kullanırız.
// implementation("com.google.android.gms:play-services-mlkit-language-id:17.0.0") // ML Kit for Language Identification (powered by Google Play Services) private val languageIdentifier = LanguageIdentification.getClient() // On-device translator model (prefer Gemini Nano) for translating common language pairs private val hybridTranslationModel = Firebase.ai(backend = GenerativeBackend.googleAI()) .generativeModel( modelName = "gemini-3-flash", onDeviceConfig = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE) ) // Cloud translator model for more complex language pairs private val cloudTranslationModel = Firebase.ai(backend = GenerativeBackend.googleAI()) .generativeModel( modelName = "gemini-3-flash" )
Çevrilmesi gereken bir mesaj olduğunda kaynak dili belirleriz ve özel yönlendirme mantığımızı uygulayarak cihaz üzerinde veya bulut çevirisi gerçekleştiririz:
fun translateMessage(message: SupportChatMessage) { viewModelScope.launch { // 1. Detect language using ML Kit Language Identification val sourceLang = try { Tasks.await(languageIdentifier.identifyLanguage(message.text)) } catch (e: Exception) { "Undefined" } // 2. Custom routing: we've verified the translation quality for English and Korean with Gemini Nano, and will translate message on-device for those two languages val routeToCloud = sourceLang != "en" && sourceLang != "kr" val prompt = "Translate the following text to $selectedLanguage. Just return the translated sentence: ${message.text}." val (translatedText, routePrefix) = if (routeToCloud) { val result = cloudTranslationModel.generateContent(prompt) result.text to "[Cloud]" } else { val result = hybridTranslationModel.generateContent(prompt) result.text to "[On-Device]" } if (translatedText != null) { _translations.update { current -> current + (message.id to "$routePrefix: $translatedText") } } } }
Bu örnekte, özel yönlendirme mantığı yalnızca çevirinin kaynak ve hedef dilini dikkate alır. Ancak uygulamanızın kullanım alanına bağlı olarak yönlendirme mantığını genişleterek cihaz üzerinde model sürümü, ağ bağlantısı, pil durumu gibi diğer faktörleri de dahil edebilirsiniz.
Yapay Zeka İşlem Hatlarının Güvenliğini Sağlama: Firebase Uygulama Kontrolü
Son olarak, yapay zekanın bulutta kullanılması API anahtarı kötüye kullanımı veya yetkisiz faturalandırma olasılıklarını artırır. API çağrılarını güvenli hale getirmek için hem Play Integrity (canlı sürüm) hem de yerel hata ayıklama sağlayıcısı (yerel geliştirme veya emülatörler için) kullanılarak Firebase Uygulama Kontrolü entegre edildi.
JetPackerApplication.kt dosyasında, hata ayıklama sağlayıcısını başlangıçta yüklüyoruz ve güvenli bir kullanıcı oturumu oluşturmak için anonim kimlik doğrulamayı tetikliyoruz:
// implementation("com.google.firebase:firebase-appcheck-playintegrity") // implementation("com.google.firebase:firebase-appcheck-debug") // implementation("com.google.firebase:firebase-auth") override fun onCreate() { super.onCreate() Firebase.initialize(context = this) Firebase.appCheck.installAppCheckProviderFactory( DebugAppCheckProviderFactory.getInstance() ) Firebase.auth.signInAnonymously() }
Bir emülatörde yerel olarak derleme yaparken App Check, logcat'e yerel bir jeton gizli anahtarı yazdırır:
Enter this debug secret into the allow list in the Firebase Console: a8c2dd4c-xxxx-xxxx-xxxx-ef6c114ba27e
Firebase konsoluna kaydedildikten sonra yerel istekler, Uygulama Kontrolü tarafından tamamen doğrulanır ve kimliği onaylanır. Bu sayede, arka ucumuz korunurken uygulamayı yerel olarak test edebiliriz.
Sonuç
Bulut modeli özelliklerini (temellendirme, sistem talimatları) cihaz üzerinde özelliklerle (karma yönlendirme, çeviri, güvenlik uygulaması kontrolleri) birleştirerek akıllı, güvenli ve çevrimdışı kullanılabilen bir seyahat uygulaması oluşturduk.
GitHub'da Jetpacker'ın tam kaynak koduna göz atın ve Firebase dokümanlarını inceleyerek başlayın:
Firebase AI Logic Belgeleri
Firebase Hybrid Inference API
Daha fazla bilgi
Bu blog yayını dizisinin diğer bölümlerine göz atın:
1. bölüm: Uygulamanın tanıtımı ve genel bir bakış.
2. bölüm: Cihaz üzerinde yapay zeka. Seyahat planı özetleme, makbuz ayrıştırma ve yerel ses işleme gibi gizliliğe öncelik veren özellikler oluşturmak için ML Kit'in üretken yapay zeka API'lerini ve Gemini Nano'yu ayrıntılı olarak inceleyin.
3. Bölüm (bu gönderi!): Karma ve bulut akıl yürütme. LLM yanıtlarını Google Haritalar ve web bağlamı gibi gerçek dünya verilerine temellendirmek için Firebase AI Logic'i nasıl kullanacağınızı keşfedin.
4. Bölüm: Sistem entegrasyonu. AppFunctions kullanarak Android Intelligence sistemiyle entegrasyon.
5. bölüm (yakında): Uygulama içi ajan tabanlı iş akışları. Uygulamayı A2UI ve ADK destekli uçtan uca rezervasyon asistanıyla genişletin.
Android geliştirme hakkında daha fazla bilgi edinmek ister misiniz? Android Developers'ı YouTube veya LinkedIn'de takip edin.
Bu blog yayınındaki tüm kod snippet'leri aşağıdaki telif hakkı bildirimine tabidir:
Copyright 2026 Google LLC. SPDX-License-Identifier: Apache-2.0
-
"Nasıl yapılır?" rehberleriTemel bir Android uygulamasını kişiselleştirilmiş, akıllı ve etkileşimli bir deneyime dönüştürdüğümüz "Akıllı Android uygulamaları geliştirme" blog yayınları serisine tekrar hoş geldiniz. Önceki yayınımızda, bu seride kullanacağımız demo uygulaması Jetpacker'ı tanıtmıştık.
Caren Chang • Okuma süresi 6 dakika -
"Nasıl yapılır?" rehberleriJetpacker, ekibimizin bu yılki Google I/O için sıfırdan oluşturduğu teknik bir tanıtım uygulamasıdır (Antigravity kullanılarak oluşturulmuştur). Jetpacker, kullanıcıların bir sonraki büyük macerasını planlamasına, keşfetmesine ve maceradan keyif almasına yardımcı olur.
Jolanda Verhoef • Okuma süresi 4 dakika -
"Nasıl yapılır?" rehberleriTemel bir Android uygulamasını kişiselleştirilmiş, akıllı ve etkileşimli bir deneyime dönüştürdüğümüz "Akıllı Android uygulamaları geliştirme" blog yayınları serisine tekrar hoş geldiniz. Önceki yayınımızda, bulutta barındırılan ve karma yapay zeka özellikleri oluşturmak için Firebase AI Logic'ten nasıl yararlanılacağını ele almıştık.
Ben Weiss • Okuma süresi 6 dakika
Android geliştirmeyle ilgili en son analizleri her hafta gelen kutunuza alın.