สร้างช่วยตอบด้วย ML Kit บน iOS

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

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

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

  1. หากยังไม่ได้เพิ่ม Firebase ลงในแอป โปรดทำตามขั้นตอนในคู่มือเริ่มต้นใช้งาน
  2. รวมไลบรารี ML Kit ไว้ใน Podfile ดังนี้
    pod 'Firebase/MLCommon', '6.25.0'
    pod 'Firebase/MLNLSmartReply', '6.25.0'
    
    หลังจากติดตั้งหรืออัปเดตพ็อดของโปรเจ็กต์แล้ว อย่าลืมเปิดโปรเจ็กต์ Xcode โดยใช้ .xcworkspace
  3. ในแอป ให้นำเข้า Firebase ดังนี้

    Swift

    import Firebase

    Objective-C

    @import Firebase;

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

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

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:
FIRTextMessage *message = [[FIRTextMessage alloc]
        initWithText:@"How are you?"
        timestamp:[NSDate date].timeIntervalSince1970
        userID:userId
        isLocalUser:NO];
[conversation addObject:message];

ออบเจ็กต์ประวัติการสนทนามีลักษณะดังตัวอย่างต่อไปนี้

การประทับเวลา User-ID เป็นผู้ใช้ในเครื่องหรือไม่ ส่งข้อความ
พฤ. 21 ก.พ. 13:13:39 PST 2019 จริง คุณกำลังเดินทางหรือเปล่า
พฤ. 21 ก.พ. 13:15:03 น. PST 2019 เพื่อน0 false ขออภัยในความไม่สะดวก

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

2. รับข้อความตอบกลับ

หากต้องการสร้างสมาร์ทรีพลายในข้อความ ให้รับอินสแตนซ์ของ SmartReply และส่งประวัติการสนทนาไปยังเมธอด suggestReplies(for:completion:) ของอินสแตนซ์ดังกล่าว ดังนี้

Swift

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

Objective-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.
      // ...
  }
}];
]

หากการดำเนินการสำเร็จ ระบบจะส่งออบเจ็กต์ SmartReplySuggestionResult ไปยังเครื่องจัดการการดำเนินการเสร็จสมบูรณ์ ออบเจ็กต์นี้มีรายการการตอบกลับที่แนะนำสูงสุด 3 รายการ ซึ่งคุณจะนำเสนอต่อผู้ใช้ได้ ดังนี้

Swift

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

Objective-C

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

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