สร้างสมาร์ทรีพลายด้วย ML Kit บน iOS

ML Kit สามารถสร้างข้อความตอบกลับสั้นๆ โดยใช้โมเดลในอุปกรณ์

หากต้องการสร้างสมาร์ทรีพลาย คุณจะต้องส่งบันทึกข้อความล่าสุดใน ML Kit ไปยัง การสนทนา ถ้า ML Kit ระบุว่าการสนทนาเป็นภาษาอังกฤษ การสนทนาไม่มีเรื่องที่อาจมีความละเอียดอ่อน ML Kit จะสร้างคำตอบสูงสุด 3 คำตอบ ซึ่งคุณสามารถแนะนำให้ผู้ใช้ได้

ลองเลย

ก่อนเริ่มต้น

  1. ใส่พ็อด ML Kit ต่อไปนี้ใน Podfile
    pod 'GoogleMLKit/SmartReply', '3.2.0'
    
  2. หลังจากที่คุณติดตั้งหรืออัปเดตพ็อดของโปรเจ็กต์แล้ว ให้เปิดโปรเจ็กต์ Xcode โดยใช้ .xcworkspace ทั้งนี้ ML Kit รองรับ Xcode เวอร์ชัน 12.4 ขึ้นไป

1. สร้างออบเจ็กต์ประวัติการสนทนา

หากต้องการสร้างสมาร์ทรีพลาย คุณต้องส่งอาร์เรย์ ML Kit ตามลำดับเวลา ออบเจ็กต์ TextMessage รายการ โดยมีการประทับเวลาแรกสุดก่อน เมื่อใดก็ตามที่ผู้ใช้ ส่งหรือรับข้อความ เพิ่มข้อความ การประทับเวลา และข้อความ รหัสผู้ใช้ของผู้ส่งไปยังประวัติการสนทนา

User ID อาจเป็นสตริงใดๆ ที่ระบุผู้ส่งโดยไม่ซ้ำกันภายใน การสนทนา User-ID ไม่จำเป็นต้องสอดคล้องกับข้อมูลผู้ใช้ และรหัสผู้ใช้ไม่จำเป็นต้องสอดคล้องกันระหว่างการสนทนา หรือ คำขอของโปรแกรมสร้างสมาร์ทรีพลาย

หากผู้ใช้ที่คุณต้องการแนะนำการตอบกลับเป็นผู้ส่งข้อความ ให้ตั้งค่า isLocalUser เป็นจริง

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 ข้อความ
พฤ. 21 ก.พ. 13:13:39 PST 2019 จริง คุณกำลังเดินทางหรือเปล่า
พฤ. 21 ก.พ. 13:15:03 น. PST 2019 เพื่อน0 เท็จ ขออภัยในความไม่สะดวก

ML Kit แนะนำการตอบกลับข้อความสุดท้ายในประวัติการสนทนา ข้อความสุดท้าย ควรมาจากผู้ใช้ที่ไม่ได้อยู่ในท้องถิ่น ในตัวอย่างข้างต้น ข้อความสุดท้ายในการสนทนา มาจาก FRIEND0 ที่ไม่ใช่ผู้ใช้ท้องถิ่น เมื่อใช้บันทึก 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 ไปยัง ตัวแฮนเดิลการเสร็จสมบูรณ์ ออบเจ็กต์นี้มีรายการที่แนะนำไม่เกิน 3 รายการ ซึ่งสามารถนำเสนอแก่ผู้ใช้ได้ ดังนี้

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 อาจไม่แสดงผลลัพธ์หากโมเดลไม่มั่นใจใน ความเกี่ยวข้องของการตอบกลับที่แนะนำ การสนทนาที่เป็นอินพุตไม่ได้อยู่ใน ภาษาอังกฤษ หรือหากโมเดลตรวจพบหัวข้อที่มีความละเอียดอ่อน