ML Kit может генерировать короткие ответы на сообщения, используя модель на устройстве.
Чтобы сгенерировать быстрые ответы, вы передаете ML Kit журнал последних сообщений в разговоре. Если ML Kit определяет, что беседа ведется на английском языке и не содержит потенциально деликатных тем, он генерирует до трех ответов, которые вы можете предложить пользователю.
| Пакетный | Без пакета | |
|---|---|---|
| Название библиотеки | com.google.mlkit:smart-reply | com.google.android.gms:play-services-mlkit-smart-reply |
| Реализация | Модель статически связана с приложением во время сборки. | Модель динамически скачивается через сервисы Google Play. |
| Влияние размера приложения | Размер увеличится примерно на 5,7 МБ. | Размер увеличивается примерно на 200 КБ. |
| Время инициализации | Модель доступна сразу. | Перед первым использованием может потребоваться дождаться скачивания модели. |
Попробовать
- Попробуйте поработать с примером приложения, чтобы понять, как использовать этот API.
Подготовка
В файле
build.gradleна уровне проекта добавьте репозиторий Maven от Google в разделыbuildscriptиallprojects.Добавьте зависимости для библиотек ML Kit для Android в файл Gradle на уровне приложения, который обычно называется
app/build.gradle. Выберите одну из следующих зависимостей в соответствии со своими потребностями:- Чтобы добавить модель в приложение:
dependencies { // ... // Use this dependency to bundle the model with your app implementation 'com.google.mlkit:smart-reply:17.0.4' }- Чтобы использовать модель в сервисах Google Play:
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' }Если вы решите использовать модель в сервисах Google Play, вы можете настроить приложение так, чтобы оно автоматически загружало модель на устройство после установки приложения из Google Play. Добавьте в файл
AndroidManifest.xmlприложения следующее объявление:<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>Вы также можете проверить доступность модели и запросить ее скачивание через ModuleInstallClient API сервисов Google Play.
Если вы не включите скачивание модели во время установки или не запросите явное скачивание, модель будет скачана при первом запуске генератора быстрых ответов. Запросы, сделанные до завершения скачивания, не принесут результатов.
1. Создайте объект истории чата
Чтобы сгенерировать быстрые ответы, передайте в ML Kit хронологически упорядоченный список
ListобъектовTextMessage, начиная с самой ранней временной метки.Каждый раз, когда пользователь отправляет сообщение, добавляйте его и временную метку в историю чата:
Kotlin
conversation.add(TextMessage.createForLocalUser( "heading out now", System.currentTimeMillis()))
Java
conversation.add(TextMessage.createForLocalUser( "heading out now", System.currentTimeMillis()));
При получении сообщения добавляйте его, временную метку и идентификатор пользователя отправителя в историю чата. Идентификатор пользователя может быть любой строкой, которая уникально идентифицирует отправителя в чате. Идентификатор пользователя не должен соответствовать каким-либо пользовательским данным и не должен быть согласован между разговорами или вызовами генератора быстрых ответов.
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));
Объект истории чата выглядит следующим образом:
Временная метка userID isLocalUser Сообщение Чт, 21 фев 2019 13:13:39 PST true Ты уже в пути? Thu Feb 21 13:15:03 PST 2019 FRIEND0 false Извините, я опаздываю. ML Kit предлагает ответы на последнее сообщение в истории чата. Последнее сообщение должно быть от внешнего пользователя. В примере выше последнее сообщение в чате отправлено пользователем FRIEND0, который не является локальным. Когда вы передаете этот журнал в ML Kit, он предлагает ответы на сообщение ДРУГА: "Опаздываю, извини!"
2. Получение ответов на сообщения
Чтобы сгенерировать быстрые ответы на сообщение, получите экземпляр
SmartReplyGeneratorи передайте историю чата в его методsuggestReplies():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 // ... } }); Если операция выполнена успешно, обработчику передается объект
SmartReplySuggestionResult. Этот объект содержит список, в котором может быть до трех готовых ответов. Вы можете показать их пользователю.Kotlin
for (suggestion in result.suggestions) { val replyText = suggestion.text }
Java
for (SmartReplySuggestion suggestion : result.getSuggestions()) { String replyText = suggestion.getText(); }
Обратите внимание, что ML Kit может не возвращать результаты, если модель не уверена в релевантности готовых ответов, входной разговор ведется не на английском языке или если модель обнаруживает деликатную тему.