Check out what’s new from Firebase at Google I/O 2022. Learn more

สร้างการตอบกลับอัจฉริยะด้วย ML Kit บน Android

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

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

ก่อนจะเริ่ม

  1. หากคุณยังไม่ได้ เพิ่ม Firebase ในโครงการ Android ของคุณ
  2. เพิ่มการพึ่งพาสำหรับไลบรารี 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()))

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

วัตถุประวัติการสนทนาดูเหมือนตัวอย่างต่อไปนี้:

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