Za pomocą ML Kit możesz generować 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 prowadzona w języku angielskim i nie ma potencjalnie drażliwego tematu, ML Kit wygeneruje maksymalnie trzy odpowiedzi, które możesz zasugerować użytkownikowi.
Zanim zaczniesz
- Jeśli jeszcze tego nie zrobiłeś, dodaj Firebase do swojego projektu na Androida .
- Dodaj zależności dla bibliotek ML Kit 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' }
- Również w pliku
build.gradle
na poziomie aplikacji wyłącz kompresję plikówtflite
:android { // ... aaptOptions { noCompress "tflite" } }
1. Utwórz obiekt historii konwersacji
Aby wygenerować inteligentne odpowiedzi, przekazujesz ML Kit uporządkowaną chronologicznie List
obiektów FirebaseTextMessage
, zaczynając od najwcześniejszego znacznika czasu.
Za każdym razem, gdy użytkownik wysyła wiadomość, dodaj wiadomość i jej znacznik czasu do historii konwersacji:
Jawa
conversation.add(FirebaseTextMessage.createForLocalUser(
"heading out now", System.currentTimeMillis()));
Kotlina
conversation.add(FirebaseTextMessage.createForLocalUser(
"heading out now", System.currentTimeMillis()))
Za każdym razem, gdy użytkownik otrzyma wiadomość, dodaj ją, jej sygnaturę czasową i identyfikator użytkownika nadawcy do historii konwersacji. Identyfikatorem użytkownika może być dowolny ciąg znaków, który jednoznacznie identyfikuje nadawcę w rozmowie. Identyfikator użytkownika nie musi odpowiadać żadnym danym użytkownika i nie musi być spójny w rozmowach lub wywołaniach generatora inteligentnych odpowiedzi.
Jawa
conversation.add(FirebaseTextMessage.createForRemoteUser(
"Are you coming back soon?", System.currentTimeMillis(), userId));
Kotlina
conversation.add(FirebaseTextMessage.createForRemoteUser(
"Are you coming back soon?", System.currentTimeMillis(), userId))
Obiekt historii konwersacji wygląda jak w poniższym przykładzie:
Znak czasu | Identyfikator użytkownika | Użytkownik lokalny? | Wiadomość |
---|---|---|---|
Czw. 21 lutego 13:13:39 PST 2019 | PRAWDA | jesteś w drodze? | |
Czw. 21 lutego 13:15:03 PST 2019 | PRZYJACIEL0 | FAŁSZ | Spóźnienie, przepraszam! |
Należy pamiętać, że najnowsza wiadomość w powyższym przykładzie pochodzi od użytkownika innego niż lokalny. Jest to ważne, ponieważ ML Kit sugeruje odpowiedzi, które ma wysłać użytkownik Twojej aplikacji: użytkownik lokalny. Powinieneś mieć pewność, ż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
// ...
}
});
Kotlina
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
zostanie przekazany do procedury obsługi powodzenia. Obiekt ten zawiera listę maksymalnie 3 sugerowanych odpowiedzi, które możesz zaprezentować swojemu użytkownikowi:
Jawa
for (SmartReplySuggestion suggestion : result.getSuggestions()) {
String replyText = suggestion.getText();
}
Kotlina
for (suggestion in result.suggestions) {
val replyText = suggestion.text
}
Należy pamiętać, że ML Kit może nie zwrócić wyników, jeśli model nie ma pewności co do trafności sugerowanych odpowiedzi, rozmowa wejściowa nie jest prowadzona w języku angielskim lub jeśli model wykryje drażliwy temat.