É possível usar o Kit de ML para gerar respostas de mensagens usando um modelo no dispositivo.
Para gerar respostas inteligentes, você transmite ao Kit de ML um registro das mensagens recentes de uma conversa. Se determinar que a conversa está em inglês e que ela não trata de um assunto potencialmente confidencial, o Kit vai gerar até três respostas, que podem ser sugeridas ao usuário.
Antes de começar
- Adicione o Firebase ao seu projeto para Android, caso ainda não tenha feito isso.
- Adicione as dependências das bibliotecas do Android do Kit de ML ao arquivo
Gradle do módulo (nível do aplicativo) (geralmente
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' }
- Também no arquivo
build.gradle
no nível do aplicativo, desative a compactação de arquivostflite
:android { // ... aaptOptions { noCompress "tflite" } }
1. Criar um objeto de histórico de conversas
Para gerar respostas inteligentes, você transmite para o Kit de ML uma List
de objetos FirebaseTextMessage
em ordem cronológica, com o carimbo de data/hora mais antigo primeiro.
Sempre que o usuário enviar uma mensagem, adicione-a com o carimbo de data/hora ao histórico de conversas:
Java
conversation.add(FirebaseTextMessage.createForLocalUser(
"heading out now", System.currentTimeMillis()));
Kotlin
conversation.add(FirebaseTextMessage.createForLocalUser(
"heading out now", System.currentTimeMillis()))
Sempre que o usuário receber uma mensagem, adicione a mensagem, o carimbo de data/hora e o ID do usuário do remetente ao histórico de conversas. O ID do usuário pode ser qualquer string que identifique exclusivamente o remetente na conversa. O ID do usuário não precisa corresponder a nenhum dado do usuário e não precisa estar consistente entre conversas ou invocações do gerador de respostas inteligentes.
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))
Um objeto de histórico de conversas é parecido com o exemplo a seguir:
Carimbo de data/hora | ID do usuário | Usuário local? | Mensagem |
---|---|---|---|
Thu Feb 21 13:13:39 PST 2019 | true | are you on your way? | |
Thu Feb 21 13:15:03 PST 2019 | FRIEND0 | false | Running late, sorry! |
A mensagem mais recente no exemplo acima é de um usuário não local. Isso é importante porque o Kit de ML sugere respostas a serem enviadas pelo usuário do seu aplicativo, o usuário local. Verifique se você está transmitindo ao Kit de ML o registro de uma conversa que termina com uma mensagem à qual o usuário pode querer responder.
2. Receber respostas de mensagens
Para gerar respostas inteligentes a uma mensagem, receba uma instância de FirebaseSmartReply
e transmita o histórico de conversas para o método 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
// ...
}
Se a operação for bem-sucedida, um objeto SmartReplySuggestionResult
será transmitido para o gerenciador de sucesso. Esse objeto contém uma lista de até três respostas sugeridas, que você pode apresentar ao usuário:
Java
for (SmartReplySuggestion suggestion : result.getSuggestions()) {
String replyText = suggestion.getText();
}
Kotlin
for (suggestion in result.suggestions) {
val replyText = suggestion.text
}
Talvez o Kit de ML não retorne resultados se o modelo não estiver confiante na relevância das respostas sugeridas, se a conversa de entrada não estiver em inglês ou se o modelo detectar um assunto confidencial.