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

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

अगले चरण