ערכת ML Kit יכולה ליצור תשובות קצרות להודעות באמצעות מודל ששמור במכשיר.
כדי ליצור תשובות מהירות, צריך להעביר ל-ML Kit יומן של ההודעות האחרונות בשיחה. אם מערכת ML Kit קובעת שהשיחה היא באנגלית ושהשיחה לא כוללת נושא שעשוי להיות רגיש, היא תיצור עד שלוש תשובות שאפשר להציע למשתמש.
אני רוצה לנסות
- שחקו עם האפליקציה לדוגמה כדי לראות דוגמה לשימוש ב-API הזה.
לפני שמתחילים
- יש לכלול את רצפי ה-ML Kit ב-Podfile:
pod 'GoogleMLKit/SmartReply', '3.2.0'
- אחרי שמתקינים או מעדכנים את ה-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 לא תחזיר תוצאות אם המודל לא בטוח ברלוונטיות של התשובות המוצעות, אם שיחת הקלט היא לא באנגלית או אם המודל מזהה נושא רגיש.