Генерируйте умные ответы с помощью 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 Services.
Влияние размера приложения Размер увеличился примерно на 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, вы можете настроить приложение на автоматическую загрузку модели на устройство после установки приложения из 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()))

    Ява

    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 фев 2019, 13:13:39 PST истинный вы уже в пути?
    Чт, 21 фев 2019, 13:15:03 PST ДРУГ0 ЛОЖЬ Извините, опаздываю!

    ML Kit предлагает ответы на последнее сообщение в истории переписки. Последнее сообщение должно быть от нелокального пользователя. В примере выше последнее сообщение в переписке от нелокального пользователя FRIEND0. При использовании pass ML Kit this log он предлагает ответы на сообщение 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 может не вернуть результаты, если модель не уверена в релевантности предлагаемых ответов, входной диалог ведется не на английском языке или если модель обнаружит деликатную тему.