Генерируйте умные ответы с помощью ML Kit на Android

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 КБ.
Время инициализации Модель доступна сразу. Возможно, придется подождать загрузки модели перед первым использованием.

Попробуйте это

Прежде чем вы начнете

  1. В файле build.gradle на уровне проекта обязательно включите репозиторий Google Maven как в разделы buildscript , так и в разделы allprojects .

  2. Добавьте зависимости для библиотек 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.3'
    }
    
    • Чтобы использовать модель в Сервисах 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 может не возвращать результаты, если модель не уверена в релевантности предлагаемых ответов, входной диалог ведется не на английском языке или если модель обнаруживает деликатную тему.