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

يمكن لـ "حزمة تعلّم الآلة" إنشاء ردود قصيرة على الرسائل باستخدام نموذج على الجهاز فقط.

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

مُجمَّعةغير مجمّعة
اسم المكتبة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. أضِف التبعيات لمكتبات 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>
    

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

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

    1. إنشاء عنصر سجلّ المحادثات

    لإنشاء ردود سريعة، عليك تمرير 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 رسالة
    الخميس 21 شباط (فبراير) 2019، الساعة 1:13:39 بعد الظهر بتوقيت المحيط الهادئ صحيح هل أنت في طريقك؟
    الخميس 21 فبراير 2019، الساعة 1:15:03 بعد الظهر بتوقيت المحيط الهادئ FRIEND0 خطأ سأتأخر، عذرًا!

    تقترح "حزمة تعلّم الآلة" الردود المقترحة على آخر رسالة في سجلّ المحادثة. يجب أن تكون الرسالة الأخيرة من مستخدم غير محلي. في المثال أعلاه، الرسالة الأخيرة في المحادثة هي من المستخدم غير المحلي 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();
    }

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