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

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

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

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

جرّبه الآن

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

قبل البدء

  1. في ملف build.gradle على مستوى المشروع، تأكد من تضمين مستودع Maven في كلٍّ من القسمَين 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>
    

    يمكنك أيضًا التحقق بشكل صريح من مدى توفّر النموذج وطلب التنزيل من خلال 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 الصديق0 خطأ عذرًا، سأتأخر!

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

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

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