Catch up on everything we announced at this year's Firebase Summit. Learn more

Generieren Sie intelligente Antworten mit ML Kit auf Android

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 ist und die Konversation kein potenziell sensibles Thema hat, generiert ML Kit bis zu drei Antworten, die Sie Ihrem Benutzer vorschlagen können.

Bevor Sie beginnen

  1. Wenn Sie nicht bereits haben, fügen Sie Firebase zu dem Android - Projekt .
  2. Fügen Sie die Abhängigkeiten für die ML Kit Android - Bibliotheken zu Ihrem Modul (app-Ebene) Gradle Datei ( in der Regel 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'
    }
    
  3. Auch in der App-Ebene build.gradle Datei, deaktivieren Sie Komprimierung von tflite Dateien:
    android {
        // ...
        aaptOptions {
            noCompress "tflite"
        }
    }
    

1. Erstellen Sie ein Gesprächsverlaufsobjekt

Um intelligente Antworten zu erzeugen, übergeben Sie ML Kit eine chronologisch geordnete List von FirebaseTextMessage Objekte, mit dem frühesten Zeitstempel zuerst.

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 Unterhaltungsverlauf hinzu. Die Benutzer-ID kann eine beliebige Zeichenfolge sein, die den Absender innerhalb der Konversation eindeutig identifiziert. Die Benutzer-ID muss keinen Benutzerdaten entsprechen und die Benutzer-ID muss zwischen Konversationen oder Aufrufen des intelligenten Antwortgenerators nicht 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 Benutzeridentifikation Lokaler Benutzer? Nachricht
Do Feb 21 13:13:39 PST 2019 wahr bist du auf dem Weg?
Do Feb 21 13:15:03 PST 2019 FREUND0 falsch Verspätung, Entschuldigung!

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. Stellen Sie sicher, dass Sie ML Kit ein Konversationsprotokoll übergeben, das mit einer Nachricht endet, auf die Ihr Benutzer möglicherweise antworten möchte.

2. Antworten auf Nachrichten erhalten

Um intelligente Antworten auf eine Nachricht zu erzeugen, eine Instanz erhalten FirebaseSmartReply und das Gespräch Geschichte seiner passieren suggestReplies() Methode:

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

Ist die Operation erfolgreich, ein SmartReplySuggestionResult ist Objekt für den Erfolg Handler ü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 der Relevanz der vorgeschlagenen Antworten nicht sicher ist, die Eingabekonversation nicht auf Englisch ist oder wenn das Modell sensible Themen erkennt.