Generowanie inteligentnych odpowiedzi za pomocą ML Kit na Androidzie

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

Aby generować inteligentne odpowiedzi, musisz przekazać ML Kit dziennik ostatnich wiadomości w rozmowie. Jeśli ML Kit ustali, że rozmowa jest w języku angielskim i nie ma potencjalnie poufnych tematów, ML Kit wygeneruje maksymalnie 3 odpowiedzi, które możesz zasugerować użytkownikowi.

Zanim zaczniesz

  1. Dodaj Firebase do swojego projektu Android, chyba że masz to już za sobą.
  2. Dodaj zależności bibliotek ML Kit na Androida 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. Także w pliku build.gradle na poziomie aplikacji wyłącz kompresję tflite plików:
    android {
        // ...
        aaptOptions {
            noCompress "tflite"
        }
    }
    

1. Tworzenie obiektu historii rozmowy

Aby generować inteligentne odpowiedzi, musisz przekazać ML Kit w porządku chronologicznym List FirebaseTextMessage obiektów, zaczynając od najwcześniejszej sygnatury czasowej.

Za każdym razem, gdy użytkownik wysyła wiadomość, dodaj wiadomość i jej sygnaturę czasową do historii 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 wiadomość, jej sygnaturę czasową oraz identyfikator użytkownika nadawcy do historii rozmowy. Może to być dowolny ciąg znaków, który jednoznacznie identyfikuje nadawcę w wątku. Identyfikator użytkownika nie musi odpowiadać żadnym danym użytkownika, a identyfikator użytkownika nie musi być spójny w rozmowach i wywołaniach generatora odpowiedzi inteligentnych.

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?
Czw. 21 lutego 13:15:03 PST 2019 ZNAJOMI0 fałsz Spóźnię się.

Najnowsza wiadomość w powyższym przykładzie pochodzi od użytkownika nielokalnego. To ważne, ponieważ ML Kit sugeruje odpowiedzi, które ma wysłać użytkownik Twojej aplikacji, czyli użytkownik lokalny. Upewnij się, że przekazujesz ML Kit dziennik rozmowy, 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ę rozmowy do jej 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ę uda, do modułu obsługi powodzenia zostanie przekazany obiekt SmartReplySuggestionResult. 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 co do trafności sugerowanych odpowiedzi, rozmowy wejściowej nie jest w języku angielskim lub jeśli model wykryje temat o charakterze wrażliwym.