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 das mensagens recentes de uma conversa. Se o Kit de ML 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.
Agrupadas | Não agrupado | |
---|---|---|
Nome da biblioteca | com.google.mlkit:smart-reply | com.google.android.gms:play-services-mlkit-smart-reply |
Implementação | O modelo é vinculado de forma estática ao app no momento da criação. | O modelo é baixado dinamicamente pelo Google Play Services. |
Impacto do tamanho do app | Aumento de cerca de 5,7 MB. | Aumento de cerca de 200 KB. |
Tempo de inicialização | O modelo fica disponível imediatamente. | Talvez seja necessário esperar o download do modelo antes do primeiro uso. |
Faça um teste
- Teste o app de exemplo para conferir um exemplo de uso dessa API.
Antes de começar
No arquivo
build.gradle
no nível do projeto, inclua o repositório Maven do Google nas seçõesbuildscript
eallprojects
.Adicione as dependências das bibliotecas do Android do Kit de ML ao arquivo Gradle no nível do app do módulo, que geralmente é
app/build.gradle
. Escolha uma das dependências a seguir com base nas suas necessidades:- Para agrupar o modelo e o app:
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 seu app para fazer o download automático do modelo no dispositivo depois que ele for instalado na Play Store. Adicione a declaração abaixo 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 pela API ModuleInstallClient do Google Play Services.
Se você não ativar os downloads do modelo no momento da instalação ou solicitar um download explícito, o modelo será transferido na primeira vez que você executar o gerador de respostas inteligentes. 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, transmita para o Kit de ML uma
List
de objetosTextMessage
em ordem cronológica, 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:
conversation.add(TextMessage.createForLocalUser( "heading out now", System.currentTimeMillis()))
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 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.
conversation.add(TextMessage.createForRemoteUser( "Are you coming back soon?", System.currentTimeMillis(), userId))
conversation.add(TextMessage.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 userID isLocalUser Mensagem Thu Feb 21 13:13:39 PST 2019 verdadeiro are you on your way? Thu Feb 21 13:15:03 PST 2019 FRIEND0 falso Running late, sorry! O Kit de ML sugere respostas para a última mensagem em um histórico de conversas. A última mensagem precisa ser de um usuário não local. No exemplo acima, a última mensagem na conversa é do usuário não local FRIEND0. Quando você usa o Kit de ML para transmitir esse registro, ele sugere respostas à mensagem de FRIENDO: "Estou atrasado, desculpe!"
2. Receber respostas de mensagens
Para gerar respostas inteligentes a uma mensagem, receba uma instância de
SmartReplyGenerator
e transmita o histórico de conversas para o métodosuggestReplies()
: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 // ... }
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:for (suggestion in result.suggestions) { val replyText = suggestion.text }
for (SmartReplySuggestion suggestion : result.getSuggestions()) { String replyText = suggestion.getText(); }
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.