Willkommen zurück zur Blogpost-Reihe "Intelligente Android-Apps entwickeln". Hier zeigen wir, wie Sie eine einfache Android-App in eine personalisierte, intelligente und agentenbasierte Anwendung verwandeln. Im vorherigen Beitrag haben wir uns angesehen, wie Sie mit Gemini Nano über die Prompt API von ML Kit intelligente On-Device-Funktionen entwickeln können.
In diesem Beitrag erfahren Sie, wie Sie Firebase AI Logic nutzen können, um cloudbasierte und hybride KI-Funktionen zu entwickeln:
- Antworten im realen Kontext verankern
- Anfragen mithilfe von Hybrid-Inferenz dynamisch zwischen Cloud- und lokaler Ausführung weiterleiten
- Inhalte mit benutzerdefinierten Weiterleitungssystemen übersetzen
Manchmal sind für einen Anwendungsfall KI-Modelle mit mehr Weltwissen, einem viel größeren Kontextfenster oder der Möglichkeit zur Verarbeitung komplexer Abfragen erforderlich. In diesen Fällen können wir Cloud-Modelle nutzen.
Manchmal möchten Sie aber auch das Beste aus beiden Welten: Hybrid-Inferenz verwenden, um die Ausführung auf dem Gerät zu ermöglichen und Kosten zu senken, und gleichzeitig auf die Cloud zurückgreifen, um die Kompatibilität für alle Geräte zu gewährleisten.
Sehen wir uns an, wie wir drei Cloud- und Hybrid-Funktionen in Jetpacker implementiert haben:
- Museumsassistent mit Web-Fundierung
- Hybride Restaurantrezension
- Hotel-Support-Chat mit benutzerdefinierter Weiterleitung für Live-Übersetzung
LLM-Fundierung für aktuelle InformationenMuseumsassistent-Chatbot mit LLM-Fundierung
Der Museumsassistent ist ein interaktiver Chatbot, der Nutzern bei der Planung von Museumsbesuchen hilft. Er bietet Besuchern aktuelle Informationen zu bestimmten Ausstellungen, aktuellen Öffnungszeiten, Ticketpreisen und mehr.
Bei der Entwicklung von KI-Funktionen ist es oft eine Herausforderung, das Modell so zu trainieren, dass es mit aktuellen, genauen und spezifischen Informationen aus der realen Welt antwortet. Cloud-Modelle verfügen zwar über riesige Mengen an Weltwissen, wissen aber möglicherweise nichts über saisonale Ausstellungen oder die aktuellen Öffnungszeiten.
Um diese Lücke zu schließen, können wir Fundierungstechniken verwenden, um dem Kontextfenster des Modells zusätzlichen Kontext hinzuzufügen. Das Firebase AI Logic SDK unterstützt drei Arten der Fundierung:
- URL-Fundierung: Antworten mit Inhalten von einer bestimmten Webseite fundieren (z.B. aktuelle Ticketpreise oder Museumsregeln).
- Fundierung mit der Google Suche: Das Modell kann den Google-Suchindex in Echtzeit nach aktuellen Informationen abfragen.
- Fundierung mit Google Maps: Standortdaten von Google Maps verwenden.
In Jetpacker erstellen wir die verfügbaren Tools dynamisch anhand der aktivierten Feature-Flags und initialisieren das generative Modell mit dem 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 )
Wenn der Nutzer den Assistenten abfragt und die URL-Fundierung aktiviert ist, fügen wir die URLs der spezifischen Museumsressourcen direkt in den Prompt ein:
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)
Hybride Inferenz: Rezension auf dem Gerät mit Maps-Deeplink erstellen
Nicht für jede KI-Aufgabe ist ein cloudbasiertes Modell erforderlich und nicht jedes Gerät ist online. Damit Entwickler Latenz, Kosten und Offline-Verfügbarkeit besser ausbalancieren können, haben wir vor Kurzem die Firebase API für Hybrid-Inferenz eingeführt.
Mit der Funktion Restaurantrezension in Jetpacker können Nutzer ausgewählte Themen bewerten und automatisch eine Rezension erstellen. Damit dies für alle Nutzer möglich ist, priorisieren wir die lokale Ausführung mit Gemini Nano und greifen auf Geräten, die Gemini Nano nicht unterstützen, auf Cloud-Modelle zurück.
// 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 ) )
Die Hybrid Inference API unterstützt vier verschiedene Weiterleitungsmodi:
- PREFER_ON_DEVICE:Priorisiert die lokale Ausführung und greift auf die Cloud zurück, wenn Gemini Nano nicht verfügbar ist.
- PREFER_IN_CLOUD:Priorisiert die Ausführung in der Cloud und greift auf das Gerät zurück, wenn das Gerät offline ist.
- ONLY_ON_DEVICE:Beschränkt die Ausführung ausschließlich auf das Gerät.
- ONLY_IN_CLOUD:Beschränkt die Ausführung ausschließlich auf die Cloud.
Sobald die Rezension erstellt wurde, kopieren wir sie in die Zwischenablage und verwenden eine Intent, um Google Maps direkt auf der Rezensionsseite des Restaurants zu öffnen. So sorgen wir für eine nahtlose Nutzererfahrung:
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) }
Benutzerdefinierte hybride Weiterleitung: Übersetzung im Hotel-Support-Chat mit simulierten Personas
Der Hotel-Support-Chat wurde entwickelt, damit Nutzer Logistik abschließen und Hoteldetails prüfen können. Diese Funktion verwendet Systemanweisungen, um einen lokalisierten Rezeptionisten-Assistenten zu konfigurieren. Indem wir in den Anweisungen bestimmte Informationen wie die bevorzugte Sprache und Hotelinformationen übergeben, können wir eine Konversationspersona einrichten, die ein bestimmtes Hotel repräsentiert.
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" )
Da die Antworten des Rezeptionisten in der lokalen Sprache des Hotels verfasst sind (z. B. Französisch für das Hotel Le Meurice in Paris), müssen wir die Nachrichten in die bevorzugte Sprache des Nutzers übersetzen.
Hybride Modelle können zwar einfache Weiterleitungseinstellungen konfigurieren, für komplexe Szenarien ist jedoch eine benutzerdefinierte Weiterleitungslogik erforderlich. In Jetpacker implementieren wir einen benutzerdefinierten Weiterleitungsstack, der Folgendes berücksichtigt:
- Spracherkennung:Mit der On-Device-API zur Spracherkennung von ML Kit können wir die Sprache der eingehenden Nachricht erkennen.
- On-Device-Übersetzung (Gemini Nano): Mit der Prompt API von ML Kit können wir gängige Sprachpaare direkt auf dem Gerät übersetzen und so Bandbreite und Cloud-Kosten sparen.
- Cloud-Übersetzung (Gemini 3 Flash) : Für komplexere Sprachen verwenden wir Gemini Flash 3, um eine Übersetzung von höherer Qualität zu erhalten.
// 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" )
Wenn eine Nachricht übersetzt werden muss, erkennen wir die Ausgangssprache und wenden unsere benutzerdefinierte Weiterleitungslogik an, um die Übersetzung entweder auf dem Gerät oder in der Cloud auszuführen:
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") } } } }
In diesem Beispiel berücksichtigt die benutzerdefinierte Weiterleitungslogik nur die Ausgangs- und Zielsprache der Übersetzung. Je nach Anwendungsfall Ihrer App können Sie die Weiterleitungslogik jedoch um andere Faktoren erweitern, z. B. die On-Device-Modellversion, die Netzwerkverbindung und den Akkustatus.
KI-Pipelines schützen: Firebase App Check
Schließlich birgt die Verwendung von KI in der Cloud die Gefahr von API-Schlüsselmissbrauch oder unbefugter Abrechnung. Um API-Aufrufe zu schützen, haben wir Firebase App Check sowohl mit Play Integrity (Produktion) als auch mit dem lokalen Debug-Anbieter (für die lokale Entwicklung oder Emulatoren) integriert.
In der Datei JetPackerApplication.kt installieren wir den Debug-Anbieter beim Start und lösen die anonyme Authentifizierung aus, um eine sichere Nutzersitzung einzurichten:
// 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() }
Wenn Sie einen Build lokal auf einem Emulator ausführen, gibt App Check ein lokales Tokensicherheitsgeheimnis in logcat aus:
Enter this debug secret into the allow list in the Firebase Console: a8c2dd4c-xxxx-xxxx-xxxx-ef6c114ba27e
Nach der Registrierung in der Firebase Console werden lokale Anfragen vollständig von App Check überprüft und authentifiziert. So schützen wir unser Back-End und können die App lokal testen.
Fazit
Durch die Kombination der Funktionen von Cloud-Modellen (Fundierung, Systemanweisungen) mit On-Device-Funktionen (hybride Weiterleitung, Übersetzung, Sicherheits-App-Prüfungen) haben wir eine Reise-App entwickelt, die intelligent, sicher und offline verfügbar ist.
Den vollständigen Quellcode für Jetpacker finden Sie auf GitHub. In der Firebase-Dokumentation erfahren Sie, wie Sie loslegen können:
Firebase AI Logic-Dokumentation
Firebase Hybrid Inference API
Weitere Informationen
Weitere Teile dieser Blogpost-Reihe:
Teil 1: Einführung in die App und allgemeiner Überblick.
Teil 2: On-Device-Intelligenz. Detaillierte Informationen zu den GenAI APIs von ML Kit und Gemini Nano, um datenschutzorientierte Funktionen zu entwickeln, z. B. Zusammenfassung von Reiseplänen, Parsing von Belegen und lokale Audioverarbeitung.
Teil 3 (dieser Beitrag): Hybride und Cloud-basierte Schlussfolgerungen. Informationen zur Verwendung von Firebase AI Logic, um LLM-Antworten mit realen Daten wie Google Maps und Web-Kontext zu fundieren.
Teil 4: Systemintegration. Integration in das Android-Intelligenzsystem mit AppFunctions.
Teil 5 (bald verfügbar): Agentenbasierte Workflows in der App. Erweitern Sie die App mit einem End-to-End-Buchungsassistenten, der auf A2UI und ADK basiert.
Sie interessieren sich für weitere Informationen zur Android-Entwicklung? Folgen Sie Android Developers auf YouTube oder LinkedIn.
Für alle Code-Snippets in diesem Blogpost gilt der folgende Urheberrechtshinweis:
Copyright 2026 Google LLC. SPDX-License-Identifier: Apache-2.0
-
AnleitungenWillkommen zurück zur Blogpost-Reihe „Intelligente Android-Apps entwickeln“. Hier zeigen wir, wie Sie eine einfache Android-App in eine personalisierte, intelligente und agentenbasierte Anwendung verwandeln. Im vorherigen Beitrag haben wir Jetpacker vorgestellt, die Demo-App, die wir in dieser Reihe verwenden.
Caren Chang • Lesezeit: 6 Minuten -
AnleitungenJetpacker ist eine technische Showcase-App, die unser Team für die Google I/O dieses Jahres von Grund auf entwickelt hat (mit Antigravity). Im Grunde hilft Jetpacker Nutzern bei der Planung, Erkundung und Durchführung ihres nächsten großen Abenteuers.
Jolanda Verhoef • Lesezeit: 4 Minuten -
AnleitungenWillkommen zurück zur Blogpost-Reihe „Intelligente Android-Apps entwickeln“. Hier zeigen wir, wie Sie eine einfache Android-App in eine personalisierte, intelligente und agentenbasierte Anwendung verwandeln. Im vorherigen Beitrag haben wir uns angesehen, wie Sie mit Firebase AI Logic cloudbasierte und hybride KI-Funktionen entwickeln können.
Ben Weiss • Lesezeit: 6 Minuten
Lassen Sie sich Woche für Woche die neuesten Informationen zur Android-Entwicklung zusenden.