Android'de ML Kit ile akıllı yanıtlar oluşturma

ML Kit, cihaz üzerinde bir model kullanarak mesajlara kısa yanıtlar oluşturabilir.

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.

GruplandırılanlarGruplandırılmamış
Kitaplık adıcom.google.mlkit:smart-replycom.google.android.gms:play-services-mlkit-smart-reply
UygulamaModel, derleme sırasında statik olarak uygulamanıza bağlıdır.Model, Google Play Hizmetleri aracılığıyla dinamik olarak indirilir.
Uygulama boyutunun etkisiYaklaşık 5,7 MB boyut artışı.Yaklaşık 200 KB boyut artışı.
Başlatma süresiModel hemen kullanılabilir.İlk kullanımdan önce modelin indirilmesini beklemeniz gerekebilir.

Deneyin

Başlamadan önce

  1. Proje düzeyindeki build.gradle dosyanıza, hem buildscript hem de allprojects bölümlerinize Google'ın Maven deposunu dahil ettiğinizden emin olun.

  2. ML Kit Android kitaplıklarının bağımlılıklarını, modülünüzün uygulama düzeyindeki gradle dosyasına ekleyin. Bu dosya genellikle app/build.gradle olur. İhtiyaçlarınıza göre aşağıdaki bağımlılıklardan birini seçin:

    • Modeli uygulamanızla paket haline getirmek için:
    dependencies {
      // ...
      // Use this dependency to bundle the model with your app
      implementation 'com.google.mlkit:smart-reply:17.0.3'
    }
    
    • Modeli Google Play Hizmetleri'nde kullanmak için:
    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'
    }
    

    Modeli Google Play Hizmetleri'nde kullanmayı seçerseniz uygulamanızı, uygulamanız Play Store'dan yüklendikten sonra modeli cihaza otomatik olarak indirecek şekilde yapılandırabilirsiniz. Aşağıdaki beyanı uygulamanızın AndroidManifest.xml dosyasına ekleyerek:

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

    Ayrıca, model kullanılabilirliğini açıkça kontrol edebilir ve Google Play Hizmetleri ModuleUploadClient API üzerinden indirme isteğinde bulunabilirsiniz.

    Yükleme zamanı model indirmelerini etkinleştirmez veya açık indirme isteğinde bulunmazsanız model, akıllı yanıt oluşturma aracını ilk kez çalıştırdığınızda indirilir. İndirme işlemi tamamlanmadan önce yaptığınız istekler sonuç vermez.

    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/TextMessage nesne iletirsiniz.

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

    Kotlin

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

    Java

    conversation.add(TextMessage.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.

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

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

    Zaman damgası userID isLocalUser Mesaj
    21 Şubat Perşembe 13:13:39 PST 2019 true yolda mısınız?
    21 Şubat Perşembe 13:15:03 PST 2019 FRIEND0 false Üzgünüz, geciktiğiniz için yazıyorum.

    Makine Öğrenimi Kiti, bir sohbet geçmişindeki son mesaja yanıtlar önerir. Son mesaj yerel olmayan bir kullanıcıdan olmalıdır. Yukarıdaki örnekte, görüşmedeki son mesaj yerel olmayan FRIEND0 kullanıcı tarafından gönderilmiştir. Bu günlüğü geçen ML Kit'i kullandığınızda, FRIENDO'nun şu mesajına yanıt önerir: "Geç kaldı, maalesef!"

    2. Mesaj yanıtları alma

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

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

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

    Kotlin

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

    Java

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

    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.