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

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

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

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

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

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

    «کیت یادگیری ماشین» پاسخ‌هایی را برای آخرین پیام در سابقه مکالمه پیشنهاد می‌دهد. آخرین پیام باید ازطرف کاربری غیرمحلی باشد. در مثال بالا، آخرین پیام در مکالمه از کاربر غیرمحلی FRIEND0 است. When you use pass ML Kit this log, it suggests replies to FRIENDO's message: "Running late, sorry!"

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

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