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

您可以使用 ML Kit 使用裝置端模型生成訊息回覆。

如要產生智慧回覆,您必須向 ML Kit 傳送對話中近期訊息的記錄。如果 ML Kit 判斷對話是以英文輸入,且對話不含潛在敏感主題,則 ML Kit 會產生最多三個回覆,您可以向使用者提供建議。

事前準備

  1. 如果您尚未將 Firebase 加入應用程式,請按照入門指南中的步驟進行。
  2. 在 Podfile 中加入 ML Kit 程式庫:
    pod 'Firebase/MLCommon', '6.25.0'
    pod 'Firebase/MLNLSmartReply', '6.25.0'
    
    安裝或更新專案的 Pod 後,請務必使用 .xcworkspace 開啟 Xcode 專案。
  3. 在應用程式中匯入 Firebase:

    Swift

    import Firebase

    Objective-C

    @import Firebase;

1. 建立對話記錄物件

如要產生智慧回覆,您必須傳送 ML Kit 是依時間排序的 TextMessage 物件陣列,且時間戳記優先於最早的時間戳記。每當使用者傳送或接收訊息時,請將訊息、時間戳記和訊息傳送者的使用者 ID 新增至對話記錄中。

使用者 ID 可以是任何在對話中唯一識別傳送者的字串。使用者 ID 不需要對應至任何使用者資料,而且智慧回覆產生器的對話或叫用使用者 ID 不必保持一致。

如果訊息是由您想建議回覆的使用者所傳送,請將 isLocalUser 設為 true。

Swift

var conversation: [TextMessage] = []

// Then, for each message sent and received:
let message = TextMessage(
    text: "How are you?",
    timestamp: Date().timeIntervalSince1970,
    userID: "userId",
    isLocalUser: false)
conversation.append(message)

Objective-C

NSMutableArray *conversation = [NSMutableArray array];

// Then, for each message sent and received:
FIRTextMessage *message = [[FIRTextMessage alloc]
        initWithText:@"How are you?"
        timestamp:[NSDate date].timeIntervalSince1970
        userID:userId
        isLocalUser:NO];
[conversation addObject:message];

對話記錄物件如下列範例所示:

時間戳記 使用者 ID 本機使用者? 訊息
2019 年 2 月 21 日星期四 13:13:39 (太平洋標準時間) 你正在路上嗎?
2019 年 2 月 21 日星期四 13:15:03 (太平洋標準時間) 朋友 false 抱歉,我遲到了!

請注意,上述範例中最新的訊息來自非本機使用者。這點非常重要,因為 ML Kit 建議回覆內容是由應用程式使用者 (本機使用者) 傳送。您應該傳送 ML Kit 對話記錄,該記錄的結尾是使用者可能會想回覆的訊息。

2. 接收訊息回覆

如要產生訊息的智慧回覆,請取得 SmartReply 的例項,並將對話記錄傳遞至其 suggestReplies(for:completion:) 方法:

Swift

let naturalLanguage = NaturalLanguage.naturalLanguage()
naturalLanguage.smartReply().suggestReplies(for: conversation) { result, error in
    guard error == nil, let result = result else {
        return
    }
    if (result.status == .notSupportedLanguage) {
        // The conversation's language isn't supported, so the
        // the result doesn't contain any suggestions.
    } else if (result.status == .success) {
        // Successfully suggested smart replies.
        // ...
    }
}

Objective-C

FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRSmartReply *smartReply = [naturalLanguage smartReply];
[smartReply suggestRepliesForMessages:inputText
                           completion:^(FIRSmartReplySuggestionResult * _Nullable result,
                                        NSError * _Nullable error) {
  if (error || !result) {
    return;
  }
  if (result.status == FIRSmartReplyResultStatusNotSupportedLanguage) {
      // The conversation's language isn't supported, so the
      // the result doesn't contain any suggestions.
  } else if (result.status == FIRSmartReplyResultStatusSuccess) {
      // Successfully suggested smart replies.
      // ...
  }
}];
]

如果作業成功,系統會將 SmartReplySuggestionResult 物件傳遞至完成處理常式。這個物件包含最多 3 則建議的回覆清單,您可以向使用者顯示這些回覆:

Swift

for suggestion in result.suggestions {
  print("Suggested reply: \(suggestion.text)")
}

Objective-C

for (FIRSmartReplySuggestion *suggestion in result.suggestions) {
  NSLog(@"Suggested reply: %@", suggestion.text);
}

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