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

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

如要產生智慧回覆,請將 ML Kit 近期訊息記錄傳送至 對話。如果 ML Kit 判斷對話是以英文表示對話, 就沒有敏感主題的 ML Kit 最多產生 3 則回覆,您可當做建議使用者參考。

立即試用

事前準備

  1. 在 Podfile 中加入下列 ML Kit Pod:
    pod 'GoogleMLKit/SmartReply', '3.2.0'
    
  2. 安裝或更新專案的 Pod 後,請使用 .xcworkspace。Xcode 12.4 以上版本支援 ML Kit。

1. 建立對話記錄物件

如要產生智慧回覆功能,您必須傳送 ML Kit 依時間順序排序的 TextMessage 物件,具有最早的時間戳記。每當使用者 新增或接收訊息、新增訊息、其時間戳記以及 並將傳送者的使用者 ID 加入對話記錄中。

使用者 ID 可以是任何能用來識別 對話。User-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:
MLKTextMessage *message = [[MLKTextMessage alloc]
        initWithText:@"How are you?"
        timestamp:[NSDate date].timeIntervalSince1970
        userID:userId
        isLocalUser:NO];
[conversation addObject:message];

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

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

ML Kit 建議回覆對話記錄中的最後一則訊息。最後一則訊息 應為非本機使用者。在上述範例中,對話中的最後一則訊息 來自非當地使用者 FRIEND0。使用 Pass ML Kit 這項記錄時 回覆 FRIENDO 的訊息:「運作中遲到了,很抱歉!」

2. 接收訊息回覆

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

Swift

SmartReply.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 result doesn't contain any suggestions.
    } else if (result.status == .success) {
        // Successfully suggested smart replies.
        // ...
    }
}

Objective-C

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

如果作業成功,系統會將 SmartReplySuggestionResult 物件傳遞至 完成這個物件包含最多三個建議的清單 則可用來向使用者顯示:

Swift

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

Objective-C

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

請注意,如果模型對模型缺乏信心,ML Kit 可能不會傳回結果 建議回覆的關聯性,但輸入對話不在 指定語言,或模型偵測到敏感主題。