إنشاء "ردود سريعة" باستخدام "حزمة تعلُّم الآلة" على أجهزة iOS

يمكنك استخدام حزمة تعلّم الآلة لإنشاء ردود على الرسائل باستخدام نموذج على الجهاز فقط.

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

قبل البدء

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

    Swift

    import Firebase

    Objective-C

    @import Firebase;

1- إنشاء كائن سجلّ المحادثات

لإنشاء ردود سريعة، يتم إرسال مصفوفة مرتّبة زمنيًا لعناصر TextMessage إلى مجموعة أدوات تعلُّم الآلة، مع إدراج الطابع الزمني الأقدم أولاً. عندما يرسل المستخدم رسالة أو يتلقاها، أضِف الرسالة وطابعها الزمني ورقم تعريف المستخدم لمرسِل الرسالة إلى سجلّ المحادثات.

يمكن أن يكون رقم تعريف المستخدم أي سلسلة تعرّف المُرسِل بشكل فريد في المحادثة. لا يلزم أن يتطابق رقم تعريف المستخدم مع أي بيانات للمستخدم، ولا يلزم أن يكون رقم تعريف المستخدم متسقًا بين المحادثات أو الاستدعاءات في أداة إنشاء الردود الذكية.

إذا أرسل المستخدم الذي تريد اقتراح ردود عليه، اضبط 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)

Objective-C

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.

2- الحصول على ردود على الرسائل

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

Swift

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.
        // ...
    }
}

Objective-C

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 ردود مقترحة، والتي يمكنك عرضها للمستخدم:

Swift

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

Objective-C

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

يُرجى العِلم أنّ حزمة تعلّم الآلة قد لا تعرض نتائج إذا لم يكُن النموذج متأكدًا من مدى صلة الردود المقترَحة، أو لم تكن المحادثة المستخدمة باللغة الإنجليزية، أو إذا رصد النموذج موضوعًا حسّاسًا.