Gemini Nano की मदद से एजेंटिक वर्कफ़्लो बनाना

ML Kit के एजेंटिक वर्कफ़्लो (com.google.mlkit:genai-agent, ऐल्फ़ा) की मदद से, उपयोगकर्ता के डिवाइस पर अपने-आप काम करने वाले और सिलसिलेवार बातचीत वाली सुविधाएं तैयार की जा सकती हैं. ये सुविधाएं, Gemini Nano और Android AICore सिस्टम सर्विस की मदद से काम करती हैं.

GenerativeModel क्लास (डायरेक्ट मॉडल ऐक्सेस) के ऊपर बनी, AgentRunner क्लास, आपके ऐप्लिकेशन में सीधे तौर पर, लक्ष्य के हिसाब से काम करने वाले एजेंटिक लूप को ऑटोमेट करती है: कॉन्टेक्स्ट को देखना, उपयोगकर्ता के इनपुट के बारे में तर्क करना, टाइप किए गए Kotlin टूल के ज़रिए काम करना, और खत्म होने की शर्त पूरी होने तक सुझाव, शिकायत या राय का आकलन करना.

सामान्य एजेंटिक पैटर्न

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

पैटर्न

उदाहरण

ऐप्लिकेशन में की जाने वाली कार्रवाई और शॉर्टकट

नैचुरल लैंग्वेज में किए गए अनुरोधों को ऐप्लिकेशन के लिए खास निर्देशों में बदलना. जैसे, एडिटिंग कैनवस पर फ़ोटो में बदलाव करना, वीडियो चलाने की सेटिंग में बदलाव करना या ऐप्लिकेशन की सेटिंग को टॉगल करना.

स्ट्रक्चर्ड लुकअप और लोकल कैलकुलेशन

आईडी के हिसाब से कोई खास रिकॉर्ड फ़ेच करना (जैसे, ऑर्डर का स्टेटस या खाते में बाकी बैलेंस) और कई चरणों वाली गणितीय गणनाएं करना (जैसे, क़र्ज़ की किस्तों का हिसाब लगाना या फ़िटनेस मेट्रिक).

बातचीत को फ़िल्टर और क्यूरेट करना

स्थानीय ऐप्लिकेशन आइटम के बारे में इंटरैक्टिव तरीके से क्वेरी करना और उन्हें बेहतर बनाना. जैसे, स्थानीय टास्क की सूची में खोजना, प्लेलिस्ट को फ़िल्टर करना या उपयोगकर्ता की शर्तों के आधार पर कैटलॉग आइटम को क्रम से लगाना.

कई चरणों में इनपुट देने की सुविधा

स्ट्रक्चर्ड डेटा डालने के लिए, उपयोगकर्ताओं को सिलसिलेवार तरीके से निर्देश देना. साथ ही, फ़ाइनल सबमिशन से पहले, स्थानीय टूल की मदद से इंटरमीडिएट इनपुट की पुष्टि करना.

उपयोगकर्ता के डिवाइस पर परफ़ॉर्मेंस और निजता

एजेंटिक वर्कफ़्लो, Android AICore पर चलते हैं. इससे उपयोगकर्ता के डिवाइस पर, सीधे तौर पर निजी और रिस्पॉन्सिव तरीके से काम किया जा सकता है:

  • लोकल रीज़निंग और प्रॉम्प्ट की निजता: मॉडल की रीज़निंग और प्लानिंग लूप, पूरी तरह से उपयोगकर्ता के डिवाइस पर ही काम करता है. इसमें नेटवर्क लेटेंसी की कोई समस्या नहीं होती. उपयोगकर्ता के प्रॉम्प्ट का डेटा, डिवाइस पर निजी रहता है. हालांकि, आपके ऐप्लिकेशन में लागू किए गए अलग-अलग टूल अब भी नेटवर्क कॉल कर सकते हैं या क्लाउड एपीआई को क्वेरी कर सकते हैं. ऐसा तब होता है, जब आपको बाहरी डेटा की ज़रूरत हो.
  • सिलसिलेवार बातचीत के सेशन मैनेज करना: AgentSession इंटरफ़ेस, बातचीत के इतिहास को मेमोरी में सेव रखता है. इससे आपको ट्रांसक्रिप्ट को मैन्युअल तरीके से मैनेज करने की ज़रूरत नहीं पड़ती. session.close(), deleteSession(sessionId) या clearAllSessions() तरीकों का इस्तेमाल करके, मेमोरी को कभी भी वापस पाया जा सकता है.
  • एक्ज़ीक्यूशन गार्डरेल: एजेंट के कॉन्फ़िगरेशन, ज़्यादा से ज़्यादा टर्न की सीमा लागू करते हैं. डिफ़ॉल्ट रूप से, maxTurns की सीमा 10 पर सेट होती है. यह सीमा, संसाधन खत्म होने की शर्त के तौर पर लागू होती है. इससे, एक्ज़ीक्यूशन लूप को अनियंत्रित होने से रोका जा सकता है, बैटरी बचाई जा सकती है, और डिवाइस की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है.

कस्टम जनरेशन, एजेंट, और टास्क के हिसाब से एपीआई में से कोई एक चुनें

ML Kit, उपयोगकर्ता के डिवाइस पर जेन एआई की सुविधाओं को इस आधार पर व्यवस्थित करता है कि आपकी सुविधा को कितने कस्टमाइज़ेशन और ऑर्केस्ट्रेशन की ज़रूरत है:

  • कस्टम जनरेशन और एजेंट: अगर आपकी सुविधा के लिए, कस्टम निर्देशों या डोमेन के हिसाब से लॉजिक की ज़रूरत है, तो Gemini Nano फ़ाउंडेशन मॉडल के साथ सीधे तौर पर काम करें. अगर आपको मैनेज किए गए मल्टी-टर्न सेशन और टूल-कॉलिंग के ऑटोमेटेड लूप चाहिए, तो एजेंटिक वर्कफ़्लो चुनें. इसके लिए, AgentRunner क्लास का इस्तेमाल करें, जो GenerativeModel क्लास के ऊपर बनी है. अगर आपको कस्टम प्रॉम्प्ट, टाइप किए गए स्ट्रक्चर्ड आउटपुट या क्लाइंट के मैनेज किए गए मल्टी-टर्न इतिहास चाहिए, तो डायरेक्ट मॉडल ऐक्सेस चुनें. इसके लिए, GenerativeModel क्लास का इस्तेमाल करें.
  • बोली और ऑडियो: ऑडियो कॉन्टेंट को टेक्स्ट में बदलने के लिए, बोली और जेनरेटिव एआई के खास मॉडल (जैसे, बोली की पहचान) का इस्तेमाल करें.
  • टेक्स्ट और इमेज से जुड़े टास्क: पहले से कॉन्फ़िगर किए गए और टास्क के हिसाब से तय किए गए सुविधा टाइप और बेहतर बनाए गए LoRA अडैप्टर का इस्तेमाल करें. ये अडैप्टर, शेयर किए गए बेस मॉडल के ऊपर मौजूद होते हैं. जैसे, इमेज का ब्यौरा, खास जानकारी, प्रूफ़रीडिंग, और फिर से लिखना. इनका इस्तेमाल, प्रॉम्प्ट इंजीनियरिंग के बिना, विज़न और लिखने के इस्तेमाल के मामलों के लिए किया जाता है.

यहां दी गई टेबल में, इन तरीकों की तुलना की गई है:

विचार

एजेंटिक वर्कफ़्लो (AgentRunner)

मॉडल का डायरेक्ट ऐक्सेस (GenerativeModel)

टेक्स्ट और इमेज टास्क एपीआई

आर्किटेक्चर

GenerativeModel पर बनी हाई-लेवल ऑर्केस्ट्रेशन लेयर.

कस्टम प्रॉम्प्ट के लिए, Gemini Nano के फ़ाउंडेशन मॉडल का डायरेक्ट इंटरफ़ेस.

टास्क के हिसाब से उपलब्ध सुविधाएं. ये सुविधाएं, शेयर किए गए बेस मॉडल के ऊपर मौजूद, बेहतर बनाए गए LoRA अडैप्टर की मदद से काम करती हैं.

मल्टी-टर्न कॉन्टेक्स्ट

मैनेज किए गए मल्टी-टर्न सेशन (AgentSession). यह सुविधा, बातचीत के इतिहास को मेमोरी में अपने-आप सेव रखती है, ताकि आपको ट्रांसक्रिप्ट को मैन्युअल तरीके से मैनेज न करना पड़े. यह सुविधा, कुछ समय के लिए सिंगल-टर्न सेशन को भी सपोर्ट करती है.

क्लाइंट-मैनेज्ड मल्टी-टर्न कॉन्टेक्स्ट. GenerateContentRequest, मल्टी-टर्न List<Content> (USER और MODEL भूमिकाएं) और sessionId के साथ काम करता है. यह उन डेवलपर के लिए है जो चैट के इतिहास को सीधे तौर पर मैनेज करना चाहते हैं.

स्टेटलेस, सिंगल-इनपुट टास्क कॉल.

टूल कॉल और कार्रवाइयां

टूल-कॉलिंग लूप अपने-आप चलने की सुविधा. यह रजिस्टर किए गए Android AppFunctions का पता लगाता है, मॉडल से चुनी गई कॉल को लागू करता है, और नतीजों को अपने-आप मॉडल में फ़ीड करता है.

क्लाइंट की ओर से मैनेज किए जाने वाले टूल के एलान. GenerateContentRequest, टूल स्कीमा स्वीकार करता है और फ़ंक्शन कॉल के अनुरोध भेजता है, ताकि आपका ऐप्लिकेशन उन्हें मैन्युअल तरीके से लागू कर सके और नतीजे दिखा सके.

लागू नहीं (टास्क पाइपलाइन तय है).

कब इस्तेमाल करें

इसका इस्तेमाल तब करें, जब आपको कई चरणों वाले टूल को चलाने और मेमोरी में मौजूद मल्टी-टर्न सेशन को मैनेज करने के लिए, ऑटोमेटेड ऑर्केस्ट्रेशन की सुविधा चाहिए.

इसका इस्तेमाल कस्टम प्रॉम्प्ट, मल्टीमॉडल इमेज को समझने, टाइप किए गए स्ट्रक्चर्ड आउटपुट (@Generable) के लिए करें. इसके अलावा, इसका इस्तेमाल तब करें, जब आपको चैट के इतिहास या टूल डिस्पैच को सीधे तौर पर मैनेज करना हो.

इसका इस्तेमाल तब करें, जब आपकी सुविधा लिखने या देखने के किसी स्टैंडर्ड टास्क से मेल खाती हो और आपको कम से कम सेटअप के साथ, बेहतर बनाए गए LoRA से बेहतरीन क्वालिटी चाहिए.

अगले चरण