تولید پاسخ‌های هوشمند با ML Kit در iOS

ML Kit می‌تواند بااستفاده از مدل درون‌دستگاهی، پاسخ‌های کوتاهی برای پیام‌ها تولید کند.

برای تولید پاسخ‌های هوشمند، گزارشی از پیام‌های اخیر در مکالمه را به ML Kit می‌دهید. اگر ML Kit تشخیص دهد که مکالمه به زبان انگلیسی است و مکالمه موضوع حساس بالقوه ندارد، ML Kit حداکثر سه پاسخ تولید می‌کند که می‌توانید به کاربرتان پیشنهاد دهید.

امتحان کنید

  • با برنامه نمونه بازی کنید تا نمونه‌ای از استفاده از این API را ببینید.

قبل‌از شروع

  1. غلاف‌های ML Kit زیر را در Podfile خود بگنجانید:
    pod 'GoogleMLKit/SmartReply', '8.0.0'
    
  2. پس‌از نصب یا به‌روزرسانی Pods پروژه، پروژه Xcode را بااستفاده از .xcworkspace آن باز کنید. ‫ML Kit در Xcode نسخه ۱۲.۴ یا بالاتر پشتیبانی می‌شود.

۱. ایجاد کردن شیء سابقه مکالمه

برای تولید پاسخ‌های هوشمند، آرایه‌ای از اشیای TextMessage را با ترتیب زمانی به ML Kit ارسال می‌کنید، به‌طوری‌که مُهر زمانی قدیمی‌تر در ابتدا قرار می‌گیرد. هرگاه کاربر پیامی ارسال یا دریافت می‌کند، پیام، مُهر زمان آن، و شناسه کاربر فرستنده پیام را به سابقه مکالمه اضافه کن.

شناسه کاربر می‌تواند هر رشته‌ای باشد که فرستنده را در مکالمه به‌طور یکتا شناسایی کند. شناسه کاربر نیازی ندارد با داده‌های کاربر مطابقت داشته باشد، و شناسه کاربر نیازی ندارد بین مکالمه‌ها یا فراخوانی‌های مولد پاسخ هوشمند یکسان باشد.

اگر پیام را کاربری که می‌خواهید پاسخ‌های پیشنهادی را به او ارائه دهید ارسال کرده است، isLocalUser را روی درست تنظیم کنید.

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)

آبجکتیو-سی

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 پیام
پنج‌شنبه ۲۱ فوریه ۲۰۱۹، ۱۳:۱۳:۳۹ به‌وقت اقیانوس آرام درست در راه هستید؟
Thu Feb 21 13:15:03 PST 2019 FRIEND0 نادرست دیرم شده است، ببخشید!

‫ML Kit پاسخ‌هایی را برای آخرین پیام در سابقه مکالمه پیشنهاد می‌دهد. آخرین پیام باید ازسوی کاربری غیرمحلی باشد. در مثال بالا، آخرین پیام در مکالمه از کاربر غیرمحلی FRIEND0 است. وقتی از این گزارش ML Kit مجوز استفاده می‌کنید، پاسخ‌هایی برای پیام FRIENDO پیشنهاد می‌دهد: «دیر می‌رسم، ببخشید!»

۲. دریافت پاسخ پیام

برای تولید پاسخ‌های هوشمند به پیام، نمونه‌ای از 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.
        // ...
    }
}

آبجکتیو-سی

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)")
}

آبجکتیو-سی

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

توجه داشته باشید که اگر مدل به مرتبط بودن پاسخ‌های پیشنهادی اطمینان نداشته باشد، اگر مکالمه ورودی به زبان انگلیسی نباشد، یا اگر مدل موضوع حساسی را تشخیص دهد، ممکن است ML Kit نتایجی برنگرداند.