O Kit de ML pode gerar respostas curtas a mensagens usando um modelo no dispositivo.
Para gerar respostas inteligentes, você transmite ao Kit de ML um registro de mensagens recentes em um conversa. Se o Kit de ML determinar que a conversa está em inglês e que a conversa não pode ter um assunto potencialmente sensível, o kit de ML gera até três respostas, que você pode sugerir ao usuário.
Agrupadas | Desagrupado | |
---|---|---|
Nome da biblioteca | com.google.mlkit:smart-reply | com.google.android.gms:play-services-mlkit-smart-reply |
Implementação | O modelo é vinculado estaticamente ao app no tempo de build. | O download do modelo é feito dinamicamente pelo Google Play Services. |
Impacto no tamanho do app | Aumento de tamanho de cerca de 5,7 MB. | Cerca de 200 KB de aumento. |
Horário de inicialização | O modelo está disponível imediatamente. | Talvez seja necessário aguardar o download do modelo para usar o modelo pela primeira vez. |
Faça um teste
- Teste o app de exemplo para um exemplo de uso dessa API.
Antes de começar
No arquivo
build.gradle
no nível do projeto, inclua a propriedade repositório Maven nas seçõesbuildscript
eallprojects
.Adicione as dependências das bibliotecas do Android do Kit de ML ao arquivo arquivo do Gradle no nível do app, que geralmente é
app/build.gradle
. Escolha uma destas opções: as seguintes dependências com base nas suas necessidades:- Para agrupar o modelo e o app, faça o seguinte:
dependencies { // ... // Use this dependency to bundle the model with your app implementation 'com.google.mlkit:smart-reply:17.0.4' }
- Para usar o modelo no 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 você optar por usar o modelo no Google Play Services, poderá configurar que o app faça o download automático do modelo para o dispositivo depois que ele for instalado pela Play Store. Ao adicionar a declaração a seguir ao arquivo
AndroidManifest.xml
do 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>
Também é possível verificar explicitamente a disponibilidade do modelo e solicitar o download pelo API ModuleInstallClient do Google Play Services.
Se você não ativar os downloads do modelo de tempo de instalação ou solicitar o download explícito, o modelo é transferido por download na primeira vez que você executa o gerador de resposta inteligente. As solicitações feitas antes da conclusão do download não produzem resultados.
1. Criar um objeto de histórico de conversas
Para gerar respostas inteligentes, você transmite ao Kit de ML um
List
em ordem cronológica de objetosTextMessage
, com o carimbo de data/hora mais antigo primeiro.Sempre que o usuário enviar uma mensagem, adicione a mensagem e o carimbo de data/hora ao histórico de conversas:
Kotlin
conversation.add(TextMessage.createForLocalUser( "heading out now", System.currentTimeMillis()))
Java
conversation.add(TextMessage.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 identifica exclusivamente o remetente dentro da conversa. O ID do usuário não precisa para corresponder aos dados do usuário, e o ID do usuário não precisa ser consistente entre conversas ou invocações do gerador de respostas inteligentes.
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));
Um objeto de histórico de conversas é parecido com este exemplo:
Carimbo de data/hora userID isLocalUser Mensagem Quinta-feira, 21 de fevereiro, 13:13:39 PST 2019 verdadeiro você está a caminho? Quinta-feira, 21 de fevereiro, 13:15:03 PST 2019 FRIEND0 falso Sinto muito! O Kit de ML sugere respostas para a última mensagem no histórico de conversas. A última mensagem deve ser de um usuário não local. No exemplo acima, a última mensagem da conversa pertence ao usuário não local FRIEND0. Quando você usa esse registro, ele sugere responde à mensagem de FRIENDO: "Está atrasado, sinto muito!".
2. Receber respostas de mensagens
Para gerar respostas inteligentes a uma mensagem, receba uma instância de
SmartReplyGenerator
e transmita o histórico da conversa para o métodosuggestReplies()
: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 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:Kotlin
for (suggestion in result.suggestions) { val replyText = suggestion.text }
Java
for (SmartReplySuggestion suggestion : result.getSuggestions()) { String replyText = suggestion.getText(); }
O kit de ML poderá não retornar resultados se o modelo não confiar na a relevância das respostas sugeridas, a conversa de entrada não está inglês ou se o modelo detectar um assunto sensível.