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

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

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

אני רוצה לנסות

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

  1. יש לכלול את רצפי ה-ML Kit ב-Podfile:
    pod 'GoogleMLKit/SmartReply', '3.2.0'
    
  2. אחרי שמתקינים או מעדכנים את ה-Pods של הפרויקט, צריך לפתוח את פרויקט ה-Xcode באמצעות .xcworkspace שלו. ערכת ML Kit נתמכת ב-Xcode מגרסה 12.4 ואילך.

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

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

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

אם ההודעה נשלחה מהמשתמש שרוצים להציע לו תשובות, צריך להגדיר את 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:
MLKTextMessage *message = [[MLKTextMessage alloc]
        initWithText:@"How are you?"
        timestamp:[NSDate date].timeIntervalSince1970
        userID:userId
        isLocalUser:NO];
[conversation addObject:message];

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

חותמת זמן userID isLocalUser מסר
ה', 21 בפברואר 13:13:39 PST 2019 true האם אתה בדרך?
ה', 21 בפברואר 13:15:03 PST 2019 FRIEND0 false סליחה, באיחור!

ML Kit מציע תשובות להודעה האחרונה בהיסטוריית השיחות. ההודעה האחרונה צריכה להישלח ממשתמש שאינו מקומי. בדוגמה שלמעלה, ההודעה האחרונה בשיחה היא ממשתמש לא מקומי: WITH0. כשמשתמשים ב-pass ML Kit ביומן הזה, הוא מציע תשובות להודעה של friendO: "באיחור, סליחה!"

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

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

Swift

SmartReply.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 result doesn't contain any suggestions.
    } else if (result.status == .success) {
        // Successfully suggested smart replies.
        // ...
    }
}

Objective-C

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

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

Swift

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

Objective-C

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

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