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

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

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

قبل البدء

  1. إذا لم تكن قد فعلت ذلك بالفعل، إضافة Firebase إلى مشروع Android
  2. إضافة الموارد التابعة لمكتبات ML Kit على Android إلى الوحدة (على مستوى التطبيق) ملف Gradle (عادةً app/build.gradle):
    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services'
    
    dependencies {
      // ...
      implementation 'com.google.firebase:firebase-ml-natural-language:22.0.0'
      implementation 'com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7'
    }
    
  3. أوقِف الضغط أيضًا في ملف build.gradle على مستوى التطبيق. من إجمالي tflite ملف:
    android {
        // ...
        aaptOptions {
            noCompress "tflite"
        }
    }
    

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

لإنشاء ردود سريعة، يمكنك ضبط حزمة تعلُّم الآلة على List مرتّبة زمنيًا. من إجمالي FirebaseTextMessage عنصر، مع الطابع الزمني الأول أولاً.

كلما أرسل المستخدم رسالة، أضف الرسالة وطابعها الزمني إلى سجل المحادثات:

جافا

conversation.add(FirebaseTextMessage.createForLocalUser(
        "heading out now", System.currentTimeMillis()));

Kotlin

conversation.add(FirebaseTextMessage.createForLocalUser(
        "heading out now", System.currentTimeMillis()))

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

جافا

conversation.add(FirebaseTextMessage.createForRemoteUser(
        "Are you coming back soon?", System.currentTimeMillis(), userId));

Kotlin

conversation.add(FirebaseTextMessage.createForRemoteUser(
        "Are you coming back soon?", System.currentTimeMillis(), userId))

يبدو عنصر سجلّ المحادثات كما يلي:

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

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

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

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

جافا

FirebaseSmartReply smartReply = FirebaseNaturalLanguage.getInstance().getSmartReply();
smartReply.suggestReplies(conversation)
        .addOnSuccessListener(new OnSuccessListener<SmartReplySuggestionResult>() {
            @Override
            public void onSuccess(SmartReplySuggestionResult result) {
                if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
                    // The conversation's language isn't supported, so the
                    // the result doesn't contain any suggestions.
                } else if (result.getStatus() == SmartReplySuggestionResult.STATUS_SUCCESS) {
                    // Task completed successfully
                    // ...
                }
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                // Task failed with an exception
                // ...
            }
        });

Kotlin

val smartReply = FirebaseNaturalLanguage.getInstance().smartReply
smartReply.suggestReplies(conversation)
        .addOnSuccessListener { result ->
            if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
                // The conversation's language isn't supported, so the
                // the result doesn't contain any suggestions.
            } else if (result.getStatus() == SmartReplySuggestionResult.STATUS_SUCCESS) {
                // Task completed successfully
                // ...
            }
        }
        .addOnFailureListener {
            // Task failed with an exception
            // ...
        }

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

جافا

for (SmartReplySuggestion suggestion : result.getSuggestions()) {
    String replyText = suggestion.getText();
}

Kotlin

for (suggestion in result.suggestions) {
    val replyText = suggestion.text
}

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