ML Kit può generare risposte brevi ai messaggi utilizzando un modello on-device.
Per generare risposte rapide, passi a ML Kit un log dei messaggi recenti in una conversazione. Se ML Kit stabilisce che la conversazione è in inglese e che non include un oggetto potenzialmente sensibile, ML Kit genera fino a tre risposte, che puoi suggerire all'utente.
In bundle | Non in bundle | |
---|---|---|
Nome libreria | com.google.mlkit:smart-reply | com.google.android.gms:play-services-mlkit-smart-reply |
Implementazione | Il modello è collegato in modo statico alla tua app al momento della creazione. | Il modello viene scaricato in modo dinamico tramite Google Play Services. |
Impatto sulle dimensioni dell'app | Le dimensioni di circa 5,7 MB aumentano di circa 5,7 MB. | Le dimensioni sono aumentate di circa 200 kB. |
Tempo di inizializzazione | Il modello è disponibile immediatamente. | Potrebbe essere necessario attendere il download del modello prima del primo utilizzo. |
Prova
- Prova l'app di esempio per vedere un utilizzo di esempio di questa API.
Prima di iniziare
Assicurati di includere il repository Maven di Google nel file
build.gradle
a livello di progetto in entrambe le sezionibuildscript
eallprojects
.Aggiungi le dipendenze per le librerie di ML Kit per Android al file gradle a livello di app del tuo modulo, che in genere è
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.3' }
- 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 l'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
della tua 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 controllare esplicitamente la disponibilità del modello e richiedere il download tramite l'APIModuleInstallClient di Google Play Services.
Se non abiliti 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 generano risultati.
1. Crea un oggetto cronologia della conversazione
Per generare risposte rapide, passi ML Kit un
List
diTextMessage
oggetti in ordine cronologico, con il timestamp più recente.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 quest'ultimo, il relativo timestamp e l'ID utente del mittente alla cronologia della conversazione. L'ID utente può essere qualsiasi stringa che identifichi in modo univoco il mittente all'interno della conversazione. L'ID utente non deve necessariamente corrispondere ai dati 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 Gio 21 feb 2019 13:13:39 PST 2019 true sei per strada? Gio 21 feb 13:15:03 PST 2019 FRIEND0 false Mi dispiace, sono in ritardo! ML Kit suggerisce risposte all'ultimo messaggio nella cronologia delle conversazioni. L'ultimo messaggio deve provenire da un utente non locale. Nell'esempio precedente, l'ultimo messaggio nella conversazione è dell'utente non locale FRIEND0. Quando utilizzi il Pass ML Kit, questo log suggerisce delle risposte al messaggio di FRIENDO: "In ritardo, scusa!".
2. Ricevi risposte ai messaggi
Per generare risposte rapide a un messaggio, ottieni un'istanza di
SmartReplyGenerator
e passa la cronologia della conversazione al relativo metodosuggestReplies()
: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 ha esito positivo, un oggetto
SmartReplySuggestionResult
viene passato al gestore di operazione riuscita. Questo oggetto contiene un elenco di massimo 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, la conversazione di input non è in inglese o se il modello rileva un oggetto sensibile.