Akıllı Android uygulamaları oluşturma: Bulut ve karma çıkarım
Okuma süresi: 8 dk.
Temel bir Android uygulamasını kişiselleştirilmiş, akıllı ve aracı bir deneyime dönüştürdüğümüz "Akıllı Android uygulamaları geliştirme" başlıklı blog yazısı serisine tekrar hoş geldiniz. Önceki yayınımızda, ML Kit'in 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 'ten 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.
Bazen de her iki dünyanın 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 temellendirmesi olan 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 sunar.
Yapay zeka özellikleri geliştirirken modelin güncel, doğru ve belirli gerçek dünya bilgileriyle yanıt vermesini sağlamak yaygın bir zorluktur. Bulut modelleri çok büyük miktarda dünya bilgisine sahip 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 ek 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 dizininde sorgu yapmasına izin verme.
- Haritalar'da temellendirme: Google Haritalar konum verilerini kullanır.
Jetpacker'da, etkinleştirilen özellik işaretlerine göre mevcut araçları dinamik olarak oluştururuz ve Firebase AI SDK'sını 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 kısıtlar.
- 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 ekibi sohbet ç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 karakteri 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 Le Meurice Oteli 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 bir ç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 bulutta çeviri yaparız:
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 üzerindeki model sürümü, ağ bağlantısı ve 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ını (yerel geliştirme veya emülatörler için) kullanarak Firebase Uygulama Kontrolü'i entegre ettik.
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 kodunu inceleyin ve kullanmaya başlamak için Firebase dokümanlarını keşfedin:
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'leri ve Gemini Nano hakkında ayrıntılı bilgi edinin.
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 dayandırmak 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ı. A2UI ve ADK tarafından desteklenen uçtan uca rezervasyon asistanıyla uygulamayı genişletin.
Android geliştirme hakkında daha fazla bilgi edinmek mi istiyorsunuz? 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" adlı blog yayını 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 dk. -
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 maceralarını planlamalarına, keşfetmelerine ve keyifle yaşamaları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" adlı blog yayını 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 dk.
Android geliştirmeyle ilgili en son analizleri haftalık olarak gelen kutunuza alın.