Intégrer des fonctions de Gemini à votre application Android

1. Avant de commencer

L'API Gemini vous donne accès aux modèles d'IA générative de la famille Gemini. Vous pouvez ainsi créer de nouvelles expériences qui n'existaient pas jusqu'à présent.

Cet atelier de programmation vous explique comment ajouter des capacités de synthèse à l'application JetNews. JetNews est une application de lecture d'actualités créée avec Jetpack Compose. Celle-ci fait partie du dépôt compose-samples.

Application JetNews en action

Au cours de cet atelier de programmation, vous apprendrez à :

  • créer une requête pour résumer des articles de presse dans Vertex AI Studio ;
  • intégrer le SDK Vertex AI in Firebase à JetNews ;
  • ajouter une section "Gemini summary" (Synthèse Gemini) en haut de l'affichage de l'article ainsi qu'un "bouton de synthèse" dans la barre inférieure.

7eee9f1dcad682c.png

L'application JetNews avec la fonctionnalité de synthèse fournie par l'API Gemini.

Conditions préalables

  • Posséder des connaissances de base en Kotlin.
  • Savoir utiliser Android Studio et tester des applications dans un émulateur ou sur un appareil physique exécutant Android (niveau d'API 21) ou version ultérieure.
  • Posséder un compte Google pour accéder à Firebase.

2. Créer une requête

La requête est le message envoyé par votre application au modèle Gemini via l'API Gemini. Il peut s'agir de fichiers texte, image, audio ou encore vidéo.

Créer la requête idéale pour un cas d'utilisation spécifique est un art plus qu'une science, et plusieurs itérations sont souvent nécessaires. Vertex AI Studio est un excellent outil pour créer votre requête.

Dans cet exemple, vous allez créer une requête textuelle dans Vertex AI Studio. Ouvrez Vertex AI Studio, puis cliquez sur "Freeform" (Format libre) dans le panneau de navigation situé à gauche.

52e11cb6e67d7199.png

Dans cet atelier de programmation, vous apprendrez à résumer le contenu d'un article technique en quatre points. L'objectif de cette requête est de s'assurer que la synthèse est pertinente et qu'elle s'affiche en texte brut, sans aucune mise en forme Markdown.

Après quelques itérations, vous devriez trouverez la requête idéale, comme celle ci-dessous, par exemple :

Summarize the core findings of the following article in 4 concise bullet points. Ensure each bullet point is specific, informative and relevant. Return just the bullet points as plain text. Don't use markdown.

[article body]

Une fois que vous êtes satisfait du résultat, vous pouvez intégrer l'API Gemini à l'application Android.

3. Consulter le code

Commencez par consulter le code source du déclencheur sur GitHub :

git clone https://github.com/android/codelab-gemini-summary

L'application JetNews est conçue pour respecter les bonnes pratiques de l'architecture Android et s'adapter à tous les appareils mobiles, qu'ils soient petits ou grands.

En savoir plus sur l'approche d'implémentation de JetNews pour la prise en charge des grands écrans.

Si le code source de l'application JetNews est trop complexe, pas d'inquiétude. Pour ajouter la fonctionnalité de synthèse fournie par Gemini, seul le code de la classe GeminiRepositoryImpl est à modifier. Le code qui déclenche la création de la synthèse et l'affiche dans l'application est déjà implémenté pour vous.

Implémentation finale

Vous pouvez accéder directement à l'implémentation finale du code source en consultant cette branche :

git clone https://github.com/android/codelab-gemini-summary
git switch final

Pour créer et configurer votre projet Firebase, vous devez suivre les instructions fournies à l'étape 4 de cet atelier de programmation.

4. Configurer votre projet Firebase

Créer un projet Firebase

Créez un projet Firebase dans la console Firebase. Créez un nouveau projet Firebase en saisissant un nouveau nom de projet à la première étape du workflow "Create project" (Créer un projet). Le projet Google Cloud sous-jacent est créé automatiquement.

Dans votre projet, accédez à la page Build with Gemini (Développer avec Gemini) pour effectuer les opérations suivantes :

Associer votre application à Firebase

Maintenant que vous avez configuré votre projet Firebase, vous devez associer votre application Android à ce projet.

  1. Dans la console Firebase, sélectionnez votre projet.
  2. Cliquez sur "Add app" (Ajouter une application), puis sélectionnez "Android".
  3. Suivez les instructions à l'écran pour enregistrer votre application grâce au nom de son package.
  4. Téléchargez le fichier google-services.json et ajoutez-le au répertoire racine du module de votre application (au niveau de l'application).
  5. Suivez les instructions à l'écran pour ajouter le plug-in Gradle des services Google et les dépendances Gradle de la nomenclature Firebase à votre application.

Autre possibilité : utiliser Firebase Assistant dans Android Studio pour associer votre application

Vous pouvez également utiliser Firebase Assistant dans Android Studio pour associer votre application à Firebase en quelques clics.

Firebase Assistant vous permet d'enregistrer votre application dans un projet Firebase et d'ajouter les fichiers, plug-ins et dépendances Firebase nécessaires à votre projet Android, le tout, depuis Android Studio.

Consultez les instructions fournies dans la documentation Firebase.

5. Mettre à jour les importations Gradle

L'application JetNews utilise la fonctionnalité Catalogues de versions Gradle, qui permet de centraliser les versions des dépendances.

  1. Afin d'ajouter l'importation Gradle pour le SDK Vertex AI in Firebase, ajoutez le code suivant à libs.versions.toml :
    [versions]
    ...
    vertexai = "16.0.0"
    
    [libraries]
    ...
    firebase-vertexai = { module = "com.google.firebase:firebase-vertexai", version.ref = "vertexai"}
    
  2. Mettez à jour build.gradle.kts :
    implementation(libs.firebase.vertexai)
    
  3. Cliquez sur "Sync now" (Synchroniser maintenant) pour récupérer les artefacts Gradle.

Si vous ne souhaitez pas utiliser les catalogues de versions Gradle, vous pouvez ajouter directement l'importation dans build.gradle.kts :

// Import the Firebase BoM
implementation(platform("com.google.firebase:firebase-bom:33.5.1"))
implementation("com.google.firebase:firebase-vertexai")

6. Intégrer le Kotlin

Maintenant que les dépendances appropriées ont été ajoutées, mettez à jour le code Kotlin.

Ouvrez la classe GeminiRepositoryImpl. Cette classe hébergera tout le code qui interagit avec l'API Gemini.

Initialiser le modèle Gemini

Créez une instance pour GenerativeModel :

private val generativeModel = Firebase.vertexAI.generativeModel(
   "gemini-1.5-flash",
   generationConfig = generationConfig {
      temperature = 0f
   },
      safetySettings = listOf(
         SafetySetting(HarmCategory.HARASSMENT, HarmBlockThreshold.LOW_AND_ABOVE),
                SafetySetting(HarmCategory.HATE_SPEECH, HarmBlockThreshold.LOW_AND_ABOVE),
                SafetySetting(HarmCategory.SEXUALLY_EXPLICIT, HarmBlockThreshold.LOW_AND_ABOVE),
                SafetySetting(HarmCategory.DANGEROUS_CONTENT, HarmBlockThreshold.LOW_AND_ABOVE),
       )
    )

Dans cet exemple, vous accédez au modèle Gemini 1.5 Flash. Ce modèle est capable de gérer le cas d'utilisation repris dans cet exemple (synthèse de texte). Il est aussi plus rentable que Gemini 1.5 Pro. Pour en savoir plus sur les modèles Gemini disponibles, consultez la documentation Vertex AI in Firebase.

Cet exemple définit également la valeur de la température sur 0, ce qui garantit une meilleure cohérence dans la génération de la synthèse. Pour en savoir plus sur les paramètres de configuration du modèle, consultez la documentation Vertex AI in Firebase.

Enfin, cet exemple définit des paramètres de sécurité pour s'assurer que le modèle génère un langage approprié dans ses réponses. Pour en savoir plus sur les fonctionnalités relatives aux paramètres de sécurité, consultez la documentation Vertex AI in Firebase.

Rédiger des synthèses à l'aide de Gemini

Mettez ensuite à jour la fonction summarizePost() pour résumer le post transmis en tant que paramètre.

Tout d'abord, extrayez le texte du post pour le transmettre au modèle :

val postString = StringBuilder()
for (paragraph in post.paragraphs) {
  postString.append(paragraph.text)
}

Créez votre prompt en fonction de la requête établie à l'étape 2 de cet atelier de programmation et en transmettant le post :

val prompt =
            "Summarize the following article in 4 concise bullet points. " +
                    "Ensure each bullet point is specific, informative and relevant. " +
                    "Return just the bullet points as plain text. " +
                    "Use plain text, don't use markdown. \n $postString"

Enfin, transmettez la requête au modèle et renvoyez la réponse :

return generativeModel.generateContent(prompt).text

Tester l'implémentation

Pour tester l'implémentation, cliquez sur "Run app" (Exécuter l'application) dans Android Studio, puis installez l'application JetNews sur votre émulateur ou sur un appareil physique.

Ouvrez un article sur la page d'accueil, puis cliquez sur le bouton de synthèse situé dans la barre inférieure :

Bouton servant à déclencher la synthèse Gemini

La section "Gemini summary" (Synthèse Gemini) devrait s'afficher en haut de l'article, sous l'illustration :

Section de synthèse Gemini située en haut de l'article

Architecture de l'application JetNews

L'application JetNews a été conçue pour présenter les fonctionnalités actuelles de l'UI de Jetpack Compose. Elle a été implémentée pour prendre en charge différentes tailles d'écran (pour en savoir plus, consultez cet article de blog).

L'objectif de cet atelier de programmation n'est pas d'aborder en détail l'architecture de l'application JetNews. L'intégration de Gemini se fait principalement dans la classe GeminiRepositoryImpl.

Toutefois, si vous souhaitez découvrir comment le bouton déclenche la synthèse, vous pouvez consulter SummaryButton() dans JetnewsIcons.kt. Vous pouvez également examiner l'implémentation de l'UI de la synthèse dans la fonction SummarySection() de PostContent.kt.

7. Conclusion

Dans cet atelier de programmation, vous avez appris à :

  • créer et tester une requête dans Vertex AI Studio ;
  • configurer un projet dans Firebase afin d'utiliser Vertex AI in Firebase ainsi que l'API Gemini ;
  • configurer les dépendances Gradle pour utiliser Vertex AI in Firebase dans une application Android ;
  • appeler l'API Gemini pour accéder au modèle Gemini 1.5 Flash à partir du code Kotlin.

Pour en savoir plus sur Vertex AI in Firebase pour les applications Android, consultez les exemples de code Android et parcourez la documentation.