يمكنك استخدام حزمة تعلّم الآلة لإنشاء ردود على الرسائل باستخدام نموذج على الجهاز فقط.
لإنشاء ردود سريعة، يتم إرسال سجلّ للرسائل الحديثة في محادثة مع ML Kit. إذا تبيّن للحزمة أنّ المحادثة باللغة الإنجليزية، وتبيّن أنّ المحادثة لا تتضمن موضوعًا يُحتمل أن يكون حسّاسًا، تنشئ الأداة ما يصل إلى ثلاثة ردود يمكنك اقتراحها على المستخدم.
قبل البدء
- أضِف Firebase إلى مشروع Android إذا لم يسبق لك إجراء ذلك.
- أضِف العناصر الاعتمادية لمكتبات 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' }
- وفي ملف
build.gradle
على مستوى التطبيق أيضًا، أوقِف ضغط ملفاتtflite
:android { // ... aaptOptions { noCompress "tflite" } }
.
1- إنشاء كائن سجلّ المحادثات
لإنشاء ردود سريعة، يتم إرسال List
من عناصر FirebaseTextMessage
مرتّبة زمنيًا إلى مجموعة أدوات تعلُّم الآلة، مع إدراج الطابع الزمني الأقدم أولاً.
عندما يرسل المستخدم رسالة، أضِف الرسالة وطابعها الزمني إلى سجلّ المحادثات:
Java
conversation.add(FirebaseTextMessage.createForLocalUser(
"heading out now", System.currentTimeMillis()));
Kotlin
conversation.add(FirebaseTextMessage.createForLocalUser(
"heading out now", System.currentTimeMillis()))
عندما يتلقّى المستخدم رسالة، أضِفها وطابعها الزمني ورقم تعريف المستخدم للمُرسِل إلى سجلّ المحادثات. يمكن أن يكون معرف المستخدم أي سلسلة تحدد بشكل فريد المرسل داخل المحادثة. لا يلزم أن يتطابق رقم تعريف المستخدم مع أي بيانات للمستخدم، ولا يلزم أن يكون رقم تعريف المستخدم متسقًا بين المحادثة أو الاستدعاءات في أداة إنشاء الردود الذكية.
Java
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 | خطأ | عذرًا، سأتأخر! |
يُرجى العلم أنّ أحدث رسالة في المثال أعلاه مُرسَلة من مستخدم غير محلي. وهذا أمر مهم لأنّ حزمة تعلّم الآلة تقترح الردود التي من المفترض أن يرسلها مستخدم تطبيقك، أي المستخدم المحلي. يجب التأكّد من ضبط سجلّ محادثات ينتهي برسالة قد يحتاج المستخدم إلى الرد عليها من خلال استخدام ML Kit.
2- الحصول على ردود على الرسائل
لإنشاء ردود سريعة على رسالة، يمكنك الحصول على نسخة افتراضية من FirebaseSmartReply
وتمرير سجلّ المحادثات إلى طريقة suggestReplies()
الخاصة بها:
Java
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 ردود مقترَحة،
والتي يمكنك عرضها للمستخدم:
Java
for (SmartReplySuggestion suggestion : result.getSuggestions()) {
String replyText = suggestion.getText();
}
Kotlin
for (suggestion in result.suggestions) {
val replyText = suggestion.text
}
يُرجى العِلم أنّ حزمة تعلّم الآلة قد لا تعرض نتائج إذا لم يكُن النموذج متأكدًا من مدى صلة الردود المقترَحة، أو لم تكن المحادثة المستخدمة باللغة الإنجليزية، أو إذا رصد النموذج موضوعًا حسّاسًا.