Generowanie inteligentnych odpowiedzi za pomocą ML Kit na Androida

ML Kit może generować krótkie 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.

Łą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 momencie kompilacji.Model jest pobierany dynamicznie przez Usługi Google Play.
Wpływ rozmiaru aplikacjiZwiększenie rozmiaru o około 5,7 MB.Zwiększenie rozmiaru o około 200 KB.
Czas inicjowaniaModel jest dostępny od razu.Przed jego pierwszym użyciem konieczne może być poczekać na pobranie modelu.

Wypróbuj

Zanim zaczniesz

  1. W pliku build.gradle na poziomie projektu dodaj repozytorium Google Maven w sekcjach buildscript i allprojects.

  2. Dodaj zależności bibliotek ML Kit na Androida do pliku Gradle modułu na poziomie aplikacji, którym jest zwykle app/build.gradle. W zależności od potrzeb wybierz jedną z tych zależności:

    • 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ć aplikację tak, by po jej zainstalowaniu ze Sklepu Play automatycznie pobierała model na urządzenie. 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ż bezpośrednio sprawdzić dostępność modelu i poprosić o pobranie za pomocą interfejsu ModuleInstallClient API Usług Google Play.

    Jeśli nie włączysz pobierania modelu w czasie instalacji lub nie poprosisz o jawne pobranie, model zostanie pobrany przy pierwszym uruchomieniu generatora inteligentnych odpowiedzi. Żądania wysłane przed ukończeniem pobierania nie dają żadnych wyników.

    1. Tworzenie obiektu historii rozmowy

    Aby generować inteligentne odpowiedzi, musisz przekazać ML Kit w porządku chronologicznym List TextMessage 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:

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

    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 jak w tym przykładzie:

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

    ML Kit sugeruje odpowiedzi na ostatnią wiadomość w historii rozmów. Ostatnia wiadomość powinna pochodzić od użytkownika nielokalnego. W powyższym przykładzie ostatnia wiadomość w wątku pochodzi od użytkownika nielokalnego FRIEND0. Gdy użyjesz tego logu z użyciem pakietu ML Kit, wyświetlą się sugestie odpowiedzi na wiadomość od znajomego: „Spóźnię się, przepraszam!”.

    2. Otrzymuj odpowiedzi na wiadomości

    Aby wygenerować inteligentne odpowiedzi na wiadomość, pobierz instancję SmartReplyGenerator i przekaż historię rozmowy do jej 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ę uda, do modułu obsługi powodzenia zostanie przekazany obiekt SmartReplySuggestionResult. Obiekt zawiera listę maksymalnie 3 sugerowanych odpowiedzi, którą możesz zaprezentować 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, rozmowy wejściowej nie jest w języku angielskim lub jeśli model wykryje temat o charakterze wrażliwym.