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

Vous pouvez utiliser ML Kit pour générer des réponses aux messages à l'aide d'un modèle sur l'appareil.

Pour générer des réponses suggérées, vous transmettez à ML Kit un journal des messages récents dans une conversationnelle. Si ML Kit détermine que la conversation est en anglais, la conversation n'a pas d'objet potentiellement sensible, ML Kit génère jusqu'à trois réponses, que vous pouvez suggérer à l'utilisateur.

Avant de commencer

  1. Si ce n'est pas déjà fait, Ajoutez Firebase à votre projet Android.
  2. Ajouter les dépendances des bibliothèques Android ML Kit à votre module Fichier Gradle (au niveau de l'application) (généralement app/build.gradle):
    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services'
    
    dependencies {
      // ...
      implementation 'com.google.firebase:firebase-ml-natural-language:22.0.0'
      implementation 'com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7'
    }
  3. Toujours dans le fichier build.gradle au niveau de l'application, désactivez la compression. sur tflite fichiers:
    android {
        // ...
        aaptOptions {
            noCompress "tflite"
        }
    }

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

Pour générer des réponses suggérées, vous transmettez à ML Kit un List d'objets FirebaseTextMessage triés chronologiquement, en commençant par le code temporel le plus ancien.

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

Java

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

Kotlin

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

Chaque fois que l'utilisateur reçoit un message, ajoutez le message, son code temporel et l'élément l'ID utilisateur de l'expéditeur dans l'historique de la conversation. L'ID utilisateur peut être n'importe quelle chaîne qui identifie de manière unique l'expéditeur dans la conversation. L'ID utilisateur n'a pas besoin correspondant à n'importe quelle donnée utilisateur, et l'ID utilisateur n'a pas besoin d'être cohérent entre les conversations ou les appels du générateur de réponses suggérées.

Java

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

Kotlin

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

Voici un exemple d'objet d'historique des conversations:

Horodatage User-ID Utilisateur local ? Message
Jeu. 21 févr. 13:13:39 PST 2019 true Tu es en route ?
Jeu. 21 févr. 13:15:03 PST 2019 FRIEND0 faux Nous sommes en retard, désolé !

Notez que le message le plus récent de l'exemple ci-dessus provient d'un message utilisateur. C'est important, car ML Kit suggère des réponses à envoyer par l'utilisateur de votre application: l'utilisateur local. Vous devez être sûr de transmettre ML Kit, un journal de conversation qui se termine par un message auquel votre utilisateur que vous souhaitez répondre.

2. Obtenir des réponses aux messages

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

Java

FirebaseSmartReply smartReply = FirebaseNaturalLanguage.getInstance().getSmartReply();
smartReply.suggestReplies(conversation)
        .addOnSuccessListener(new OnSuccessListener<SmartReplySuggestionResult>() {
            @Override
            public void onSuccess(SmartReplySuggestionResult result) {
                if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
                    // The conversation's language isn't supported, so the
                    // 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
                // ...
            }
        });

Kotlin

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

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

Java

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

Kotlin

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

Notez que ML Kit risque de ne pas renvoyer de résultats si le modèle n'est pas sûr de la pertinence des réponses suggérées, la conversation d'entrée n'est pas ou si le modèle détecte des sujets sensibles.