Generowanie inteligentnych odpowiedzi za pomocą ML Kit na Androidzie

Możesz używać ML Kit do generowania odpowiedzi na wiadomości przy użyciu model atrybucji.

Aby generować inteligentne odpowiedzi, musisz przekazać ML Kit dziennik ostatnich wiadomości w rozmowy. Jeśli ML Kit ustali, że rozmowa jest po angielsku, rozmowa nie ma potencjalnie poufnej sprawy, ML Kit generuje maksymalnie 3 odpowiedzi, które możesz zasugerować użytkownikowi.

Zanim zaczniesz

  1. Jeśli jeszcze nie masz tego za sobą, dodaj Firebase do swojego projektu na Androida.
  2. Dodaj do modułu zależności między bibliotekami ML Kit na Androida Plik Gradle (na poziomie aplikacji) (zwykle app/build.gradle):
    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. Wyłącz też kompresję w pliku build.gradle na poziomie aplikacji z tflite plików:
    android {
        // ...
        aaptOptions {
            noCompress "tflite"
        }
    }
    

1. Tworzenie obiektu historii rozmowy

Aby generować inteligentne odpowiedzi, musisz przekazać ML Kit w kolejności chronologicznej List z FirebaseTextMessage obiektów, z najwcześniejszą sygnaturą czasową.

Za każdym razem, gdy użytkownik wysyła wiadomość, dodaj wiadomość i jej sygnaturę czasową do pola historia rozmowy:

Java

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

Kotlin

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

Za każdym razem, gdy użytkownik otrzyma wiadomość, dodaj jej treść, jej sygnaturę czasową identyfikator użytkownika nadawcy. Identyfikatorem użytkownika może być dowolny ciąg, jednoznacznie identyfikuje nadawcę w wątku. Identyfikator użytkownika nie musi: powiązane z danymi użytkownika, a identyfikator użytkownika nie musi być spójny. między rozmową a wywołaniami generatora inteligentnych odpowiedzi.

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

Obiekt historii rozmowy wygląda jak w tym przykładzie:

Sygnatura czasowa Identyfikator użytkownika Korzystasz z lokalnego profilu? Wiadomość
Czw. Lut 2019, 13:13:39 PST 2019 prawda jesteś w drodze?
Cz 21 lutego 13:15:03 PST 2019 ZNAJOMI0 fałsz Spóźnię się.

Najnowsza wiadomość w powyższym przykładzie pochodzi od użytkownika spoza regionu użytkownika. To ważne, ponieważ ML Kit sugeruje odpowiedzi, które mają zostać wysłane przez użytkownika aplikacji, czyli użytkownika lokalnego. Musisz się upewnić, że zdajesz ML Kit dziennik rozmowy kończący się wiadomością, do której użytkownik może chcesz odpowiedzieć.

2. Otrzymuj odpowiedzi na wiadomości

Aby wygenerować inteligentne odpowiedzi na wiadomość, pobierz instancję FirebaseSmartReply i przekazać historię rozmowy do metody suggestReplies():

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

Jeśli operacja się powiedzie, obiekt SmartReplySuggestionResult zostanie przekazany do do obsługi skutecznych rozwiązań. Ten obiekt zawiera listę maksymalnie 3 sugerowanych odpowiedzi. które możesz zaprezentować użytkownikowi:

Java

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

Kotlin

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

Pamiętaj, że ML Kit może nie zwracać wyników, jeśli model nie ma pewności trafność sugerowanych odpowiedzi, rozmówca nie jest angielskim lub jeśli model wykryje wrażliwy obiekt.