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

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

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

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

  1. เพิ่ม Firebase ลงในโปรเจ็กต์ Android หากยังไม่ได้ทำ
  2. เพิ่มทรัพยากร Dependency สำหรับไลบรารี ML Kit Android ลงในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติจะเป็น app/build.gradle):
    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services'
    
    dependencies {
      // ...
      implementation 'com.google.firebase:firebase-ml-natural-language:22.0.0'
      implementation 'com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7'
    }
    
  3. นอกจากนี้ ในไฟล์ build.gradle ระดับแอป ให้ปิดการบีบอัดไฟล์ tflite:
    android {
        // ...
        aaptOptions {
            noCompress "tflite"
        }
    }
    

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

หากต้องการสร้างฟีเจอร์ช่วยตอบ คุณจะต้องส่งออบเจ็กต์ List จาก FirebaseTextMessage รายการที่จัดเรียงตามลำดับเวลาโดย ML Kit โดยระบุการประทับเวลาแรกสุดก่อน

เมื่อใดก็ตามที่ผู้ใช้ส่งข้อความ ให้เพิ่มข้อความและการประทับเวลาของข้อความนั้นลงในประวัติการสนทนา ดังนี้

Java

conversation.add(FirebaseTextMessage.createForLocalUser(
        "heading out now", System.currentTimeMillis()));

Kotlin

conversation.add(FirebaseTextMessage.createForLocalUser(
        "heading out now", System.currentTimeMillis()))

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

Java

conversation.add(FirebaseTextMessage.createForRemoteUser(
        "Are you coming back soon?", System.currentTimeMillis(), userId));

Kotlin

conversation.add(FirebaseTextMessage.createForRemoteUser(
        "Are you coming back soon?", System.currentTimeMillis(), userId))

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

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

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

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

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

Java

FirebaseSmartReply smartReply = FirebaseNaturalLanguage.getInstance().getSmartReply();
smartReply.suggestReplies(conversation)
        .addOnSuccessListener(new OnSuccessListener<SmartReplySuggestionResult>() {
            @Override
            public void onSuccess(SmartReplySuggestionResult result) {
                if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
                    // The conversation's language isn't supported, so the
                    // the result doesn't contain any suggestions.
                } else if (result.getStatus() == SmartReplySuggestionResult.STATUS_SUCCESS) {
                    // Task completed successfully
                    // ...
                }
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                // Task failed with an exception
                // ...
            }
        });

Kotlin

val smartReply = FirebaseNaturalLanguage.getInstance().smartReply
smartReply.suggestReplies(conversation)
        .addOnSuccessListener { result ->
            if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
                // The conversation's language isn't supported, so the
                // the result doesn't contain any suggestions.
            } else if (result.getStatus() == SmartReplySuggestionResult.STATUS_SUCCESS) {
                // Task completed successfully
                // ...
            }
        }
        .addOnFailureListener {
            // Task failed with an exception
            // ...
        }

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

Java

for (SmartReplySuggestion suggestion : result.getSuggestions()) {
    String replyText = suggestion.getText();
}

Kotlin

for (suggestion in result.suggestions) {
    val replyText = suggestion.text
}

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