יצירת תשובות מהירות באמצעות ML Kit ב-Android

אפשר להשתמש ב-ML Kit כדי ליצור תשובות להודעות במכשיר מודל טרנספורמר.

כדי ליצור תשובות מהירות, צריך להעביר ל-ML Kit יומן של ההודעות האחרונות שיחה. אם ערכת ML Kit מזהה שהשיחה היא באנגלית, השיחה לא מכילה נושא שעשוי להיות רגיש, למידת מכונה ייווצרו עד שלוש תשובות. אתם יכולים להציע אותן למשתמש.

לפני שמתחילים

  1. אם עדיין לא עשיתם זאת, מוסיפים את Firebase לפרויקט Android.
  2. מוסיפים את יחסי התלות של ספריות ML Kit ל-Android לקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל 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. אפשר גם להשבית את הדחיסה בקובץ build.gradle ברמת האפליקציה מתוך tflite קבצים:
    android {
        // ...
        aaptOptions {
            noCompress "tflite"
        }
    }

1. יצירת אובייקט של היסטוריית שיחות

כדי ליצור תשובות מהירות, צריך להעביר ל-ML Kit List בסדר כרונולוגי מתוך FirebaseTextMessage אובייקטים, עם חותמת הזמן המוקדמת ביותר.

בכל פעם שהמשתמש שולח הודעה, הוסף את ההודעה ואת חותמת הזמן שלה אל היסטוריית שיחות:

Java

conversation.add(FirebaseTextMessage.createForLocalUser(
        "heading out now", System.currentTimeMillis()));

Kotlin

conversation.add(FirebaseTextMessage.createForLocalUser(
        "heading out now", System.currentTimeMillis()))

בכל פעם שהמשתמש מקבל הודעה, מוסיפים את ההודעה, את חותמת הזמן שלה ואת מזהה המשתמש של השולח להיסטוריית השיחות. User ID יכול להיות כל מחרוזת מזהה באופן ייחודי את השולח בשיחה. לא צריך את User ID בהתאם לנתוני המשתמש, ומזהה המשתמש לא חייב להיות עקבי בין שיחה לבין הפעלה של מחולל התשובות המהירות.

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

אובייקט של היסטוריית שיחות נראה כמו בדוגמה הבאה:

חותמת זמן User ID משתמש מקומי? הודעה
יום ה' 21 בפברואר 13:13:39 (שעון החוף המערבי) 2019 true בדרך?
יום ה' 21 בפברואר 13:15:03 (שעון החוף המערבי) 2019 FRIEND0 false סליחה, אאחר.

שימו לב שההודעה האחרונה בדוגמה שלמעלה היא הודעה לא מקומית משתמש. הפעולה הזו חשובה כי ערכת ML Kit מציעה תשובות שאמורות להישלח משתמש באפליקציה: משתמש מקומי. חשוב לוודא שאתם מעבירים ל-ML Kit יומן שיחות שמסתיים בהודעה שהמשתמש עשוי לרצות להשיב לה.

2. קבלת תשובות להודעות

כדי ליצור תשובות מהירות להודעות, צריך להוריד מופע של FirebaseSmartReply ומעבירים את היסטוריית השיחות לשיטה 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
            // ...
        }

אם הפעולה מצליחה, אובייקט SmartReplySuggestionResult מועבר אל הגורם המטפל להצלחה. האובייקט הזה מכיל רשימה של עד 3 הצעות לתשובות, שאפשר להציג למשתמש:

Java

for (SmartReplySuggestion suggestion : result.getSuggestions()) {
    String replyText = suggestion.getText();
}

Kotlin

for (suggestion in result.suggestions) {
    val replyText = suggestion.text
}

שימו לב: יכול להיות ש-ML Kit לא יחזיר תוצאות אם המודל לא בטוח לגבי הרלוונטיות של התשובות המוצעות, אם שיחת הקלט לא באנגלית או אם המודל מזהה נושא רגיש.