Buka konsol

Menghasilkan Smart Reply dengan ML Kit di Android

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

Untuk menghasilkan smart reply, Anda harus meneruskan log pesan terbaru dalam percakapan ke ML Kit. Jika ML Kit menentukan percakapan dalam bahasa Inggris, dan percakapan tersebut tidak berpotensi berisi hal yang sensitif, maka ML Kit akan menghasilkan hingga 3 balasan, yang dapat digunakan sebagai saran untuk pengguna Anda.

Lihat sampel quickstart ML Kit di GitHub untuk mengetahui contoh penggunaan API ini.

Sebelum memulai

  1. Jika Anda belum menambahkan Firebase ke aplikasi, lakukan dengan mengikuti langkah-langkahnya di panduan memulai.
  2. Sertakan dependensi untuk ML Kit di file build.gradle tingkat aplikasi Anda:
    dependencies {
      // ...
    
      implementation 'com.google.firebase:firebase-ml-natural-language:18.2.0'
      implementation 'com.google.firebase:firebase-ml-natural-language-smart-reply-model:18.0.0'
    }
    
  3. Di file build.gradle tingkat aplikasi, nonaktifkan kompresi file tflite:
    android {
        // ...
        aaptOptions {
            noCompress "tflite"
        }
    }
    

1. Membuat objek histori percakapan

Untuk menghasilkan smart reply, Anda harus meneruskan List objek FirebaseTextMessage 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:

Java

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

Kotlin

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

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

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

Objek histori percakapan akan terlihat seperti contoh berikut:

Timestamp User ID Pengguna Lokal? Pesan
Kamis 21 Februari 13.13.39 PST 2019 true are you on your way?
Kamis 21 Februari 13.15.03 PST 2019 TEMAN0 false Running late, sorry!

Perlu diperhatikan bahwa pesan terbaru dalam contoh di atas berasal dari pengguna non-lokal. Hal ini menjadi penting karena ML Kit menyarankan balasan yang ditujukan untuk dikirim oleh pengguna aplikasi Anda, yaitu pengguna lokal. Pastikan Anda meneruskan log percakapan, yang diakhiri dengan pesan yang ingin dibalas pengguna, ke ML Kit.

2. Mendapatkan balasan pesan

Untuk menghasilkan smart reply atas suatu pesan, dapatkan instance FirebaseSmartReply dan teruskan histori percakapan ke metode suggest():

Java

FirebaseSmartReply smartReply = FirebaseNaturalLanguage.getInstance().getSmartReply();
smartReply.suggest(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.suggest(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
            // ...
        }

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

Java

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

Kotlin

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

Perlu diperhatikan bahwa ML Kit mungkin tidak akan menampilkan hasil jika model tidak yakin pada relevansi balasan yang disarankan, percakapan input tidak ditulis dalam bahasa Inggris, atau jika model mendeteksi adanya hal yang sensitif.