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

ML Kit, cihaz üzerinde bir modeli 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. ML Kit, konuşmanın İngilizce olduğunu ve hassas olabilecek bir konu içermediğini belirlerse kullanıcılarınıza önerebileceğiniz en fazla üç yanıt oluşturur.

GruplandırılanlarPaket halinde sunulmayan
Kitaplık adıcom.google.mlkit:smart-replycom.google.android.gms:play-services-mlkit-smart-reply
UygulamaModel, derleme zamanında uygulamanıza statik olarak bağlanır.Model, Google Play Hizmetleri aracılığıyla dinamik olarak indirilir.
Uygulama boyutunun etkisiBoyutta yaklaşık 5,7 MB artış.Boyut yaklaşık 200 KB artar.
İlk kullanıma hazırlama süresiModel hemen kullanılabilir.İlk kullanımdan önce modelin indirilmesini beklemeniz gerekebilir.

Deneyin

Başlamadan önce

  1. Proje düzeyindeki build.gradle dosyanızda, Google'ın Maven deposunu hem buildscript hem de allprojects bölümüne eklediğinizden emin olun.

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

    • Modeli uygulamanızla paketlemek için:
    dependencies {
      // ...
      // Use this dependency to bundle the model with your app
      implementation 'com.google.mlkit:smart-reply:17.0.4'
    }
    
    • 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'
    }
    

    Google Play Hizmetleri'ndeki modeli kullanmayı tercih ederseniz uygulamanızı, Play Store'dan yüklendikten sonra modeli cihaza otomatik olarak indirecek şekilde yapılandırabilirsiniz. Uygulamanızın AndroidManifest.xml dosyasına aşağıdaki bildirimi 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>
    

    Modelin kullanılabilirliğini açıkça kontrol edebilir ve Google Play Hizmetleri ModuleInstallClient API aracılığıyla indirme isteğinde bulunabilirsiniz.

    Yükleme sırasında model indirmelerini etkinleştirmezseniz veya açıkça indirme isteğinde bulunmazsanız model, akıllı yanıt oluşturucuyu ilk kez çalıştırdığınızda indirilir. İndirme 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'e, en eski zaman damgası önce olacak şekilde kronolojik olarak sıralanmış List nesneleri iletirsiniz.TextMessage

    Kullanıcı her 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ı her ileti aldığında iletiyi, 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. Kullanıcı kimliğinin herhangi bir kullanıcı verisiyle eşleşmesi gerekmez ve kullanıcı kimliğinin, akıllı yanıt oluşturucunun görüşme 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 görüşme geçmişi nesnesi aşağıdaki örneğe benzer:

    Zaman damgası userID isLocalUser Mesaj
    Thu Feb 21 13:13:39 PST 2019 doğru are you on your way?
    Thu Feb 21 13:15:03 PST 2019 FRIEND0 yanlış Gecikeceğim, üzgünüm.

    ML Kit, görüşme geçmişindeki son mesaja yanıt önerir. Son mesaj, yerel olmayan bir kullanıcıdan gelmelidir. Yukarıdaki örnekte, görüşmedeki son mesaj, yerel olmayan kullanıcı FRIEND0'dan geliyor. Bu günlük, ML Kit'i kullanarak FRIENDO'nun mesajına "Geç kalıyorum, üzgünüm!" şeklinde yanıt verilmesini öneriyor.

    2. Mesaj yanıtlarını alma

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

    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şleyicisine bir SmartReplySuggestionResult nesnesi iletilir. Bu nesne, kullanıcınıza sunabileceğiniz en fazla üç önerilen yanıtın listesini 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üzeyinden emin değilse, giriş konuşması İngilizce değilse veya model hassas bir konu algılarsa ML Kit sonuç döndürmeyebilir.