Generowanie inteligentnych odpowiedzi za pomocą ML Kit na Androida

ML Kit może generować krótkie odpowiedzi na wiadomości za pomocą 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 że nie ma ona potencjalnie drażliwego tematu, wygeneruje maksymalnie 3 odpowiedzi, które możesz zasugerować użytkownikowi.

Łączenie w pakietyNiegrupowane
Nazwa bibliotekicom.google.mlkit:smart-replycom.google.android.gms:play-services-mlkit-smart-reply
ImplementacjaModel jest statycznie połączony z aplikacją w czasie kompilacji.Model jest pobierany dynamicznie przez Usługi Google Play.
Wpływ na rozmiar aplikacjiZwiększenie rozmiaru o około 5,7 MB.Zwiększenie rozmiaru o około 200 KB.
Czas inicjowaniaModel jest dostępny od razu.Możliwe, że przed pierwszym użyciem trzeba będzie poczekać na pobranie modelu.

Wypróbuj

Zanim zaczniesz

  1. Upewnij się, że w sekcji buildscript i allprojects w pliku build.gradle Google na poziomie projektu znajduje się repozytorium Maven.

  2. Dodaj zależności dla bibliotek ML Kit na Androida do pliku Gradle na poziomie modułu. Zwykle ma on postać app/build.gradle. Wybierz jedną z tych zależności w zależności od potrzeb:

    • Aby połączyć model z aplikacją:
    dependencies {
      // ...
      // Use this dependency to bundle the model with your app
      implementation 'com.google.mlkit:smart-reply:17.0.3'
    }
    
    • Aby używać modelu w Usługach Google Play:
    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'
    }
    

    Jeśli zdecydujesz się używać modelu w Usługach Google Play, możesz skonfigurować automatyczne pobieranie modelu przez aplikację po jej zainstalowaniu ze Sklepu Play. Dodając tę deklarację do pliku AndroidManifest.xml aplikacji:

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

    Możesz też wyraźnie sprawdzić dostępność modelu i poprosić o pobranie za pomocą interfejsu ModuleInstallClient API z Usług Google Play.

    Jeśli nie włączysz pobierania modelu podczas instalacji ani nie poprosisz o jawne pobieranie, model zostanie pobrany przy pierwszym uruchomieniu generatora inteligentnych odpowiedzi. Prośby przesłane przed zakończeniem pobierania nie dają żadnych wyników.

    1. Tworzenie obiektu historii rozmowy

    Aby wygenerować inteligentne odpowiedzi, przekazujesz ML Kit uporządkowaną chronologicznie List z TextMessage obiektów, zaczynając od najwcześniejszej sygnatury czasowej.

    Za każdym razem, gdy użytkownik wysyła wiadomość, dodaj ją wraz z sygnaturą czasową do historii rozmowy:

    Kotlin

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

    Java

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

    Za każdym razem, gdy użytkownik otrzyma wiadomość, dodaj ją do historii rozmowy, jej sygnaturę czasową oraz identyfikator użytkownika nadawcy. Identyfikator użytkownika może być dowolnym ciągiem znaków, który jednoznacznie identyfikuje nadawcę w wątku. Identyfikator użytkownika nie musi odpowiadać żadnym danym użytkownika i nie musi być spójny między rozmowami ani wywołaniami generatora inteligentnych odpowiedzi.

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

    Obiekt historii rozmowy wygląda tak:

    sygnatura czasowa, userID isLocalUser przekaz,
    Czw 21 lutego 13:13:39 czasu PST 2019 prawda jesteś w drodze?
    Czw 21 lutego 13:15:03 czasu PST 2019 FRIEND0 false Spóźnię się.

    ML Kit sugeruje odpowiedzi na ostatnią wiadomość w historii rozmowy. Ostatnia wiadomość powinna być od użytkownika z innego kraju. W powyższym przykładzie ostatnia wiadomość w rozmowie pochodzi od użytkownika FRIEND0, który nie jest lokalny. Gdy używasz pakietu ML Kit z przekazywania tego logu, sugeruje on odpowiedzi na wiadomość „ZNAJOMI”.

    2. Otrzymywanie odpowiedzi na wiadomości

    Aby generować inteligentne odpowiedzi na wiadomość, pobierz wystąpienie obiektu SmartReplyGenerator i przekaż historię rozmowy do metody suggestReplies():

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

    Jeśli operacja się powiedzie, do modułu obsługi powodzenia jest przekazywany obiekt SmartReplySuggestionResult. Ten obiekt zawiera listę maksymalnie trzech sugerowanych odpowiedzi, które możesz przedstawić użytkownikowi:

    Kotlin

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

    Java

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

    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 jest w języku innym niż angielski lub jeśli model wykryje wrażliwy temat.