Generuj inteligentne odpowiedzi za pomocą ML Kit na Androidzie

Możesz użyć ML Kit do generowania odpowiedzi na wiadomości przy użyciu modelu na urządzeniu.

Aby wygenerować inteligentne odpowiedzi, przekazujesz ML Kit dziennik ostatnich wiadomości w rozmowie. Jeśli ML Kit ustali, że rozmowa jest po angielsku i że rozmowa nie ma potencjalnie drażliwego tematu, ML Kit generuje do trzech odpowiedzi, które możesz zasugerować swojemu użytkownikowi.

Zanim zaczniesz

  1. Jeśli jeszcze tego nie zrobiłeś, dodaj Firebase do swojego projektu na Androida .
  2. Dodaj zależności dla bibliotek ML Kit dla systemu Android do pliku Gradle modułu (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. Również w pliku build.gradle na poziomie aplikacji wyłącz kompresję plików tflite :
    android {
        // ...
        aaptOptions {
            noCompress "tflite"
        }
    }
    

1. Utwórz obiekt historii rozmów

Aby wygenerować inteligentne odpowiedzi, przekazujesz ML Kit chronologicznie uporządkowaną List obiektów FirebaseTextMessage , z najwcześniejszym znacznikiem czasu.

Za każdym razem, gdy użytkownik wyśle ​​wiadomość, dodaj wiadomość i jej sygnaturę czasową do historii konwersacji:

Jawa

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 wiadomość, jej sygnaturę czasową i identyfikator użytkownika nadawcy do historii konwersacji. Identyfikator użytkownika może być dowolnym ciągiem, który jednoznacznie identyfikuje nadawcę w ramach konwersacji. Identyfikator użytkownika nie musi odpowiadać żadnym danym użytkownika, a identyfikator użytkownika nie musi być spójny między konwersacją lub wywołaniami generatora inteligentnych odpowiedzi.

Jawa

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 konwersacji wygląda jak w następującym przykładzie:

Znak czasu Identyfikator użytkownika Użytkownik lokalny? Wiadomość
Czw 21 Lut 13:13:39 PST 2019 prawda jesteś w drodze?
Czw 21 Lut 13:15:03 PST 2019 PRZYJACIEL0 fałszywy Spóźnię się, przepraszam!

Zauważ, że najnowsza wiadomość w powyższym przykładzie pochodzi od użytkownika nielokalnego. Jest to ważne, ponieważ ML Kit sugeruje odpowiedzi przeznaczone do wysłania przez użytkownika Twojej aplikacji: użytkownika lokalnego. Powinieneś upewnić się, że przekazujesz ML Kit dziennik konwersacji, który kończy się wiadomością, na którą użytkownik może chcieć odpowiedzieć.

2. Otrzymuj odpowiedzi na wiadomości

Aby wygenerować inteligentne odpowiedzi na wiadomość, pobierz instancję FirebaseSmartReply i przekaż historię konwersacji do jej metody suggestReplies() :

Jawa

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 jest przekazywany do programu obsługi sukcesu. Ten obiekt zawiera listę maksymalnie 3 sugerowanych odpowiedzi, które możesz zaprezentować swojemu użytkownikowi:

Jawa

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 co do trafności sugerowanych odpowiedzi, rozmowa wejściowa nie jest w języku angielskim lub jeśli model wykryje drażliwy temat.