Genera risposte rapide con ML Kit su Android

ML Kit può generare risposte brevi ai messaggi utilizzando un modello on-device.

Per generare risposte rapide, devi passare a ML Kit un log dei messaggi recenti di una conversazione. Se ML Kit determina che la conversazione è in inglese e che non contiene argomenti potenzialmente sensibili, genera fino a tre risposte, che puoi suggerire all'utente.

In bundleUnbundled
Nome della bibliotecacom.google.mlkit:smart-replycom.google.android.gms:play-services-mlkit-smart-reply
ImplementazioneIl modello è collegato staticamente alla tua app in fase di creazione.Il modello viene scaricato dinamicamente tramite Google Play Services.
Impatto delle dimensioni dell'appAumento delle dimensioni di circa 5,7 MB.Aumento delle dimensioni di circa 200 kB.
Tempo di inizializzazioneIl modello è disponibile immediatamente.Potrebbe essere necessario attendere il download del modello prima del primo utilizzo.

Prova

  • Prova l'app di esempio per vedere un esempio di utilizzo di questa API.

Prima di iniziare

  1. Nel file build.gradle a livello di progetto, assicurati di includere il repository Maven di Google nelle sezioni buildscript e allprojects.

  2. Aggiungi le dipendenze per le librerie Android di ML Kit al file gradle a livello di app del modulo, che di solito è app/build.gradle. Scegli una delle seguenti dipendenze in base alle tue esigenze:

    • Per raggruppare il modello con la tua app:
    dependencies {
      // ...
      // Use this dependency to bundle the model with your app
      implementation 'com.google.mlkit:smart-reply:17.0.4'
    }
    
    • Per utilizzare il modello in Google Play Services:
    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'
    }
    

    Se scegli di utilizzare il modello in Google Play Services, puoi configurare la tua app in modo che scarichi automaticamente il modello sul dispositivo dopo l'installazione dell'app dal Play Store. Aggiungendo la seguente dichiarazione al file AndroidManifest.xml dell'app:

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

    Puoi anche verificare esplicitamente la disponibilità del modello e richiedere il download tramite l'API ModuleInstallClient di Google Play Services.

    Se non attivi i download dei modelli al momento dell'installazione o non richiedi il download esplicito, il modello viene scaricato la prima volta che esegui il generatore di risposte rapide. Le richieste effettuate prima del completamento del download non producono risultati.

    1. Crea un oggetto della cronologia delle conversazioni

    Per generare risposte rapide, passi a ML Kit un List di oggetti TextMessage in ordine cronologico, con il timestamp meno recente per primo.

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

    Kotlin

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

    Java

    conversation.add(TextMessage.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 identifichi in modo univoco il mittente all'interno della conversazione. L'ID utente non deve corrispondere ad alcun dato utente e non deve essere coerente tra le conversazioni o le chiamate del generatore di risposte rapide.

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

    Timestamp userID isLocalUser Messaggio
    Thu Feb 21 13:13:39 PST 2019 true stai arrivando?
    Thu Feb 21 13:15:03 PST 2019 FRIEND0 false Sono in ritardo, mi dispiace.

    ML Kit suggerisce risposte suggerite all'ultimo messaggio nella cronologia di una conversazione. L'ultimo messaggio deve provenire da un utente non locale. Nell'esempio precedente, l'ultimo messaggio della conversazione proviene dall'utente non locale FRIEND0. Quando passi questo log a ML Kit, vengono suggerite risposte al messaggio di AMICO: "Sono in ritardo, scusa!"

    2. Ricevi risposte ai messaggi

    Per generare risposte rapide a un messaggio, recupera un'istanza di SmartReplyGenerator e passa la cronologia della conversazione al relativo metodo 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
                    // ...
                }
            });

    Se l'operazione va a buon fine, un oggetto SmartReplySuggestionResult viene passato al gestore dell'esito positivo. Questo oggetto contiene un elenco di un massimo di tre risposte suggerite, che puoi presentare all'utente:

    Kotlin

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

    Java

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

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