Menghasilkan smart reply dengan ML Kit di Android

ML Kit dapat menghasilkan balasan singkat untuk pesan menggunakan model di perangkat.

Untuk menghasilkan smart reply, Anda harus meneruskan log pesan terbaru dalam percakapan ke ML Kit. Jika ML Kit menentukan bahwa percakapan dalam bahasa Inggris dan percakapan tersebut tidak berpotensi berisi hal yang sensitif, ML Kit akan menghasilkan hingga tiga balasan, yang dapat Anda sarankan kepada pengguna.

PaketTidak Dipaketkan
Nama librarycom.google.mlkit:smart-replycom.google.android.gms:play-services-mlkit-smart-reply
PenerapanModel ditautkan secara statis ke aplikasi Anda pada waktu build.Model didownload secara dinamis melalui Layanan Google Play.
Dampak ukuran aplikasiPeningkatan ukuran sekitar 5,7 MB.Ukuran meningkat sekitar 200 KB.
Waktu inisialisasiModel akan segera tersedia.Mungkin harus menunggu model didownload sebelum digunakan pertama kali.

Cobalah

  • Coba utak-atik aplikasi contoh ini untuk melihat contoh penggunaan API ini.

Sebelum memulai

  1. Dalam file build.gradle level project, pastikan Anda memasukkan repositori Maven Google di bagian buildscript dan allprojects.

  2. Tambahkan dependensi untuk library Android ML Kit ke file gradle level aplikasi modul Anda, biasanya app/build.gradle. Pilih salah satu dependensi berikut berdasarkan kebutuhan Anda:

    • Untuk memaketkan model dengan aplikasi Anda:
    dependencies {
      // ...
      // Use this dependency to bundle the model with your app
      implementation 'com.google.mlkit:smart-reply:17.0.3'
    }
    
    • Untuk menggunakan model di Layanan 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'
    }
    

    Jika memilih untuk menggunakan model di Layanan Google Play, Anda dapat mengonfigurasi aplikasi untuk otomatis mendownload model ke perangkat setelah aplikasi diinstal dari Play Store. Dengan menambahkan deklarasi berikut ke file AndroidManifest.xml aplikasi Anda:

    <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>
    

    Anda juga dapat memeriksa ketersediaan model secara eksplisit dan meminta download melalui layanan Google Play ModuleInstallClient API.

    Jika Anda tidak mengaktifkan download model waktu penginstalan atau meminta download eksplisit, model akan didownload saat pertama kali Anda menjalankan generator smart reply. Permintaan yang Anda buat sebelum download selesai tidak memberikan hasil apa pun.

    1. Membuat objek histori percakapan

    Untuk menghasilkan smart reply, Anda harus meneruskan List objek TextMessage yang diurutkan secara kronologis ke ML Kit, dengan stempel waktu paling awal terlebih dahulu.

    Setiap kali pengguna mengirim pesan, tambahkan pesan tersebut dan stempel waktunya ke histori percakapan:

    Kotlin

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

    Java

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

    Setiap kali pengguna menerima pesan, tambahkan pesan tersebut, stempel waktunya, dan ID pengguna pengirim ke histori percakapan. ID pengguna dapat berupa string apa pun yang secara unik mengidentifikasi pengirim dalam percakapan. ID pengguna tidak perlu sesuai dengan data pengguna apa pun, dan ID pengguna tidak harus konsisten antara percakapan atau pemanggilan pada generator smart reply.

    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));

    Objek histori percakapan terlihat seperti contoh berikut:

    Stempel waktu userID isLocalUser Pesan
    Kamis 21 Februari 13.13.39 PST 2019 true apakah Anda dalam perjalanan?
    Kamis 21 Februari 13.15.03 PST 2019 FRIEND0 false Terlambat, maaf!

    ML Kit menyarankan balasan untuk pesan terakhir dalam histori percakapan. Pesan terakhir harus berasal dari pengguna non-lokal. Dalam contoh di atas, pesan terakhir dalam percakapan berasal dari pengguna non-lokal Fri0. Saat menggunakan log ML Kit ini, Anda akan disarankan untuk membalas pesan friendO: "Terlambat, maaf!"

    2. Mendapatkan balasan pesan

    Untuk menghasilkan smart reply pada suatu pesan, dapatkan instance SmartReplyGenerator dan teruskan histori percakapan ke metode suggestReplies()-nya:

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

    Jika operasi berhasil, objek SmartReplySuggestionResult akan diteruskan ke pengendali yang berhasil. Objek ini berisi daftar hingga tiga balasan yang disarankan, yang dapat Anda presentasikan kepada pengguna:

    Kotlin

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

    Java

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

    Perhatikan bahwa ML Kit mungkin tidak menampilkan hasil jika model tidak yakin dengan relevansi balasan yang disarankan, percakapan input tidak dalam bahasa Inggris, atau jika model mendeteksi materi pokok yang sensitif.