Você pode usar o ML Kit para gerar respostas de mensagens usando um modelo no dispositivo.
Para gerar respostas inteligentes, você passa ao ML Kit um registro de mensagens recentes em uma conversa. Se o ML Kit determinar que a conversa está em inglês e que a conversa não tem assunto potencialmente delicado, o ML Kit gera até três respostas, que você pode sugerir ao usuário.
Antes de você começar
- Adicione o Firebase ao seu projeto Android , caso ainda não o tenha feito.
- Adicione as dependências das bibliotecas Android do ML Kit 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. Crie um objeto de histórico de conversa
Para gerar respostas inteligentes, você passa ao ML Kit uma List
ordenada cronologicamente de objetos FirebaseTextMessage
, com o carimbo de data/hora mais antigo primeiro.
Sempre que o usuário enviar uma mensagem, adicione a mensagem e seu carimbo de data/hora ao histórico da conversa:
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, seu carimbo de data/hora e o ID do usuário do remetente ao histórico da conversa. 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 ser consistente entre conversas ou invocações do gerador de resposta inteligente.
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 conversa se parece com o exemplo a seguir:
Carimbo de data e hora | ID do usuário | Usuário local? | Mensagem |
---|---|---|---|
Qui, 21 de fevereiro, 13:13:39 PST de 2019 | verdadeiro | você está no seu caminho? | |
Qui, 21 de fevereiro, 13:15:03 PST de 2019 | AMIGO0 | falso | Atrasado, desculpe! |
Observe que a mensagem mais recente no exemplo acima é de um usuário não local. Isso é importante porque o ML Kit sugere respostas que devem ser enviadas pelo usuário do seu aplicativo: o usuário local. Você deve passar ao Kit de ML um registro de conversa que termina com uma mensagem à qual seu usuário pode querer responder.
2. Obtenha respostas de mensagens
Para gerar respostas inteligentes a uma mensagem, obtenha uma instância do FirebaseSmartReply
e passe o histórico da conversa para seu 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á passado para o manipulador de sucesso. Este objeto contém uma lista de até 3 respostas sugeridas, que você pode apresentar ao seu usuário:
Java
for (SmartReplySuggestion suggestion : result.getSuggestions()) {
String replyText = suggestion.getText();
}
Kotlin
for (suggestion in result.suggestions) {
val replyText = suggestion.text
}
Observe que o Kit de ML poderá não retornar 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 assuntos confidenciais.