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
- Se non l'hai già fatto, aggiungi Firebase al tuo progetto Android .
- 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' }
- Inoltre, nel file
build.gradle
a livello di app, disabilita la compressione dei filetflite
: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.