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

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

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

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

  1. اگر قبلاً این کار را نکرده‌اید، Firebase را به پروژه Android خود اضافه کنید .
  2. وابستگی های کتابخانه های اندروید ML Kit را به فایل Gradle ماژول (سطح برنامه) خود اضافه کنید (معمولا app/build.gradle ):
    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services'
    
    dependencies {
      // ...
      implementation 'com.google.firebase:firebase-ml-natural-language:22.0.0'
      implementation 'com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7'
    }
    
  3. همچنین در فایل build.gradle سطح برنامه خود، فشرده سازی فایل های tflite را غیرفعال کنید:
    android {
        // ...
        aaptOptions {
            noCompress "tflite"
        }
    }
    

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

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

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

جاوا

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

کاتلین

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

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

جاوا

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

کاتلین

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

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

مهر زمان شناسه کاربر کاربر محلی؟ پیام
پنجشنبه 21 فوریه 13:13:39 PST 2019 درست است، واقعی در راه هستی؟
پنجشنبه 21 فوریه 13:15:03 PST 2019 FRIEND0 نادرست دیر آمدم، ببخشید!

توجه داشته باشید که جدیدترین پیام در مثال بالا از یک کاربر غیر محلی است. این مهم است زیرا ML Kit پاسخ هایی را پیشنهاد می کند که قرار است توسط کاربر برنامه شما ارسال شود: کاربر محلی. باید مطمئن شوید که گزارش مکالمه‌ای را به ML Kit ارسال می‌کنید که با پیامی به پایان می‌رسد که ممکن است کاربر شما بخواهد به آن پاسخ دهد.

2. پاسخ پیام را دریافت کنید

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

جاوا

FirebaseSmartReply smartReply = FirebaseNaturalLanguage.getInstance().getSmartReply();
smartReply.suggestReplies(conversation)
        .addOnSuccessListener(new OnSuccessListener<SmartReplySuggestionResult>() {
            @Override
            public void onSuccess(SmartReplySuggestionResult result) {
                if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
                    // The conversation's language isn't supported, so the
                    // 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
                // ...
            }
        });

کاتلین

val smartReply = FirebaseNaturalLanguage.getInstance().smartReply
smartReply.suggestReplies(conversation)
        .addOnSuccessListener { result ->
            if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
                // The conversation's language isn't supported, so the
                // the result doesn't contain any suggestions.
            } else if (result.getStatus() == SmartReplySuggestionResult.STATUS_SUCCESS) {
                // Task completed successfully
                // ...
            }
        }
        .addOnFailureListener {
            // Task failed with an exception
            // ...
        }

اگر عملیات با موفقیت انجام شود، یک شی SmartReplySuggestionResult به کنترل کننده موفقیت ارسال می شود. این شی حاوی لیستی از حداکثر 3 پاسخ پیشنهادی است که می توانید به کاربر خود ارائه دهید:

جاوا

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

کاتلین

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

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