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

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

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

قبل البدء

  1. إذا لم يسبق لك إضافة Firebase إلى تطبيقك، يمكنك إجراء ذلك من خلال اتّباع الخطوات الأولى في دليل البدء.
  2. تضمين مكتبات ML Kit في Podfile:
    pod 'Firebase/MLCommon', '6.25.0'
    pod 'Firebase/MLNLSmartReply', '6.25.0'
    
    بعد تثبيت مجموعات مشروعك الصغيرة أو تحديثها، احرص على فتح ملف 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 خطأ عذرًا، سأتأخر!

لاحظ أن أحدث رسالة في المثال أعلاه مأخوذة من رسالة غير محلية المستخدم. هذا الأمر مهم لأنّ حزمة تعلّم الآلة تقترح ردودًا من المفترض إرسالها. مستخدم تطبيقك: المستخدم المحلي. يجب أن تتأكد من أنك تجتاز "تعلُّم الآلة" هو سجلّ محادثات ينتهي برسالة قد ينتقل إليها المستخدم نريد الرد عليها.

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

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