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

يمكن أن تنشئ حزمة تعلُّم الآلة (ML Kit) ردودًا قصيرة على الرسائل باستخدام نموذج على الجهاز فقط.

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

مُجمَّعةغير مجمّعة
اسم المكتبةcom.google.mlkit:smart-replycom.google.android.gms:play-services-mlkit-smart-reply
التنفيذيتم ربط النموذج بتطبيقك بشكل ثابت في مدّة التصميم.يتم تنزيل النموذج ديناميكيًا من خلال "خدمات Google Play".
تأثير حجم التطبيقزيادة في الحجم تبلغ 5.7 ميغابايت تقريبًازيادة في الحجم تبلغ 200 كيلوبايت تقريبًا
وقت التهيئةالنموذج متاح على الفور.قد يكون عليك الانتظار إلى أن يتم تنزيل النموذج قبل استخدامه لأول مرة.

للتجربة:

  • يمكنك تجربة التطبيق النموذجي للاطّلاع على مثال على استخدام واجهة برمجة التطبيقات هذه.

قبل البدء

  1. في ملف build.gradle على مستوى المشروع، تأكَّد من تضمين مستودع Maven من Google في كلٍّ من قسمَي buildscript وallprojects.

  2. أضِف التبعيات لمكتبات حزمة تعلُّم الآلة (ML Kit) على Android إلى ملف gradle على مستوى التطبيق في وحدتك، والذي يكون عادةً app/build.gradle. اختَر إحدى التبعيات التالية استنادًا إلى احتياجاتك:

    • لتضمين النموذج مع تطبيقك:
    dependencies {
      // ...
      // Use this dependency to bundle the model with your app
      implementation 'com.google.mlkit:smart-reply:17.0.4'
    }
    
    • لاستخدام النموذج في "خدمات Google Play":
    dependencies {
      // ...
      // Use this dependency to use the dynamically downloaded model in Google Play Services
      implementation 'com.google.android.gms:play-services-mlkit-smart-reply:16.0.0-beta1'
    }
    

    إذا اخترت استخدام النموذج في "خدمات Google Play"، يمكنك إعداد تطبيقك لتنزيل النموذج تلقائيًا على الجهاز بعد تثبيت تطبيقك من "متجر Play". وذلك من خلال إضافة البيان التالي إلى ملف AndroidManifest.xml في تطبيقك:

    <application ...>
          ...
          <meta-data
              android:name="com.google.mlkit.vision.DEPENDENCIES"
              android:value="smart_reply" >
          <!-- To use multiple models: android:value="smart_reply,model2,model3" -->
    </application>
    

    يمكنك أيضًا التحقّق بشكل صريح من توفُّر النموذج وطلب تنزيله من خلال "خدمات Google Play" واجهة برمجة التطبيقات ModuleInstallClient.

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

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

    لإنشاء ردود سريعة، عليك تزويد حزمة تعلُّم الآلة (ML Kit) بـ List من كائنات TextMessage مرتّبة زمنيًا، مع ظهور الطابع الزمني الأقدم أولاً.

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

    Kotlin

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

    جافا

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

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

    Kotlin

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

    جافا

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

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

    الطابع الزمني userID isLocalUser رسالة
    ‫Thu Feb 21 13:13:39 PST 2019 صحيح هل أنت في الطريق؟
    ‫Thu Feb 21 13:15:03 PST 2019 FRIEND0 خطأ أنا متأخر، آسف.

    تقترح حزمة تعلُّم الآلة (ML Kit) ردودًا على آخر رسالة في سجلّ المحادثات. يجب أن تكون الرسالة الأخيرة من مستخدم غير محلي. في المثال أعلاه، الرسالة الأخيرة في المحادثة هي من المستخدم غير المحلي FRIEND0. عندما تزوّد حزمة تعلُّم الآلة (ML Kit) بهذا السجلّ، تقترح ردودًا على رسالة FRIEND0: "أنا متأخر، آسف".

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

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

    Kotlin

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

    جافا

    SmartReplyGenerator smartReply = SmartReply.getClient();
    smartReply.suggestReplies(conversation)
            .addOnSuccessListener(new OnSuccessListener() {
                @Override
                public void onSuccess(SmartReplySuggestionResult result) {
                    if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
                        // The conversation's language isn't supported, so
                        // 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
                    // ...
                }
            });

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

    Kotlin

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

    جافا

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

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