Android'de Makine Öğrenimi Kiti ile Akıllı Yanıtlar Oluşturma

Cihaz üzerinde bir model kullanarak mesaj yanıtları oluşturmak için ML Kit'i kullanabilirsiniz.

Akıllı yanıtlar oluşturmak için ML Kit'e bir görüşmedeki son mesajların günlüğünü iletirsiniz. Makine Öğrenimi Kiti, görüşmenin İngilizce olduğunu ve görüşmenin hassas olabilecek bir konu olmadığını tespit ederse ML Kit, kullanıcılarınıza önerebileceğiniz en fazla üç yanıt üretir.

Başlamadan önce

  1. Henüz yapmadıysanız Firebase'i Android projenize ekleyin.
  2. Modül (uygulama düzeyinde) Gradle dosyanıza (genellikle app/build.gradle) ML Kit Android kitaplıkları için bağımlılıkları ekleyin:
    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. Ayrıca, uygulama düzeyindeki build.gradle dosyanızda, tflite dosyanın sıkıştırmasını devre dışı bırakın:
    android {
        // ...
        aaptOptions {
            noCompress "tflite"
        }
    }
    

1. Sohbet geçmişi nesnesi oluşturma

Akıllı yanıtlar oluşturmak için ML Kit'i en erken zaman damgasından önce olacak şekilde kronolojik olarak sıralanmış List/FirebaseTextMessage nesne iletirsiniz.

Kullanıcı bir mesaj gönderdiğinde mesajı ve zaman damgasını görüşme geçmişine ekleyin:

Java

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

Kotlin

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

Kullanıcı bir mesaj aldığında mesajı, zaman damgasını ve gönderenin kullanıcı kimliğini görüşme geçmişine ekleyin. Kullanıcı kimliği, görüşmedeki göndereni benzersiz şekilde tanımlayan herhangi bir dize olabilir. User-ID'nin herhangi bir kullanıcı verisine karşılık gelmesi gerekmez ve kullanıcı kimliğinin, akıllı yanıt oluşturucunun görüşmeleri veya çağrıları arasında tutarlı olması gerekmez.

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

Bir ileti dizisi geçmişi nesnesi aşağıdaki örneğe benzer:

Zaman damgası User-ID Yerel Kullanıcı mısınız? Message
21 Şubat Perşembe 13:13:39 PST 2019 true yolda mısınız?
21 Şubat Perşembe 13:15:03 PST 2019 ARKADAŞ0 false Üzgünüz, geciktiğiniz için yazıyorum.

Yukarıdaki örnekte yer alan en son mesajın yerel olmayan bir kullanıcıdan geldiğini unutmayın. Makine Öğrenimi Kiti, uygulamanızın kullanıcısı, yani yerel kullanıcı tarafından gönderilmesi amaçlanan yanıtları önerdiği için bu önemlidir. Makine Öğrenimi Kiti'ni, kullanıcınızın yanıt vermek isteyebileceği bir mesajla biten bir sohbet günlüğü ilettiğinizden emin olun.

2. Mesaj yanıtları alma

Bir mesaja akıllı yanıtlar oluşturmak için FirebaseSmartReply öğesinin bir örneğini alın ve görüşme geçmişini suggestReplies() yöntemine iletin:

Java

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

Kotlin

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

İşlem başarılı olursa başarı işleyiciye bir SmartReplySuggestionResult nesnesi iletilir. Bu nesne, kullanıcınıza sunabileceğiniz en fazla 3 önerilen yanıtın bir listesini içerir:

Java

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

Kotlin

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

Model, önerilen yanıtların alaka düzeyine güvenmiyorsa, giriş görüşmesi İngilizce değilse veya model hassas bir konu tespit ederse ML Kit'in sonuç döndürmeyebileceğini unutmayın.