ML Kit może generować krótkie odpowiedzi na wiadomości przy użyciu modelu na urządzeniu.
Aby wygenerować inteligentne odpowiedzi, przekaż ML Kit dziennik ostatnich wiadomości w rozmowie. Jeśli ML Kit stwierdzi, że rozmowa jest prowadzona w języku angielskim i nie dotyczy potencjalnie wrażliwych tematów, wygeneruje maksymalnie 3 odpowiedzi, które możesz zaproponować użytkownikowi.
Łączenie w pakiety | Odłączone | |
---|---|---|
Nazwa biblioteki | com.google.mlkit:smart-reply | com.google.android.gms:play-services-mlkit-smart-reply |
Implementacja | Model jest statycznie połączony z aplikacją w momencie jej tworzenia. | Model jest pobierany dynamicznie za pomocą Usług Google Play. |
Wpływ rozmiaru aplikacji | Wzrost rozmiaru o około 5,7 MB. | Wzrost rozmiaru o około 200 KB. |
Czas inicjowania | Model jest dostępny od razu. | Przed pierwszym użyciem może być konieczne poczekanie na pobranie modelu. |
Wypróbuj
- Wypróbuj przykładową aplikację, aby zobaczyć przykład użycia tego interfejsu API.
Zanim zaczniesz
W pliku
build.gradle
na poziomie projektu dodaj repozytorium Maven firmy Google do sekcjibuildscript
iallprojects
.Dodaj zależności dla bibliotek ML Kit na Androida do pliku Gradle na poziomie aplikacji modułu, który zwykle znajduje się w
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.4' }
- 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żyć modelu w Usługach Google Play, możesz skonfigurować aplikację tak, aby automatycznie pobierała model na urządzenie po zainstalowaniu aplikacji ze Sklepu Play. Dodając do pliku
AndroidManifest.xml
aplikacji tę deklarację:<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ż sprawdzić dostępność modelu i poprosić o pobranie za pomocą interfejsu ModuleInstallClient API w Usługach Google Play.
Jeśli nie włączysz pobierania modelu w momencie instalacji lub nie poprosisz o wyraźne pobranie, model zostanie pobrany przy pierwszym uruchomieniu generatora inteligentnych odpowiedzi. Żądania wysłane przed zakończeniem pobierania nie przyniosą wyników.
1. Tworzenie obiektu historii rozmów
Aby wygenerować inteligentne odpowiedzi, przekaż do ML Kit chronologicznie uporządkowaną
List
obiektówTextMessage
, zaczynając od najwcześniejszego znacznika czasu.Za każdym razem, gdy użytkownik wyśle 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()));
Gdy użytkownik otrzyma wiadomość, dodaj ją, jej sygnaturę czasową i identyfikator użytkownika nadawcy do historii rozmowy. Identyfikator użytkownika może być dowolnym ciągiem znaków, który jednoznacznie identyfikuje nadawcę w rozmowie. Identyfikator użytkownika nie musi odpowiadać żadnym danym użytkownika ani być spójny w przypadku różnych rozmów lub wywołań 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 rozmów wygląda tak jak w tym przykładzie:
Sygnatura czasowa userID isLocalUser Wiadomość Cz, 21 lutego 2019 r., 13:13:39 PST prawda Jesteś w drodze? Thu Feb 21 13:15:03 PST 2019 FRIEND0 fałsz Spóźnię się, przepraszam. ML Kit sugeruje odpowiedzi na ostatnią wiadomość w historii rozmowy. Ostatnia wiadomość powinna pochodzić od użytkownika spoza sieci lokalnej. W przykładzie powyżej ostatnia wiadomość w wątku pochodzi od użytkownika spoza sieci lokalnej FRIEND0. Gdy przekażesz ten log do ML Kit, zasugeruje on odpowiedzi na wiadomość od FRIENDO: „Spóźnię się, przepraszam!”.
2. Otrzymywanie odpowiedzi na wiadomości
Aby wygenerować inteligentne odpowiedzi na wiadomość, uzyskaj instancję
SmartReplyGenerator
i przekaż historię rozmowy do jej metodysuggestReplies()
: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 funkcji obsługi sukcesu zostanie przekazany obiekt
SmartReplySuggestionResult
. Ten obiekt zawiera listę maksymalnie 3 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 nie jest w języku angielskim lub jeśli model wykryje temat o charakterze poufnym.