ML Kit では、デバイスモデルを使用してメッセージに対する短い返信を生成できます。
スマート リプライを生成するには、会話の最近のメッセージのログを ML Kit に渡します。会話が英語で、その会話にデリケートなテーマが含まれていないと ML Kit が判断した場合、最大 3 つの返信が生成され、ユーザーに提案できます。
バンドル | バンドルなし | |
---|---|---|
ライブラリ名 | com.google.mlkit:smart-reply | com.google.android.gms:play-services-mlkit-smart-reply |
実装 | モデルはビルド時にアプリに静的にリンクされます。 | モデルは Google Play 開発者サービスを介して動的にダウンロードされます。 |
アプリサイズへの影響 | サイズが約 5.7 MB 増加しました。 | 約 200 KB のサイズの増加。 |
初期化時間 | モデルはすぐに利用できます。 | 最初の使用前にモデルのダウンロードを待たなければならない場合があります。 |
試してみる
- サンプルアプリを動かして、この API の使用例を確認してください。
始める前に
プロジェクト レベルの
build.gradle
ファイルのbuildscript
セクションとallprojects
セクションの両方に Google の Maven リポジトリを含めます。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.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 ストアからインストールされたら自動でモデルがデバイスにダウンロードされるようにアプリを構成できます。アプリの
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. 会話履歴オブジェクトを作成する
スマート リプライを生成するには、
TextMessage
オブジェクトのList
を時系列の順で ML Kit に渡します。最も早いタイムスタンプが最初です。ユーザーがメッセージを送信するたびに、メッセージとそのタイムスタンプを会話履歴に追加します。
Kotlin
conversation.add(TextMessage.createForLocalUser( "heading out now", System.currentTimeMillis()))
Java
conversation.add(TextMessage.createForLocalUser( "heading out now", System.currentTimeMillis()));
ユーザーがメッセージを受信するたびに、メッセージ、そのタイムスタンプ、送信者のユーザー 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 では、会話履歴の最後のメッセージへの返信が提案されます。最後のメッセージは、ローカルのユーザー以外から送信されたものである必要があります。上記の例では、会話の最後のメッセージは、ローカルのユーザーではない FREE0 から送信されたものです。パス ML Kit のこのログを使用すると、友だちのメッセージ(「遅れています。申し訳ありません!」)に対する返信が提案されます。
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 が結果を返さないことがあります。