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 MB。 | 大約大小為 200 KB。 |
初始化時間 | 可立即使用型號。 | 可能必須先等待模型下載才能使用。 |
立即體驗
- 如要查看此 API 的範例,請搭配範例應用程式。
事前準備
在專案層級的
build.gradle
檔案中,請務必將 Google 的 Maven 存放區加進buildscript
和allprojects
區段。將 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。User-ID 可以是專門用來識別對話中傳送者的專屬字串,使用者 ID 不必對應到任何使用者資料,而 User-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));
對話記錄物件如下所示:
時間戳記 使用者 ID isLocal 使用者 訊息 2019 年 2 月 21 日星期四 13:13:39 true 你在路上嗎? 2019 年 2 月 21 日星期四 13:15:03 好友 false 抱歉,晚點到! ML Kit 建議回覆對話記錄中的最後一則訊息。最後一則訊息應來自非本機使用者。在上述範例中,對話中的最後一則訊息來自非本機使用者 Friends0。當你使用票證 ML Kit 時,系統會向 FriendsO 的訊息回覆「Running late, 很抱歉!」
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
物件傳遞至成功處理常式。這個物件包含最多三則建議回覆清單,您可以向使用者顯示:Kotlin
for (suggestion in result.suggestions) { val replyText = suggestion.text }
Java
for (SmartReplySuggestion suggestion : result.getSuggestions()) { String replyText = suggestion.getText(); }
請注意,如果模型對建議回覆的關聯性不足、輸入對話不是英文,或是模型偵測到敏感主題,則 ML Kit 可能不會傳回結果。