איך ליצור תשובות חכמות באמצעות ML Kit ב-iOS

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

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

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

  1. יש לכלול ב-Podfile את מוטות ה-ML Kit הבאים:
    pod 'GoogleMLKit/SmartReply', '3.2.0'
    
  2. לאחר ההתקנה או עדכון של ה-Pod של הפרויקט, פותחים את פרויקט 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];

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

חותמת זמן מזהה משתמש isLocalUser מסר
21 בפברואר 2019 13:13:39 PST נכון האם את/ה בדרך?
21 בפברואר 2019 13:15 PST חבר0 FALSE אגיע באיחור, מצטערים!

ערכת ML מציעה תשובות להודעה האחרונה בהיסטוריית השיחות. ההודעה האחרונה צריכה להגיע ממשתמש לא מקומי. בדוגמה שלמעלה, ההודעה האחרונה בשיחה היא ממשתמש לא מקומי CUSTOMER0. כשמשתמשים בכרטיס ML Kit ביומן הזה, הוא מציע תשובות להודעה של CUSTOMERO'"מהיר, מאוחר!"

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

כדי ליצור תשובות חכמות להודעה, צריך להשתמש במכונה של SmartReply ולהעביר את היסטוריית השיחות לשיטת 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 לא יחזיר תוצאות אם המודל לא ודאי ביחס לרלוונטיות של התשובות המוצעות, אם שיחת הקלט לא כתובה באנגלית, או אם המודל מזהה נושא רגיש.