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

אתם יכולים להשתמש ב-ML Kit כדי ליצור תשובות להודעות באמצעות מודל במכשיר.

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

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

  1. אם עדיין לא הוספתם את Firebase לאפליקציה, תוכלו לפעול לפי השלבים שמפורטים במדריך לתחילת העבודה.
  2. כוללים את ספריות ML Kit ב-Podfile:
    pod 'Firebase/MLCommon', '6.25.0'
    pod 'Firebase/MLNLSmartReply', '6.25.0'
    
    אחרי שמתקינים או מעדכנים את ה-Pods של הפרויקט, חשוב לפתוח את הפרויקט ב-Xcode באמצעות .xcworkspace שלו.
  3. באפליקציה, מייבאים את Firebase:

    Swift

    import Firebase

    Objective-C

    @import Firebase;

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

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

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

אם ההודעה נשלחה על ידי המשתמש שרוצים להציע לו תשובות, מגדירים את הערך של isLocalUser כ-true.

Swift

var conversation: [TextMessage] = []

// Then, for each message sent and received:
let message = TextMessage(
    text: "How are you?",
    timestamp: Date().timeIntervalSince1970,
    userID: "userId",
    isLocalUser: false)
conversation.append(message)

Objective-C

NSMutableArray *conversation = [NSMutableArray array];

// Then, for each message sent and received:
FIRTextMessage *message = [[FIRTextMessage alloc]
        initWithText:@"How are you?"
        timestamp:[NSDate date].timeIntervalSince1970
        userID:userId
        isLocalUser:NO];
[conversation addObject:message];

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

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

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

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

כדי ליצור תשובות מהירות להודעה, מקבלים מופע של SmartReply ומעבירים את היסטוריית השיחות ל-method‏ suggestReplies(for:completion:) שלו:

Swift

let naturalLanguage = NaturalLanguage.naturalLanguage()
naturalLanguage.smartReply().suggestReplies(for: conversation) { result, error in
    guard error == nil, let result = result else {
        return
    }
    if (result.status == .notSupportedLanguage) {
        // The conversation's language isn't supported, so the
        // the result doesn't contain any suggestions.
    } else if (result.status == .success) {
        // Successfully suggested smart replies.
        // ...
    }
}

Objective-C

FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRSmartReply *smartReply = [naturalLanguage smartReply];
[smartReply suggestRepliesForMessages:inputText
                           completion:^(FIRSmartReplySuggestionResult * _Nullable result,
                                        NSError * _Nullable error) {
  if (error || !result) {
    return;
  }
  if (result.status == FIRSmartReplyResultStatusNotSupportedLanguage) {
      // The conversation's language isn't supported, so the
      // the result doesn't contain any suggestions.
  } else if (result.status == FIRSmartReplyResultStatusSuccess) {
      // Successfully suggested smart replies.
      // ...
  }
}];
]

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

Swift

for suggestion in result.suggestions {
  print("Suggested reply: \(suggestion.text)")
}

Objective-C

for (FIRSmartReplySuggestion *suggestion in result.suggestions) {
  NSLog(@"Suggested reply: %@", suggestion.text);
}

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