Tạo câu trả lời thông minh bằng Bộ công cụ học máy trên iOS

Bộ công cụ học máy có thể tạo các tin nhắn trả lời ngắn bằng một mô hình trên thiết bị.

Để tạo câu trả lời thông minh, bạn chuyển cho Bộ công cụ học máy nhật ký các thông báo gần đây trong một cuộc trò chuyện. Nếu Bộ công cụ học máy xác định rằng cuộc trò chuyện đó là bằng tiếng Anh và cuộc trò chuyện đó không có chủ đề nhạy cảm, thì Bộ công cụ học máy sẽ tạo tối đa 3 câu trả lời để bạn có thể đề xuất cho người dùng của mình.

Dùng thử

Trước khi bắt đầu

  1. Đưa các nhóm Bộ công cụ học máy sau đây vào Podfile của bạn:
    pod 'GoogleMLKit/SmartReply', '3.2.0'
    
  2. Sau khi cài đặt hoặc cập nhật Nhóm của dự án, hãy mở dự án Xcode của bạn bằng .xcworkspace của dự án. Bộ công cụ học máy được hỗ trợ trong Xcode phiên bản 12.4 trở lên.

1. Tạo một đối tượng nhật ký trò chuyện

Để tạo câu trả lời thông minh, bạn sẽ truyền Bộ công cụ học máy một mảng các đối tượng TextMessage được sắp xếp theo thứ tự thời gian, với dấu thời gian sớm nhất xuất hiện trước. Bất cứ khi nào người dùng gửi hoặc nhận tin nhắn, hãy thêm tin nhắn, dấu thời gian và mã nhận dạng người dùng của người gửi tin nhắn vào nhật ký trò chuyện.

Mã nhận dạng người dùng có thể là bất kỳ chuỗi nào xác định duy nhất người gửi trong cuộc trò chuyện. Mã nhận dạng người dùng không cần phải tương ứng với bất kỳ dữ liệu người dùng nào và mã nhận dạng người dùng không cần phải nhất quán giữa các cuộc trò chuyện hoặc lệnh gọi của trình tạo thư trả lời thông minh.

Nếu tin nhắn do người dùng mà bạn muốn đề xuất trả lời gửi tin nhắn, hãy đặt isLocalUser thành 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];

Đối tượng lịch sử cuộc trò chuyện sẽ có dạng như trong ví dụ sau:

Dấu thời gian userID isLocalUser Thông điệp
Thứ Năm, 21 tháng 2 13:13:39 PST 2019 đúng bạn đang trên đường đi?
Thứ Năm, ngày 21 tháng 2 năm 13:15:03 theo giờ PST 2019 FRIEND0 false Rất tiếc, bạn sẽ đến trễ!

Bộ công cụ học máy đề xuất các câu trả lời cho tin nhắn gần đây nhất trong nhật ký trò chuyện. Tin nhắn cuối cùng phải là của người dùng không phải người dùng cục bộ. Trong ví dụ trên, tin nhắn cuối cùng trong cuộc trò chuyện là của người dùng không phải người dùng cục bộ - bạn0. Khi bạn sử dụng chức năng truyền cho Bộ công cụ học máy, hệ thống sẽ đề xuất phản hồi cho thông báo của đường liên kết: "Chạy muộn, xin lỗi!"

2. Nhận tin nhắn trả lời

Để tạo câu trả lời thông minh cho một tin nhắn, hãy lấy một thực thể của SmartReply và chuyển nhật ký trò chuyện sang phương thức 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.
      // ...
  }
}];

Nếu thao tác thành công, đối tượng SmartReplySuggestionResult sẽ được chuyển đến trình xử lý hoàn thành. Đối tượng này chứa danh sách tối đa 3 câu trả lời đề xuất mà bạn có thể hiển thị cho người dùng:

Swift

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

Objective-C

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

Xin lưu ý rằng Bộ công cụ học máy có thể không trả về kết quả nếu mô hình không chắc chắn về mức độ liên quan của các câu trả lời đề xuất, nội dung trò chuyện đầu vào không bằng tiếng Anh hoặc nếu mô hình phát hiện vấn đề nhạy cảm.