إنشاء ردود ذكية باستخدام ML Kit على نظام iOS

يمكنك استخدام ML Kit لإنشاء ردود على الرسائل باستخدام نموذج موجود على الجهاز.

لإنشاء ردود ذكية، يمكنك تمرير سجل ML Kit بالرسائل الأخيرة في المحادثة. إذا حددت ML Kit أن المحادثة كانت باللغة الإنجليزية، وأن المحادثة لا تتضمن موضوعًا حساسًا، فسوف تقوم ML Kit بإنشاء ما يصل إلى ثلاثة ردود، والتي يمكنك اقتراحها على المستخدم الخاص بك.

قبل ان تبدأ

  1. إذا لم تكن قد أضفت Firebase إلى تطبيقك بالفعل، فقم بذلك باتباع الخطوات الواردة في دليل البدء .
  2. قم بتضمين مكتبات ML Kit في ملف Podfile الخاص بك:
    pod 'Firebase/MLCommon', '6.25.0'
    pod 'Firebase/MLNLSmartReply', '6.25.0'
    
    بعد تثبيت أو تحديث Pods لمشروعك، تأكد من فتح مشروع Xcode الخاص بك باستخدام .xcworkspace .
  3. في تطبيقك، قم باستيراد Firebase:

    سويفت

    import Firebase

    ج موضوعية

    @import Firebase;

1. قم بإنشاء كائن محفوظات المحادثة

لإنشاء ردود ذكية، يمكنك تمرير ML Kit إلى مجموعة مرتبة ترتيبًا زمنيًا من كائنات TextMessage ، مع الطابع الزمني الأقدم أولاً. عندما يرسل المستخدم رسالة أو يستقبلها، قم بإضافة الرسالة والطابع الزمني الخاص بها ومعرف المستخدم الخاص بمرسل الرسالة إلى سجل المحادثة.

يمكن أن يكون معرف المستخدم أي سلسلة تحدد المرسل بشكل فريد داخل المحادثة. لا يلزم أن يتوافق معرف المستخدم مع أي بيانات مستخدم، ولا يلزم أن يكون معرف المستخدم متسقًا بين المحادثات أو الدعوات الخاصة بمولد الرد الذكي.

إذا تم إرسال الرسالة بواسطة المستخدم الذي تريد اقتراح ردود عليه، فاضبط isLocalUser على true.

سويفت

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:
FIRTextMessage *message = [[FIRTextMessage alloc]
        initWithText:@"How are you?"
        timestamp:[NSDate date].timeIntervalSince1970
        userID:userId
        isLocalUser:NO];
[conversation addObject:message];

يبدو كائن محفوظات المحادثة كالمثال التالي:

الطابع الزمني معرف المستخدم مستخدم محلي؟ رسالة
الخميس 21 فبراير الساعة 13:13:39 بتوقيت المحيط الهادئ 2019 حقيقي هل انت في طريقك؟
الخميس 21 فبراير، الساعة 13:15:03 بتوقيت المحيط الهادئ 2019 صديق0 خطأ شنيع تأخرت، آسف!

لاحظ أن أحدث رسالة في المثال أعلاه جاءت من مستخدم غير محلي. يعد هذا أمرًا مهمًا لأن ML Kit تقترح ردودًا يُقصد إرسالها بواسطة مستخدم تطبيقك: المستخدم المحلي. يجب أن تتأكد من قيامك بتمرير سجل محادثة إلى ML Kit ينتهي برسالة قد يرغب المستخدم في الرد عليها.

2. الحصول على ردود الرسالة

لإنشاء ردود ذكية على رسالة، احصل على مثيل SmartReply وقم بتمرير محفوظات المحادثة إلى طريقة suggestReplies(for:completion:) الخاصة به:

سويفت

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

ج موضوعية

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

إذا نجحت العملية، فسيتم تمرير كائن SmartReplySuggestionResult إلى معالج الإكمال. يحتوي هذا الكائن على قائمة تضم ما يصل إلى 3 ردود مقترحة، والتي يمكنك تقديمها للمستخدم:

سويفت

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

ج موضوعية

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

لاحظ أن ML Kit قد لا يعرض نتائج إذا لم يكن النموذج واثقًا من مدى صلة الردود المقترحة، أو لم تكن محادثة الإدخال باللغة الإنجليزية، أو إذا اكتشف النموذج موضوعًا حساسًا.