ML Kit を使用してスマート リプライを生成する(Android)

ML Kit では、オンデバイス モデルを使用してメッセージに対する短い返信を生成できます。

スマート リプライを生成するには、ML Kit に最近のメッセージのログを あります。ML Kit によって会話が英語であると判断され、 会話に機密のテーマが含まれない場合、ML Kit では 最大 3 件の返信が生成され、ユーザーに提案できます。

<ph type="x-smartling-placeholder">
バンドルバンドルされていません
ライブラリ名com.google.mlkit:smart-replycom.google.android.gms:play-services-mlkit-smart-reply
実装モデルは、ビルド時にアプリに静的にリンクされます。モデルは Google Play 開発者サービスを介して動的にダウンロードされます。
アプリのサイズへの影響サイズが約 5.7 MB 増加します。約 200 KB のサイズ増加。
初期化時間モデルはすぐに使用できます。初めて使用するには、モデルがダウンロードされるのを待たなければならない場合があります。

試してみる

始める前に

<ph type="x-smartling-placeholder">
  1. プロジェクト レベルの build.gradle ファイルに、Google の buildscript セクションと allprojects セクションの両方に Maven リポジトリ

  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.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 開発者サービスでこのモデルを使用する場合は、 アプリがダウンロードされると、モデルが自動的にデバイスにダウンロードされるようになります。 ダウンロードする必要があります。次の宣言を アプリの 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>
    

    モデルの提供状況を明示的に確認し、 Google Play 開発者サービスの ModuleInstallClient API

    インストール時のモデルのダウンロードを有効にしない場合、または明示的なダウンロードをリクエストしない場合、 モデルは、スマート リプライ生成ツールの初回実行時にダウンロードされます。 ダウンロードが完了する前にリクエストしても結果は返されません。

    1. 会話履歴オブジェクトを作成する

    スマート リプライを生成するには、ML Kit に時系列の List を渡します。 TextMessage 個のオブジェクトのうち、最も古いタイムスタンプが最初に来ます。

    ユーザーがメッセージを送信するたびに、メッセージとそのタイムスタンプを 会話履歴:

    Kotlin

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

    Java

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

    ユーザーがメッセージを受信するたびに、メッセージ、そのタイムスタンプ、 会話履歴に追加します。ユーザー ID には、ユーザー ID とユーザー ID が スレッド内の送信者を一意に識別します。ユーザー ID は必要ありません。 関連付けられており、ユーザー ID は一貫していなくてもよい 会話やスマート リプライ ジェネレータの呼び出し間で やり取りできます

    Kotlin

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

    会話履歴オブジェクトは次の例のようになります。

    タイムスタンプ userID isLocalUser メッセージ
    2019 年 2 月 21 日(木)13:13:39(PST) true 今向かっていますか?
    2019 年 2 月 21 日(木)13:15:03(PST) FRIEND0 false 遅れてごめんなさい!

    ML Kit は、会話履歴の最後のメッセージに対する返信を提案します。最後のメッセージ ローカル以外のユーザーによるものである必要があります。上の例では、会話の最後のメッセージが ローカル以外のユーザー FRIEND0 さんからのものです。Pass ML Kit を使用すると、 FRIENDO さんのメッセージに返信しています。「遅れて申し訳ありません!」

    2. メッセージの返信を受け取る

    メッセージに対するスマート リプライを生成するには、SmartReplyGenerator のインスタンスを取得します。 会話履歴を suggestReplies() メソッドに渡します。

    Kotlin

    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 オブジェクトが 使用します。このオブジェクトには、最大 3 つの返信文の候補のリストが格納されており、 これをユーザーに提示できます。

    Kotlin

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

    Java

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

    モデルが信頼できていない場合は、ML Kit が結果を返さない場合があるので注意してください。 定型返信文の関連性を保ちながら、入力された会話は またはモデルがデリケートな主題を検出するかどうかを表します。