Sie können ML Kit verwenden, um Nachrichtenantworten mithilfe eines geräteinternen Modells zu generieren.
Um intelligente Antworten zu generieren, übergeben Sie ML Kit ein Protokoll der letzten Nachrichten in einer Konversation. Wenn ML Kit feststellt, dass die Konversation auf Englisch stattfindet und dass die Konversation kein potenziell sensibles Thema hat, generiert ML Kit bis zu drei Antworten, die Sie Ihrem Benutzer vorschlagen können.
Bevor Sie beginnen
- Falls noch nicht geschehen, fügen Sie Firebase zu Ihrem Android-Projekt hinzu .
- Fügen Sie die Abhängigkeiten für die ML Kit-Android-Bibliotheken zu Ihrer Modul-Gradle-Datei (auf App-Ebene) hinzu (normalerweise
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' }
- Deaktivieren Sie außerdem in Ihrer
build.gradle
Datei auf App-Ebene die Komprimierung vontflite
Dateien:android { // ... aaptOptions { noCompress "tflite" } }
1. Erstellen Sie ein Gesprächsverlaufsobjekt
Um intelligente Antworten zu generieren, übergeben Sie ML Kit eine chronologisch geordnete List
von FirebaseTextMessage
Objekten, wobei der früheste Zeitstempel zuerst steht.
Wenn der Benutzer eine Nachricht sendet, fügen Sie die Nachricht und ihren Zeitstempel zum Konversationsverlauf hinzu:
Java
conversation.add(FirebaseTextMessage.createForLocalUser(
"heading out now", System.currentTimeMillis()));
Kotlin
conversation.add(FirebaseTextMessage.createForLocalUser(
"heading out now", System.currentTimeMillis()))
Wenn der Benutzer eine Nachricht erhält, fügen Sie die Nachricht, ihren Zeitstempel und die Benutzer-ID des Absenders zum Konversationsverlauf hinzu. Die Benutzer-ID kann eine beliebige Zeichenfolge sein, die den Absender innerhalb der Konversation eindeutig identifiziert. Die Benutzer-ID muss nicht mit irgendwelchen Benutzerdaten übereinstimmen und die Benutzer-ID muss nicht zwischen Konversationen oder Aufrufen des intelligenten Antwortgenerators konsistent sein.
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))
Ein Konversationsverlaufsobjekt sieht wie im folgenden Beispiel aus:
Zeitstempel | Benutzer-ID | Lokaler Benutzer? | Nachricht |
---|---|---|---|
Do, 21. Februar 13:13:39 PST 2019 | WAHR | bist du auf dem Weg? | |
Do, 21. Februar 13:15:03 PST 2019 | FREUND0 | FALSCH | Kommt zu spät, tut mir leid! |
Beachten Sie, dass die neueste Nachricht im obigen Beispiel von einem nicht lokalen Benutzer stammt. Dies ist wichtig, da ML Kit Antworten vorschlägt, die vom Benutzer Ihrer App gesendet werden sollen: dem lokalen Benutzer. Sie sollten sicherstellen, dass Sie ML Kit ein Konversationsprotokoll übergeben, das mit einer Nachricht endet, auf die Ihr Benutzer möglicherweise antworten möchte.
2. Erhalten Sie Nachrichtenantworten
Um intelligente Antworten auf eine Nachricht zu generieren, rufen Sie eine Instanz von FirebaseSmartReply
ab und übergeben Sie den Konversationsverlauf an die Methode 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
// ...
}
Wenn der Vorgang erfolgreich ist, wird ein SmartReplySuggestionResult
-Objekt an den Erfolgshandler übergeben. Dieses Objekt enthält eine Liste mit bis zu 3 vorgeschlagenen Antworten, die Sie Ihrem Benutzer präsentieren können:
Java
for (SmartReplySuggestion suggestion : result.getSuggestions()) {
String replyText = suggestion.getText();
}
Kotlin
for (suggestion in result.suggestions) {
val replyText = suggestion.text
}
Beachten Sie, dass ML Kit möglicherweise keine Ergebnisse zurückgibt, wenn das Modell nicht von der Relevanz der vorgeschlagenen Antworten überzeugt ist, die Eingabekonversation nicht auf Englisch erfolgt oder wenn das Modell sensible Themen erkennt.