تولید پاسخ‌های هوشمند با ML Kit در Android

ML Kit می‌تواند بااستفاده از مدل درون‌دستگاهی، پاسخ‌های کوتاهی برای پیام‌ها تولید کند.

برای تولید پاسخ‌های هوشمند، گزارشی از پیام‌های اخیر در مکالمه را به ML Kit می‌دهید. اگر ML Kit تشخیص دهد که مکالمه به زبان انگلیسی است و مکالمه موضوع حساس بالقوه ندارد، ML Kit حداکثر سه پاسخ تولید می‌کند که می‌توانید به کاربرتان پیشنهاد دهید.

موجود در بسته‌بندیبسته‌بندی‌نشده
نام کتابخانهcom.google.mlkit:smart-replycom.google.android.gms:play-services-mlkit-smart-reply
پیاده‌سازیمدل در زمان ساخت به‌صورت ایستا به برنامه شما پیوند داده می‌شود.مدل به‌صورت پویا ازطریق «خدمات Google Play» بارگیری می‌شود.
تأثیر اندازه برنامهاندازه حدود ۵٫۷ مگابایت افزایش می‌یابد.حدود ۲۰۰ کیلوبایت افزایش اندازه.
زمان مقداردهی اولیهمدل بلافاصله دردسترس است.ممکن است لازم باشد قبل‌از اولین استفاده منتظر بمانید تا مدل بارگیری شود.

امتحان کنید

  • با برنامه نمونه بازی کنید تا نمونه‌ای از استفاده از این API را ببینید.

قبل‌از شروع

  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 API درخواست بارگیری کنید.

    اگر بارگیری مدل در زمان نصب را فعال نکنید یا درخواست بارگیری صریح نکنید، مدل اولین باری که تولیدکننده پاسخ هوشمند را اجرا می‌کنید بارگیری می‌شود. درخواست‌هایی که قبل‌از تکمیل بارگیری انجام می‌دهید نتیجه‌ای نخواهند داشت.

    ۱. ایجاد شیء سابقه مکالمه

    برای تولید پاسخ‌های هوشمند، List از TextMessage شیء را به‌ترتیب زمانی، با مُهر زمانی اولیه در ابتدا، به ML Kit ارسال می‌کنید.

    هرگاه کاربر پیامی ارسال می‌کند، پیام و مُهر زمان آن را به سابقه مکالمه اضافه کنید:

    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 مجوز استفاده می‌کنید، پاسخ‌هایی برای پیام FRIENDO پیشنهاد می‌دهد: «دیر می‌رسم، ببخشید!»

    ۲. دریافت پاسخ پیام

    برای تولید پاسخ‌های هوشمند به پیام، نمونه‌ای از 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 نتایجی برنگرداند.