สร้างการตอบกลับอัจฉริยะด้วย 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 โดยให้ประทับเวลาแรกสุดก่อน

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

ชวา

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

คอตลิน

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

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

ชวา

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

คอตลิน

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

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

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

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

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

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

ชวา

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

คอตลิน

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 รายการ ซึ่งคุณสามารถนำเสนอต่อผู้ใช้ของคุณได้:

ชวา

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

คอตลิน

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

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