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

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

Akıllı yanıtlar oluşturmak için bir görüşmedeki son mesajların günlüğünü ML Kit'e iletirsiniz. ML Kit, konuşmanın İngilizce olduğunu belirlerse ve görüşmenin hassas olabilecek bir konu içermediğini tespit ederse ML Kit, kullanıcınıza önerebileceğiniz üç yanıt oluşturur.

GruplandırılmışGrup halinde olmayanlar
Kitaplık adıcom.google.mlkit:smart-replycom.google.android.gms:play-services-mlkit-smart-reply
UygulamaModel, derleme sırasında uygulamanıza statik olarak bağlıdır.Model, Google Play Hizmetleri üzerinden dinamik olarak indirilir.
Uygulama boyutu etkisiDosya boyutu yaklaşık 5,7 MB arttı.Boyutu yaklaşık 200 KB artışı.
Başlatma süresiModel hemen kullanılabilir hâle gelir.İlk kullanımdan önce modelin indirilmesini beklemeniz gerekebilir.

Deneyin

Başlamadan önce

  1. Proje düzeyindeki build.gradle dosyanıza Google'ın Maven deposunu hem buildscript hem de allprojects bölümlerinize eklediğ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 (genellikle app/build.gradle dosyasıdır) ekleyin. İhtiyaçlarınıza göre aşağıdaki bağımlılıklardan birini seçin:

    • Modeli uygulamanızla birlikte gruplandırmak için:
    dependencies {
      // ...
      // Use this dependency to bundle the model with your app
      implementation 'com.google.mlkit:smart-reply:17.0.2'
    }
    
    • 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ı, 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 beyanı 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 ModuleInstallClient API üzerinden indirme isteğinde bulunabilirsiniz.

    Yükleme zamanı modeli 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 işlemi tamamlanmadan önce gönderdiğiniz istekler hiçbir sonuç döndürmez.

    1. Görüşme geçmişi nesnesi oluşturma

    Akıllı yanıtlar oluşturmak için ML Kit'i kronolojik olarak sıralanmış TextMessage nesneden oluşan List için en erken zaman damgası en başta olacak şekilde iletirsiniz.

    Kullanıcı 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. User-ID, ileti dizisinde göndereni benzersiz bir ş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şturucudaki konuşmalar 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 örnekteki gibi görünür:

    Zaman damgası userID isLocalUser Message
    21 Şubat 2019 Perşembe 13:13:39 PST 2019 true Yolda mısın?
    21 Şubat Perşembe 13:15:03 PST 2019 FRIEND0 false Maalesef gecikiyorum.

    ML Kiti, görüşme geçmişindeki son iletiye yanıt önerir. Son mesaj, yerel olmayan bir kullanıcıdan olmalıdır. Yukarıdaki örnekte, ileti dizisindeki son ileti yerel olmayan FRIEND0 adlı kullanıcı tarafından gönderilmiştir. Bu günlüğü kullanarak ML Kit'i kullandığınızda FRIENDO'nun mesajına yanıt verilir: "Üzgünüm, geç geçiyorum!"

    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 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ınıza sunabileceğiniz en fazla üç önerilen yanıtın bir 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, girilen ileti dizisi İngilizce değilse veya model hassas bir konu algılarsa ML Kit'in sonuç döndürmeyebileceğini unutmayın.