Générer des réponses intelligentes 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 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 que la conversation n'a pas de sujet potentiellement sensible, ML Kit génère jusqu'à trois réponses, que vous pouvez suggérer à votre utilisateur.

Avant que tu commences

  1. Si vous ne l'avez pas déjà fait, ajoutez Firebase à votre projet Android .
  2. Ajoutez les dépendances des bibliothèques ML Kit Android au fichier Gradle de votre module (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 votre fichier build.gradle au niveau de l'application, désactivez la compression des fichiers tflite :
    android {
        // ...
        aaptOptions {
            noCompress "tflite"
        }
    }
    

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

Pour générer des réponses intelligentes, vous transmettez à ML Kit une List d'objets FirebaseTextMessage classés par ordre chronologique, avec l'horodatage le plus ancien en premier.

Chaque fois que l'utilisateur envoie un message, ajoutez le message et son horodatage à l'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 horodatage et l'ID utilisateur de l'expéditeur à l'historique des conversations. 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 de correspondre à des données 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éponse intelligent.

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))

Un objet d'historique de conversation ressemble à l'exemple suivant :

Horodatage Identifiant d'utilisateur Utilisateur local ? Message
jeu. 21 févr. 2019 13:13:39 PST vrai êtes-vous en route?
jeu. 21 févr. 2019 13:15:03 PST AMI0 faux En retard, désolé !

Notez que le message le plus récent dans l'exemple ci-dessus provient d'un utilisateur non local. Ceci est important car ML Kit suggère des réponses destinées à être envoyées par l'utilisateur de votre application : l'utilisateur local. Vous devez vous assurer que vous transmettez à ML Kit un journal de conversation qui se termine par un message auquel votre utilisateur pourrait vouloir répondre.

2. Obtenez des réponses aux messages

Pour générer des réponses intelligentes à un message, obtenez une instance de FirebaseSmartReply et transmettez l'historique des conversations à 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 réussit, un objet SmartReplySuggestionResult est transmis au gestionnaire de réussite. Cet objet contient une liste de 3 réponses suggérées 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 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.