Créer des applications Android intelligentes : inférence sur l'appareil
Temps de lecture : 6 min
Bienvenue dans la série d'articles de blog "Créer des applications Android intelligentes". Nous allons prendre une application Android de base et la transformer en une expérience personnalisée, intelligente et agentique. Dans notre article précédent, nous avons présenté Jetpacker, l'application de démonstration que nous utiliserons tout au long de cette série.
Dans cet article de blog, nous allons vous expliquer comment utiliser Gemini Nano avec l'API Prompt de ML Kit pour créer des fonctionnalités intelligentes sur l'appareil.
La création de fonctionnalités intelligentes sur l'appareil fait référence à la capacité de traiter des requêtes et des données directement sur un appareil sans envoyer de données à un serveur. Cela présente plusieurs avantages :
- Les données utilisateur peuvent être traitées localement sur l'appareil, ce qui préserve la confidentialité des utilisateurs.
- La fonctionnalité du modèle est fiable, même avec une connexion Internet instable ou inexistante.
- Aucun coût d'inférence cloud supplémentaire, car tout s'exécute sur le matériel de l'utilisateur
En tenant compte des avantages sur l'appareil, nous avons identifié trois fonctionnalités à ajouter à Jetpacker pour améliorer l'expérience utilisateur : résumer les itinéraires de voyage, gérer les dépenses et enregistrer des notes vocales.
Synthèse personnalisée de haute qualité de textes courts
L'écran d'itinéraire offre aux utilisateurs un aperçu rapide de toutes les activités d'un voyage donné. Cet écran contenant beaucoup d'informations, il peut rapidement devenir difficile à lire. Pour aider les utilisateurs à se préparer sans se sentir dépassés, nous pouvons ajouter une section Préparez votre voyage en haut de l'écran.
En saisissant un itinéraire de voyage et en demandant à un LLM de le résumer, nous pouvons générer un résumé rapide du voyage, ainsi que des conseils pour faire vos bagages et des expressions locales utiles. Il s'agit d'un excellent cas d'utilisation pour un modèle sur l'appareil, et ce pour plusieurs raisons :
- Performances et qualité : le texte d'entrée et de sortie sont relativement courts. Nous pouvons donc nous attendre à ce que les performances et la qualité d'une solution sur l'appareil soient comparables à celles des modèles cloud plus puissants.
- Évolutivité : le transfert de l'inférence sur l'appareil nous permet de déployer cette fonctionnalité auprès de quelques utilisateurs à des millions d'entre eux sans nous soucier de la gestion des coûts d'inférence cloud croissants.
- Faible latence et fiabilité : l'inférence sur l'appareil garantit une faible latence, offrant une expérience fiable même lorsque les utilisateurs sont hors connexion.
Pour créer des applications avec l'IA sur l'appareil, nous utilisons Gemini Nano, le modèle le plus efficace de Google, optimisé pour les appareils mobiles. Gemini Nano a été lancé il y a quelques années et fonctionne désormais sur plus de 140 millions d'appareils. La dernière version du modèle, Gemini Nano 4, est basée sur l'architecture du modèle Gemma 4 récemment publié et est encore plus optimisée pour une efficacité maximale en termes de batterie et de performances.
Grâce à l' API Prompt de ML Kit, nous pouvons tirer parti des nouvelles fonctionnalités du modèle Gemini Nano 4 pour prototyper nos fonctionnalités sur l'appareil. Nous allons créer un prompt qui inclut l'itinéraire d'un voyage et demander au modèle de générer un résumé ainsi que des conseils de préparation.
Trouver la requête optimale nécessite généralement quelques itérations. L'application AICore est idéale pour cette étape du processus. Après avoir activé l'option de preview développeur pour AICore, nous pouvons télécharger des modèles de preview tels que Gemini Nano 4 pour tester les requêtes et voir les résultats attendus du modèle. Après quelques itérations sur la requête, nous avons pu réduire le temps de réponse de 13 secondes à moins de 2 secondes. Découvrez l'implémentation finale du code et la requête ici.
[ASSET HERE - FILE TOO LARGE ATM]
Traitement local des entrées utilisateur sensibles
Ensuite, pour aider les utilisateurs à profiter encore plus de leur voyage, nous allons créer un gestionnaire de dépenses simple qui élimine le travail manuel de tri des reçus et de calcul des budgets.
Comme les reçus peuvent contenir des informations sensibles telles que des numéros de carte de crédit et des adresses, il s'agit d'un autre cas d'utilisation idéal pour une solution sur l'appareil. Avec le traitement sur l'appareil, les utilisateurs peuvent être sûrs que leurs informations privées seront traitées localement sur l'appareil, sans que leurs données soient envoyées dans le cloud.
De plus, Gemini Nano 4 offre des capacités de modélisation améliorées pour la multimodalité, en particulier pour les tâches de compréhension d'images telles que l'OCR et l'extraction de données visuelles. Il constitue donc une excellente solution pour des tâches telles que l'extraction d'informations à partir de reçus.
Dans ce cas d'utilisation, la requête analysera une image du reçu et générera des informations telles qu'un titre, le montant dépensé et la catégorie de la dépense. Pour que le modèle génère les informations dans le format souhaité, nous pouvons utiliser l'API Structured Output de ML Kit pour générer facilement un objet de données Kotlin que nous définissons.
// implementation("com.google.mlkit:genai-prompt:1.0.0-beta3")
// ksp("com.google.mlkit:genai-schema-compiler:1.0.0-alpha1")
@Generable("Information extracted from an expense receipt")
data class ParsedReceipt(
@Guide("Generated title for the expense less than 6 words. Based on restaurant or activity name.")
val title: String,
@Guide("Total amount of the expense. Look for values at the bottom and words like total or balance due.")
val amount: Double,
@Guide("Type of expense", enumValues = ["travel", "food", "shopping", "entertainment", "other"])
val category: String,
)
val prompt = "Determine if the image is a receipt or expense.
If it is NOT a receipt or expense, output the text 'NOT_A_RECEIPT'.
Otherwise, parse the receipt information."
val request = generateContentRequest(ImagePart(bitmap), TextPart(prompt)) {}
val requestWithStructuredOutput = generateTypedContentRequest(request, ParsedReceipt::class)
// Define the configuration for Gemini Nano 4 E4B preview model
// When selecting models, you can specify which performance charactertists are most important
// for your use case. Use ModelPreference.FULL when you want to prioritize reasoning power over speed.
// Use ModelPreference.FAST when complex logic is not required and latency is a priority.
val previewFullConfig = generationConfig {
modelConfig = modelConfig {
releaseStage = ModelReleaseStage.PREVIEW
preference = ModelPreference.FULL
}
}
val geminiNano4BPreviewModel = Generation.getClient(previewFullConfig)
val response = geminiNano4BPreviewModel.generateContent(requestWithStructuredOutput)
val parsedReceipt: ParsedReceipt? = response.candidates.firstOrNull()?.responseRequêtes multimodales
Enfin, pour aider les utilisateurs à enregistrer des mémos audio pendant le trajet, créons une fonctionnalité de notes vocales entièrement sur l'appareil. À l'aide de l'API Speech Recognition de ML Kit, nous allons permettre aux utilisateurs d'enregistrer de courtes notes vocales qui seront automatiquement transcrites en texte. À partir du texte transcrit, nous utiliserons l'API Prompt de ML Kit pour identifier l'activité de voyage associée à la note vocale enregistrée. Les utilisateurs pourront ainsi résumer facilement leur voyage en parcourant l'itinéraire.
L'API ML Kit GenAI Speech Recognition vous permet de transcrire du contenu audio en texte entièrement sur l'appareil à l'aide de deux modes distincts. Le mode de base utilise un modèle de reconnaissance vocale traditionnel sur l'appareil et est disponible sur la plupart des appareils Android avec le niveau d'API 31 et supérieur. Le mode avancé utilise Gemini Nano pour offrir une couverture linguistique plus large et une meilleure qualité. Il est actuellement disponible sur les appareils Pixel 10.
Pour notre fonctionnalité, nous combinons l'API Speech Recognition avec l'API ML Kit GenAI Prompt :
// implementation("com.google.mlkit:genai-prompt:1.0.0-beta3")
// implementation("com.google.mlkit:genai-speech-recognition:1.0.0-alpha1")
val tripEvents = ...
// Set up speech recognition
val speechRecognizerOptions =
speechRecognizerOptions {
locale = Locale.US
preferredMode = SpeechRecognizerOptions.Mode.MODE_ADVANCED
}
val speechRecognizer: SpeechRecognizer = SpeechRecognition.getClient(speechRecognizerOptions)
suspend fun transcribeVoiceNote(recognizer: SpeechRecognizer) {
// Display partial text as the user is recording audio
var partialTextResponse = ""
// Display the full text once user is finished recording audio
var transcription = ""
val request: SpeechRecognizerRequest
= speechRecognizerRequest { audioSource = AudioSource.fromMic() }
recognizer.startRecognition(request).collect { response ->
when (response) {
is SpeechRecognizerResponse.PartialTextResponse -> {
partialTextResponse = response.text
}
is SpeechRecognizerResponse.FinalTextResponse -> {
transcription = response.text
processAndCategorizeVoiceNote(transcription, tripEvents)
}
}
}
}
fun processAndCategorizeVoiceNote(transcribedVoiceNote: String, events: List<Event>) {
val prompt = "Given the voice note $transcribedVoiceNote
and the following events for this trip: $events, rewrite this transcription
to remove filler words. Then, identify which events from the
list this rewritten transcription matches to."
// Utilize ML Kit's Prompt API to process voice note and tag it with the relevant trip activities
Generation.getClient().generateContent(prompt)
}Conclusion
Grâce aux API GenAI de ML Kit, nous avons pu tirer parti de Gemini Nano pour développer des fonctionnalités intelligentes entièrement sur l'appareil pour l'application JetPacker et offrir une expérience utilisateur améliorée sans aucun coût cloud supplémentaire.
Consultez le code source complet de Jetpacker sur GitHub et regardez la vidéo Créer des applications Android intelligentes avec l'IA de Google pour découvrir comment intégrer des fonctionnalités intelligentes directement dans votre application à l'aide de modèles sur l'appareil, du raisonnement basé sur le cloud et des derniers frameworks agentiques.
En savoir plus
Consultez les autres parties de cette série d'articles de blog :
Partie 1 : présentation de l'application et vue d'ensemble.
Partie 2 (cet article) : Intelligence artificielle intégrée à l'appareil. Découvrez en détail les API d'IA générative de ML Kit et Gemini Nano pour créer des fonctionnalités axées sur la confidentialité, comme la synthèse d'itinéraires, l'analyse de reçus et le traitement audio local.
Partie 3 : Raisonnement hybride et cloud. Découvrez comment utiliser Firebase AI Logic pour ancrer les réponses LLM dans des données réelles telles que Google Maps et le contexte Web.
Partie 4 : Intégration du système. Intégration au système d'intelligence Android à l'aide d'AppFunctions.
Partie 5 (à venir) : workflows agentiques dans l'application. Étendez l'application avec un assistant de réservation de bout en bout optimisé par A2UI et ADK.
Vous souhaitez en savoir plus sur le développement Android ? Suivez Android Developers sur YouTube ou LinkedIn.
Tous les extraits de code de cet article de blog sont soumis à l'avis de droits d'auteur suivant :
Copyright 2026 Google LLC. SPDX-License-Identifier: Apache-2.0
-
Guides pratiquesBienvenue dans la série d'articles de blog "Créer des applications Android intelligentes", où nous prenons une application Android de base et la transformons en une expérience personnalisée, intelligente et agentive.
Thomas Ezan, Jolanda Verhoef, Caren Chang • Temps de lecture : 8 min -
Guides pratiquesJetpacker est une application de démonstration technique que notre équipe a entièrement conçue pour la Google I/O de cette année (à l'aide d'Antigravity). Jetpacker aide les utilisateurs à planifier, explorer et profiter de leur prochaine grande aventure.
Jolanda Verhoef • Temps de lecture : 4 min -
Guides pratiquesBienvenue dans la série d'articles de blog "Créer des applications Android intelligentes", où nous prenons une application Android de base et la transformons en une expérience personnalisée, intelligente et agentive. Dans notre précédent article, nous avons exploré comment tirer parti de Firebase AI Logic pour créer des fonctionnalités d'IA hybrides et hébergées dans le cloud.
Ben Weiss • Temps de lecture : 6 min
Recevez chaque semaine les dernières informations sur le développement Android directement dans votre boîte de réception.