ML Kit может генерировать короткие ответы на сообщения, используя модель на устройстве.
Чтобы генерировать умные ответы, вы передаете 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
на уровне проекта обязательно включите репозиторий Google Maven как в разделыbuildscript
, так и в разделыallprojects
.Добавьте зависимости для библиотек Android ML Kit в файл 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, вы можете настроить свое приложение на автоматическую загрузку модели на устройство после установки приложения из Play Store. Добавив следующее объявление в файл
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>
Вы также можете явно проверить доступность модели и запросить загрузку через API сервисов Google Play ModuleInstallClient .
Если вы не включите загрузку модели во время установки или не запросите явную загрузку, модель загружается при первом запуске генератора интеллектуальных ответов. Запросы, которые вы делаете до завершения загрузки, не дают результатов.
1. Создайте объект истории разговоров.
Для создания интеллектуальных ответов вы передаете ML Kit
List
объектовTextMessage
в хронологическом порядке, начиная с самой ранней временной метки.Каждый раз, когда пользователь отправляет сообщение, добавляйте сообщение и его временную метку в историю разговора:
Котлин
conversation.add(TextMessage.createForLocalUser( "heading out now", System.currentTimeMillis()))
Ява
conversation.add(TextMessage.createForLocalUser( "heading out now", System.currentTimeMillis()));
Каждый раз, когда пользователь получает сообщение, добавляйте сообщение, его временную метку и идентификатор пользователя отправителя в историю разговора. Идентификатор пользователя может представлять собой любую строку, которая однозначно идентифицирует отправителя в диалоге. Идентификатор пользователя не обязательно должен соответствовать каким-либо пользовательским данным, а идентификатор пользователя не должен быть согласованным между разговором или вызовами генератора интеллектуальных ответов.
Котлин
conversation.add(TextMessage.createForRemoteUser( "Are you coming back soon?", System.currentTimeMillis(), userId))
Ява
conversation.add(TextMessage.createForRemoteUser( "Are you coming back soon?", System.currentTimeMillis(), userId));
Объект истории разговоров выглядит следующим образом:
Временная метка ID пользователя isLocalUser Сообщение Четверг, 21 февраля, 13:13:39 по тихоокеанскому стандартному времени 2019 г. истинный ты уже в пути? Чт, 21 февраля, 13:15:03 по тихоокеанскому стандартному времени 2019 г. ДРУГ0 ЛОЖЬ Опаздываю, извините! ML Kit предлагает ответы на последнее сообщение в истории разговоров. Последнее сообщение должно быть от нелокального пользователя. В приведенном выше примере последнее сообщение в беседе принадлежит нелокальному пользователю FRIEND0. Когда вы используете этот журнал pass ML Kit, он предлагает ответы на сообщение FRIENDO: «Опоздаю, извините!»
2. Получите ответы на сообщения
Чтобы сгенерировать интеллектуальные ответы на сообщение, получите экземпляр
SmartReplyGenerator
и передайте историю разговоров в его методsuggestReplies()
:Котлин
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 // ... } }); Если операция завершается успешно, объект
SmartReplySuggestionResult
передается обработчику успеха. Этот объект содержит список из трех предлагаемых ответов, которые вы можете представить своему пользователю:Котлин
for (suggestion in result.suggestions) { val replyText = suggestion.text }
Ява
for (SmartReplySuggestion suggestion : result.getSuggestions()) { String replyText = suggestion.getText(); }
Обратите внимание, что ML Kit может не возвращать результаты, если модель не уверена в релевантности предлагаемых ответов, входной диалог ведется не на английском языке или если модель обнаруживает деликатную тему.