Генерируйте умные ответы с помощью 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 на уровне проекта обязательно укажите репозиторий Maven от Google в разделах buildscript и allprojects .

  2. Добавьте зависимости для библиотек 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 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'
    }
    

    Если вы решите использовать модель из Google Play Services, вы можете настроить свое приложение так, чтобы оно автоматически загружало модель на устройство после установки приложения из 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 модуля ModuleInstallClient сервисов Google Play.

    Если вы не включите загрузку модели во время установки или не запросите явную загрузку, модель будет загружена при первом запуске генератора интеллектуальных ответов. Запросы, сделанные до завершения загрузки, не дадут результатов.

    1. Создайте объект истории переписки.

    Для генерации интеллектуальных ответов необходимо передать ML Kit List объектов TextMessage , упорядоченных в хронологическом порядке, при этом самая ранняя метка времени должна быть первой.

    Каждый раз, когда пользователь отправляет сообщение, добавляйте это сообщение и его отметку времени в историю переписки:

    Котлин

    conversation.add(TextMessage.createForLocalUser(
            "heading out now", System.currentTimeMillis()))

    Java

    conversation.add(TextMessage.createForLocalUser(
            "heading out now", System.currentTimeMillis()));

    Каждый раз, когда пользователь получает сообщение, добавьте в историю переписки само сообщение, его временную метку и идентификатор пользователя отправителя. Идентификатор пользователя может представлять собой любую строку, однозначно идентифицирующую отправителя в рамках переписки. Идентификатор пользователя не обязательно должен соответствовать каким-либо данным пользователя и не обязательно должен оставаться неизменным между перепиской или вызовами генератора интеллектуальных ответов.

    Котлин

    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));

    Объект истории переписки выглядит следующим образом:

    Отметка времени ID пользователя isLocalUser Сообщение
    Чт, 21 фев 2019, 13:13:39 PST истинный Вы уже в пути?
    Чт, 21 фев 2019, 13:15:03 PST ДРУГ0 ЛОЖЬ Опаздываю, извините!

    ML Kit предлагает ответы на последнее сообщение в истории переписки. Последнее сообщение должно быть от пользователя, не являющегося локальным. В приведенном выше примере последнее сообщение в переписке отправлено пользователем FRIEND0, не являющимся локальным. Если вы передадите ML Kit этот лог, он предложит ответы на сообщение FRIEND0: "Опаздываю, извините!"

    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
                // ...
            }

    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 . Этот объект содержит список из трех предлагаемых вариантов ответа, которые вы можете показать пользователю:

    Котлин

    for (suggestion in result.suggestions) {
        val replyText = suggestion.text
    }

    Java

    for (SmartReplySuggestion suggestion : result.getSuggestions()) {
        String replyText = suggestion.getText();
    }

    Обратите внимание, что ML Kit может не выдавать результаты, если модель не уверена в релевантности предложенных ответов, если входной диалог не на английском языке или если модель обнаруживает конфиденциальную информацию.