Android-এ ML Kit-এর সাহায্যে স্মার্ট উত্তর তৈরি করুন

এমএল কিট একটি অন-ডিভাইস মডেল ব্যবহার করে মেসেজের সংক্ষিপ্ত উত্তর তৈরি করতে পারে।

স্মার্ট রিপ্লাই তৈরি করতে, আপনাকে একটি কথোপকথনের সাম্প্রতিক মেসেজগুলোর একটি লগ এমএল কিট-কে পাঠাতে হয়। যদি এমএল কিট নির্ধারণ করে যে কথোপকথনটি ইংরেজিতে হচ্ছে এবং এতে কোনো সম্ভাব্য সংবেদনশীল বিষয়বস্তু নেই, তবে এমএল কিট সর্বোচ্চ তিনটি রিপ্লাই তৈরি করে, যেগুলো আপনি আপনার ব্যবহারকারীকে সাজেস্ট করতে পারেন।

বান্ডিল আনবান্ডেলড
লাইব্রেরির নাম com.google.mlkit:smart-reply com.google.android.gms:play-services-mlkit-smart-reply
বাস্তবায়ন বিল্ড করার সময় মডেলটি আপনার অ্যাপের সাথে স্ট্যাটিক্যালি লিঙ্ক করা হয়। মডেলটি গুগল প্লে সার্ভিসেস-এর মাধ্যমে ডায়নামিকভাবে ডাউনলোড করা হয়।
অ্যাপের আকারের প্রভাব আকার প্রায় ৫.৭ এমবি বৃদ্ধি পেয়েছে। আকার প্রায় ২০০ কেবি বৃদ্ধি পেয়েছে।
প্রারম্ভিক সময় মডেলটি অবিলম্বে পাওয়া যাবে। প্রথমবার ব্যবহারের আগে মডেলটি ডাউনলোড হওয়ার জন্য অপেক্ষা করতে হতে পারে।

চেষ্টা করে দেখুন

  • এই API-টির একটি উদাহরণমূলক ব্যবহার দেখতে নমুনা অ্যাপটি ব্যবহার করে দেখুন।

শুরু করার আগে

  1. আপনার প্রোজেক্ট-স্তরের build.gradle ফাইলে, buildscript এবং allprojects উভয় সেকশনেই গুগলের মেভেন রিপোজিটরি অন্তর্ভুক্ত করা নিশ্চিত করুন।

  2. আপনার মডিউলের অ্যাপ-লেভেল গ্রেডল ফাইলে (যা সাধারণত 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>
    

    এছাড়াও আপনি গুগল প্লে সার্ভিসেস-এর ModuleInstallClient API-এর মাধ্যমে মডেলটির প্রাপ্যতা স্পষ্টভাবে যাচাই করতে এবং ডাউনলোডের জন্য অনুরোধ করতে পারেন।

    আপনি যদি ইনস্টল-টাইম মডেল ডাউনলোড সক্ষম না করেন বা সুস্পষ্ট ডাউনলোডের অনুরোধ না করেন, তাহলে স্মার্ট রিপ্লাই জেনারেটরটি প্রথমবার চালানোর সময় মডেলটি ডাউনলোড হয়ে যায়। ডাউনলোড সম্পূর্ণ হওয়ার আগে করা অনুরোধগুলোর কোনো ফলাফল পাওয়া যায় না।

    ১. একটি কথোপকথনের ইতিহাস অবজেক্ট তৈরি করুন

    স্মার্ট রিপ্লাই তৈরি করতে, আপনাকে এমএল কিট-কে (ML Kit) TextMessage ) অবজেক্টের একটি কালানুক্রমিকভাবে সাজানো List (List) পাস করতে হবে, যেখানে সবচেয়ে পুরনো টাইমস্ট্যাম্পটি প্রথমে থাকবে।

    যখনই ব্যবহারকারী কোনো বার্তা পাঠাবেন, বার্তাটি এবং তার টাইমস্ট্যাম্প কথোপকথনের ইতিহাসে যোগ করুন:

    কোটলিন

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

    একটি কথোপকথনের ইতিহাস অবজেক্ট দেখতে নিচের উদাহরণটির মতো হয়:

    টাইমস্ট্যাম্প ব্যবহারকারীর আইডি স্থানীয় ব্যবহারকারী বার্তা
    বৃহস্পতি ২১ ফেব্রুয়ারী ২০১৯ ১৩:১৩:৩৯ পিএসটি সত্য আপনি কি পথে আছেন?
    বৃহস্পতি ২১ ফেব্রুয়ারী ২০১৯ ১৩:১৫:০৩ পিএসটি বন্ধু মিথ্যা দেরি হয়ে যাচ্ছে, দুঃখিত!

    এমএল কিট একটি কথোপকথনের ইতিহাসের শেষ বার্তার উত্তর সাজেস্ট করে। শেষ বার্তাটি অবশ্যই একজন নন-লোকাল ব্যবহারকারীর কাছ থেকে আসতে হবে। উপরের উদাহরণে, কথোপকথনের শেষ বার্তাটি নন-লোকাল ব্যবহারকারী FRIEND0-এর কাছ থেকে এসেছে। আপনি যখন এমএল কিটকে এই লগটি পাস করেন, তখন এটি FRIEND0-এর এই বার্তার উত্তর সাজেস্ট করে: "দেরি হচ্ছে, দুঃখিত!"

    ২. বার্তার উত্তর পান

    কোনো মেসেজের স্মার্ট রিপ্লাই তৈরি করতে, 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 কোনো ফলাফল নাও দেখাতে পারে।