สร้างช่วยตอบด้วย 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 ให้ ML Kit ตามลำดับเวลา จาก FirebaseTextMessage รายการ โดยมีการประทับเวลาแรกสุดก่อน

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

Java

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

Kotlin

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

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

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