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

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

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

רוצה לנסות?

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

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

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

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

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

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

ערכת ML מציעה תשובות להודעה האחרונה בהיסטוריית השיחות. ההודעה האחרונה צריכה להגיע ממשתמש לא מקומי. בדוגמה שלמעלה, ההודעה האחרונה בשיחה היא של משתמש לא מקומי מסוג HELP0. כשמשתמשים בכרטיס היומן לכרטיס ML Kit, אפשר לראות את התשובות להודעה של HELPO: "איחרתי, מצטערים!"

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 יועבר לגורם המטפל בהשלמה. האובייקט מכיל רשימה של עד שלוש הצעות לתשובות, שתוכלו להציג למשתמש:

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