एंड्रॉइड पर एमएल किट के साथ स्मार्ट उत्तर उत्पन्न करें

आप ऑन-डिवाइस मॉडल का उपयोग करके संदेश उत्तर उत्पन्न करने के लिए एमएल किट का उपयोग कर सकते हैं।

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

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

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

स्मार्ट उत्तर उत्पन्न करने के लिए, आप ML किट को सबसे पहले टाइमस्टैम्प के साथ, FirebaseTextMessage ऑब्जेक्ट्स की कालानुक्रमिक रूप से क्रमबद्ध List पास करते हैं।

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

जावा

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

Kotlin

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

जब भी उपयोगकर्ता को कोई संदेश प्राप्त होता है, तो संदेश, उसका टाइमस्टैम्प, और प्रेषक की उपयोगकर्ता आईडी को वार्तालाप इतिहास में जोड़ें। उपयोगकर्ता आईडी कोई भी स्ट्रिंग हो सकती है जो वार्तालाप के भीतर प्रेषक की विशिष्ट रूप से पहचान करती है। उपयोगकर्ता आईडी को किसी भी उपयोगकर्ता डेटा के अनुरूप होने की आवश्यकता नहीं है, और उपयोगकर्ता आईडी को स्मार्ट उत्तर जनरेटर की बातचीत या आमंत्रण के बीच संगत होने की आवश्यकता नहीं है।

जावा

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 सच क्या तुम अपने रास्ते पर हो?
गुरु फरवरी 21 13:15:03 पीएसटी 2019 दोस्त0 असत्य देर से चल रहा है, क्षमा करें!

ध्यान दें कि ऊपर दिए गए उदाहरण में सबसे हाल का संदेश एक गैर-स्थानीय उपयोगकर्ता का है। यह महत्वपूर्ण है क्योंकि एमएल किट आपके ऐप के उपयोगकर्ता द्वारा भेजे जाने वाले उत्तरों का सुझाव देता है: स्थानीय उपयोगकर्ता। आपको यह सुनिश्चित करना चाहिए कि आप एमएल किट को एक वार्तालाप लॉग पास कर रहे हैं जो एक संदेश के साथ समाप्त होता है जिसका आपका उपयोगकर्ता उत्तर देना चाहता है।

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

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

जावा

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

Kotlin

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

ध्यान दें कि यदि मॉडल सुझाए गए उत्तरों की प्रासंगिकता के बारे में आश्वस्त नहीं है, इनपुट वार्तालाप अंग्रेजी में नहीं है, या यदि मॉडल संवेदनशील विषय वस्तु का पता लगाता है, तो ML किट परिणाम नहीं लौटा सकती है।