Selamat datang kembali di seri postingan blog "Membangun aplikasi Android yang cerdas" tempat kita mengambil aplikasi Android dasar dan mengubahnya menjadi pengalaman yang dipersonalisasi, cerdas, dan agentik. Dalam postingan sebelumnya, kita telah mempelajari cara membuat fitur cerdas di perangkat menggunakan Gemini Nano melalui Prompt API ML Kit.
Dalam postingan ini, kita akan melihat cara memanfaatkan Firebase AI Logic untuk membangun fitur AI yang dihosting di cloud dan hybrid:
- Mendasarkan jawaban pada konteks dunia nyata
- Merutekan permintaan secara dinamis antara eksekusi cloud dan lokal menggunakan inferensi hybrid
- Menerjemahkan konten dengan sistem perutean kustom
Terkadang, kasus penggunaan memerlukan model AI dengan pengetahuan dunia yang lebih luas, jendela konteks yang jauh lebih besar, atau kemampuan untuk menangani kueri yang kompleks. Dalam skenario tersebut, kita dapat memanfaatkan model cloud.
Terkadang, Anda menginginkan yang terbaik dari kedua dunia: menggunakan inferensi hybrid untuk berjalan di perangkat jika tersedia guna menurunkan biaya, sekaligus melakukan penggantian ke cloud untuk memastikan kompatibilitas semua perangkat.
Mari kita lihat cara kami menerapkan tiga fitur cloud dan hybrid di Jetpacker:
- asisten museum dengan perujukan web
- draf ulasan restoran hybrid
- chat dukungan hotel yang menampilkan terjemahan langsung dengan perutean kustom.
Menggunakan perujukan LLM untuk informasi terbaru Chatbot asisten museum dengan perujukan LLM
Asisten museum adalah chatbot interaktif yang dirancang untuk membantu pengguna merencanakan kunjungan mereka ke museum. Halaman ini memberikan detail terbaru kepada pengunjung terkait pameran tertentu, jam buka saat ini, harga tiket, dan lainnya.
Saat membangun fitur AI, membuat model menjawab dengan informasi dunia nyata yang baru, akurat, dan spesifik adalah tantangan umum. Meskipun model cloud memiliki pengetahuan dunia yang sangat luas, model ini mungkin tidak mengetahui pameran musiman atau jam buka hari ini.
Untuk menjembatani kesenjangan ini, kita dapat menggunakan teknik perujukan untuk menambahkan konteks ekstra ke jendela konteks model. Firebase AI Logic SDK mendukung tiga jenis perujukan:
- Perujukan URL: Merujuk respons menggunakan konten dari halaman web tertentu (misalnya, harga tiket saat ini atau peraturan museum).
- Grounding Google Penelusuran: Memungkinkan model mengkueri indeks Google Penelusuran real-time untuk mendapatkan detail terbaru.
- Perujukan Maps: Menggunakan data lokasi Google Maps.
Di Jetpacker, kami membuat alat yang tersedia secara dinamis berdasarkan tanda fitur yang diaktifkan dan menginisialisasi model generatif menggunakan Firebase AI SDK:
// 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 )
Saat pengguna membuat kueri ke asisten, jika perujukan URL diaktifkan, kami akan menambahkan URL resource museum tertentu langsung ke perintah:
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)
Inferensi hybrid: Pembuatan ulasan di perangkat dengan deep link Maps
Tidak semua tugas AI memerlukan model berbasis cloud, dan tidak semua perangkat terhubung ke internet. Untuk membantu developer menyeimbangkan latensi, biaya, dan ketersediaan offline, kami baru-baru ini memperkenalkan Firebase API untuk Inferensi Hybrid.
Di Jetpacker, fitur ulasan restoran memungkinkan pengguna meninjau topik tertentu dan otomatis membuat draf ulasan. Untuk mengaktifkannya bagi semua pengguna, kami memprioritaskan eksekusi lokal dengan Gemini Nano, dan melakukan penggantian ke model cloud di perangkat yang tidak mendukung Gemini Nano.
// 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 ) )
Hybrid Inference API mendukung empat mode perutean yang berbeda:
- PREFER_ON_DEVICE: Memprioritaskan eksekusi lokal dan melakukan penggantian ke cloud jika Gemini Nano tidak tersedia.
- PREFER_IN_CLOUD: Memprioritaskan eksekusi di cloud dan melakukan penggantian ke perangkat jika perangkat offline.
- ONLY_ON_DEVICE: Membatasi eksekusi hanya pada perangkat.
- ONLY_IN_CLOUD: Membatasi eksekusi secara ketat ke cloud.
Setelah ulasan dibuat, kami menyalinnya ke papan klip dan menggunakan intent untuk membuka Google Maps langsung ke halaman ulasan restoran, sehingga memberikan pengalaman pengguna yang lancar:
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) }
Pemilihan rute hybrid kustom: Terjemahan chat dukungan hotel dengan persona simulasi
Chat dukungan hotel dibuat agar pengguna dapat menyelesaikan logistik dan memeriksa detail hotel. Fitur ini menggunakan petunjuk sistem untuk mengonfigurasi asisten resepsionis yang dilokalkan. Dengan meneruskan informasi tertentu—seperti bahasa pilihan dan informasi hotel—dalam petunjuk, kami dapat menyiapkan persona percakapan yang mewakili hotel tertentu.
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" )
Karena respons resepsionis menggunakan bahasa lokal hotel (misalnya, bahasa Prancis untuk Hotel Le Meurice di Paris), kami perlu menerjemahkan pesan ke bahasa pilihan pengguna.
Meskipun model hybrid dapat mengonfigurasi preferensi perutean sederhana, skenario yang kompleks memerlukan logika perutean kustom. Di Jetpacker, kita menerapkan stack perutean kustom yang mempertimbangkan:
- Identifikasi bahasa: Dengan menggunakan API Identifikasi Bahasa ML Kit di perangkat, kita dapat mendeteksi bahasa pesan yang masuk.
- Terjemahan di perangkat (Gemini Nano): Prompt API ML Kit memungkinkan kita menerjemahkan pasangan bahasa umum langsung di perangkat, sehingga menghemat bandwidth dan biaya cloud.
- Terjemahan cloud (Gemini 3 Flash): Untuk bahasa yang lebih kompleks, kami menggunakan Gemini Flash 3 untuk mendapatkan terjemahan yang lebih berkualitas.
// 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" )
Saat pesan perlu diterjemahkan, kami mengidentifikasi bahasa sumber dan menerapkan logika perutean kustom kami, yang dijalankan di perangkat atau terjemahan cloud:
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") } } } }
Dalam contoh ini, logika perutean kustom hanya mempertimbangkan bahasa sumber dan target terjemahan. Namun, berdasarkan kasus penggunaan aplikasi, Anda dapat memperluas logika perutean untuk menyertakan faktor lain seperti versi model di perangkat, konektivitas jaringan, status baterai, dan lainnya.
Mengamankan Pipeline AI: Firebase App Check
Terakhir, penggunaan AI di cloud membuka kemungkinan penyalahgunaan kunci API atau penagihan yang tidak sah. Untuk mengamankan panggilan API, kami mengintegrasikan Firebase App Check menggunakan Play Integrity (produksi) dan Penyedia Debug lokal (untuk pengembangan lokal atau emulator).
Dalam file JetPackerApplication.kt, kita menginstal penyedia debug saat startup dan memicu autentikasi anonim untuk membuat sesi pengguna yang aman:
// 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() }
Saat mem-build secara lokal di emulator, App Check mencetak rahasia token lokal ke logcat:
Enter this debug secret into the allow list in the Firebase Console: a8c2dd4c-xxxx-xxxx-xxxx-ef6c114ba27e
Setelah terdaftar di konsol Firebase, permintaan lokal akan diverifikasi dan diautentikasi sepenuhnya oleh App Check, sehingga melindungi backend kami sekaligus memungkinkan kami menguji aplikasi secara lokal.
Kesimpulan
Dengan menggabungkan kemampuan model cloud (perujukan, petunjuk sistem) dengan kemampuan di perangkat (perutean hybrid, terjemahan, pemeriksaan aplikasi keamanan), kami membuat aplikasi perjalanan yang cerdas, aman, dan tersedia secara offline.
Lihat kode sumber lengkap untuk Jetpacker di GitHub, dan pelajari dokumentasi Firebase untuk memulai:
Dokumentasi Firebase AI Logic
Firebase Hybrid Inference API
Pelajari lebih lanjut
Baca bagian lain dari seri postingan blog ini:
Bagian 1: Pengenalan aplikasi dan ringkasan tingkat tinggi.
Bagian 2: Inteligensi di perangkat. Pelajari lebih dalam API AI generatif ML Kit dan Gemini Nano untuk membangun fitur yang mengutamakan privasi seperti pembuatan ringkasan itinerari, penguraian tanda terima, dan pemrosesan audio lokal.
Bagian 3 (postingan ini!): Penalaran hybrid dan cloud. Pelajari cara menggunakan Firebase AI Logic untuk mendasarkan jawaban LLM pada data dunia nyata seperti Google Maps dan konteks web.
Bagian 4: Integrasi sistem. Melakukan integrasi dengan sistem kecerdasan Android menggunakan AppFunctions.
Bagian 5 (segera hadir): Alur kerja agentic dalam aplikasi. Perluas aplikasi dengan asisten pemesanan menyeluruh yang didukung oleh A2UI dan ADK.
Tertarik dengan Pengembangan Android lainnya? Ikuti Android Developers di YouTube atau LinkedIn.
Semua cuplikan kode dalam postingan blog ini mengikuti pemberitahuan hak cipta berikut:
Copyright 2026 Google LLC. SPDX-License-Identifier: Apache-2.0
-
PetunjukSelamat datang kembali di seri postingan blog "Membangun aplikasi Android cerdas" tempat kami mengambil aplikasi Android dasar dan mengubahnya menjadi pengalaman yang dipersonalisasi, cerdas, dan agentik. Dalam postingan sebelumnya, kami memperkenalkan Jetpacker, aplikasi demo yang akan kami gunakan di seluruh seri ini.
Caren Chang • Waktu baca: 6 menit -
PetunjukJetpacker adalah aplikasi demo teknis yang dibuat tim kami dari awal untuk Google I/O tahun ini (dibuat menggunakan Antigravity). Pada dasarnya, Jetpacker membantu pengguna merencanakan, menjelajahi, dan menikmati petualangan besar mereka berikutnya.
Jolanda Verhoef • Waktu baca: 4 menit -
PetunjukSelamat datang kembali di seri postingan blog "Membangun aplikasi Android cerdas" tempat kami mengambil aplikasi Android dasar dan mengubahnya menjadi pengalaman yang dipersonalisasi, cerdas, dan agentik. Dalam postingan sebelumnya, kita telah membahas cara memanfaatkan Firebase AI Logic untuk membangun fitur AI hybrid dan yang dihosting di cloud.
Ben Weiss • Waktu baca: 6 menit
Dapatkan insight pengembangan Android terbaru yang dikirim ke kotak masuk Anda setiap minggu.