สร้างสมาร์ทรีพลายด้วย ML Kit บน Android

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

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

รวมกลุ่มไม่ได้จัดกลุ่ม
ชื่อไลบรารีcom.google.mlkit:smart-replycom.google.android.gms:play-services-mlkit-smart-reply
การใช้งานโมเดลลิงก์กับแอปของคุณแบบคงที่ ณ เวลาบิลด์โมเดลจะดาวน์โหลดแบบไดนามิกผ่านบริการ Google Play
ผลกระทบของขนาดแอปขนาดเพิ่มขึ้นประมาณ 5.7 MBขนาดที่เพิ่มขึ้นประมาณ 200 KB
เวลาในการเริ่มต้นโมเดลจะพร้อมใช้งานทันทีอาจต้องรอให้โมเดลดาวน์โหลดก่อนใช้งานครั้งแรก

ลองเลย

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

  1. ในไฟล์ build.gradle ระดับโปรเจ็กต์ อย่าลืมรวมที่เก็บ Maven ของ Google ไว้ทั้งในส่วน buildscript และ allprojects

  2. เพิ่มทรัพยากร Dependency สำหรับไลบรารี ML Kit Android ลงในไฟล์ Gradle ระดับแอปของโมดูล ซึ่งปกติคือ app/build.gradle เลือกทรัพยากร Dependency ต่อไปนี้ 1 รายการตามความต้องการของคุณ

    • วิธีการรวมโมเดลกับแอปมีดังนี้
    dependencies {
      // ...
      // Use this dependency to bundle the model with your app
      implementation 'com.google.mlkit:smart-reply:17.0.3'
    }
    
    • วิธีใช้โมเดลในบริการ Google Play
    dependencies {
      // ...
      // Use this dependency to use the dynamically downloaded model in Google Play Services
      implementation 'com.google.android.gms:play-services-mlkit-smart-reply:16.0.0-beta1'
    }
    

    หากเลือกใช้รูปแบบดังกล่าวในบริการ Google Play คุณจะกำหนดค่า แอปให้ดาวน์โหลดโมเดลไปยังอุปกรณ์โดยอัตโนมัติหลังจากที่ ติดตั้งแอปจาก Play Store แล้ว เพิ่มการประกาศต่อไปนี้ลงในไฟล์ AndroidManifest.xml ของแอป

    <application ...>
          ...
          <meta-data
              android:name="com.google.mlkit.vision.DEPENDENCIES"
              android:value="smart_reply" >
          <!-- To use multiple models: android:value="smart_reply,model2,model3" -->
    </application>
    

    นอกจากนี้ คุณยังตรวจสอบความพร้อมใช้งานของโมเดลและส่งคำขอดาวน์โหลดผ่าน ModuleInstallClient API ของบริการ Google Play อย่างชัดแจ้งได้ด้วย

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

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

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

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

    Kotlin

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

    Java

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

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

    Kotlin

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

    Java

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

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

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

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

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

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

    Kotlin

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

    Java

    SmartReplyGenerator smartReply = SmartReply.getClient();
    smartReply.suggestReplies(conversation)
            .addOnSuccessListener(new OnSuccessListener() {
                @Override
                public void onSuccess(SmartReplySuggestionResult result) {
                    if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
                        // The conversation's language isn't supported, so
                        // 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
                    // ...
                }
            });

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

    Kotlin

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

    Java

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

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