Tạo câu trả lời thông minh bằng ML Kit trên iOS

Bạn có thể sử dụng ML Kit để tạo tin nhắn trả lời bằng mẫu trên thiết bị.

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

Trước khi bắt đầu

  1. Nếu bạn chưa thêm Firebase vào ứng dụng của mình, hãy làm như vậy bằng cách làm theo các bước trong hướng dẫn bắt đầu .
  2. Bao gồm các thư viện ML Kit trong Podfile của bạn:
    pod 'Firebase/MLCommon', '6.25.0'
    pod 'Firebase/MLNLSmartReply', '6.25.0'
    
    Sau khi bạn cài đặt hoặc cập nhật Pod của dự án, hãy nhớ mở dự án Xcode của bạn bằng cách sử dụng .xcworkspace .
  3. Trong ứng dụng của bạn, hãy nhập Firebase:

    Nhanh

    import Firebase

    Mục tiêu-C

    @import Firebase;

1. Tạo đối tượng lịch sử hội thoại

Để tạo câu trả lời thông minh, bạn chuyển Bộ công cụ ML 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 trước tiên. 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 của tin nhắn đó và ID người dùng của người gửi tin nhắn vào lịch sử cuộc trò chuyện.

ID 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. ID 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à ID người dùng không cần nhất quán giữa các cuộc hội thoại hoặc lời gọi của trình tạo trả lời thông minh.

Nếu tin nhắn được gửi bởi người dùng mà bạn muốn đề xuất trả lời, hãy đặt isLocalUser thành true.

Nhanh

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)

Mục tiêu-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];

Đối tượng lịch sử hội thoại trông giống như ví dụ sau:

Dấu thời gian Tên người dùng Người dùng cục bộ? Tin nhắn
Thứ năm ngày 21 tháng 2 13:13:39 PST 2019 ĐÚNG VẬY bạn đang trên đường tới phải không?
Thứ năm ngày 21 tháng 2 13:15:03 PST 2019 BẠN BÈ0 SAI Đến muộn, xin lỗi!

Lưu ý rằng tin nhắn gần đây nhất trong ví dụ trên là từ người dùng không phải người dùng cục bộ. Điều này rất quan trọng vì ML Kit đề xuất các câu trả lời được gửi bởi người dùng ứng dụng của bạn: người dùng cục bộ. Bạn phải chắc chắn rằng bạn đang chuyển cho ML Kit một nhật ký cuộc trò chuyện kết thúc bằng một tin nhắn mà người dùng của bạn có thể muốn trả lời.

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

Để tạo câu trả lời thông minh cho tin nhắn, hãy lấy một phiên bản của SmartReply và chuyển lịch sử hội thoại sang phương thức suggestReplies(for:completion:) của nó:

Nhanh

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.
        // ...
    }
}

Mục tiêu-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.
      // ...
  }
}];
]

Nếu thao tác thành công, đối tượng SmartReplySuggestionResult sẽ được chuyển tới 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 được đề xuất mà bạn có thể trình bày cho người dùng của mình:

Nhanh

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

Mục tiêu-C

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

Lưu ý rằng Bộ công cụ ML 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 được đề xuất, cuộc trò chuyện đầu vào không bằng tiếng Anh hoặc nếu mô hình phát hiện ra chủ đề nhạy cảm.