在 Android 上使用 ML Kit 產生智慧回覆

ML Kit 可使用裝置端模型產生訊息的簡短回覆。

如要產生智慧回覆,您必須將對話中最近的訊息記錄傳遞給 ML Kit。如果 ML Kit 判斷對話內容為英文,且對話內容沒有敏感主題,ML Kit 最多會產生三個回覆,供您向使用者建議。

組合未綁定
程式庫名稱com.google.mlkit:smart-replycom.google.android.gms:play-services-mlkit-smart-reply
導入模型會在建構期間與應用程式建立靜態連結。模型會透過 Google Play 服務動態下載。
應用程式大小影響大小約增加 5.7 MB。大小約增加 200 KB。
初始化時間模型現已可供使用。首次使用時,可能需要等待模型下載。

立即試用

事前準備

  1. 在專案層級的 build.gradle 檔案中,請務必在 buildscriptallprojects 區段中納入 Google 的 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.4'
    }
    
    • 如何在 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. 建立對話記錄物件

    如要產生智慧回覆,您必須將 ML Kit 的 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 不必與任何使用者資料相對應,而且在對話或智慧回覆產生器的叫用作業中,使用者 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 (太平洋標準時間) true 你在路上嗎?
    2019 年 2 月 21 日星期四 13 點 15 分 3 秒 (太平洋標準時間) FRIEND0 false 很抱歉,我會晚一點到!

    ML Kit 會針對對話記錄中的最後一則訊息提供回覆建議。最後一則訊息應來自非本機使用者。在上述範例中,對話中的最後一則訊息來自非本機使用者 FRIEND0。當您使用 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 物件傳遞至成功處理常式。這個物件包含最多三個建議回覆的清單,您可以向使用者顯示這些回覆:

    Kotlin

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

    Java

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

    請注意,如果模型不確定建議回覆是否相關、輸入的對話不是英文,或是模型偵測到敏感主題,ML Kit 可能就不會傳回結果。