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

    • วิธีรวมโมเดลกับแอป
    dependencies {
      // ...
      // Use this dependency to bundle the model with your app
      implementation 'com.google.mlkit:smart-reply:17.0.4'
    }
    
    • วิธีใช้โมเดลในบริการ 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()));

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

    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 ข้อความ
    Thu Feb 21 13:13:39 PST 2019 จริง คุณกำลังเดินทางมาใช่ไหม
    Thu Feb 21 13:15:03 PST 2019 FRIEND0 เท็จ ขอโทษนะ ฉันจะไปสายหน่อย

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