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

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

如要產生智慧回覆,請將對話中的近期訊息記錄傳遞給 ML Kit。如果 ML Kit 判定對話為英文,且對話不含任何敏感主題,則 ML Kit 最多會產生三則回覆,方便您建議使用者回覆。

立即體驗

事前準備

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

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:
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 FRIEND0 false 遲到了,抱歉!

ML Kit 會建議回覆對話記錄中的最後一則訊息。最後一則訊息應來自非本機使用者。在上述範例中,對話中的最後一則訊息來自非本機使用者的 friend0。使用這個記錄傳遞 ML Kit 時,系統會建議回覆 FriendsO 的訊息:「Running late,很抱歉!」

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 可能就不會傳回結果。