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

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

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

قبل ان تبدأ

  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 إلى ML Kit، مع الطابع الزمني الأقدم أولاً.

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

جافا

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

كوتلين

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

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

جافا

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

كوتلين

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

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

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

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

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

كوتلين

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

كوتلين

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

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