Genera risposte intelligenti con ML Kit su Android

Puoi usare ML Kit per generare risposte ai messaggi usando un modello sul dispositivo.

Per generare risposte intelligenti, trasmetti a ML Kit un registro dei messaggi recenti in una conversazione. Se ML Kit determina che la conversazione è in inglese e che non tratta argomenti potenzialmente sensibili, ML Kit genera fino a tre risposte, che puoi suggerire al tuo utente.

Prima di iniziare

  1. Se non l'hai già fatto, aggiungi Firebase al tuo progetto Android .
  2. Aggiungi le dipendenze per le librerie Android ML Kit al file Gradle del modulo (a livello di app) (in genere 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. Inoltre, nel file build.gradle a livello di app, disabilita la compressione dei file tflite :
    android {
        // ...
        aaptOptions {
            noCompress "tflite"
        }
    }
    

1. Crea un oggetto cronologia conversazioni

Per generare risposte intelligenti, passi a ML Kit un List di oggetti FirebaseTextMessage in ordine cronologico, con prima il timestamp più recente.

Ogni volta che l'utente invia un messaggio, aggiungi il messaggio e il relativo timestamp alla cronologia delle conversazioni:

Giava

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

Kotlin

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

Ogni volta che l'utente riceve un messaggio, aggiungi il messaggio, il relativo timestamp e l'ID utente del mittente alla cronologia delle conversazioni. L'ID utente può essere qualsiasi stringa che identifica in modo univoco il mittente all'interno della conversazione. Non è necessario che l'ID utente corrisponda ad alcun dato utente e non è necessario che sia coerente tra conversazioni o invocazioni del generatore di risposte intelligenti.

Giava

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 oggetto della cronologia delle conversazioni è simile al seguente esempio:

Timestamp ID utente Utente locale? Messaggio
Gio 21 febbraio 13:13:39 PST 2019 VERO stai arrivando?
Gio 21 febbraio 13:15:03 PST 2019 AMICO0 falso In ritardo, scusa!

Tieni presente che il messaggio più recente nell'esempio precedente proviene da un utente non locale. Questo è importante perché ML Kit suggerisce risposte destinate ad essere inviate dall'utente della tua app: l'utente locale. Dovresti essere sicuro di passare a ML Kit un registro delle conversazioni che termina con un messaggio a cui il tuo utente potrebbe voler rispondere.

2. Ricevi risposte ai messaggi

Per generare risposte intelligenti a un messaggio, ottieni un'istanza di FirebaseSmartReply e passa la cronologia delle conversazioni al suo metodo suggestReplies() :

Giava

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
            // ...
        }

Se l'operazione ha esito positivo, un oggetto SmartReplySuggestionResult viene passato al gestore dell'esito positivo. Questo oggetto contiene un elenco di un massimo di 3 risposte suggerite, che puoi presentare al tuo utente:

Giava

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

Kotlin

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

Tieni presente che ML Kit potrebbe non restituire risultati se il modello non è sicuro della pertinenza delle risposte suggerite, la conversazione di input non è in inglese o se il modello rileva argomenti delicati.