Ingénieur Relations avec les développeurs
Pour intégrer une IA générative prête pour la production dans des applications Android, il ne suffit pas de se connecter à un LLM. Il faut également des contrôles de sécurité et de coûts de niveau entreprise. Dans cette session, découvrez comment Firebase AI Logic permet aux développeurs de déployer des expériences d'IA sécurisées et économiques à grande échelle.
Nous aborderons les principes de base de la sécurité et Firebase App Check, la gestion des coûts, le routage dynamique vers les modèles et l'exploitation des fonctionnalités multimodales.
Transcription
Bienvenue au Sommet des développeurs Android.
Je m'appelle Ankita Saxena et je suis responsable produit Firebase.
Et je m'appelle Arthur Thompson, ingénieur DevRel dans l'équipe Firebase.
Aujourd'hui, nous allons vous montrer comment ajouter des fonctionnalités génératives à vos applications Android.
Très bien.
Qu'est-ce que Firebase ?
Levez la main si vous avez déjà entendu parler de Firebase.
Oh, j'en vois beaucoup.
Parfait.
Firebase est la plate-forme de développement d'applications de Google.
Firebase fournit une plate-forme unifiée qui intègre plus de 20 produits. Vous n'avez donc pas l'expérience fragmentée que vous auriez avec d'autres logiciels.
Parlons des défis liés à l'intégration de l'IA générative dans les applications mobiles.
Nous avons identifié les trois principaux défis.
Tout d'abord, les fuites de clés API : il ne faut que quelques minutes pour les extraire.
Deuxièmement, la mise à jour des noms de modèles : nous recommandons toujours aux développeurs de ne pas les coder en dur dans leurs applications. Sinon, chaque fois qu'un nouveau modèle est disponible, vous devez publier une nouvelle version.
Troisièmement, la confidentialité des fichiers : il est très important pour tout développeur ou utilisateur d'application que ses données soient protégées et que les garde-fous appropriés soient en place pour l'application.
Présentation de Firebase AI Logic comme solution clé pour relever les défis dont nous avons parlé.
Quelle est la proposition de valeur de Firebase AI Logic ?
En gros, nous nous occupons de tout le backend personnalisé complexe, pour que vous n'ayez pas à le développer de votre côté.
Ensuite, en utilisant nos SDK client, vous pouvez appeler l'API Gemini directement et de manière sécurisée depuis vos applications mobiles.
Examinons le fonctionnement de l'architecture.
Sur la gauche, nous avons les SDK client Firebase.
Nous proposons actuellement une grande variété de SDK clients.
Je tiens à souligner que nous prenons également en charge Kotlin.
Lorsqu'un développeur souhaite effectuer une action d'IA, le SDK envoie la requête à Firebase AI Logic, qui l'achemine ensuite de manière sécurisée vers l'API Gemini Developer ou l'API Gemini Agent Platform.
En gros, nous gérons tout le backend personnalisé que vous créez aujourd'hui.
Et l'avantage que nous en tirons, c'est que vous accélérez le délai de mise sur le marché sans frais.
Passons maintenant à la partie la plus intéressante.
Il s'agit d'une démonstration de l'application FriendlyMeals.
Sachez que nous utiliserons la même application pour les autres démonstrations de cette session. N'hésitez donc pas à la télécharger.
Vous pouvez le scanner à l'aide du QR code affiché ici.
Passons à la démo.
L'application FriendlyMeals vous aide à identifier des recettes en fonction des ingrédients que vous saisissez.
Dans ce workflow, vous voyez les deux façons de capturer ces ingrédients.
Premièrement, vous saisissez les ingrédients dont vous disposez.
Deuxièmement, vous prenez une photo des ingrédients.
Je vais utiliser le premier workflow, qui consiste à saisir les ingrédients.
C'est tout ce que j'ai trouvé dans mon frigo.
Pendant que la recette est générée, j'aimerais attirer votre attention sur quelques points.
En arrière-plan, nous appelons les modèles Gemini.
Pour ce cas d'utilisation spécifique, nous appelons trois Gemini 3.8 Flash.
Si vous regardez l'image du haut, elle utilise en fait le modèle Gemini Nano Banana, qui est 2.1 Nano Banana, la dernière version.
Avant de passer au code, je souhaite revenir sur la proposition de valeur de Firebase AI Logic.
La première option est d'utiliser des SDK sans serveur.
Vous souhaitez ajouter une fonctionnalité d'IA, mais vous ne voulez pas avoir à configurer un backend.
C'est là que nos SDK côté client entrent en jeu.
Vous appelez directement Gemini depuis votre application Android.
Le deuxième est la présence de fonctionnalités de sécurité intégrées robustes.
Ainsi, pour vos appels à Gemini, vous pouvez exploiter des éléments tels que Firebase App Check, les modèles de prompts côté serveur et d'autres encore. Nous reviendrons sur ces fonctionnalités de sécurité un peu plus tard.
Troisièmement, la compatibilité avec des fonctionnalités avancées telles que les entrées multimodales et le streaming.
Imaginons que vous souhaitiez créer une application qui ajoute une fonctionnalité d'IA simple pour générer une histoire sur un sac à dos magique.
import com.google.firebase.Firebase
import com.google.firebase.ai.ai
@Composable
fun MagicBackpackGenerator() {
var output by remember { mutableStateOf("") }
LaunchedEffect(Unit) {
val model=Firebase.ai.generativeModel("gemini-4-argon")
val response = model.generateContent("Write a story about a magic backpack")
output = response.text.toString()
}
MagicBackpackUI(output)
}Il suffit de suivre ces trois étapes simples pour ajouter cette fonctionnalité d'IA et la préparer pour la production.
Puisque Firebase AI Logic facilite l'ajout de fonctionnalités d'IA à votre application, la première question que vous devez vous poser est la suivante : comment allez-vous sécuriser cette fonctionnalité ?
Passons maintenant aux détails de la sécurité, en commençant par Firebase App Check.
Firebase App Check vous aide à protéger vos données et vos utilisateurs, et à contrôler qui a accès à vos ressources d'API en attestant que les requêtes proviennent de votre application.
Il s'agit d'une couche de sécurité supplémentaire qui permet d'éviter que votre application ne soit utilisée de manière abusive.
Avant de passer au code, vous devez effectuer quelques étapes dans la console Firebase.
Dans la console Firebase, sous App Check, vous enregistrez votre application Android et ajoutez les fournisseurs d'attestation correspondants.
comme Play Integrity ou reCAPTCHA Enterprise.
Notez que lorsque vous commencez à configurer App Check, vous devez commencer par le mode non appliqué.
De cette façon, vous autorisez votre application à fournir des données de télémétrie pour vous assurer que toutes vos applications reçoivent des appels d'API réussis vers votre backend avant d'appliquer la règle.
Une fois que vous avez constaté que la télémétrie est bien transmise, vous pouvez appliquer App Check. À ce stade, toutes les requêtes qui ne disposent pas d'un jeton valide attesté par le matériel seront rejetées.
Voici à quoi ressemble le code pour implémenter App Check.
class FireTravelApp : Application() {
lateinit var appContainer: AppContainer
private set
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) {
Firebase.appCheck.installAppCheckProviderFactory(
DebugAppCheckProviderFactory.getInstance()
)
} else {
Firebase.appCheck.installAppCheckProviderFactory(
PlayIntegrityAppCheckProviderFactory.getInstance()
)
}
appContainer = AppContainer(this)
}
}Dans votre classe d'application, vous installez le fournisseur App Check.
Pendant les phases de développement, vous pouvez utiliser le fournisseur de débogage, puis, lorsque vous êtes prêt à passer en production, vous pouvez passer à Play Integrity ou à reCAPTCHA Enterprise.
N'oubliez pas que vous devez d'abord configurer App Check avant d'effectuer d'autres appels Firebase.
Lorsqu'ils créent des fonctionnalités d'IA, les développeurs codent souvent les requêtes en dur directement dans le code de leurs applications, mais cela pose deux problèmes majeurs.
Premièrement, si vous devez modifier le prompt, vous devez envoyer la mise à jour complète.
Deuxièmement, toute personne qui décompresse votre application a accès à votre prompt engineering propriétaire.
Pour résoudre ce problème, Firebase AI Logic utilise des modèles de prompts côté serveur.
Au lieu de conserver vos requêtes sur l'appareil, elles sont stockées dans le cloud.
Voici à quoi ressemble la vue des modèles de prompts côté serveur dans la console Firebase.
Vous créez les modèles au format .prompt.
---
model: 'gemini-3-flash'
input:
schema:...
tools:...
---
{{role "system"}}
You're a storyteller that tells nice and joyful stories with happy endings.
{{role "user"}}
Create a story about {{topic}} with the length of {{length}} words in the {{language}} language.Vous pouvez définir le nom du modèle ici.
Vous pouvez le modifier à tout moment.
Vous n'avez pas besoin de déployer la mise à jour complète de l'application.
Vous pouvez également mettre à jour les instructions système, et il accepte un schéma JSON strict pour l'entrée et la sortie.
Là encore, aucune publication d'application n'est requise.
Comme il se trouve dans le cloud, vous pouvez régler un prompt ou changer de modèle instantanément.
Voici à quoi ressemble le code en Kotlin.
val generativeModel = Firebase.ai.templateGenerativeModel()
val response = generativeModel.generateContent("storyteller-v1",
mapOf(
"topic" to topic,
"length" to length,
"language" to language
)
)
output.value = response.textNotez que les modèles de prompt de serveur sont en version Preview publique.
Vous pouvez également implémenter le mode Auth-only.
Cette méthode utilise des jetons utilisateur Firebase Auth pour autoriser la requête.
Pour compléter nos fonctionnalités de sécurité et verrouiller complètement votre application, vous pouvez également utiliser le mode "Modèle uniquement" directement depuis la console Firebase.
Une fois votre application en ligne, vous voudrez peut-être savoir comment elle se comporte.
Dans l'onglet "AI Monitoring", vous pouvez activer AI Monitoring et configurer votre taux d'échantillonnage en un seul clic.
Firebase capture automatiquement les métriques, les latences et le nombre de jetons sans que vous ayez à écrire de code d'analyse personnalisé.
Pour rappel, les deux modes que nous venons de voir sont tous deux disponibles dans la même fenêtre.
Une fois que vous avez activé AI Monitoring dans la console Firebase, les données sont directement transmises au tableau de bord AI Monitoring.
Vous pouvez observer votre latence au 95e centile, repérer les pics d'erreur soudains et suivre la consommation de jetons pour différentes modalités telles que le texte, les images et l'audio.
Vous pouvez également inspecter le lecteur de traces pour voir certaines traces.
Dans ce cas, comme il présente le modèle que nous utilisons, vous pouvez voir la latence et le taux de réussite.
Dans la console Firebase, où vous pouvez obtenir toutes les données de télémétrie et la visibilité sur le fonctionnement de votre fonctionnalité d'IA.
Dans ce cas, si vous constatez un pic soudain d'utilisation des jetons ou de latence, l'approche hybride est un moyen de réduire ces coûts ou cette latence.
Et comme les fonctionnalités d'IA générative deviennent un élément clé de nos applications, s'appuyer à 100 % sur le cloud n'est probablement pas le bon choix.
L'utilisation de Nano 4, un modèle sur l'appareil sur Android, offre trois avantages majeurs que vous connaissez peut-être déjà.
La première est le mode hors connexion.
Ainsi, que vous soyez dans une grande conférence, dans un avion ou dans le métro, votre fonctionnalité d'IA fonctionnera toujours.
Le coût.
Comme l'inférence s'exécute sur l'appareil, vous pouvez ajouter ces fonctionnalités sans vous soucier de l'augmentation des coûts de votre fonctionnalité d'IA.
Le troisième est la confidentialité des données.
S'il s'agit de données sensibles, vous pouvez garantir à vos utilisateurs qu'aucune inférence ne quitte votre appareil.
Ainsi, avec Firebase AI Logic, vous pouvez définir ces modes d'inférence et disposer de stratégies de routage claires, telles que PREFER_ON_DEVICE, PREFER_IN_CLOUD ou ONLY_ON_DEVICE.
Lorsque vous choisissez ONLY_ON_DEVICE, le SDK exploite directement le modèle sur l'appareil, en contournant complètement le cloud.
Passons au téléphone.
Nous allons donc revenir à FriendlyMeals et examiner certaines des fonctionnalités sur l'appareil.
Nous allons d'abord essayer de créer une recette à partir de certains ingrédients qui pourraient se trouver dans notre réfrigérateur.
Vous avez vu Ankita utiliser la méthode manuelle en saisissant simplement les ingrédients, puis en générant la recette.
Essayons une autre méthode.
Prenons ce réfrigérateur bien réel, qui n'est absolument pas généré.
Il y a beaucoup d'olives dans ce réfrigérateur. Voyons quel type de recette nous obtenons ici.
Je voudrais souligner deux points.
La première est que l'image n'a jamais quitté l'appareil.
L'image a été analysée localement par Nano par Gemma…
Nano 4.
Deuxièmement, la rapidité de la réponse.
Les ingrédients ont été générés.
Vous bénéficiez donc de deux avantages.
Les données ne quittent pas l'appareil, et la latence est considérablement réduite.
Voyons quelle recette nous obtenons pour le réfrigérateur rempli d'olives.
Cette fois, nous utilisons le cloud.
Nous prenons donc les ingrédients identifiés dans le réfrigérateur et les envoyons dans le cloud, en utilisant Firebase AI Logic pour générer une recette.
Je n'ai pas vu de saumon dans le réfrigérateur, mais j'en vois dans la recette.
Revenons aux diapositives, s'il vous plaît.
Comme nous l'avons vu dans la démonstration, passer d'un modèle local à un modèle cloud est assez simple.
Aujourd'hui, Firebase AI Logic permet l'inférence à l'aide d'un routage de base basé sur la disponibilité du réseau.
Pour gérer cette inférence, vous pouvez la considérer comme un garde-fou.
L'architecture inclut donc une prise en charge intégrée de fonctionnalités telles que les schémas multimodaux, d'entrée et de sortie, ainsi qu'une intégration complète avec Gemma, pardon, avec Gemini Nano 4.
Voyons maintenant comment ces garde-fous sont mis en œuvre dans la pratique.
Le routage hybride ne nécessite donc pas de créer un middleware complexe ni de créer vous-même une grande partie de la logique de remplacement.
Au niveau du code, il s'agit simplement d'un paramètre supplémentaire.
Vous transmettez un paramètre onDeviceConfig pour définir le mode de votre choix.
import com.google.firebase.Firebase
import com.google.firebase.ai.ai
@Composable
fun MagicBackpackGenerator() {
var output by remember { mutableStateOf("") }
LaunchedEffect(Unit) {
val model = Firebase.ai.generativeModel(modelName = "gemini-3.8-flash",
onDeviceConfig = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE))
val response = model.generateContent("Write a story about a magic backpack")
output = response.text.toString()
}
MagicBackpackUI(output)
}Dans ce cas, le SDK essaie d'abord le modèle local. S'il n'est pas disponible, il bascule automatiquement vers le cloud.
Maintenant que nous avons vu comment créer des applications sécurisées et exploiter des modèles sur l'appareil, parlons de l'optimisation des coûts.
Les fonctionnalités génératives peuvent évoluer rapidement, tout comme votre facture Cloud Billing.
Nous devons donc mettre en place des garde-fous appropriés pour nous assurer que nous disposons des contrôles d'infrastructure proactifs et des fonctionnalités automatisées adaptés pour vous aider à rendre vos budgets prévisibles et vos applications financièrement efficaces.
Arthur vient de souligner que l'inférence sur l'appareil est entièrement sans frais, mais il y aura toujours des scénarios qui nécessitent des tâches de raisonnement complexes, ainsi qu'un remplacement et un routage vers le cloud.
Lorsque ces appels cloud se produisent, vous avez besoin de garde-fous pour que votre budget reste prévisible.
C'est précisément pour cela que nous avons créé les plafonds de dépenses Firebase.
Les plafonds de dépenses vous permettent de contrôler plus précisément le coût de vos applications.
Ainsi, au lieu d'un paramètre de budget générique à l'échelle du projet et d'alertes budgétaires qui vous envoient simplement un e-mail, vous pouvez définir une limite de budget spécifique pour des services individuels comme Firebase AI Logic.
Lorsque vos dépenses atteignent 100 %, Firebase suspend automatiquement le service d'IA pour éviter toute facture excessive.
Au-delà des simples plafonds de dépenses, il existe plusieurs stratégies avancées d'optimisation des coûts.
Aujourd'hui, nous aimerions mettre en avant les déclencheurs Firebase AI Logic.
Que faire si vous avez besoin d'une logique personnalisée entre les deux ?
C'est là qu'interviennent les déclencheurs Firebase AI Logic.
Vous pouvez exécuter une fonction avant ou après la génération de contenu.
Utilisez-le pour vérifier l'utilisateur, filtrer l'entrée, ajouter du contexte et ajuster la réponse.
Maintenant que nous avons abordé l'optimisation des coûts et la sécurité, passons aux capacités des modèles et voyons ce que propose Firebase AI Logic.
Pour alimenter ces expériences multimodales, Firebase AI Logic fournit un catalogue complet de modèles et d'outils prêts pour la production.
Pour un raisonnement, du texte, du code et des contenus multimédias à grande vitesse, vous pouvez utiliser Gemini 4 Argon, Gemini 3.1 Pro, Gemini 3.8 Flash et d'autres modèles.
Vous pouvez également connecter ces modèles à des données réelles à l'aide de l'ancrage avec la recherche et Maps.
Enfin, pour la voix, nous proposons la synthèse vocale naturelle et la génération audio Gemini Live.
Revenons au téléphone une dernière fois.
Nous avons donc ici nos plats sucrés et salés.
Oh, désolé, pas celui-là.
Voici notre recette de toast rapide au ketchup et au fromage.
Elle a l'air délicieuse.
Commençons par l'API Live.
Dans ce cas, nous pourrons utiliser la vidéo qui revient et je pourrai dire : "Hey Gemini, peux-tu me dire quels sont les ingrédients sur la table ?"
D'après l'image sur l'écran de votre ordinateur portable, vous disposez de pain, de cheddar et de ketchup.
Très bien.
Puis-je commencer par la première étape de la recette ?
Oui.
La première étape consiste à préchauffer votre four grille-pain ou votre gril à feu moyen-vif.
Merci.
Très bien.
Dans ce cas, il s'agissait de l'API Live, et cette conversation restait ouverte jusqu'à ce que je la ferme.
L'autre que je voudrais vous montrer est la synthèse vocale.
Et avec la synthèse vocale, dans cet exemple, nous avons les instructions de la recette.
Au lieu de devoir les lire, je peux cliquer sur "Générer" ou "Parler" pour envoyer le texte des instructions au modèle de synthèse vocale.
Il génère l'audio et le renvoie à l'appareil.
Je peux la lire, la mettre en cache pour plus tard, et elle sera lue comme nous le voyons ici.
1.
Préchauffez le four ou le gril à feu moyen-vif.
2.
Placez deux tranches de pain sur une plaque de cuisson ou un plateau de grille-pain.
Super.
C'est chouette, non ?
Firebase AI Logic nous permet donc d'implémenter ce type de fonctionnalités intéressantes avec seulement quelques lignes de code.
Revenons aux diapositives.
Maintenant que nous avons vu comment fonctionne l'API Gemini Live, que faire si vous souhaitez créer vous-même une expérience conversationnelle mains libres ?
C'est là que l'API Gemini Live entre en jeu. Elle vous permet de créer des conversations vocales bidirectionnelles.
Votre application Android peut diffuser en direct l'audio du micro et les images de la caméra en amont, et recevoir en retour une voix naturelle, à faible latence et parlée en temps réel.
En Kotlin, la configuration semble assez familière.
val model = Firebase.ai.liveModel(
modelName = "gemini-3.1-flash-live-preview",
generationConfig = liveGenerationConfig {
responseModality = ResponseModality.AUDIO
},
systemInstruction = "Your main job is to change the color...",
tools = listOf(Tool.functionDeclarations(listOf(changeColorFunction)))
)
val session = model.connect(::handler)
session.startAudioConversation(::handler)
session.stopAudioConversation()Vous instanciez un modèle en direct configuré pour les réponses audio et vous vous connectez à la session avec un gestionnaire de flux.
Le point le plus important que nous souhaitons souligner ici est que le SDK gère l'ensemble des éléments WebSocket et des protocoles de streaming en arrière-plan.
Vous n'avez donc pas besoin de le coder, n'est-ce pas ?
Continuez à écrire des lignes.
Alors que nous terminons nos démonstrations et que nous nous tournons vers l'avenir du développement d'applications, nous aimerions mettre en avant un outil puissant pour votre workflow : les compétences d'agent Firebase.
# Execute to add agent capabilities to your workspace
npx skills add firebase/agent-skillsDe plus, pour ceux d'entre vous qui utilisent Antigravity et Android Studio, nous avons déjà intégré Firebase AI Logic directement dans le flux d'intégration.
Pour résumer, voici trois points clés à retenir : commencez à créer, appuyez-vous rapidement sur les outils de production, comme les outils de sécurité que nous avons abordés aujourd'hui, et enfin, utilisez les compétences des agents autant que possible.
Merci.
import com.google.firebase.Firebase
import com.google.firebase.ai.ai
@Composable
fun MagicBackpackGenerator() {
var output by remember { mutableStateOf("") }
LaunchedEffect(Unit) {
val model=Firebase.ai.generativeModel("gemini-4-argon")
val response = model.generateContent("Write a story about a magic backpack")
output = response.text.toString()
}
MagicBackpackUI(output)
}class FireTravelApp : Application() {
lateinit var appContainer: AppContainer
private set
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) {
Firebase.appCheck.installAppCheckProviderFactory(
DebugAppCheckProviderFactory.getInstance()
)
} else {
Firebase.appCheck.installAppCheckProviderFactory(
PlayIntegrityAppCheckProviderFactory.getInstance()
)
}
appContainer = AppContainer(this)
}
}---
model: 'gemini-3-flash'
input:
schema:...
tools:...
---
{{role "system"}}
You're a storyteller that tells nice and joyful stories with happy endings.
{{role "user"}}
Create a story about {{topic}} with the length of {{length}} words in the {{language}} language.val generativeModel = Firebase.ai.templateGenerativeModel()
val response = generativeModel.generateContent("storyteller-v1",
mapOf(
"topic" to topic,
"length" to length,
"language" to language
)
)
output.value = response.textimport com.google.firebase.Firebase
import com.google.firebase.ai.ai
@Composable
fun MagicBackpackGenerator() {
var output by remember { mutableStateOf("") }
LaunchedEffect(Unit) {
val model = Firebase.ai.generativeModel(modelName = "gemini-3.8-flash",
onDeviceConfig = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE))
val response = model.generateContent("Write a story about a magic backpack")
output = response.text.toString()
}
MagicBackpackUI(output)
}val model = Firebase.ai.liveModel(
modelName = "gemini-3.1-flash-live-preview",
generationConfig = liveGenerationConfig {
responseModality = ResponseModality.AUDIO
},
systemInstruction = "Your main job is to change the color...",
tools = listOf(Tool.functionDeclarations(listOf(changeColorFunction)))
)
val session = model.connect(::handler)
session.startAudioConversation(::handler)
session.stopAudioConversation()# Execute to add agent capabilities to your workspace
npx skills add firebase/agent-skills