สร้างสมาร์ทรีพลายด้วย 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 ของโปรเจ็กต์นั้น Xcode เวอร์ชัน 12.4 ขึ้นไปรองรับ ML Kit

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

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

User-ID สามารถเป็นสตริงใดก็ได้ที่ระบุผู้ส่งภายในการสนทนาได้อย่างไม่ซ้ำกัน 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 FRIEND0 false ขออภัยที่ไปสาย ขออภัย

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