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