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

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

لإنشاء ردود سريعة، يتم إرسال سجلّ للرسائل الحديثة في محادثة مع 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.3'
    }
    
    • لاستخدام النموذج في "خدمات 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 API في "خدمات Google Play".

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

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

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

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

    Kotlin

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

    Java

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

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

    Kotlin

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

    Java

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

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

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

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

    ‫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
                // ...
            }

    Java

    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
    }

    Java

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

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