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ü geçirirsiniz. Makine Öğrenimi Kiti, görüşmenin İngilizce olduğunu ve görüşmenin hassas olabilecek konusu olmadığını belirlerse üç öneri üretebilir. Bu yanıtı kullanıcılarınıza önerebilirsiniz.

GruplandırılanlarGrup halinde olmayanlar
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 boyutu etkisiYaklaşık 5,7 MB boyut artışı.Yaklaşık 200 KB boyut artışı.
Başlatma zamanıModel hemen kullanılabilir.İ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ümlerine eklediğinizden emin olun.

  2. ML Kit Android kitaplıklarının bağımlılıklarını, modülünüzün genellikle app/build.gradle olan gradle dosyasına ekleyin. İhtiyaçlarınıza bağlı olarak aşağıdaki bağımlılıklardan birini seçin:

    • Modeli uygulamanızla birlikte paketlemek 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. Aşağıdaki ifadeyi 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, modelin kullanılabilirliğini açıkça kontrol edebilir ve Google Play Hizmetleri ModuleInstallClient API üzerinden indirme isteğinde bulunabilirsiniz.

    Yükleme sırasında model indirmeleri etkinleştirmez veya açık indirme isteğinde bulunmazsanız akıllı yanıt oluşturma aracını ilk kez çalıştırdığınızda model indirilir. İndirme işlemi tamamlanmadan önce gönderdiğiniz istekler sonuç vermez.

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

    Akıllı yanıtlar oluşturmak için ilk olarak en erken zaman damgasına sahip olan TextMessage nesneden kronolojik sıralamada List olan ML Kiti'ni geçersiniz.

    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ı, gönderenin zaman damgasını ve gönderenin kullanıcı kimliğini sohbet geçmişine ekleyin. User-ID, görüşmedeki 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ği, akıllı yanıt oluşturma aracının görüşmeleri veya çağrıları arasında tutarlı olmalıdır.

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

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

    Zaman damgası UserID isLocalUser Mesaj
    21 Şubat 13:13:39 PST 2019 true yola çıktınız mı?
    21 Şubat 13:15:03 PST 2019 ARKADAŞ0 yanlış Gecikme yaşanıyor.

    ML Kit, 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, görüşmedeki son mesajda yerli olmayan bir kullanıcı olan Arkadaş0 adlı kişiden. ML Kit'i bu günlüğü kullanarak kullandığınızda bu işlem, ARKADAŞ'ın mesajının "Geç kalacağı için üzgünüm." yanıtını verir.

    2. Mesaj yanıtları alın

    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 geçirin:

    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 üç adede kadar ö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();
    }

    Modelin, önerilen yanıtların alaka düzeyinden emin olmaması, giriş görüşmesinin İngilizce olmaması veya modelin hassas konular tespit etmesi durumunda ML Kit'in sonuç döndürmeyebileceğini unutmayın.