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

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

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

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

امتحانش کن.

قبل از اینکه شروع کنی

  1. در فایل build.gradle سطح پروژه خود، مطمئن شوید که مخزن Maven گوگل را هم در بخش‌های buildscript و هم allprojects خود وارد کرده‌اید.

  2. وابستگی‌های کتابخانه‌های اندروید ML Kit را به فایل gradle سطح برنامه ماژول خود که معمولاً app/build.gradle است، اضافه کنید. بر اساس نیاز خود، یکی از وابستگی‌های زیر را انتخاب کنید:

    • برای اتصال مدل به برنامه خود:
    dependencies {
      // ...
      // Use this dependency to bundle the model with your app
      implementation 'com.google.mlkit:smart-reply:17.0.4'
    }
    
    • برای استفاده از مدل در سرویس‌های گوگل پلی:
    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'
    }
    

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

    همچنین می‌توانید به صراحت در دسترس بودن مدل را بررسی کرده و از طریق API ModuleInstallClient سرویس‌های گوگل پلی درخواست دانلود دهید.

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

    ۱. یک شیء تاریخچه مکالمه ایجاد کنید

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

    هر زمان که کاربر پیامی ارسال می‌کند، پیام و مهر زمانی آن را به تاریخچه مکالمه اضافه کنید:

    کاتلین

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

    جاوا

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

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

    کاتلین

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

    جاوا

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

    یک شیء تاریخچه مکالمه مانند مثال زیر است:

    مهر زمانی شناسه کاربری isLocalUser پیام
    پنجشنبه ۲۱ فوریه ۲۰۱۹ ساعت ۱۳:۱۳:۳۹ به وقت PST درست داری راه میری؟
    پنجشنبه ۲۱ فوریه ۲۰۱۹ ساعت ۱۳:۱۵:۰۳ به وقت PST دوست0 نادرست دیر شد، ببخشید!

    کیت ML پاسخ‌هایی را برای آخرین پیام در تاریخچه مکالمه پیشنهاد می‌دهد. آخرین پیام باید از یک کاربر غیر محلی باشد. در مثال بالا، آخرین پیام در مکالمه از کاربر غیر محلی FRIEND0 است. وقتی از pass ML Kit this log استفاده می‌کنید، پاسخ‌هایی را برای پیام FRIENDO پیشنهاد می‌دهد: "دیر شد، ببخشید!"

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

    برای تولید پاسخ‌های هوشمند به یک پیام، یک نمونه از SmartReplyGenerator دریافت کنید و تاریخچه مکالمه را به متد suggestReplies() آن ارسال کنید:

    کاتلین

    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 به تابع مدیریت موفقیت ارسال می‌شود. این شیء شامل فهرستی از حداکثر سه پاسخ پیشنهادی است که می‌توانید به کاربر خود ارائه دهید:

    کاتلین

    for (suggestion in result.suggestions) {
        val replyText = suggestion.text
    }

    جاوا

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

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