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.2' }
- Чтобы использовать модель в сервисах 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>
Вы также можете явно проверить доступность модели и запросить загрузку через ModuleInstallClient API сервисов Google Play.
Если вы не включите загрузку модели во время установки или не запросите явную загрузку, модель будет загружена при первом запуске генератора интеллектуальных ответов. Запросы, которые вы делаете до завершения загрузки, не дают результатов.
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 PST 2019 истинный ты в пути? Чт 21 февраля 13:15:03 PST 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 может не возвращать результаты, если модель не уверена в релевантности предлагаемых ответов, вводная беседа не на английском языке или если модель обнаруживает деликатную тему.