Android पर एमएल किट की मदद से स्मार्ट जवाब जनरेट करना

मशीन पर दिए गए मॉडल का इस्तेमाल करके, मैसेज का जवाब देने के लिए एमएल किट का इस्तेमाल किया जा सकता है.

स्मार्ट जवाब जनरेट करने के लिए, आपको किसी बातचीत में हाल ही के मैसेज का लॉग एमएल किट पास करना होता है. अगर ML Kit को लगता है कि बातचीत अंग्रेज़ी में है और बातचीत का विषय संवेदनशील नहीं है, तो ML Kit ज़्यादा से ज़्यादा तीन जवाब जनरेट करता है. इन जवाबों का सुझाव अपने उपयोगकर्ता को दिया जा सकता है.

शुरू करने से पहले

  1. अगर आपने पहले से Firebase को नहीं जोड़ा है, तो अपने Android प्रोजेक्ट में Firebase जोड़ें.
  2. अपने मॉड्यूल (ऐप्लिकेशन-लेवल) की Gradle फ़ाइल (आम तौर पर app/build.gradle) में ML Kit Android लाइब्रेरी के लिए डिपेंडेंसी जोड़ें:
    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. बातचीत के इतिहास के लिए ऑब्जेक्ट बनाएं

स्मार्ट जवाब जनरेट करने के लिए, आपको FirebaseTextMessage ऑब्जेक्ट में से, ML Kit को समय के हिसाब से क्रम में List पास करना होगा. इसमें सबसे पहले टाइमस्टैंप होना चाहिए.

जब भी उपयोगकर्ता मैसेज भेजे, तो बातचीत के इतिहास में मैसेज और उसका टाइमस्टैंप जोड़ें:

Java

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

Kotlin

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

जब भी उपयोगकर्ता को मैसेज मिले, तो बातचीत के इतिहास में मैसेज, उसका टाइमस्टैंप, और भेजने वाले का यूज़र आईडी जोड़ें. यूज़र आईडी, कोई भी ऐसी स्ट्रिंग हो सकती है जिससे बातचीत में भेजने वाले की पहचान की जा सके. यह ज़रूरी नहीं है कि यूज़र आईडी किसी उपयोगकर्ता के डेटा से मेल खाता हो. साथ ही, यह ज़रूरी नहीं है कि बातचीत या स्मार्ट जवाब जनरेट करने वाले टूल को शुरू करने के दौरान, यूज़र आईडी एक जैसा हो.

Java

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

Kotlin

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

बातचीत के इतिहास का ऑब्जेक्ट कैसा दिखता है, यह जानने के लिए नीचे दिया गया उदाहरण देखें:

टाइमस्टैंप यूज़र आईडी स्थानीय उपयोगकर्ता? मैसेज
गुरुवार 21 फ़रवरी 13:13:39 पीएसटी 2019 true क्या आप अपने रास्ते में हैं?
गुरुवार 21 फ़रवरी 13:15:03 पीएसटी 2019 दोस्त0 false मुझे देर हो रही है, माफ़ करें!

ध्यान दें कि ऊपर दिए गए उदाहरण में हाल ही में दिखाया गया मैसेज किसी ऐसे व्यक्ति ने भेजा है जो स्थानीय नहीं है. यह अहम है, क्योंकि एमएल किट आपके ऐप्लिकेशन के उपयोगकर्ता यानी कि स्थानीय उपयोगकर्ता के भेजे जाने वाले जवाबों का सुझाव देती है. पक्का करें कि आपने ML Kit को बातचीत लॉग पास किया है. इसके आखिर में एक मैसेज है, जिसका जवाब आपका उपयोगकर्ता दे सकता है.

2. मैसेज के जवाब पाएं

किसी मैसेज के स्मार्ट जवाब जनरेट करने के लिए, FirebaseSmartReply का इंस्टेंस पाएं और बातचीत के इतिहास को इसके suggestReplies() तरीके में पास करें:

Java

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
                // ...
            }
        });

Kotlin

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 ऑब्जेक्ट को सक्सेस हैंडलर को पास किया जाता है. इस ऑब्जेक्ट में सुझाए गए ज़्यादा से ज़्यादा तीन जवाबों की सूची होती है. इन्हें अपने उपयोगकर्ता को दिखाया जा सकता है:

Java

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

Kotlin

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

ध्यान दें कि अगर मॉडल को यह पता नहीं है कि सुझाए गए जवाब सही हैं या नहीं, इनपुट की बातचीत अंग्रेज़ी में न हो या मॉडल को किसी संवेदनशील विषय का पता चलता हो, तो हो सकता है कि ML Kit नतीजे न दिखाए.