אפשר להשתמש ב-ML Kit כדי ליצור תשובות להודעות במכשיר מודל טרנספורמר.
כדי ליצור תשובות מהירות, צריך להעביר ל-ML Kit יומן של ההודעות האחרונות שיחה. אם ערכת ML Kit מזהה שהשיחה היא באנגלית, השיחה לא מכילה נושא שעשוי להיות רגיש, למידת מכונה ייווצרו עד שלוש תשובות. אתם יכולים להציע אותן למשתמש.
לפני שמתחילים
- אם עדיין לא עשיתם זאת, מוסיפים את Firebase לפרויקט Android.
- מוסיפים את יחסי התלות של ספריות 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' }
- אפשר גם להשבית את הדחיסה בקובץ
build.gradle
ברמת האפליקציה מתוךtflite
קבצים:android { // ... aaptOptions { noCompress "tflite" } }
1. יצירת אובייקט של היסטוריית שיחות
כדי ליצור תשובות מהירות, צריך להעביר ל-ML Kit List
בסדר כרונולוגי
מתוך FirebaseTextMessage
אובייקטים, עם חותמת הזמן המוקדמת ביותר.
בכל פעם שהמשתמש שולח הודעה, הוסף את ההודעה ואת חותמת הזמן שלה אל היסטוריית שיחות:
conversation.add(FirebaseTextMessage.createForLocalUser(
"heading out now", System.currentTimeMillis()));
conversation.add(FirebaseTextMessage.createForLocalUser(
"heading out now", System.currentTimeMillis()))
בכל פעם שהמשתמש מקבל הודעה, מוסיפים את ההודעה, את חותמת הזמן שלה ואת מזהה המשתמש של השולח להיסטוריית השיחות. User ID יכול להיות כל מחרוזת מזהה באופן ייחודי את השולח בשיחה. לא צריך את User ID בהתאם לנתוני המשתמש, ומזהה המשתמש לא חייב להיות עקבי בין שיחה לבין הפעלה של מחולל התשובות המהירות.
conversation.add(FirebaseTextMessage.createForRemoteUser(
"Are you coming back soon?", System.currentTimeMillis(), userId));
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()
שלה:
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
// ...
}
});
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 הצעות לתשובות,
שאפשר להציג למשתמש:
for (SmartReplySuggestion suggestion : result.getSuggestions()) {
String replyText = suggestion.getText();
}
for (suggestion in result.suggestions) {
val replyText = suggestion.text
}
שימו לב: יכול להיות ש-ML Kit לא יחזיר תוצאות אם המודל לא בטוח לגבי הרלוונטיות של התשובות המוצעות, אם שיחת הקלט לא באנגלית או אם המודל מזהה נושא רגיש.