Générer des réponses suggérées avec ML Kit sur Android

ML Kit peut générer des réponses courtes aux messages à l'aide d'un modèle sur l'appareil.

Pour générer des réponses intelligentes, vous transmettez à ML Kit un journal des messages récents d'une conversation. Si ML Kit détermine que la conversation est en anglais et qu'elle ne porte pas sur un sujet potentiellement sensible, il génère jusqu'à trois réponses que vous pouvez suggérer à votre utilisateur.

GroupéeDégroupé
Nom de la bibliothèquecom.google.mlkit:smart-replycom.google.android.gms:play-services-mlkit-smart-reply
ImplémentationLe modèle est associé de manière statique à votre application au moment de la compilation.Le modèle est téléchargé de manière dynamique via les services Google Play.
Impact de la taille des applicationsAugmentation de la taille d'environ 5,7 Mo.Augmentation de la taille d'environ 200 Ko.
Délai d'initialisationLe modèle est disponible immédiatement.Vous devrez peut-être attendre que le modèle soit téléchargé avant de pouvoir l'utiliser pour la première fois.

Essayer

Avant de commencer

  1. Dans le fichier build.gradle au niveau du projet, veillez à inclure le dépôt Maven de Google à la fois dans les sections buildscript et allprojects.

  2. Ajoutez les dépendances des bibliothèques Android ML Kit au fichier Gradle au niveau de l'application de votre module, qui est généralement app/build.gradle. Choisissez l'une des dépendances suivantes en fonction de vos besoins :

    • Pour regrouper le modèle avec votre application :
    dependencies {
      // ...
      // Use this dependency to bundle the model with your app
      implementation 'com.google.mlkit:smart-reply:17.0.4'
    }
    
    • Pour utiliser le modèle dans les services Google Play :
    dependencies {
      // ...
      // Use this dependency to use the dynamically downloaded model in Google Play Services
      implementation 'com.google.android.gms:play-services-mlkit-smart-reply:16.0.0-beta1'
    }
    

    Si vous choisissez d'utiliser le modèle dans les services Google Play, vous pouvez configurer votre application pour qu'elle télécharge automatiquement le modèle sur l'appareil après son installation depuis le Play Store. En ajoutant la déclaration suivante au fichier AndroidManifest.xml de votre application :

    <application ...>
          ...
          <meta-data
              android:name="com.google.mlkit.vision.DEPENDENCIES"
              android:value="smart_reply" >
          <!-- To use multiple models: android:value="smart_reply,model2,model3" -->
    </application>
    

    Vous pouvez également vérifier explicitement la disponibilité du modèle et demander son téléchargement via l'API ModuleInstallClient des services Google Play.

    Si vous n'activez pas les téléchargements de modèles au moment de l'installation ou ne demandez pas de téléchargement explicite, le modèle est téléchargé la première fois que vous exécutez le générateur de réponses intelligentes. Les requêtes que vous effectuez avant la fin du téléchargement ne produisent aucun résultat.

    1. Créer un objet d'historique des conversations

    Pour générer des réponses intelligentes, vous transmettez à ML Kit un List TextMessage d'objets, avec le code temporel le plus ancien en premier.

    Chaque fois que l'utilisateur envoie un message, ajoutez-le à l'historique des conversations avec son code temporel :

    Kotlin

    conversation.add(TextMessage.createForLocalUser(
            "heading out now", System.currentTimeMillis()))

    Java

    conversation.add(TextMessage.createForLocalUser(
            "heading out now", System.currentTimeMillis()));

    Chaque fois que l'utilisateur reçoit un message, ajoutez-le à l'historique des conversations, ainsi que son code temporel et l'ID utilisateur de l'expéditeur. L'ID utilisateur peut être n'importe quelle chaîne identifiant de manière unique l'expéditeur dans la conversation. L'ID utilisateur n'a pas besoin de correspondre à des données utilisateur, ni d'être cohérent entre les conversations ou les invocations du générateur de réponses intelligentes.

    Kotlin

    conversation.add(TextMessage.createForRemoteUser(
            "Are you coming back soon?", System.currentTimeMillis(), userId))

    Java

    conversation.add(TextMessage.createForRemoteUser(
            "Are you coming back soon?", System.currentTimeMillis(), userId));

    Un objet d'historique des conversations ressemble à l'exemple suivant :

    Horodatage userID isLocalUser Message
    Jeu. 21 févr. 2019 13:13:39 PST true Tu es en route ?
    Jeu. 21 févr. 2019 13:15:03 PST FRIEND0 faux Je suis en retard, désolé(e) !

    ML Kit suggère des réponses au dernier message d'un historique de conversation. Le dernier message doit provenir d'un utilisateur non local. Dans l'exemple ci-dessus, le dernier message de la conversation provient de l'utilisateur non local FRIEND0. Lorsque vous utilisez le pass ML Kit, ce journal suggère des réponses au message de FRIENDO : "Je suis en retard, désolé !"

    2. Recevoir des réponses aux messages

    Pour générer des réponses suggérées à un message, obtenez une instance de SmartReplyGenerator et transmettez l'historique des conversations à sa méthode suggestReplies() :

    Kotlin

    val smartReplyGenerator = SmartReply.getClient()
    smartReply.suggestReplies(conversation)
            .addOnSuccessListener { result ->
                if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
                    // The conversation's language isn't supported, so
                    // the result doesn't contain any suggestions.
                } else if (result.getStatus() == SmartReplySuggestionResult.STATUS_SUCCESS) {
                    // Task completed successfully
                    // ...
                }
            }
            .addOnFailureListener {
                // Task failed with an exception
                // ...
            }

    Java

    SmartReplyGenerator smartReply = SmartReply.getClient();
    smartReply.suggestReplies(conversation)
            .addOnSuccessListener(new OnSuccessListener() {
                @Override
                public void onSuccess(SmartReplySuggestionResult result) {
                    if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
                        // The conversation's language isn't supported, so
                        // the result doesn't contain any suggestions.
                    } else if (result.getStatus() == SmartReplySuggestionResult.STATUS_SUCCESS) {
                        // Task completed successfully
                        // ...
                    }
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    // Task failed with an exception
                    // ...
                }
            });

    Si l'opération réussit, un objet SmartReplySuggestionResult est transmis au gestionnaire de réussite. Cet objet contient une liste de trois suggestions de réponses au maximum que vous pouvez présenter à votre utilisateur :

    Kotlin

    for (suggestion in result.suggestions) {
        val replyText = suggestion.text
    }

    Java

    for (SmartReplySuggestion suggestion : result.getSuggestions()) {
        String replyText = suggestion.getText();
    }

    Notez que ML Kit peut ne pas renvoyer de résultats si le modèle n'est pas sûr de la pertinence des réponses suggérées, si la conversation d'entrée n'est pas en anglais ou si le modèle détecte un sujet sensible.