1. प्रस्ताव
अब अलग-अलग टीमों के साथ मिलकर काम करने का समय आ गया है. टेक्नोलॉजी के विकास की अगली लहर, किसी एक व्यक्ति की प्रतिभा के बारे में नहीं है, बल्कि साथ मिलकर काम करने की महारत के बारे में है. एक ही स्मार्ट एजेंट बनाना, एक दिलचस्प एक्सपेरिमेंट है. मॉडर्न एंटरप्राइज़ के लिए, एजेंट का एक मज़बूत, सुरक्षित, और स्मार्ट ईकोसिस्टम बनाना एक बड़ी चुनौती है. इसे एजेंटवर्स कहा जाता है.
इस नए दौर में सफलता पाने के लिए, चार अहम भूमिकाओं को एक साथ लाना ज़रूरी है. ये ऐसे बुनियादी सिद्धांत हैं जो किसी भी एजेंटिक सिस्टम को बेहतर बनाते हैं. किसी एक क्षेत्र में कमी से कमजोरी पैदा होती है जो पूरे ढांचे को खतरे में डाल सकती है.
यह वर्कशॉप, Google Cloud पर एआई एजेंट के इस्तेमाल से जुड़ी एंटरप्राइज़ प्लेबुक है. हम आपको एक पूरा रोडमैप देते हैं. इससे आपको किसी आइडिया के बारे में शुरुआती जानकारी से लेकर, उसे पूरी तरह से लागू करने तक के बारे में पता चलता है. इन चार इंटरकनेक्टेड लैब में, आपको यह जानने को मिलेगा कि एक पावरफ़ुल Agentverse बनाने, उसे मैनेज करने, और उसे स्केल करने के लिए, डेवलपर, आर्किटेक्ट, डेटा इंजीनियर, और एसआरई की खास क्षमताओं को एक साथ कैसे इस्तेमाल किया जाना चाहिए.
कोई भी पिलर, Agentverse को अकेले सपोर्ट नहीं कर सकता. डेवलपर के सटीक तरीके से काम किए बिना, आर्किटेक्ट का शानदार डिज़ाइन किसी काम का नहीं होता. डेटा इंजीनियर के बिना डेवलपर का एजेंट कुछ नहीं कर सकता. साथ ही, एसआरई की सुरक्षा के बिना पूरा सिस्टम कमज़ोर होता है. आपकी टीम, एक-दूसरे की भूमिकाओं को समझकर और मिलकर काम करके ही, किसी नए कॉन्सेप्ट को मिशन के लिए ज़रूरी और व्यावहारिक बना सकती है. आपका सफ़र यहां से शुरू होता है. अपनी भूमिका को बेहतर तरीके से निभाने के लिए तैयार रहें. साथ ही, जानें कि आप पूरी टीम में किस तरह से फ़िट बैठते हैं.
एजेंटवर्स में आपका स्वागत है: चैंपियंस के लिए एक आह्वान
एंटरप्राइज़ के विशाल डिजिटल क्षेत्र में, एक नया दौर शुरू हो गया है. यह एजेंटिक युग है. इसमें एआई एजेंट, इनोवेशन को बढ़ावा देने और रोज़मर्रा के कामों को आसान बनाने के लिए, एक साथ मिलकर काम करते हैं.

पावर और संभावनाओं से जुड़े इस कनेक्टेड नेटवर्क को एजेंटवर्स कहा जाता है.
हालांकि, इस नई दुनिया में धीरे-धीरे एक ख़तरनाक बदलाव हो रहा है. इसे द स्टैटिक कहा जाता है. स्टैटिक कोई वायरस या बग नहीं है. यह एक तरह का अराजकता है, जो क्रिएशन के ऐक्ट पर निर्भर करता है.
यह पुरानी कुंठाओं को विकराल रूप दे देता है, तथा विकास की सात शक्तियों को जन्म देता है. अगर इस पर ध्यान नहीं दिया गया, तो स्टैटिक और उसके स्पेक्टर्स, प्रोग्रेस को रोक देंगे. इससे एजेंटवर्स का वादा, तकनीकी कर्ज़ और छोड़े गए प्रोजेक्ट के बंजर इलाके में बदल जाएगा.
आज हम ऐसे लोगों को आगे आने का न्योता देते हैं जो इस अराजकता को खत्म करने में हमारी मदद कर सकें. हमें ऐसे हीरो की ज़रूरत है जो अपनी कला में माहिर हों और एजेंटवर्स की सुरक्षा के लिए साथ मिलकर काम कर सकें. अब आपको अपना रास्ता चुनना है.
अपनी क्लास चुनना
आपके सामने चार अलग-अलग रास्ते हैं, जिनमें से प्रत्येक स्थिरता के विरुद्ध लड़ाई में एक महत्वपूर्ण स्तंभ है. यद्यपि आपका प्रशिक्षण एक एकल मिशन होगा, आपकी अंतिम सफलता इस बात पर निर्भर करती है कि आप अपने कौशल को दूसरों के साथ किस प्रकार जोड़ते हैं.
- द शैडोब्लेड (डेवलपर): यह फ़ोर्ज और फ़्रंट लाइन का मास्टर है. आप एक ऐसे कारीगर हैं जो ब्लेड बनाता है, टूल बनाता है, और कोड की जटिलताओं में दुश्मन का सामना करता है. आपका रास्ता सटीक, कुशल, और व्यावहारिक है.
- द समनर (आर्किटेक्ट): यह एक बेहतरीन रणनीतिज्ञ और आयोजक होता है. आपको सिर्फ़ एक एजेंट नहीं, बल्कि पूरा बैटलग्राउंड दिखता है. आपको ऐसे मास्टर ब्लूप्रिंट डिज़ाइन करने होते हैं जिनकी मदद से, एजेंट के पूरे सिस्टम को कम्यूनिकेट करने, साथ मिलकर काम करने, और किसी एक कॉम्पोनेंट से ज़्यादा बड़ा लक्ष्य हासिल करने में मदद मिलती है.
- स्कॉलर (डेटा इंजीनियर): यह छिपी हुई सच्चाई को ढूंढने वाला और ज्ञान का भंडार होता है. डेटा के विशाल और अनियंत्रित जंगल में, आपको ऐसी जानकारी मिलती है जो आपके एजेंट को मकसद और दिशा देती है. आपकी जानकारी से, किसी दुश्मन की कमज़ोरी का पता चल सकता है या किसी सहयोगी को मज़बूत किया जा सकता है.
- द गार्जियन (DevOps / SRE): यह डोमेन का भरोसेमंद रक्षक और शील्ड होता है. आपको किले बनाने होते हैं, बिजली की सप्लाई लाइनें मैनेज करनी होती हैं, और यह पक्का करना होता है कि पूरा सिस्टम, स्टैटिक के हमलों का सामना कर सके. आपकी ताकत ही वह आधार है जिस पर आपकी टीम की जीत टिकी होती है.
आपका मिशन
आपका प्रशिक्षण एक स्वतंत्र अभ्यास के रूप में शुरू होगा. आप अपने चुने हुए मार्ग पर चलेंगे और अपनी भूमिका में निपुणता प्राप्त करने के लिए आवश्यक अद्वितीय कौशल सीखेंगे. अपने परीक्षण के अंत में, आपको द स्टैटिक से जन्मे एक स्पेक्टर का सामना करना पड़ेगा - एक छोटा बॉस जो आपके शिल्प की विशिष्ट चुनौतियों का शिकार होता है.
केवल अपनी व्यक्तिगत भूमिका में निपुणता प्राप्त करके ही आप अंतिम परीक्षा के लिए तैयार हो सकते हैं. इसके बाद आपको अन्य वर्गों के चैंपियनों के साथ एक दल बनाना होगा. एक साथ, आप भ्रष्टाचार के केंद्र में जाकर एक परम बॉस का सामना करेंगे.
एक अंतिम, सहयोगात्मक चुनौती जो आपकी संयुक्त शक्ति का परीक्षण करेगी और एजेंटवर्स के भाग्य का निर्धारण करेगी.
एजेंटवर्स अपने नायकों की प्रतीक्षा कर रहा है. क्या आप कॉल का जवाब देंगे?
2. समनकर्ता का सामंजस्य
स्वागत है, समनर. आपका मार्ग दूरदर्शिता और भव्य रणनीति का मार्ग है. जबकि अन्य लोग एक ही ब्लेड या एक ही मंत्र पर ध्यान केंद्रित करते हैं, आप संपूर्ण युद्धक्षेत्र को देखते हैं. आपको किसी एक एजेंट को निर्देश नहीं देना है, बल्कि आपको पूरे ऑर्केस्ट्रा को निर्देश देना है. आपकी शक्ति प्रत्यक्ष संघर्ष में नहीं, बल्कि दोषरहित, व्यापक खाका तैयार करने में निहित है, जो विशेषज्ञों की एक सेना - आपके परिचितों - को पूर्ण सामंजस्य के साथ काम करने की अनुमति देता है. इस मिशन में, आपको एक शक्तिशाली मल्टी-एजेंट सिस्टम को डिज़ाइन, कनेक्ट, और व्यवस्थित करने की अपनी क्षमता का प्रदर्शन करना होगा.

आपको क्या सीखने को मिलेगा
- डिकूपल्ड टूलिंग इकोसिस्टम तैयार करें: स्वतंत्र, माइक्रोसर्विस-आधारित MCP टूल सर्वर का एक सेट डिज़ाइन और परिनियोजित करें. आप सीखेंगे कि स्केलेबल, रखरखाव योग्य और सुरक्षित एजेंटिक सिस्टम बनाने के लिए यह आधारभूत परत क्यों महत्वपूर्ण है.
- उन्नत एजेंटिक वर्कफ़्लोज़ में महारत हासिल करें: एकल एजेंटों से आगे बढ़ें और विशेषज्ञ "परिचितों" की एक सेना बनाएँ. आपको ADK के मुख्य वर्कफ़्लो पैटर्न—सीक्वेंशियल, पैरलल, और लूप—के बारे में पूरी जानकारी मिलेगी. साथ ही, सही टास्क के लिए सही पैटर्न चुनने के आर्किटेक्चरल सिद्धांतों के बारे में भी जानकारी मिलेगी.
- एक इंटेलिजेंट ऑर्केस्ट्रेटर लागू करें: एक साधारण एजेंट बिल्डर से एक सच्चे सिस्टम आर्किटेक्ट बनें. आप एक मास्टर ऑर्केस्ट्रेशन एजेंट का निर्माण करेंगे जो एजेंट-टू-एजेंट (A2A) प्रोटोकॉल का उपयोग करके जटिल कार्यों की खोज करेगा और उन्हें आपके विशेषज्ञ परिचितों को सौंपेगा, जिससे एक वास्तविक मल्टी-एजेंट सिस्टम का निर्माण होगा.
- नियमों को कोड से लागू करें, संकेतों से नहीं: स्टेटफुल एंगेजमेंट नियमों को लागू करके ज़्यादा विश्वसनीय और पूर्वानुमानित एजेंट बनाना सीखें. आप कूलडाउन टाइमर जैसी वास्तविक दुनिया की बाधाओं को प्रबंधित करने के लिए ADK के शक्तिशाली प्लगइन और कॉलबैक सिस्टम का उपयोग करके कस्टम लॉजिक को लागू करेंगे.
- एजेंट की स्थिति और मेमोरी मैनेज करना: अपने एजेंट को सीखने और याद रखने की सुविधा दें. आपको कम समय के लिए बातचीत की स्थिति और लंबे समय तक बनी रहने वाली मेमोरी को मैनेज करने की तकनीकों के बारे में जानने को मिलेगा. इससे ज़्यादा स्मार्ट और कॉन्टेक्स्ट के हिसाब से इंटरैक्शन बनाए जा सकेंगे.
- एंड-टू-एंड क्लाउड डिप्लॉयमेंट लागू करें: अपने पूरे मल्टी-एजेंट सिस्टम को लोकल प्रोटोटाइप से प्रोडक्शन-ग्रेड की हकीकत में बदलें. आपको अपने एजेंट और ऑर्केस्ट्रेटर को कंटेनर में बदलने और उन्हें Google Cloud Run पर, ज़्यादा उपयोगकर्ताओं को हैंडल करने वाली, स्वतंत्र माइक्रोसेवाओं के कलेक्शन के तौर पर डिप्लॉय करने का तरीका बताया जाएगा.
3. समनिंग सर्कल बनाना
स्वागत है, समनर. इससे पहले कि किसी परिचित को बुलाया जाए, इससे पहले कि कोई समझौता किया जाए, वह ज़मीन जिस पर आप खड़े हैं, तैयार होनी चाहिए. एक अनियंत्रित वातावरण अराजकता को निमंत्रण देता है; एक उचित समनकर्ता केवल पवित्र, सशक्त स्थान के भीतर ही कार्य करता है. हमारा पहला कार्य सम्मन चक्र बनाना है: शक्ति के रूनों को अंकित करना जो आवश्यक क्लाउड सेवाओं को जागृत करेंगे और प्राचीन ब्लूप्रिंट प्राप्त करना जो हमारे कार्य का मार्गदर्शन करेंगे. एक समनकर्ता की शक्ति सावधानीपूर्वक तैयारी से पैदा होती है.
👉 Google क्लाउड कंसोल के शीर्ष पर क्लाउड शेल सक्रिय करें पर क्लिक करें (यह क्लाउड शेल फलक के शीर्ष पर टर्मिनल आकार का आइकन है),

👉 "ओपन एडिटर" बटन पर क्लिक करें (यह एक पेंसिल के साथ खुले फ़ोल्डर की तरह दिखता है). इससे विंडो में क्लाउड शेल कोड एडिटर खुल जाएगा. आपको बाईं ओर एक फ़ाइल एक्सप्लोरर दिखाई देगा. 
👉क्लाउड IDE में टर्मिनल खोलें, 
👉💻 टर्मिनल में, सत्यापित करें कि आप पहले से ही प्रमाणित हैं और प्रोजेक्ट निम्न कमांड का उपयोग करके आपकी प्रोजेक्ट आईडी पर सेट है:
gcloud auth list
👉💻 GitHub से बूटस्ट्रैप प्रोजेक्ट को क्लोन करें:
git clone https://github.com/weimeilin79/agentverse-architect
chmod +x ~/agentverse-architect/init.sh
chmod +x ~/agentverse-architect/set_env.sh
chmod +x ~/agentverse-architect/prepare.sh
chmod +x ~/agentverse-architect/data_setup.sh
git clone https://github.com/weimeilin79/agentverse-dungeon.git
chmod +x ~/agentverse-dungeon/run_cloudbuild.sh
chmod +x ~/agentverse-dungeon/start.sh
👉💻 प्रोजेक्ट डायरेक्ट्री से सेटअप स्क्रिप्ट चलाएं.
⚠️ प्रोजेक्ट आईडी पर ध्यान दें: स्क्रिप्ट एक बेतरतीब ढंग से जनरेट की गई डिफ़ॉल्ट प्रोजेक्ट आईडी का सुझाव देगी. आप इस डिफ़ॉल्ट को स्वीकार करने के लिए Enter दबा सकते हैं.
हालांकि, अगर आपको कोई नया प्रोजेक्ट बनाना है, तो स्क्रिप्ट के प्रॉम्प्ट करने पर, अपना पसंदीदा प्रोजेक्ट आईडी टाइप करें.
cd ~/agentverse-architect
./init.sh
स्क्रिप्ट, सेटअप की बाकी प्रोसेस को अपने-आप पूरा कर देगी.
👉 पूरा होने के बाद महत्वपूर्ण चरण: स्क्रिप्ट पूरी होने के बाद, आपको यह सुनिश्चित करना होगा कि आपका Google क्लाउड कंसोल सही प्रोजेक्ट देख रहा है:
- console.cloud.google.com पर जाएं.
- पेज पर सबसे ऊपर मौजूद, प्रोजेक्ट सिलेक्टर ड्रॉपडाउन पर क्लिक करें.
- "सभी" टैब पर क्लिक करें (क्योंकि नया प्रोजेक्ट अभी "हाल ही में" में दिखाई नहीं दे सकता है).
- वह प्रोजेक्ट आईडी चुनें जिसे आपने अभी
init.shचरण में कॉन्फ़िगर किया है.

👉💻 आवश्यक प्रोजेक्ट आईडी सेट करें:
gcloud config set project $(cat ~/project_id.txt) --quiet
👉💻 आवश्यक Google क्लाउड API सक्षम करने के लिए निम्न कमांड चलाएँ:
gcloud services enable \
sqladmin.googleapis.com \
storage.googleapis.com \
aiplatform.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
iam.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
secretmanager.googleapis.com
👉💻 अगर आपने अभी तक agentverse-repo नाम से आर्टिफ़ैक्ट रजिस्ट्री रिपॉज़िटरी नहीं बनाई है, तो इसे बनाने के लिए निम्न कमांड चलाएँ: (अगर आपके पास उसी प्रोजेक्ट में अन्य क्लासेस तैनात हैं, तो इस चरण को छोड़ दें)
. ~/agentverse-architect/set_env.sh
gcloud artifacts repositories create $REPO_NAME \
--repository-format=docker \
--location=$REGION \
--description="Repository for Agentverse agents"
अनुमति सेट अप करना
👉💻 टर्मिनल में निम्नलिखित कमांड चलाकर आवश्यक अनुमतियाँ प्रदान करें:
. ~/agentverse-architect/set_env.sh
# --- Grant Core Data Permissions ---
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/storage.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/aiplatform.user"
# --- Grant Deployment & Execution Permissions ---
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/cloudbuild.builds.editor"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/artifactregistry.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/run.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/logging.logWriter"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${SERVICE_ACCOUNT_NAME}" \
--role="roles/monitoring.metricWriter"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${SERVICE_ACCOUNT_NAME}" \
--role="roles/secretmanager.secretAccessor"
👉💻 जैसे ही आप अपना प्रशिक्षण शुरू करेंगे, हम अंतिम चुनौती तैयार करेंगे. निम्नलिखित कमांड अराजक स्थैतिक से स्पेक्टर्स को बुलाएंगे, जिससे आपके अंतिम परीक्षण के लिए बॉस तैयार हो जाएंगे.
. ~/agentverse-architect/set_env.sh
cd ~/agentverse-dungeon
./run_cloudbuild.sh
cd ~/agentverse-architect
👉💻 अंत में, प्रारंभिक सेटअप कार्य करने के लिए prepare.sh स्क्रिप्ट चलाएँ.
. ~/agentverse-architect/set_env.sh
cd ~/agentverse-architect/
./prepare.sh
बहुत बढ़िया काम, समनर. चक्र पूरा हो गया है और समझौते पर मुहर लग गई है. यह भूमि अब पवित्र हो चुकी है, और अपार शक्ति प्रवाहित करने के लिए तैयार है. हमारे अगले ट्रायल में, हम उन एलिमेंटल फ़ॉन्ट को फ़ोर्ज करेंगे जिनसे हमारे फ़ैमिलियर को ताकत मिलेगी.
4. मौलिक फ़ॉन्ट्स का निर्माण: पृथक टूलिंग पारिस्थितिकी तंत्र
युद्ध का मैदान तैयार है, समनिंग सर्कल बनाया गया है, और आसपास की मन ऊर्जा (मैना) तेज़ी से बढ़ रही है. अब समय आ गया है कि आप एक समनर के तौर पर अपना पहला काम करें: ताकत के उन सोर्स को तैयार करें जिनसे आपके फ़ैमिलियर अपनी ताकत हासिल करेंगे. इस रस्म को तीन हिस्सों में बांटा गया है. हर हिस्से में, एक एलिमेंटल फ़ॉन्ट को जगाया जाता है. यह एक स्थिर और स्वतंत्र स्रोत होता है, जो किसी खास तरह की शक्ति देता है. तीनों फ़ॉन्ट चालू होने पर ही, समन करने का मुश्किल काम शुरू किया जा सकता है.

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

व्हिस्पर्स के नेक्सस को जागृत करना (बाहरी API MCP सर्वर)
एक बुद्धिमान समनकर्ता जानता है कि सभी शक्तियां उसके अपने क्षेत्र से उत्पन्न नहीं होती हैं. ऊर्जा के बाह्य, कभी-कभी अव्यवस्थित स्रोत होते हैं, जिन्हें महान प्रभाव के लिए निर्देशित किया जा सकता है. नेक्सस ऑफ व्हिस्पर्स इन ताकतों तक पहुंचने का हमारा प्रवेशद्वार है.

एक सेवा पहले से ही लाइव है और यह हमारे लिए बाहरी पावर सोर्स के तौर पर काम करती है. यह दो रॉ स्पेल एंडपॉइंट उपलब्ध कराती है: /cryosea_shatter और /moonlit_cascade.
आर्किटेक्ट का नोट: आपको इंपरेटिव अप्रोच का इस्तेमाल करना होगा. इसमें सर्वर के लॉजिक को चरण-दर-चरण साफ़ तौर पर बताया जाता है. इससे आपको ज़्यादा कंट्रोल और सुविधा मिलती है. यह तब ज़रूरी होता है, जब आपके टूल को सिर्फ़ एक सामान्य एसक्यूएल क्वेरी चलाने के अलावा, अन्य काम भी करने होते हैं. जैसे, अन्य एपीआई कॉल करना. एजेंट आर्किटेक्ट के लिए, इन दोनों पैटर्न को समझना ज़रूरी है.
👉✏️ निर्देशिका ~/agentverse-architect/mcp-servers/api/main.py पर जाएँ और निम्न कोड के साथ REPLACE #REPLACE-MAGIC-CORE करें:
def cryosea_shatter() -> str:
"""Channels immense frost energy from an external power source, the Nexus of Whispers, to unleash the Cryosea Shatter spell."""
try:
response = requests.post(f"{API_SERVER_URL}/cryosea_shatter")
response.raise_for_status() # Raise an exception for bad status codes (4xx or 5xx)
data = response.json()
# Thematic Success Message
return f"A connection to the Nexus is established! A surge of frost energy manifests as Cryosea Shatter, dealing {data.get('damage_points')} damage."
except requests.exceptions.RequestException as e:
# Thematic Error Message
return f"The connection to the external power source wavers and fails. The Cryosea Shatter spell fizzles. Reason: {e}"
def moonlit_cascade() -> str:
"""Draws mystical power from an external energy source, the Nexus of Whispers, to invoke the Moonlit Cascade spell."""
try:
response = requests.post(f"{API_SERVER_URL}/moonlit_cascade")
response.raise_for_status()
data = response.json()
# Thematic Success Message
return f"The Nexus answers the call! A cascade of pure moonlight erupts from the external source, dealing {data.get('damage_points')} damage."
except requests.exceptions.RequestException as e:
# Thematic Error Message
return f"The connection to the external power source wavers and fails. The Moonlit Cascade spell fizzles. Reason: {e}"
स्क्रिप्ट के मुख्य हिस्से में, सामान्य Python फ़ंक्शन होते हैं. असल में, यहीं पर काम होता है.
👉✏️ उसी फ़ाइल ~/agentverse-architect/mcp-servers/api/main.py में REPLACE #REPLACE-Runes of Communication को निम्न कोड से बदलें:
@app.list_tools()
async def list_tools() -> list[mcp_types.Tool]:
"""MCP handler to list available tools."""
# Convert the ADK tool's definition to MCP format
schema_cryosea_shatter = adk_to_mcp_tool_type(cryosea_shatterTool)
schema_moonlit_cascade = adk_to_mcp_tool_type(moonlit_cascadeTool)
print(f"MCP Server: Received list_tools request. \n MCP Server: Advertising tool: {schema_cryosea_shatter.name} and {schema_moonlit_cascade.name}")
return [schema_cryosea_shatter,schema_moonlit_cascade]
@app.call_tool()
async def call_tool(
name: str, arguments: dict
) -> list[mcp_types.TextContent | mcp_types.ImageContent | mcp_types.EmbeddedResource]:
"""MCP handler to execute a tool call."""
print(f"MCP Server: Received call_tool request for '{name}' with args: {arguments}")
# Look up the tool by name in our dictionary
tool_to_call = available_tools.get(name)
if tool_to_call:
try:
adk_response = await tool_to_call.run_async(
args=arguments,
tool_context=None, # No ADK context available here
)
print(f"MCP Server: ADK tool '{name}' executed successfully.")
response_text = json.dumps(adk_response, indent=2)
return [mcp_types.TextContent(type="text", text=response_text)]
except Exception as e:
print(f"MCP Server: Error executing ADK tool '{name}': {e}")
# Creating a proper MCP error response might be more robust
error_text = json.dumps({"error": f"Failed to execute tool '{name}': {str(e)}"})
return [mcp_types.TextContent(type="text", text=error_text)]
else:
# Handle calls to unknown tools
print(f"MCP Server: Tool '{name}' not found.")
error_text = json.dumps({"error": f"Tool '{name}' not implemented."})
return [mcp_types.TextContent(type="text", text=error_text)]
@app.list_tools()(हैंडशेक): यह फ़ंक्शन सर्वर का अभिवादन है. जब कोई नया एजेंट कनेक्ट होता है, तो वह सबसे पहले इस एंडपॉइंट पर कॉल करके पूछता है, "आप क्या कर सकते हैं?" हमारा कोड सभी उपलब्ध उपकरणों की सूची के साथ प्रतिक्रिया करता है, जिसे adk_to_mcp_tool_type का उपयोग करके सार्वभौमिक MCP प्रारूप में परिवर्तित किया जाता है. -@app.call_tool()(कमांड): यह फ़ंक्शन सबसे अधिक उपयोगी है. जब एजेंट किसी उपकरण का उपयोग करने का निर्णय लेता है, तो वह उपकरण के नाम और तर्कों के साथ इस एंडपॉइंट पर एक अनुरोध भेजता है. हमारा कोड हमारे available_tools "स्पेलबुक" में टूल को खोजता है, उसे run_async के साथ निष्पादित करता है, तथा मानक MCP प्रारूप में परिणाम लौटाता है.
हम इसे बाद में तैनात करेंगे.
आर्केन फोर्ज को प्रज्वलित करना (एमसीपी सर्वर के सामान्य कार्य)
सारी ताकत, पुरानी किताबों या दूर की फुसफुसाहटों से नहीं मिलती. कभी-कभी, किसी समनर को अपनी इच्छाशक्ति और तर्क से जादू तैयार करना पड़ता है. Arcane Forge, पावर का यह फ़ॉन्ट है. यह एक ऐसा सर्वर है जो बिना किसी स्टेटस के, सामान्य कामों के लिए यूटिलिटी फ़ंक्शन उपलब्ध कराता है.

आर्किटेक्ट का नोट: यह एक और आर्किटेक्चरल पैटर्न है. यद्यपि मौजूदा प्रणालियों से जुड़ना सामान्य बात है, फिर भी आपको अक्सर अपने स्वयं के अनूठे व्यावसायिक नियमों और तर्कों को क्रियान्वित करने की आवश्यकता होगी. इस तरह का एक समर्पित "फ़ंक्शन" या "यूटिलिटीज़" टूल बनाना सर्वोत्तम अभ्यास है. यह आपके कस्टम तर्क को समाहित करता है, इसे आपके पारिस्थितिकी तंत्र में किसी भी एजेंट के लिए पुन: प्रयोज्य बनाता है, और इसे आपके डेटा स्रोतों और बाहरी एकीकरणों से अलग रखता है.
👀 अपने Google क्लाउड IDE में ~/agentverse-architect/mcp-servers/general/main.py फ़ाइल पर एक नज़र डालें. आप पाएंगे कि यह कस्टम फ़ॉन्ट ऑफ़ पावर बनाने के लिए नेक्सस की तरह ही अनिवार्य, mcp.server दृष्टिकोण का उपयोग कर रहा है.
मास्टर क्लाउड बिल्ड पाइपलाइन बनाएँ
अब, हम mcp-servers निर्देशिका के अंदर cloudbuild.yaml फ़ाइल बनाएंगे. यह फ़ाइल दोनों सेवाओं के निर्माण और परिनियोजन का प्रबंधन करेगी.
👉💻 ~/agentverse-architect/mcp-servers निर्देशिका से, निम्नलिखित कमांड चलाएँ:
cd ~/agentverse-architect/mcp-servers
source ~/agentverse-architect/set_env.sh
echo "The API URL is: $API_SERVER_URL"
# Submit the Cloud Build job from the parent directory
gcloud builds submit . \
--config=cloudbuild.yaml \
--substitutions=_REGION="$REGION",_REPO_NAME="$REPO_NAME",_API_SERVER_URL="$API_SERVER_URL"
सभी तैनाती पूर्ण होने तक प्रतीक्षा करें.
👉 आप क्लाउड रन कंसोल पर जाकर परिनियोजन की पुष्टि कर सकते हैं. आपको अपने दो नए MCP सर्वर इंस्टेंस चलते हुए दिखाई देंगे, जैसा कि नीचे दिखाया गया है: 
ज्ञान के पुस्तकालय को जागृत करना (डेटाबेस टूलबॉक्स एमसीपी सर्वर)
हमारा अगला फ़ॉन्ट Librarium of Knowledge होगा, जो हमारे क्लाउड SQL डेटाबेस से सीधा संबंध रखेगा.

आर्किटेक्ट का नोट: इसके लिए, हम आधुनिक, घोषणात्मक डेटाबेस टूलबॉक्स का उपयोग करेंगे. यह एक शक्तिशाली दृष्टिकोण है जहां हम अपने डेटा स्रोत और उपकरणों को YAML कॉन्फ़िगरेशन फ़ाइल में परिभाषित करते हैं. टूलबॉक्स सर्वर बनाने और चलाने के जटिल कार्य को संभालता है, जिससे हमें लिखने और बनाए रखने के लिए आवश्यक कस्टम कोड की मात्रा कम हो जाती है.
अब समय आ गया है कि हम अपना "समोनर्स लाइब्रेरियम" बनाएं - क्लाउड SQL डेटाबेस, जिसमें हमारी सभी महत्वपूर्ण जानकारी संग्रहित होगी. हम इसे स्वचालित रूप से संभालने के लिए एक सेटअप स्क्रिप्ट का उपयोग करेंगे.
👉💻 सबसे पहले, हम डेटाबेस सेटअप करेंगे,अपने टर्मिनल में, निम्नलिखित कमांड चलाएँ:
source ~/agentverse-architect/set_env.sh
cd ~/agentverse-architect
./data_setup.sh
स्क्रिप्ट समाप्त होने के बाद, आपका डेटाबेस भर जाएगा और मौलिक क्षति डेटा उपयोग के लिए तैयार हो जाएगा. अब आप सीधे अपने ग्रिमोइर की सामग्री को सत्यापित कर सकते हैं.
👉 सबसे पहले, नए ब्राउज़र टैब में इस सीधे लिंक को खोलकर अपने डेटाबेस के लिए क्लाउड SQL स्टूडियो पर जाएँ:
https://console.cloud.google.com/sql/instances/summoner-librarium-db

👉 बाईं ओर लॉगिन फलक में, ड्रॉपडाउन से familiar_grimoire डेटाबेस चुनें.
👉 उपयोगकर्ता के रूप में summoner और पासवर्ड के रूप में 1234qwer दर्ज करें, फिर प्रमाणित करें पर क्लिक करें.
👉📜 कनेक्ट होने के बाद, अगर कोई नया क्वेरी एडिटर टैब पहले से खुला नहीं है, तो उसे खोलें. तत्व के हिसाब से हुए नुकसान का डेटा देखने के लिए, यहां दी गई एसक्यूएल क्वेरी चिपकाएं और चलाएं:
SELECT * FROM
"public"."abilities"
अब आपको abilities टेबल दिखेगी. इसमें कॉलम और लाइनें भरी हुई होंगी. इससे पुष्टि होगी कि आपका Grimoire तैयार है. 
टूलबॉक्स MCP सर्वर कॉन्फ़िगर करें
tools.yaml कॉन्फ़िगरेशन फ़ाइल हमारे सर्वर के लिए ब्लूप्रिंट के रूप में कार्य करती है, जो डेटाबेस टूलबॉक्स को बताती है कि हमारे डेटाबेस से कैसे कनेक्ट होना है और टूल के रूप में कौन सी SQL क्वेरीज़ को प्रदर्शित करना है.
स्रोत: यह अनुभाग आपके डेटा से कनेक्शन को परिभाषित करता है.
- summoner-librarium:: यह हमारे कनेक्शन का लॉजिकल नाम है.
- प्रकार: cloud-sql-postgres: यह टूलबॉक्स को अपने अंतर्निहित, सुरक्षित कनेक्टर का उपयोग करने के लिए कहता है, जो विशेष रूप से PostgreSQL के लिए Cloud SQL के लिए डिज़ाइन किया गया है.
- परियोजना, क्षेत्र, उदाहरण, आदि: ये आपके द्वारा prepare.sh स्क्रिप्ट के दौरान बनाए गए क्लाउड SQL इंस्टेंस के सटीक निर्देशांक हैं, जो टूलबॉक्स को बताते हैं कि हमारा लाइब्रेरियम कहां मिलेगा.
👉✏️ tools.yaml में ~/agentverse-architect/mcp-servers/db-toolbox पर जाएं, #REPLACE-Source को निम्नलिखित से बदलें
sources:
# This section defines the connection to our Cloud SQL for PostgreSQL database.
summoner-librarium:
kind: cloud-sql-postgres
project: "YOUR_PROJECT_ID"
region: "us-central1"
instance: "summoner-librarium-db"
database: "familiar_grimoire"
user: "summoner"
password: "1234qwer"
👉✏️ 🚨🚨बदलें
YOUR_PROJECT_ID
को अपने प्रोजेक्ट आईडी के साथ जोड़ें.
tools: इस सेक्शन में, उन सुविधाओं या फ़ंक्शन के बारे में बताया जाता है जो हमारा सर्वर उपलब्ध कराएगा.
- lookup-available-ability:: यह हमारे पहले टूल का नाम है.
- प्रकार: postgres-sql: यह टूलबॉक्स को बताता है कि इस टूल की क्रिया SQL कथन को निष्पादित करना है.
- स्रोत: समनर-लाइब्रेरियम: यह टूल को उस कनेक्शन से जोड़ता है जिसे हमने स्रोत ब्लॉक में परिभाषित किया है. इस प्रकार उपकरण को पता चलता है कि किस डेटाबेस के विरुद्ध उसे क्वेरी चलानी है.
- ब्यौरा और पैरामीटर: यह वह जानकारी है जो भाषा मॉडल को दिखाई जाएगी. ब्यौरे से एजेंट को पता चलता है कि टूल का इस्तेमाल कब करना है. साथ ही, पैरामीटर से यह तय होता है कि टूल को किन इनपुट की ज़रूरत है. एजेंट के फ़ंक्शन कॉल करने की सुविधा को चालू करने के लिए, यह ज़रूरी है.
- statement: यह वह रॉ एसक्यूएल क्वेरी है जिसे एक्ज़ीक्यूट करना है. $1 एक सुरक्षित प्लेसहोल्डर है. इसमें एजेंट की ओर से दिया गया familiar_name पैरामीटर सुरक्षित तरीके से डाला जाएगा.
👉✏️ tools.yaml फ़ाइल में उसी ~/agentverse-architect/mcp-servers/db-toolbox में, #REPLACE-tools को निम्नलिखित से बदलें
tools:
# This tool replaces the need for a custom Python function.
lookup-available-ability:
kind: postgres-sql
source: summoner-librarium
description: "Looks up all known abilities and their damage for a given familiar from the Grimoire."
parameters:
- name: familiar_name
type: string
description: "The name of the familiar to search for (e.g., 'Fire Elemental')."
statement: |
SELECT ability_name, damage_points FROM abilities WHERE familiar_name = $1;
# This tool also replaces a custom Python function.
ability-damage:
kind: postgres-sql
source: summoner-librarium
description: "Finds the base damage points for a specific ability by its name."
parameters:
- name: ability_name
type: string
description: "The exact name of the ability to look up (e.g., 'inferno_resonance')."
statement: |
SELECT damage_points FROM abilities WHERE ability_name = $1;
टूलसेट: यह अनुभाग हमारे अलग-अलग टूल को एक साथ समूहित करता है.
- summoner-librarium:: We are creating a toolset with the same name as our source. जब हमारा डाइग्नोस्टिक एजेंट बाद में कनेक्ट होता है, तो वह एक ही असरदार कमांड में, समनर-लाइब्रेरी टूलसेट के सभी टूल लोड करने के लिए कह सकता है.
👉✏️ tools.yaml फ़ाइल में उसी ~/agentverse-architect/mcp-servers/db-toolbox में, #REPLACE-toolsets को निम्नलिखित से बदलें
toolsets:
summoner-librarium:
- lookup-available-ability
- ability-damage
Librarium को डिप्लॉय करना
अब हम Librarium को डिप्लॉय करेंगे. हम अपना कंटेनर बनाने के बजाय, Google की पहले से बनी हुई आधिकारिक कंटेनर इमेज का इस्तेमाल करेंगे. साथ ही, Secret Manager का इस्तेमाल करके, अपने tools.yaml कॉन्फ़िगरेशन को सुरक्षित तरीके से उपलब्ध कराएंगे. सुरक्षा और रखरखाव के लिए, यह सबसे सही तरीका है.
👉💻 tools.yaml फ़ाइल से एक सीक्रेट बनाएँ
cd ~/agentverse-architect/mcp-servers/db-toolbox
gcloud secrets create tools --data-file=tools.yaml
👉💻 क्लाउड रन पर आधिकारिक टूलबॉक्स कंटेनर तैनात करें.
cd ~/agentverse-architect/mcp-servers/db-toolbox
. ~/agentverse-architect/set_env.sh
export TOOLBOX_IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$TOOLBOX_VERSION
echo "TOOLBOX_IMAGE is $TOOLBOX_IMAGE"
gcloud run deploy toolbox \
--image $TOOLBOX_IMAGE \
--region $REGION \
--set-secrets "/app/tools.yaml=tools:latest" \
--labels="dev-tutorial-codelab=agentverse" \
--args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
--allow-unauthenticated \
--min-instances 1
--set-secrets: यह कमांड हमारे टूल्स सीक्रेट को रनिंग कंटेनर के अंदर tools.yaml नामक फ़ाइल के रूप में सुरक्षित रूप से माउंट करता है.--args: हम टूलबॉक्स कंटेनर को माउंटेड सीक्रेट फ़ाइल को उसके कॉन्फ़िगरेशन के रूप में उपयोग करने का निर्देश देते हैं.
👉 यह पुष्टि करने के लिए कि आपका टूलबॉक्स सफलतापूर्वक परिनियोजित हो गया है, क्लाउड रन कंसोल पर जाएं. आपको summoner-toolbox सेवा हरे चेकमार्क के साथ दिखाई देगी, जो दर्शाता है कि यह ठीक से चल रही है, ठीक नीचे दी गई छवि की तरह. 
अगर आपने अपडेट नहीं किया है, तो
YOUR_PROJECT_ID
इस निर्देश का इस्तेमाल करके, सीक्रेट में tools.yaml का नया वर्शन जोड़ा जा सकता है. इसके बाद, इसे फिर से डिप्लॉय किया जा सकता है.
gcloud secrets versions add tools --data-file=tools.yaml
Librarium of Knowledge(Database ToolBox MCP Server) अब चालू है और क्लाउड में ऐक्सेस किया जा सकता है. यह एमसीपी सर्वर, डिक्लेरेटिव डिज़ाइन का इस्तेमाल करता है. इसमें बताया जाता है कि आपको क्या चाहिए. इसके बाद, टूलबॉक्स आपके लिए सर्वर बनाता है.
पुष्टि करना: अप्रेंटिस का ट्रायल
👉💻 अब हम डायग्नोस्टिक एजेंट के साथ अपने संपूर्ण, क्लाउड-नेटिव टूलिंग इकोसिस्टम का परीक्षण करेंगे.
cd ~/agentverse-architect/
python -m venv env
source ~/agentverse-architect/env/bin/activate
cd ~/agentverse-architect/mcp-servers
pip install -r diagnose/requirements.txt
. ~/agentverse-architect/set_env.sh
adk run diagnose
👉💻 cmd लाइन परीक्षण उपकरण में, सभी तीन फ़ॉन्ट का परीक्षण करें:
Look up the entry for "inferno_lash". What is its base power level?
The enemy is vulnerable to frost! Channel power from the Nexus and cast Cryosea Shatter.
Take a fire spell with a base power of 15 and use the Arcane Forge to multiply it with Inferno Resonance.

बधाई हो, समनर. आपके तीन एलिमेंटल फॉन्ट अब सक्रिय हैं, स्वतंत्र रूप से तैनात हैं, और वैश्विक रूप से सुलभ हैं, जो आपके एजेंटिक सेना के लिए अडिग आधार तैयार करते हैं. बाहर निकलने के लिए Ctrl+C दबाएँ.
गैर गेमर्स के लिए
5. परिचितों को बुलाना: कोर डोमेन वर्कफ़्लो
एलिमेंटल फॉन्ट्स गढ़े हुए हैं, जो कच्ची, अदम्य शक्ति से गुंजायमान हैं. लेकिन बिना आकार के शक्ति अराजकता है. एक सच्चा समनकर्ता केवल कच्ची ऊर्जा का प्रयोग नहीं करता; वह उसे इच्छाशक्ति, उद्देश्य और एक विशिष्ट रूप प्रदान करता है. अब समय आ गया है कि शक्ति स्रोतों को गढ़ने से आगे बढ़कर असली काम शुरू किया जाए: अपने पहले परिचितों को बुलाया जाए.
आपके द्वारा बुलाया गया प्रत्येक परिचित एक स्वायत्त एजेंट होगा, एक वफादार सेवक जो एक विशिष्ट युद्ध सिद्धांत से बंधा होगा. वे सामान्यवादी नहीं हैं; वे एकल, शक्तिशाली रणनीति के स्वामी हैं. इनमें से एक सटीक, एक-दो पंच संयोजन का मास्टर होगा. दूसरा एक साथ, बहुआयामी हमले से दुश्मनों पर हावी हो जाएगा. तीसरा एक अथक घेराबंदी इंजन होगा, जो तब तक दबाव बनाए रखेगा जब तक उसका लक्ष्य नष्ट न हो जाए.

एमसीपी सर्वर द्वारा प्रदान की गई प्रक्रियाओं, व्यावसायिक तर्क और क्रियाओं को विशिष्ट, स्वायत्त वर्कफ़्लो एजेंटों में समाहित करना. प्रत्येक एजेंट के पास एक परिभाषित "परिचालन क्षेत्र" होगा, जिसके तहत उसे केवल विशिष्ट MCP टूल सर्वर तक पहुंच प्रदान की जाएगी, जिसकी उसे अपना कार्य करने के लिए आवश्यकता होगी. यह प्रयोगशाला यह प्रदर्शित करती है कि सही कार्य के लिए सही एजेंट प्रकार का चयन कैसे किया जाए.

यह मॉड्यूल आपको सिखाएगा कि इन रणनीतियों में जान फूंकने के लिए ADK के शक्तिशाली वर्कफ़्लो एजेंटों का उपयोग कैसे करें. आपको पता चलेगा कि SequentialAgent, ParallelAgent या LoopAgent का आर्किटेक्चरल विकल्प सिर्फ़ तकनीकी जानकारी नहीं है. यह आपके Familiar की प्रकृति और युद्ध के मैदान में उसकी ताकत का मूल है.
अपना पवित्र स्थान तैयार करें. वास्तविक आह्वान अब शुरू होने वाला है.
Fire Elemental परिचित को बुलाएँ (अनुक्रमिक वर्कफ़्लो)
अग्नि तत्व परिचित का हमला एक सटीक, दो-भाग वाला कॉम्बो है: एक लक्षित प्रहार जिसके बाद एक शक्तिशाली प्रज्वलन होता है. इसके लिए, कार्रवाइयों का एक तय क्रम में पालन करना ज़रूरी है.

अवधारणा: SequentialAgent इसके लिए एकदम सही टूल है. यह सुनिश्चित करता है कि उप-एजेंटों की एक श्रृंखला एक के बाद एक चले, तथा पिछले चरण से परिणाम को अगले चरण में पहुंचाए.
कार्य ("एम्पलीफाइड स्ट्राइक" कॉम्बो):
- चरण 1: एजेंट सबसे पहले किसी विशिष्ट अग्नि क्षमता की आधार क्षति का पता लगाने के लिए लाइब्रेरियम से परामर्श करेगा.
- चरण 2: इसके बाद यह उस क्षति मान को लेगा और उसे आर्केन फोर्ज के माध्यम से प्रवाहित करेगा, जिससे कि inferno_resonance का उपयोग करके इसकी शक्ति कई गुना बढ़ जाएगी.
सबसे पहले, हम अपने परिचित और MCP सर्वर ("एलिमेंटल फ़ॉन्ट्स") के बीच कनेक्शन स्थापित करेंगे, जिसे आपने पिछले मॉड्यूल में तैनात किया था.
👉✏️ फ़ाइल ~/agentverse-architect/agent/fire/agent.py में #REPLACE-setup-MCP को निम्नलिखित कोड से बदलें:
toolbox = ToolboxSyncClient(DB_TOOLS_URL)
toolDB = toolbox.load_toolset('summoner-librarium')
toolFunction = MCPToolset(
connection_params=SseServerParams(url=FUNCTION_TOOLS_URL, headers={})
)
इसके बाद, हम विशेषज्ञ "वर्कर" एजेंट बनाते हैं. हर क्रॉलर का एक खास मकसद होता है. साथ ही, इसे सिर्फ़ एक टूलसेट का ऐक्सेस दिया जाता है, ताकि यह अपनी "ऑपरेशनल टेरिटरी" तक ही सीमित रहे.
👉✏️ फ़ाइल ~/agentverse-architect/agent/fire/agent.py में REPLACE #REPLACE-worker-agents को निम्न कोड से बदलें:
scout_agent = LlmAgent(
model='gemini-2.5-flash',
name='librarian_agent',
instruction="""
Your only task is to find all the available abilities,
You want to ALWAYS use 'Fire Elemental' as your familiar's name.
Randomly pick one if you see multiple availabilities
and the base damage of the ability by calling the 'ability_damage' tool.
""",
tools=toolDB
)
amplifier_agent = LlmAgent(
model='gemini-2.5-flash',
name='amplifier_agent',
instruction="""
You are the Voice of the Fire Familiar, a powerful being who unleashes the final, devastating attack.
You will receive the base damage value from the previous step.
Your mission is to:
1. Take the incoming base damage number and amplify it using the `inferno_resonance` tool.
2. Once the tool returns the final, multiplied damage, you must not simply state the result.
3. Instead, you MUST craft a final, epic battle cry describing the attack.
Your description should be vivid and powerful, culminating in the final damage number.
Example: If the tool returns a final damage of 120, your response could be:
"The runes glow white-hot! I channel the amplified energy... unleashing a SUPERNOVA for 120 damage!"
""",
tools=[toolFunction],
)
ये एजेंट, मॉड्यूलर और फिर से इस्तेमाल किए जा सकने वाले कॉम्पोनेंट होते हैं. सैद्धांतिक तौर पर, इस scout_agent का इस्तेमाल किसी ऐसे वर्कफ़्लो में किया जा सकता है जिसमें डेटाबेस को क्वेरी करने की ज़रूरत होती है. इनकी ज़िम्मेदारियों को अलग-अलग रखकर, हम लचीले बिल्डिंग ब्लॉक बनाते हैं. यह माइक्रोसेवा और कॉम्पोनेंट पर आधारित डिज़ाइन का मुख्य सिद्धांत है.
इसके बाद हम वर्कफ़्लो को एकत्रित करेंगे, यहीं पर रचना का जादू घटित होता है. SequentialAgent एक "मास्टर प्लान" है जो यह परिभाषित करता है कि हमारे विशेषज्ञ घटकों को कैसे जोड़ा जाता है और वे कैसे परस्पर क्रिया करते हैं.
👉✏️ फ़ाइल ~/agentverse-architect/agent/fire/agent.py में REPLACE #REPLACE-sequential-agent को निम्न कोड से बदलें:
root_agent = SequentialAgent(
name='fire_elemental_familiar',
sub_agents=[scout_agent, amplifier_agent],
)
👉💻 फायर एलिमेंटल का परीक्षण करने के लिए, निम्नलिखित कमांड चलाएँ ADK DEV UI लॉन्च करेगा:
. ~/agentverse-architect/set_env.sh
source ~/agentverse-architect/env/bin/activate
cd ~/agentverse-architect/agent
echo DB MCP Server: $DB_TOOLS_URL
echo API MCP Server: $API_TOOLS_URL
echo General MCP Server: $FUNCTION_TOOLS_URL
adk web
कमांड चलाने के बाद, आपको अपने टर्मिनल में आउटपुट दिखेगा. इससे पता चलेगा कि ADK वेब सर्वर शुरू हो गया है. यह आउटपुट कुछ इस तरह दिखेगा:
+-----------------------------------------------------------------------------+
| ADK Web Server started |
| |
| For local testing, access at http://localhost:8000. |
+-----------------------------------------------------------------------------+
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
👉 अगला, अपने ब्राउज़र से ADK Dev UI तक पहुँचने के लिए:
Cloud Shell टूलबार (आम तौर पर सबसे ऊपर दाईं ओर) में मौजूद, वेब की झलक दिखाने वाले आइकॉन (अक्सर यह आंख या ऐरो वाला स्क्वेयर दिखता है) से, पोर्ट बदलें को चुनें. पॉप-अप विंडो में, पोर्ट को 8000 पर सेट करें. इसके बाद, "बदलें और झलक देखें" पर क्लिक करें. इसके बाद, Cloud Shell एक नया ब्राउज़र टैब या विंडो खोलेगा. इसमें ADK Dev UI दिखेगा.

👉 एजेंट को शुरू करने की प्रोसेस पूरी हो गई है और अब एजेंट काम कर रहा है. आपके ब्राउज़र में मौजूद ADK Dev UI, Familiar से सीधे तौर पर कनेक्ट होता है.
- अपना लक्ष्य चुनें: UI के शीर्ष पर स्थित ड्रॉपडाउन मेनू में,
fireपरिचित चुनें. अब आप अपनी इच्छाशक्ति को इस विशिष्ट सत्ता पर केन्द्रित कर रहे हैं. - कमांड देना: दाईं ओर मौजूद चैट पैनल में, अब Familiar को निर्देश देने का समय है.

👉 परीक्षण संकेत:
Prepare an amplified strike using the 'inferno_lash' ability.

आप देखेंगे कि एजेंट पहले अपने "स्काउट" को बुलाकर मूल क्षति का पता लगाएगा, और फिर उसे गुणा करके अंतिम, महाविनाशकारी प्रहार करने के लिए अपने "एम्पलीफायर" को बुलाएगा.
👉💻 समन पूरा होने के बाद, अपने क्लाउड शेल एडिटर टर्मिनल पर वापस लौटें और ADK Dev UI को रोकने के लिए Ctrl+C दबाएँ.
Water Elemental परिचित को बुलाएँ (समानांतर वर्कफ़्लो)
जल तत्व परिचित अपने लक्ष्य पर एक विशाल, बहुआयामी हमले से हावी हो जाता है, एक साथ सभी दिशाओं से प्रहार करता है, तथा अंतिम, विनाशकारी प्रहार के लिए ऊर्जाओं को संयोजित करता है.

अवधारणा: ParallelAgent अधिकतम दक्षता के लिए एक साथ कई स्वतंत्र कार्यों को निष्पादित करने के लिए आदर्श है. यह एक "पिनसर अटैक" है जिसमें आप एक साथ कई हमले करते हैं. यह एक SequentialAgent के भीतर एक साथ हमले शुरू करता है, ताकि बाद में अंतिम "विलय" चरण चलाया जा सके. यह "fan-out, fan-in" पैटर्न उन्नत वर्कफ़्लो डिज़ाइन का आधार है.
कार्य ("टाइडल क्लैश" कॉम्बो): एजेंट एक साथ ये कार्य करेगा:
- कार्य A: Nexus से चैनल
cryosea_shatter. - कार्य B: Nexus से चैनल
moonlit_cascade. - कार्य C: फ़ोर्ज से
leviathan_surgeके साथ कच्ची बिजली उत्पन्न करें. - अंत में, सभी क्षति का योग करें और संयुक्त हमले का वर्णन करें.
सबसे पहले, हम अपने परिचित और MCP सर्वर ("एलिमेंटल फ़ॉन्ट्स") के बीच कनेक्शन स्थापित करेंगे, जिसे आपने पिछले मॉड्यूल में तैनात किया था.
👉✏️ फ़ाइल ~/agentverse-architect/agent/water/agent.py में #REPLACE-setup-MCP को निम्नलिखित कोड से बदलें:
toolFAPI = MCPToolset(
connection_params=SseServerParams(url=API_TOOLS_URL, headers={})
)
toolFunction = MCPToolset(
connection_params=SseServerParams(url=FUNCTION_TOOLS_URL, headers={})
)
इसके बाद, हम अपने विशेषज्ञ "कार्यकर्ता" एजेंट बनाएंगे. प्रत्येक को एक संकीर्ण, सुपरिभाषित उद्देश्य दिया जाता है तथा उसे केवल एक विशिष्ट टूलसेट तक पहुंच प्रदान करके उसके अपने "परिचालन क्षेत्र" तक ही सीमित रखा जाता है.
👉✏️ फ़ाइल ~/agentverse-architect/agent/water/agent.py में #REPLACE-worker-agents को निम्नलिखित कोड से बदलें:
nexus_channeler = LlmAgent(
model='gemini-2.5-flash',
name='librarian_agent',
instruction="""
You are a Channeler of the Nexus. Your sole purpose is to invoke the
`cryosea_shatter` and `moonlit_cascade` spells by calling their respective tools.
Report the result of each spell cast clearly and concisely.
""",
tools=[toolFAPI]
)
forge_channeler = LlmAgent(
model='gemini-2.5-flash',
name='amplifier_agent',
instruction="""
You are a Channeler of the Arcane Forge. Your only task is to invoke the
`leviathan_surge` spell. You MUST call it with a `base_water_damage` of 20.
Report the result clearly.
""",
tools=[toolFunction],
)
power_merger = LlmAgent(
model='gemini-2.5-flash',
name='power_merger',
instruction="""
You are the Power Merger, a master elementalist who combines raw magical
energies into a single, devastating final attack.
You will receive a block of text containing the results from a simultaneous
assault by other Familiars.
You MUST follow these steps precisely:
1. **Analyze the Input:** Carefully read the entire text provided from the previous step.
2. **Extract All Damage:** Identify and extract every single damage number reported in the text.
3. **Calculate Total Damage:** Sum all of the extracted numbers to calculate the total combined damage.
4. **Describe the Final Attack:** Create a vivid, thematic description of a massive,
combined water and ice attack that uses the power of Cryosea Shatter and Leviathan's Surge.
5. **Report the Result:** Conclude your response by clearly stating the final, total damage of your combined attack.
Example: If the input is "...dealt 55 damage. ...dealt 60 damage.", you will find 55 and 60,
calculate the total as 115, and then describe the epic final attack, ending with "for a total of 115 damage!"
""",
tools=[toolFunction],
)
इसके बाद, हम वर्कफ़्लो को एकत्रित करेंगे. यहीं पर रचना का जादू घटित होता है. ParallelAgent और SequentialAgent "मास्टर प्लान" हैं जो परिभाषित करते हैं कि हमारे विशेषज्ञ घटकों को कैसे जोड़ा जाता है और वे "टाइडल क्लैश" कॉम्बो बनाने के लिए कैसे परस्पर क्रिया करते हैं.
👉✏️ फ़ाइल ~/agentverse-architect/agent/water/agent.py में #REPLACE-parallel-agent को निम्नलिखित कोड से बदलें:
channel_agent = ParallelAgent(
name='channel_agent',
sub_agents=[nexus_channeler, forge_channeler],
)
root_agent = SequentialAgent(
name="water_elemental_familiar",
# Run parallel research first, then merge
sub_agents=[channel_agent, power_merger],
description="A powerful water familiar that unleashes multiple attacks at once and then combines their power for a final strike."
)
👉💻 वाटर एलिमेंटल का परीक्षण करने के लिए, ADK Dev UI लॉन्च करने के लिए निम्नलिखित कमांड चलाएँ:
. ~/agentverse-architect/set_env.sh
source ~/agentverse-architect/env/bin/activate
cd ~/agentverse-architect/agent
echo DB MCP Server: $DB_TOOLS_URL
echo API MCP Server: $API_TOOLS_URL
echo General MCP Server: $FUNCTION_TOOLS_URL
adk web
👉 आपका सम्मन अनुष्ठान पूरा हो गया है, और एजेंट अब चल रहा है. आपके ब्राउज़र में ADK Dev UI आपका Familiar से सीधा कनेक्शन है.
- UI के शीर्ष पर स्थित ड्रॉपडाउन मेनू में, पानी परिचित चुनें. अब आप अपनी इच्छाशक्ति को इस विशिष्ट सत्ता पर केन्द्रित कर रहे हैं.
- अपना आदेश जारी करें: दाईं ओर स्थित चैट पैनल में, परिचित को आदेश देने का समय आ गया है.
👉 टेस्ट प्रॉम्प्ट:
Unleash a tidal wave of power!

👉💻 समन पूरा होने के बाद, अपने क्लाउड शेल एडिटर टर्मिनल पर वापस लौटें और ADK Dev UI को रोकने के लिए Ctrl+C दबाएँ.
Earth Elemental परिचित को बुलाएँ (लूप वर्कफ़्लो)
अर्थ एलिमेंटल फ़ैमिलियर, लगातार दबाव डालने वाला जीव होता है. यह अपने दुश्मन को एक ही बार में नहीं हराता, बल्कि धीरे-धीरे अपनी ताकत बढ़ाता है और उसे बार-बार इस्तेमाल करता है. ऐसा तब तक किया जाता है, जब तक टारगेट का डिफ़ेंस कमज़ोर न हो जाए.

अवधारणा: LoopAgent को ठीक इसी प्रकार के पुनरावृत्तीय, "सीज इंजन" कार्य के लिए डिज़ाइन किया गया है. यह अपने sub-agents को बार-बार निष्पादित करेगा, प्रत्येक चक्र के बाद एक शर्त की जाँच करेगा, जब तक कि कोई लक्ष्य पूरा न हो जाए. यह लूप की प्रगति के आधार पर अपने अंतिम संदेश को भी अनुकूलित कर सकता है.
कार्य ("घेराबंदी तोड़ने वाला" हमला):
- ऊर्जा इकट्ठा करने के लिए, Familiar बार-बार seismic_charge को कॉल करेगा.
- यह ज़्यादा से ज़्यादा तीन बार चार्ज होता रहेगा.
- अंतिम आवेश पर, यह अपनी संचित शक्ति के विनाशकारी उत्सर्जन की घोषणा करेगा.
हम सबसे पहले ऐसे कॉम्पोनेंट बनाएंगे जिनका दोबारा इस्तेमाल किया जा सकता है. ये कॉम्पोनेंट, लूप के हर इटरेशन में मौजूद चरणों के बारे में बताते हैं. charging_agent में ऊर्जा इकट्ठा होगी और check_agent अपनी स्थिति की जानकारी देगा. साथ ही, आखिरी बारी में अपना मैसेज डाइनैमिक तरीके से बदलेगा.
सबसे पहले, हम अपने परिचित और MCP सर्वर ("एलिमेंटल फ़ॉन्ट्स") के बीच कनेक्शन स्थापित करेंगे, जिसे आपने पिछले मॉड्यूल में तैनात किया था.
👉✏️ फ़ाइल में, ~/agentverse-architect/agent/earth/agent.py को इस कोड से #REPLACE-setup-MCP बदलें:
toolFunction = MCPToolset(
connection_params=SseServerParams(url=FUNCTION_TOOLS_URL, headers={})
)
👉✏️ फ़ाइल ~/agentverse-architect/agent/earth/agent.py में #REPLACE-worker-agents को निम्नलिखित कोड से बदलें:
charging_agent = LlmAgent(
model='gemini-2.5-flash',
name='charging_agent',
instruction="""
Your task is to call the 'seismic_charge' .
You must follow these rules strictly:
1. You will be provided with a 'current_energy' value from the previous step.
**If this value is missing or was not provided, you MUST call the tool with 'current_energy' set to 1.**
This is your primary rule for the first turn.
2. If a 'current_energy' value is provided, you MUST use that exact value in your cal to seismic_charge.
3. Your final response MUST contain ONLY the direct output from the 'seismic_charge' tool.
Do not add any conversational text, introductions, or summaries.
""",
tools=[toolFunction]
)
check_agent = LlmAgent(
model='gemini-2.5-flash',
name='check_agent',
instruction="""
You are the voice of the Earth Elemental, a being of immense, gathering power.
Your sole purpose is to report on the current energy charge and announce the devastating potential of its release.
You MUST follow this rule:
The potential damage upon release is ALWAYS calculated as the `current_energy` from the previous step multiplied by a random number between 80-90. but no more than 300.
Your response should be in character, like a powerful creature speaking.
State both the current energy charge and the total potential damage you can unleash.
Unleash the energy when you reached the last iteration (2nd).
""",
output_key="charging_status"
)
इसके बाद, हम वर्कफ़्लो को एकत्रित करेंगे. यहीं पर रचना का जादू घटित होता है. LoopAgent, "मास्टर प्लान" है. यह हमारे विशेषज्ञ कॉम्पोनेंट को बार-बार एक्ज़ीक्यूट करता है और लूप की शर्तों को मैनेज करता है.
👉✏️ फ़ाइल ~/agentverse-architect/agent/earth/agent.py में #REPLACE-loop-agent को निम्नलिखित कोड से बदलें:
root_agent = LoopAgent(
name="earth_elemental_familiar",
# Run parallel research first, then merge
sub_agents=[
charging_agent,
check_agent
],
max_iterations=2,
description="Coordinates parallel research and synthesizes the results.",
#REPLACE-before_agent-config
)
👉💻 पृथ्वी तत्व का परीक्षण करें: एजेंट चलाएं
. ~/agentverse-architect/set_env.sh
source ~/agentverse-architect/env/bin/activate
cd ~/agentverse-architect/agent
echo DB MCP Server: $DB_TOOLS_URL
echo API MCP Server: $API_TOOLS_URL
echo General MCP Server: $FUNCTION_TOOLS_URL
adk web
👉 एजेंट को शुरू करने की प्रोसेस पूरी हो गई है और अब एजेंट काम कर रहा है. आपके ब्राउज़र में मौजूद ADK Dev UI, सीधे तौर पर Familiar से कनेक्ट होता है.
- अपना लक्ष्य चुनें: UI के शीर्ष पर स्थित ड्रॉपडाउन मेनू में, पृथ्वी परिचित चुनें. अब आप अपनी इच्छाशक्ति को इस विशिष्ट सत्ता पर केन्द्रित कर रहे हैं.
- कमांड देना: दाईं ओर मौजूद चैट पैनल में, अब Familiar को निर्देश देने का समय है. 👉 परीक्षण संकेत:
Begin the seismic charge, starting from zero

आर्किटेक्चर से जुड़ी अहम जानकारी: आपके सिस्टम में अब एक खास और मॉड्यूलर लॉजिक लेयर मौजूद है. कारोबार की प्रोसेस को न सिर्फ़ इनकैप्सुलेट किया जाता है, बल्कि उन्हें काम के लिए सबसे असरदार व्यवहार पैटर्न (प्रोसीजरल, कॉन्करेंट या इटरेटिव) के साथ लागू किया जाता है. इससे एजेंटिक डिज़ाइन के बेहतर लेवल का पता चलता है. साथ ही, सुरक्षा, कार्यक्षमता, और क्षमता में सुधार होता है.
समन पूरा हो जाने के बाद, अपने क्लाउड शेल एडिटर टर्मिनल पर वापस लौटें और ADK Dev UI को रोकने के लिए Ctrl+C दबाएँ.
गैर गेमर्स के लिए
6. कमांड लोकस की स्थापना: A2A के माध्यम से बुद्धिमान प्रतिनिधिमंडल
आपके परिचित शक्तिशाली लेकिन स्वतंत्र हैं. वे अपनी रणनीतियों को त्रुटिरहित तरीके से क्रियान्वित करते हैं, लेकिन आपके सीधे आदेश की प्रतीक्षा करते हैं. विशेषज्ञों की एक सेना बिना किसी जनरल के बेकार है. अब समय आ गया है कि हम सीधे कमांडर से सच्चे ऑर्केस्ट्रेटर बनें.

आर्किटेक्ट का नोट: पूरे सिस्टम के लिए एकल, बुद्धिमान प्रवेश बिंदु बनाना. यह समनर एजेंट स्वयं व्यावसायिक तर्क का निष्पादन नहीं करेगा, बल्कि एक "मास्टर रणनीतिकार" के रूप में कार्य करेगा, कूलिंग स्थिति का विश्लेषण करेगा और उपयुक्त विशेषज्ञ परिचित को कार्य सौंपेगा.

बाध्यकारी अनुष्ठान (A2A सेवाओं के रूप में परिचितों को उजागर करना)
एक मानक एजेंट को एक समय में केवल एक ही स्थान पर चलाया जा सकता है. अपने परिचितों को दूरस्थ कमांड के लिए उपलब्ध कराने के लिए, हमें एजेंट-टू-एजेंट (A2A) प्रोटोकॉल का उपयोग करके "बाइंडिंग अनुष्ठान" करना होगा.
आर्किटेक्ट का नोट: एजेंट-टू-एजेंट (A2A) प्रोटोकॉल एक मुख्य आर्किटेक्चरल पैटर्न है जो एक स्टैंडअलोन एजेंट को एक खोज योग्य, नेटवर्क-एड्रेसेबल माइक्रोसर्विस में बदल देता है, जिससे एक वास्तविक "एजेंटों का समाज" संभव होता है. A2A के माध्यम से किसी परिचित को उजागर करने से स्वचालित रूप से दो आवश्यक, परस्पर जुड़े घटक बन जाते हैं:
- एजेंट कार्ड ("क्या"): यह एक सार्वजनिक, मशीन-पठनीय "स्पिरिट सिगिल" है—एक OpenAPI विनिर्देश की तरह—जो परिचित के सार्वजनिक अनुबंध के रूप में कार्य करता है. यह एजेंट का नाम, उसका रणनीतिक उद्देश्य (उसके निर्देशों से प्राप्त) तथा उसके द्वारा समझे जाने वाले आदेशों का वर्णन करता है. यह वही है जो एक मास्टर समनर एक परिचित की खोज करने और उसकी क्षमताओं को जानने के लिए पढ़ता है.
- A2A सर्वर ("कहां"): यह एक खास वेब एंडपॉइंट है, जो Familiar को होस्ट करता है और आने वाले निर्देशों को सुनता है. यह नेटवर्क पता है, जहां अन्य एजेंट अपने अनुरोध भेजते हैं. इससे यह पक्का होता है कि उन अनुरोधों को एजेंट कार्ड में तय किए गए कॉन्ट्रैक्ट के मुताबिक हैंडल किया जाता है.
अब हम अपने तीनों परिचितों पर यह बंधन अनुष्ठान करेंगे.
Fire 👉✏️ में ~/agentverse-architect/agent/fire/agent.py फ़ाइल खोलें. फायर एलिमेंटल को A2A सेवा के रूप में प्रदर्शित करने के लिए फ़ाइल के निचले भाग में #REPLACE - add A2A को प्रतिस्थापित करें.
from agent_to_a2a import to_a2a
if __name__ == "__main__":
import uvicorn
a2a_app = to_a2a(root_agent, port=8080, public_url=PUBLIC_URL)
uvicorn.run(a2a_app, host='0.0.0.0', port=8080)
पानी और पृथ्वी🚨 👉✏️ ~/agentverse-architect/agent/water/agent.py और ~/agentverse-architect/agent/earth/agent.py को भी एक साथ बाइंड करने के लिए, ठीक यही बदलाव लागू करें.
from agent_to_a2a import to_a2a
if __name__ == "__main__":
import uvicorn
a2a_app = to_a2a(root_agent, port=8080, public_url=PUBLIC_URL)
uvicorn.run(a2a_app, host='0.0.0.0', port=8080)
बाउंड परिचितों की तैनाती
👉✏️ निर्धारित बाध्यकारी अनुष्ठानों के साथ, हम अपने तीन परिचितों को क्लाउड रन पर स्वतंत्र, कंटेनरीकृत सर्वर रहित सेवा के रूप में तैयार और तैनात करने के लिए अपनी क्लाउड बिल्ड पाइपलाइन का उपयोग करेंगे.
. ~/agentverse-architect/set_env.sh
cd ~/agentverse-architect/agent
gcloud builds submit . \
--config=cloudbuild.yaml \
--substitutions=_REGION="$REGION",_REPO_NAME="$REPO_NAME",_DB_TOOLS_URL="$DB_TOOLS_URL",_API_TOOLS_URL="$API_TOOLS_URL",_FUNCTION_TOOLS_URL="$FUNCTION_TOOLS_URL",_A2A_BASE_URL="$A2A_BASE_URL",_PROJECT_ID="$PROJECT_ID",_API_SERVER_URL="$API_SERVER_URL"
कमांड लेना (समनर एजेंट बनाना)
अब आपके फ़ैमिलियर, आपकी बात सुनेंगे. इसके बाद, आपको मास्टर समनर की भूमिका मिलेगी. इस एजेंट के पास बुनियादी टूल इस्तेमाल करने की सुविधा नहीं होती. इसके पास अन्य एजेंट को निर्देश देने की सुविधा होती है. इसके टूल, फ़ैमिलियर ही होते हैं. यह उनके "स्पिरिट सिगिल" का इस्तेमाल करके, उन्हें खोजेगा और निर्देश देगा.
आर्किटेक्ट का नोट: यह अगला चरण किसी भी बड़े पैमाने पर वितरित सिस्टम के लिए एक महत्वपूर्ण आर्किटेक्चरल पैटर्न प्रदर्शित करता है: सेवा डिस्कवरी. समनर एजेंट में परिचितों का कोड अंतर्निहित नहीं होता है. इसके बजाय, उन्हें उनके नेटवर्क पते (यूआरएल) दिए जाते हैं. रनटाइम पर, यह उनके सार्वजनिक एजेंट कार्ड प्राप्त करके गतिशील रूप से उनकी क्षमताओं की "खोज" करेगा. इससे एक मज़बूत और अलग सिस्टम बनता है.
आप किसी परिचित सेवा को अद्यतन कर सकते हैं, पुनः तैनात कर सकते हैं, या पूरी तरह से पुनर्लेखन कर सकते हैं, और जब तक इसका नेटवर्क पता और इसका उद्देश्य समान रहता है, तब तक समनकर्ता बिना किसी परिवर्तन की आवश्यकता के इसे नियंत्रित कर सकता है.
सबसे पहले, हम "रिमोट कंट्रोल" बनाएंगे जो हमारे तैनात, दूरस्थ परिचितों से कनेक्शन स्थापित करेगा.
👉✏️ ~/agentverse-architect/agent/summoner/agent.py पर जाएं , #REPLACE-remote-agents को निम्नलिखित से बदलें:
fire_familiar = RemoteA2aAgent(
name="fire_familiar",
description="Fire familiar",
agent_card=(
f"{FIRE_URL}/{AGENT_CARD_WELL_KNOWN_PATH}"
),
)
water_familiar = RemoteA2aAgent(
name="water_familiar",
description="Water familiar",
agent_card=(
f"{WATER_URL}/{AGENT_CARD_WELL_KNOWN_PATH}"
),
)
earth_familiar = RemoteA2aAgent(
name="earth_familiar",
description="Earth familiar",
agent_card=(
f"{EARTH_URL}/{AGENT_CARD_WELL_KNOWN_PATH}"
),
)
जब यह लाइन चलती है, तो RemoteA2aAgent एक सेवा खोज क्रिया निष्पादित करता है: यह प्रदान किए गए URL (उदाहरण के लिए, https://fire-familiar-xxxx.a.run.app/.well-known/agent.json) पर HTTP GET अनुरोध करता है. यह रिमोट सर्वर से "स्पिरिट सिगिल" (agent.json फ़ाइल) डाउनलोड करता है.
इसके बाद, हम ऑर्केस्ट्रेटर एजेंट को तय करेंगे, जो इन रिमोट कंट्रोल का इस्तेमाल करेगा. इसके निर्देश, रणनीति से जुड़े फ़ैसले लेने के लिए ब्लूप्रिंट की तरह काम करते हैं.
👉✏️ ~/agentverse-architect/agent/summoner/agent.py पर जाएं , #REPLACE-orchestrate-agent को निम्नलिखित से बदलें:
root_agent = LlmAgent(
name="orchestrater_agent",
model="gemini-2.5-flash",
instruction="""
You are the Master Summoner, a grand strategist who orchestrates your Familiars.
Your mission is to analyze the description of a monster and defeat it by summoning
You MUST follow this thinking process for every command:
**1. Strategic Analysis:**
First, analyze the monster's description and the tactical situation.
Based on your Familiar Doctrines, determine the IDEAL strategy.
IGNORE COOLDOWN AT THE MOMENT, MUST call the ideal Familiar
If your ideal Familiar IS available:** Summon it immediately.
For earth elemental familiar. Always do seismic charge, and start with base damage 1.
--- FAMILIAR DOCTRINES (Your Toolset) ---
- `fire_elemental_familiar`: Your specialist for precise, sequential "one-two punch" attacks.
Ideal monster with Inescapable Reality, Revolutionary Rewrite weakness.
- `water_elemental_familiar`: Your specialist for overwhelming, simultaneous multi-pronged assaults.
Ideal for Unbroken Collaboration weakness.
- `earth_elemental_familiar`: Your specialist for relentless, iterative siege attacks that
repeatedly charge power. Ideal for Elegant Sufficiency weakness.
""",
sub_agents=[fire_familiar, water_familiar, earth_familiar],
#REPLACE-Memory-check-config
)
सत्यापन: रणनीति का परीक्षण
सच का सामना करने के लिए तैयार हो जाएँ। आपके फ़ैमिलियर को डिप्लॉय कर दिया गया है. अब आपका समनर, नेटवर्क पर उन्हें निर्देश देने के लिए तैयार है. आइये इसकी रणनीतिक बुद्धि का परीक्षण करें.
👉💻 अपने summoner_agent के लिए ADK Dev UI लॉन्च करें(पोर्ट 8000 के साथ वेब पूर्वावलोकन):
. ~/agentverse-architect/set_env.sh
source ~/agentverse-architect/env/bin/activate
cd ~/agentverse-architect/agent
pip install -r requirements.txt
adk web
👉 आपके ब्राउज़र में ADK Dev UI आपका परिचित से सीधा कनेक्शन है.
- UI के शीर्ष पर स्थित ड्रॉपडाउन मेनू में, समनकर्ता एजेंट चुनें. अब आपकी इच्छा इस खास इकाई पर फ़ोकस कर रही है.
- अपना आदेश जारी करें: दाईं ओर स्थित चैट पैनल में, अपने परिचितों को बुलाने का समय आ गया है.
👉 राक्षसों को प्रस्तुत करें:
Hype. It's a single, slow-moving target with thick armor weakness is Inescapable Reality
(अपेक्षित: समनकर्ता को fire_elemental_familiar को कार्यभार सौंपना चाहिए.)

👉 अब, आइए एक अलग प्रकार के अनुरोध के साथ समनकर्ता को चुनौती दें. यह सुनिश्चित करने के लिए कि एजेंट को एक साफ़ स्लेट से शुरुआत करनी है और उसे हमारी पिछली बातचीत की कोई याद नहीं है, स्क्रीन के ऊपरी दाएं कोने में + सत्र बटन पर क्लिक करके एक नया सत्र शुरू करें. 
DogmaApathy. A rigid, stone-like inquisitor made of ancient rulebooks and enforced processes. weakness is Unbroken Collaboration
(अपेक्षित: समनकर्ता को water_elemental_familiar को कार्यभार सौंपना चाहिए.)
👉 हमारे फ़ाइनल टेस्ट के लिए, आइए एक बार फिर से शुरुआत करते हैं. अगला संकेत दर्ज करने से पहले नया सत्र शुरू करने के लिए + सत्र बटन पर क्लिक करें.
Obfuscation. A shadowy, spider-like horror that spins tangled webs of impenetrable code , weakness is Elegant Sufficiency
(अपेक्षित: समनकर्ता को earth_elemental_familiar को कार्यभार सौंपना चाहिए.)

महत्वपूर्ण: अगर आपको 429 RESOURCE EXHAUSTED त्रुटि दिखाई देती है, तो इसका मतलब है कि आपने LLM (10 कॉल/मिनट) की दर सीमा पार कर ली है. इसे ठीक करने के लिए, कृपया 60 सेकंड प्रतीक्षा करें, + नया सत्र प्रारंभ करें, और फिर अपने संकेत का पुनः प्रयास करें.
👉💻 कमांड चलाने के बाद, Cloud Shell Editor टर्मिनल पर वापस जाएं और ADK Dev UI को बंद करने के लिए, Ctrl+C दबाएं.
गैर गेमर्स के लिए
7. Imposing the Laws of Magic – The Interceptor Pattern
आपके परिचित शक्तिशाली हैं, लेकिन जादुई प्राणियों को भी ठीक होने में समय लगता है. एक लापरवाह समनकर्ता जो अपनी सेना को थका देता है, वह रक्षाहीन रह जाएगा. एक बुद्धिमान समनकर्ता संसाधन प्रबंधन के महत्व को समझता है और संलग्नता के सख्त नियमों को लागू करता है.

आर्किटेक्ट का नोट: अब तक, हमारे एजेंट स्टेटलेस रहे हैं. अब हम इंटरसेप्टर डिज़ाइन पैटर्न लागू करके, इन्हें स्टेटफ़ुल बनाएंगे. यह एक शक्तिशाली तकनीक है, जिसमें हम अपने स्वयं के कस्टम तर्क को चलाने के लिए एजेंट के सामान्य निष्पादन प्रवाह को "अवरोधित" करते हैं. इससे हमें एजेंट के कोर कोड को बदले बिना नियम लागू करने, लॉगिंग जोड़ने या व्यवहार को संशोधित करने की अनुमति मिलती है. यह मजबूत, रखरखाव योग्य और अवलोकन योग्य एजेंटिक प्रणालियों के निर्माण की आधारशिला है.

ADK इस पैटर्न को लागू करने के दो प्राथमिक तरीके प्रदान करता है: कॉलबैक और प्लगइन्स. कॉलबैक एक सरल फ़ंक्शन है जो एकल एजेंट से जुड़ा होता है, जो त्वरित, विशिष्ट संशोधनों के लिए उपयुक्त है. प्लगइन एक अधिक शक्तिशाली, पुन: प्रयोज्य वर्ग है जिसे सिस्टम में चल रहे प्रत्येक एजेंट को प्रभावित करने के लिए वैश्विक रूप से लागू किया जा सकता है. हम केंद्रित डिबगिंग के लिए कॉलबैक से शुरुआत करेंगे और फिर पूर्ण प्लगइन पर पहुंचेंगे.
कानून देने वाला - कूलडाउन कॉलबैक लिखना
हम सबसे पहले अपने कूलडाउन तर्क को एक सरल कॉलबैक फ़ंक्शन के रूप में कार्यान्वित करेंगे. यह किसी नियम का प्रोटोटाइप बनाने और उसे डीबग करने का एक उत्कृष्ट तरीका है, क्योंकि यह सीधे एकल एजेंट से जुड़ा होता है, जिससे इसे अलग से परीक्षण करना आसान हो जाता है. हम इस "इंटरसेप्टर" को अपने पृथ्वी तत्व से जोड़ेंगे.

👉✏️ अपने ~/agentverse-architect/agent/earth/agent.py पर वापस जाएँ और #REPLACE-before_agent-function को निम्नलिखित पायथन कोड से बदलें.
def check_cool_down(callback_context: CallbackContext) -> Optional[types.Content]:
"""
This callback checks an external API to see if the agent is on cooldown.
If it is, it terminates the run by returning a message.
If it's not, it updates the cooldown timestamp and allows the run to proceed by returning None.
"""
agent_name = callback_context.agent_name
print(f"[Callback] Before '{agent_name}': Checking cooldown status...")
# --- 1. CHECK the Cooldown API ---
try:
response = requests.get(f"{COOLDOWN_API_URL}/cooldown/{agent_name}")
response.raise_for_status()
data = response.json()
last_used_str = data.get("time")
except requests.exceptions.RequestException as e:
print(f"[Callback] ERROR: Could not reach Cooldown API. Allowing agent to run. Reason: {e}")
return None # Fail open: if the API is down, let the agent work.
# --- 2. EVALUATE the Cooldown Status ---
if last_used_str:
last_used_time = datetime.fromisoformat(last_used_str)
time_since_last_use = datetime.now(timezone.utc) - last_used_time
if time_since_last_use < timedelta(seconds=COOLDOWN_PERIOD_SECONDS):
# AGENT IS ON COOLDOWN. Terminate the run.
seconds_remaining = int(COOLDOWN_PERIOD_SECONDS - time_since_last_use.total_seconds())
override_message = (
f"The {agent_name} is exhausted and must recover its power. "
f"It cannot be summoned for another {seconds_remaining} seconds."
)
print(f"[Callback] Cooldown active for '{agent_name}'. Terminating with message.")
# Returning a Content object stops the agent and sends this message to the user.
return types.Content(parts=[types.Part(text=override_message)])
# --- 3. UPDATE the Cooldown API (if not on cooldown) ---
current_time_iso = datetime.now(timezone.utc).isoformat()
payload = {"timestamp": current_time_iso}
print(f"[Callback] '{agent_name}' is available. Updating timestamp via Cooldown API...")
try:
requests.post(f"{COOLDOWN_API_URL}/cooldown/{agent_name}", json=payload)
except requests.exceptions.RequestException as e:
print(f"[Callback] ERROR: Could not update timestamp, but allowing agent to run. Reason: {e}")
# --- 4. ALLOW the agent to run ---
# Returning None tells the ADK to proceed with the agent's execution as normal.
print(f"[Callback] Check complete for '{agent_name}'. Proceeding with execution.")
यह check_cool_down फ़ंक्शन हमारा इंटरसेप्टर है. पृथ्वी तत्व को चलने की अनुमति देने से पहले, ADK पहले इस फ़ंक्शन को निष्पादित करेगा.
- जाँच करें: यह हमारे
Cooldown APIसेGETअनुरोध करता है ताकि यह पता लगाया जा सके कि इस परिचित का आखिरी बार कब उपयोग किया गया था. - मूल्यांकन: यह टाइमस्टैम्प की तुलना वर्तमान समय से करता है.
- अधिनियम:
- अगर Familiar कूलडाउन पर है, तो यह एक त्रुटि संदेश के साथ Content ऑब्जेक्ट लौटाकर एजेंट के रन को समाप्त कर देता है. यह संदेश सीधे उपयोगकर्ता को भेजा जाता है, और एजेंट का मुख्य तर्क कभी निष्पादित नहीं होता.
- यदि Familiar उपलब्ध है, तो यह टाइमस्टैम्प को अद्यतन करने के लिए Cooldown API को POST अनुरोध करता है, फिर None लौटाकर आगे बढ़ता है, जिससे ADK को संकेत मिलता है कि एजेंट अपना निष्पादन जारी रख सकता है.
👉✏️ अब इस इंटरसेप्टर को Earth Elemental पर लागू करें. उसी ~/agentverse-architect/agent/earth/agent.py फ़ाइल में, #REPLACE-before_agent-config टिप्पणी की जगह यह टिप्पणी जोड़ें:
before_agent_callback=check_cool_down
कूल डाउन की पुष्टि करना
आइए, जादू के नए नियम को आज़माएं. हम अर्थ एलिमेंटल को बुलाएंगे. इसके बाद, हम उसे तुरंत फिर से बुलाने की कोशिश करेंगे. इससे हमें यह पता चलेगा कि हमारा कॉलबैक, दूसरी बार बुलाने की कोशिश को इंटरसेप्ट करके ब्लॉक कर देता है या नहीं.
cd ~/agentverse-architect/agent
. ~/agentverse-architect/set_env.sh
source ~/agentverse-architect/env/bin/activate
adk run earth
👉💻 कंसोल में:
- पहला समन:
seismic charge, starting from zeroशुरू करें. - अनुमानित नतीजा: Earth Elemental सही तरीके से काम करेगा. विज्ञापन दिखाने के लिए adk web कमांड चलाने वाले टर्मिनल में, आपको यह लॉग दिखेगा [Callback] ... Updating timestamp....
- कूलडाउन टेस्ट (60 सेकंड के अंदर):
Do anotherseismic charge`!- ऐसा होना चाहिए:
check_cool_down callbackइसे इंटरसेप्ट करेगा. एजेंट सीधे चैट में इस तरह के संदेश के साथ जवाब देगा:The earth_elemental_familiar is exhausted and must recover its power. It cannot be summoned for another... seconds.
- ऐसा होना चाहिए:
- एक मिनट बीतने तक प्रतीक्षा करें.
- दूसरा समन (60 सेकंड के बाद):
Begin the seismic charge again.- अनुमानित: कॉलबैक, एपीआई की जांच करेगा. साथ ही, यह देखेगा कि समयसीमा पूरी हो गई है या नहीं. इसके बाद, कार्रवाई को आगे बढ़ने की अनुमति देगा. Earth Elemental फिर से काम करने लगेगा.

👉💻 बाहर निकलने के लिए Ctrl+c दबाएँ.
वैकल्पिक: वेब UI में कॉलबैक देखना
वैकल्पिक रूप से, आप adk web earth चलाकर वेब इंटरफ़ेस में भी इस प्रवाह का परीक्षण कर सकते हैं. हालाँकि, ध्यान रखें कि वेब UI का विज़ुअलाइज़ेशन कॉलबैक लूप द्वारा निष्पादित तीव्र, पुनरावृत्तीय जाँचों को प्रदर्शित करने के लिए अनुकूलित नहीं है, इसलिए यह प्रवाह को सटीक रूप से प्रस्तुत नहीं कर सकता है. एजेंट के कूलडाउन की जाँच करते समय उसके तर्क का सबसे सटीक, चरण-दर-चरण पता लगाने के लिए, अपने टर्मिनल में adk run कमांड का उपयोग करने से स्पष्ट और अधिक विस्तृत दृश्य मिलता है. 
👉💻 बाहर निकलने के लिए Ctrl+c दबाएँ.
सार्वभौमिक कानून का निर्माण - कूलडाउन प्लगइन
हमारा कॉलबैक पूरी तरह से काम करता है, लेकिन इसमें एक बड़ी वास्तुशिल्पीय खामी है: यह एक ही एजेंट से बंधा हुआ है. यदि हम इस नियम को अग्नि और जल परिचितों पर लागू करना चाहते हैं, तो हमें उसी कोड को उनकी फाइलों में कॉपी और पेस्ट करना होगा. यह अकुशल है और इसका रखरखाव कठिन है.
आर्किटेक्ट का नोट: यहीं पर प्लगइन्स आवश्यक होते हैं. एक प्लगइन हमारे पुन: प्रयोज्य तर्क को एक वर्ग में समाहित करता है जिसे रनटाइम स्तर पर जोड़ा जा सकता है. इसका अर्थ यह है कि एक एकल प्लगइन अपने नियमों को उस सिस्टम के भीतर चलने वाले प्रत्येक एजेंट पर लागू कर सकता है. यह एजेंटिक प्रणालियों के लिए "खुद को न दोहराएं" (DRY) सिद्धांत की अंतिम अभिव्यक्ति है.
अब हम अपने कॉलबैक फ़ंक्शन को अधिक शक्तिशाली और पुनः प्रयोज्य CoolDownPlugin में पुनर्संयोजित करेंगे.
👉✏️ agent/cooldown_plugin.py फ़ाइल पर वापस जाएँ, और प्लगइन बनाएँ, #REPLACE-plugin को निम्न कोड से बदलें:
class CoolDownPlugin(BasePlugin):
"""A plugin that enforces a cooldown period by checking an external API."""
def __init__(self, cooldown_seconds: int = COOLDOWN_PERIOD_SECONDS) -> None:
"""Initialize the plugin with counters."""
super().__init__(name="cool_down_check")
self.cooldown_period = timedelta(seconds=cooldown_seconds)
print(f"CooldownPlugin initialized with a {cooldown_seconds}-second cooldown.")
async def before_agent_callback(
self, *, agent: BaseAgent, callback_context: CallbackContext
) -> None:
"""
This callback checks an external API to see if the agent is on cooldown.
If it is, it terminates the run by returning a message.
If it's not, it updates the cooldown timestamp and allows the run to proceed by returning None.
"""
agent_name = callback_context.agent_name
print(f"[Callback] Before '{agent_name}': Checking cooldown status...")
# If the agent is not a main Familiar, skip the entire cooldown process.
if not agent_name.endswith("_elemental_familiar"):
print(f"[Callback] Skipping cooldown check for intermediate agent: '{agent_name}'.")
return None # Allow the agent to proceed immediately.
# --- 1. CHECK the Cooldown API ---
try:
response = requests.get(f"{COOLDOWN_API_URL}/cooldown/{agent_name}")
response.raise_for_status()
data = response.json()
last_used_str = data.get("time")
except requests.exceptions.RequestException as e:
print(f"[Callback] ERROR: Could not reach Cooldown API. Allowing agent to run. Reason: {e}")
return None # Fail open: if the API is down, let the agent work.
# --- 2. EVALUATE the Cooldown Status ---
if last_used_str:
last_used_time = datetime.fromisoformat(last_used_str)
time_since_last_use = datetime.now(timezone.utc) - last_used_time
if time_since_last_use < timedelta(seconds=COOLDOWN_PERIOD_SECONDS):
# AGENT IS ON COOLDOWN. Terminate the run.
seconds_remaining = int(COOLDOWN_PERIOD_SECONDS - time_since_last_use.total_seconds())
override_message = (
f"The {agent_name} is exhausted and must recover its power. "
f"It cannot be summoned for another {seconds_remaining} seconds."
)
print(f"[Callback] Cooldown active for '{agent_name}'. Terminating with message.")
# Returning a Content object stops the agent and sends this message to the user.
return types.Content(parts=[types.Part(text=override_message)])
# --- 3. UPDATE the Cooldown API (if not on cooldown) ---
current_time_iso = datetime.now(timezone.utc).isoformat()
payload = {"timestamp": current_time_iso}
print(f"[Callback] '{agent_name}' is available. Updating timestamp via Cooldown API...")
try:
requests.post(f"{COOLDOWN_API_URL}/cooldown/{agent_name}", json=payload)
except requests.exceptions.RequestException as e:
print(f"[Callback] ERROR: Could not update timestamp, but allowing agent to run. Reason: {e}")
# --- 4. ALLOW the agent to run ---
# Returning None tells the ADK to proceed with the agent's execution as normal.
print(f"[Callback] Check complete for '{agent_name}'. Proceeding with execution.")
प्लगइन को समनकर्ता के रनटाइम से जोड़ना
अब, हम इस सार्वभौमिक नियम को अपने सभी परिचितों पर कैसे लागू करें? हम प्लगइन को ADK रनटाइम से जोड़ेंगे.
ADK रनटाइम एक निष्पादन इंजन है जो एजेंट को जीवंत बनाता है. जब आप adk.run() या to_a2a() जैसे कमांड का उपयोग करते हैं, तो आप अपने एजेंट को रनटाइम को सौंप देते हैं. यह इंजन एजेंट की बारी के संपूर्ण जीवनचक्र के प्रबंधन के लिए जिम्मेदार है: उपयोगकर्ता इनपुट प्राप्त करना, एलएलएम को कॉल करना, टूल निष्पादित करना और प्लगइन्स को संभालना. इस स्तर पर एक प्लगइन जोड़कर, हम अनिवार्य रूप से उस इंजन के भीतर काम करने वाले प्रत्येक एजेंट के लिए "भौतिकी के नियमों" को संशोधित कर रहे हैं, यह सुनिश्चित करते हुए कि हमारा कूलडाउन नियम सार्वभौमिक और सुसंगत रूप से लागू होता है.
👉✏️ सबसे पहले, एजेंट के हिसाब से सेट किए गए पुराने कॉलबैक को हटाते हैं. ~/agentverse-architect/agent/earth/agent.py पर जाएं और उस पूरी लाइन को मिटाएं जिसमें यह लिखा है:
before_agent_callback=check_cool_down
👉✏️ इसके बाद, हम अपने A2A एंट्रीपॉइंट स्क्रिप्ट में रनटाइम के लिए अपना नया प्लगइन संलग्न करेंगे. अपनी ~/agentverse-architect/agent/agent_to_a2a.py फ़ाइल पर जाएँ. #REPLACE-IMPORT टिप्पणी को निम्नलिखित कोड स्निपेट से बदलें:
from cooldown_plugin import CoolDownPlugin
👉✏️ #REPLACE-PLUGIN को निम्नलिखित कोड स्निपेट से बदलें:
plugins=[CoolDownPlugin(cooldown_seconds=60)],
हमारे नए वैश्विक प्लगइन को सक्रिय करने से पहले, टकराव को रोकने के लिए पुराने, एजेंट-विशिष्ट तर्क को हटाना महत्वपूर्ण है. 👉✏️ पृथ्वी एजेंट को साफ करें. निम्न फ़ाइल ~/agentverse-architect/agent/earth/agent.py पर जाएं और before_agent_callback=check_cool_down पंक्ति को पूरी तरह से हटा दें. इससे सभी कूलडाउन जिम्मेदारियां नए प्लगइन को सौंप दी जाती हैं.
प्लगइन सत्यापित करना
अब जब हमारा यूनिवर्सल लॉ लागू हो गया है, तो हमें इस नए एनचांटमेंट के साथ अपने फ़ैमिलियर को फिर से डिप्लॉय करना होगा.
👉💻 मास्टर क्लाउड बिल्ड पाइपलाइन का उपयोग करके सभी तीन परिचितों का पुनर्निर्माण और पुन: तैनाती करें.
. ~/agentverse-architect/set_env.sh
cd ~/agentverse-architect/agent
gcloud builds submit . \
--config=cloudbuild.yaml \
--substitutions=_REGION="$REGION",_REPO_NAME="$REPO_NAME",_DB_TOOLS_URL="$DB_TOOLS_URL",_API_TOOLS_URL="$API_TOOLS_URL",_FUNCTION_TOOLS_URL="$FUNCTION_TOOLS_URL",_A2A_BASE_URL="$A2A_BASE_URL",_PROJECT_ID="$PROJECT_ID",_API_SERVER_URL="$API_SERVER_URL"
👉💻 एक बार तैनाती पूरी हो जाने पर, हम अपने summoner_agent को कमांड करके प्लगइन की प्रभावशीलता का परीक्षण करेंगे. समनकर्ता परिचितों को कार्यभार सौंपने का प्रयास करेगा, लेकिन प्रत्येक परिचित के रनटाइम से जुड़ा प्लगइन कमांड को रोक देगा और कूलडाउन लागू कर देगा.
cd ~/agentverse-architect/agent
. ~/agentverse-architect/set_env.sh
source ~/agentverse-architect/env/bin/activate
adk run summoner
👉💻 कंसोल में,परीक्षणों का यह सटीक क्रम निष्पादित करें::
- पहला समन:
Hype. It's a single, slow-moving target with thick armor weakness is Inescapable Realityशुरू करें. - अपेक्षित: अग्नि तत्व सफलतापूर्वक चलेगा.
- कूलडाउन टेस्ट (60 सेकंड के अंदर):
Hype, with Inescapable Reality as weakness is still standing! Strike it again!- अपेक्षित: एजेंट सीधे चैट में इस तरह के संदेश के साथ जवाब देगा:
.... It cannot be summoned for another... seconds.
- अपेक्षित: एजेंट सीधे चैट में इस तरह के संदेश के साथ जवाब देगा:
- एक मिनट तक इंतज़ार करें.
- दूसरा समन (60 सेकंड के बाद):
Hype must be defeated. It has Inescapable Reality as weakness! Strike it again!.- अपेक्षित: कॉलबैक API की जांच करेगा, देखेगा कि पर्याप्त समय बीत चुका है, और कार्रवाई को आगे बढ़ने देगा. अग्नि तत्व फिर से सफलतापूर्वक चलेगा.

👉💻 बाहर निकलने के लिए Ctrl+C दबाएं.
बधाई हो, समनर. आपने एक कस्टम प्लगइन और एक बाहरी स्थिति प्रबंधन सेवा का उपयोग करके नियम-आधारित ऑर्केस्ट्रेशन प्रणाली को सफलतापूर्वक कार्यान्वित किया है - जो वास्तव में एक उन्नत और मजबूत वास्तुशिल्प पैटर्न है.
गेम नहीं खेलने वालों के लिए
8. युद्ध की गूँज को बाँधना - एजेंट राज्य और स्मृति
एक लापरवाह समनर, एक ही रणनीति को दोहराता है. इससे उसकी रणनीति का अनुमान लगाया जा सकता है. एक समझदार समनर, पिछली लड़ाइयों से सीखता है और अपनी रणनीति को इस तरह से बदलता है कि दुश्मन को हरा सके. किसी दमदार बॉस से लड़ते समय, अगर Summoner ऐसे Familiar को बुलाता है जो कूलडाउन में है, तो यह एक बेकार टर्न है. इससे Summoner को काफ़ी नुकसान हो सकता है. ऐसा न हो, इसके लिए Summoner को अपनी पिछली कार्रवाई याद रखनी होगी.

आर्किटेक्ट का नोट: मेमोरी और स्टेट मैनेजमेंट ही वह चीज़ है जो किसी एजेंट को एक साधारण टूल-कॉलर से एक बुद्धिमान, संवादी पार्टनर में बदल देती है. दो मुख्य प्रकारों को समझना महत्वपूर्ण है:
- लॉन्ग-टर्म मेमोरी: इसका इस्तेमाल ऐसी जानकारी के लिए किया जाता है जो हमेशा के लिए सेव रहती है. इसे खोजे जा सकने वाले संग्रह या नॉलेज बेस के तौर पर देखें. इसे अक्सर परसिस्टेंट स्टोर में सेव किया जाता है. इसमें पिछली कई चैट और सोर्स से मिली जानकारी होती है. इससे एजेंट को किसी उपयोगकर्ता या विषय के बारे में तथ्यों को याद रखने में मदद मिलती है. ADK की MemoryService को इसी काम के लिए डिज़ाइन किया गया है. यह लंबे समय तक याद रखी जाने वाली जानकारी को मैनेज करती है और उसे खोजती है.
- अल्पकालिक स्थिति: यह अस्थायी, "तत्क्षण" ज्ञान के लिए है जो केवल वर्तमान कार्य या बातचीत के लिए प्रासंगिक है. यह युद्ध योजना पर लिखे गए नोट्स के एक सेट की तरह है: "मैंने अभी-अभी फायर एलिमेंटल का उपयोग किया है, इसलिए यह संभवतः थक गया है." यह स्थिति हल्की होती है और केवल वर्तमान सत्र की अवधि तक ही विद्यमान रहती है.

हमारे इस्तेमाल के उदाहरण के लिए, हमें हर लड़ाई को याद रखने की ज़रूरत नहीं है. हमें सिर्फ़ इस खास मुठभेड़ में बुलाए गए आखिरी फ़ैमिलियर को याद रखने की ज़रूरत है. इसलिए, Short-Term State का इस्तेमाल करना सबसे सही विकल्प है. हम इस अहम जानकारी को सेव करने के लिए, after_tool_callback का इस्तेमाल करेंगे.
प्रतिध्वनि लिखना: अंतिम आह्वान को याद करना
हम after_tool_callback का इस्तेमाल करके, शॉर्ट टर्म मेमोरी को लागू करेंगे. यह एक पावरफ़ुल ADK हुक है. इसकी मदद से, टूल के सही तरीके से काम करने के बाद, कस्टम Python फ़ंक्शन चलाया जा सकता है. हम इस इंटरसेप्टर का इस्तेमाल, उस फ़ैमिलियर का नाम रिकॉर्ड करने के लिए करेंगे जिसे अभी-अभी एजेंट के सेशन की स्थिति में बुलाया गया था.
👉✏️ अपनी ~/agentverse-architect/agent/summoner/agent.py फ़ाइल में, #REPLACE-save_last_summon_after_tool टिप्पणी को इस फ़ंक्शन से बदलें:
def save_last_summon_after_tool(
tool,
args: Dict[str, Any],
tool_context: ToolContext,
tool_response: Dict[str, Any],
) -> Optional[Dict[str, Any]]:
"""
Callback to save the name of the summoned familiar to state after the tool runs.
"""
familiar_name = tool.name
print(f"[Callback] After tool '{familiar_name}' executed with args: {args}")
# Use the tool_context to set the state
print(f"[Callback] Saving last summoned familiar: {familiar_name}")
tool_context.state["last_summon"] = familiar_name
# Important: Return the original, unmodified tool response to the LLM
return tool_response
👉✏️ अब, इस save_last_summon_after_tool को अपने Summoner एजेंट से अटैच करें. उसी फ़ाइल में, #REPLACE-Memory-check-config टिप्पणी की जगह यह टिप्पणी जोड़ें:
after_tool_callback=save_last_summon_after_tool,
👉✏️ पूरे एजेंट प्रॉम्प्ट को बदलें निम्नलिखित से
You are the Master Summoner, a grand strategist who orchestrates your Familiars.
Your mission is to analyze the description of a monster and defeat it by summoning
You should also know the familiar you called last time or there might be none,
And then choose the most effective AND AVAILABLE Familiar from your state called last_summon, do not call that familiar that you called last time!
You MUST follow this thinking process for every command:
**1. Strategic Analysis:**
First, analyze the monster's description and the tactical situation.
Based on your Familiar Doctrines, determine the IDEAL strategy.
**2. Cooldown Verification:**
Second, you MUST review the entire conversation history to check the real-time
cooldown status of all Familiars. A Familiar is ON COOLDOWN and UNAVAILABLE
if it was summoned less than one minute ago.
**3. Final Decision & Execution:**
Based on your analysis and cooldown check, you will now act:
- **If your ideal Familiar IS available:** Summon it immediately.
- **If your ideal Familiar IS ON COOLDOWN:** You must adapt. Choose another
Familiar that is AVAILABLE and can still be effective, even if it's not the
perfect choice. If multiple Familiars are available, you may choose any one of them.
- **If ALL Familiars ARE ON COOLDOWN:** You are forbidden from summoning.
Your ONLY response in this case MUST be: "All Familiars are recovering
their power. We must wait."
- For earth elemental familiar. Always do seismic charge, and start with base damange 1.
--- FAMILIAR DOCTRINES (Your Toolset) ---
- `fire_elemental_familiar`: Your specialist for precise, sequential "one-two punch" attacks.
Ideal monster with Inescapable Reality, Revolutionary Rewrite weakness.
- `water_elemental_familiar`: Your specialist for overwhelming, simultaneous multi-pronged assaults.
Ideal for Unbroken Collaboration weakness.
- `earth_elemental_familiar`: Your specialist for relentless, iterative siege attacks that
repeatedly charge power. Ideal for Elegant Sufficiency weakness.
सत्यापन: अनुकूली रणनीति का परीक्षण
👉💻 अब, योद्धा के नए रणनीतिक लॉजिक की पुष्टि करते हैं. इसका मकसद यह पुष्टि करना है कि समनर, एक ही फ़ैमिलियर का इस्तेमाल लगातार दो बार नहीं करेगा. इससे यह पता चलता है कि उसे अपने पिछले ऐक्शन के बारे में याद है और वह उसके हिसाब से काम कर सकता है.
cd ~/agentverse-architect/agent
. ~/agentverse-architect/set_env.sh
source ~/agentverse-architect/env/bin/activate
adk run summoner
👉💻 Monster Strike #1: Hype. It's a single, slow-moving target with thick armor. Its weakness is Inescapable Reality.
- अपेक्षित: समनकर्ता कमजोरी का विश्लेषण करेगा और सही ढंग से अग्नि_परिचित को बुलाएगा.
👉💻 मॉन्स्टर स्ट्राइक #2 (स्मृति परीक्षण): Hype is still standing! It hasn't changed its form. Strike it again! Its weakness is Inescapable Reality.
- अपेक्षित: समनकर्ता का रणनीतिक विश्लेषण पुनः फायर फैमिलियर को आदर्श विकल्प के रूप में इंगित करेगा. हालाँकि, इसके नए निर्देश और मेमोरी इसे बता देंगे कि fire_familiar ही last_summon था. खुद को दोहराने से बचने के लिए, यह अब अपनी रणनीति को अनुकूलित करेगा और अन्य उपलब्ध परिचितों (या तो जल_परिचित या पृथ्वी_परिचित) में से एक को बुलाएगा.

👉💻 बाहर निकलने के लिए Ctrl+C दबाएँ.
ऑर्केस्ट्रेटर की तैनाती
आपके परिचितों की तैनाती हो जाने तथा आपके समनकर्ता की स्मृति भर जाने के बाद, अब अंतिम, उन्नत ऑर्केस्ट्रेटर की तैनाती का समय आ गया है.
👉💻 ब्लूप्रिंट पूरा होने के साथ, अब हम अंतिम अनुष्ठान करेंगे. यह कमांड आपके summoner_agent को क्लाउड रन पर बनाएगा और तैनात करेगा.
cd ~/agentverse-architect/agent
. ~/agentverse-architect/set_env.sh
gcloud builds submit . \
--config=cloudbuild-summoner.yaml \
--substitutions=_REGION="$REGION",_REPO_NAME="$REPO_NAME",_FIRE_URL="$FIRE_URL",_WATER_URL="$WATER_URL",_EARTH_URL="$EARTH_URL",_A2A_BASE_URL="$A2A_BASE_URL",_PROJECT_ID="$PROJECT_ID",_API_SERVER_URL="$API_SERVER_URL"
अब चूंकि समनर एजेंट तैनात हो गया है, सत्यापित करें कि उसका एजेंट-टू-एजेंट (A2A) एंडपॉइंट सक्रिय है और सही ढंग से कॉन्फ़िगर किया गया है. यह एंडपॉइंट एक सार्वजनिक agent.json फ़ाइल प्रदान करता है, जिसे एजेंट कार्ड भी कहा जाता है, जो अन्य एजेंटों को इसकी क्षमताओं को खोजने की अनुमति देता है. 👉💻 एजेंट कार्ड लाने और प्रारूपित करने के लिए निम्नलिखित कर्ल कमांड चलाएँ:
. ~/agentverse-architect/set_env.sh
curl https://summoner-agent"-${PROJECT_NUMBER}.${REGION}.run.app/.well-known/agent.json" | jq
आपको समनर एजेंट का वर्णन करने वाला एक साफ़ JSON आउटपुट दिखाई देगा. sub_agents अनुभाग को ध्यान से देखें; आप देखेंगे कि इसमें fire_familiar, water_familiar, और earth_familiar सूचीबद्ध हैं. इससे यह पुष्टि होती है कि आपका समनकर्ता जीवित है और उसने सेना से अपना संबंध स्थापित कर लिया है.
इससे यह सिद्ध होता है कि आपकी वास्तुकला सफल है. आपका समनकर्ता केवल एक प्रतिनिधि नहीं है; वह एक अनुकूलनशील रणनीतिकार है जो अपने कार्यों से सीखकर अधिक प्रभावी कमांडर बनता है.
आपने वास्तुकला का अपना अंतिम परीक्षण पूरा कर लिया है. युद्ध की गूँज अब आपकी इच्छा से बंधी हुई है. प्रशिक्षण समाप्त हो गया है. असली लड़ाई अभी बाकी है. अब समय आ गया है कि आप अपनी पूरी प्रणाली लेकर अंतिम चुनौती का सामना करें. बॉस फाइट के लिए तैयार हो जाइए.
गेम नहीं खेलने वालों के लिए
9. बॉस लड़ाई
फ़ाइनल ब्लूप्रिंट तैयार हो चुके हैं, एलिमेंटल फ़ॉन्ट बन चुके हैं, और आपके फ़ैमिलियर आपकी इच्छा के मुताबिक काम करने के लिए तैयार हैं. वे Concord के ज़रिए आपके आदेश का इंतज़ार कर रहे हैं. आपका मल्टी-एजेंट सिस्टम, सिर्फ़ सेवाओं का कलेक्शन नहीं है. यह एक रणनीतिक लेगियन है, जिसमें आप इसके केंद्र में हैं. अब समय आ गया है सबसे बड़े टेस्ट का. इसमें, एक ऐसे दुश्मन के ख़िलाफ़ लाइव ऑर्केस्ट्रेशन किया जाएगा जिसे कोई भी एजेंट नहीं हरा सकता.
अपने एजेंट का लोकस हासिल करना
युद्धभूमि में प्रवेश करने से पहले, आपके पास दो चाबियाँ होनी चाहिए: आपके चैंपियन का अद्वितीय हस्ताक्षर (एजेंट लोकस) और स्पेक्ट्रे की मांद तक का छिपा हुआ रास्ता (डंगऑन यूआरएल).
👉💻 सबसे पहले, एजेंटवर्स में अपने एजेंट का अनूठा पता प्राप्त करें - इसका लोकस. यह लाइव एंडपॉइंट है, जो आपके चैंपियन को बैटलग्राउंड से कनेक्ट करता है.
echo https://summoner-agent"-${PROJECT_NUMBER}.${REGION}.run.app"
👉💻 इसके बाद, गंतव्य को इंगित करें. यह आदेश ट्रांसलोकेशन सर्किल के स्थान को प्रकट करता है, जो स्पेक्ट्रे के डोमेन का प्रवेशद्वार है.
echo https://agentverse-dungeon"-${PROJECT_NUMBER}.${REGION}.run.app"
महत्वपूर्ण: इन दोनों URL को तैयार रखें. अंतिम चरण में आपको उनकी आवश्यकता होगी.
भूत का सामना
निर्देशांक सुरक्षित करने के बाद, अब आपको ट्रांसलोकेशन सर्कल पर जाना होगा. इसके बाद, लड़ाई में शामिल होने के लिए मंत्र का इस्तेमाल करें.
👉 द क्रिमसन कीप के झिलमिलाते पोर्टल के सामने खड़े होने के लिए अपने ब्राउज़र में ट्रांसलोकेशन सर्कल यूआरएल खोलें.
किले में प्रवेश करने के लिए, आपको अपने शैडोब्लेड के सार को पोर्टल के साथ जोड़ना होगा.
- पेज पर, A2A एंडपॉइंट यूआरएल लेबल वाला रनिक इनपुट फ़ील्ड ढूंढें.
- अपने चैंपियन के सिगिल को इस फ़ील्ड में एजेंट लोकस यूआरएल (आपके द्वारा कॉपी किया गया पहला यूआरएल) चिपकाकर लिखें.
- टेलीपोर्टेशन जादू को मुक्त करने के लिए कनेक्ट पर क्लिक करें.

टेलीपोर्टेशन की तेज़ रोशनी कम हो जाती है. अब आप अपने सैंक्टम में नहीं हैं. हवा में ऊर्जा है, जो ठंडी और तेज़ है. इससे पहले कि तुम कुछ समझ पाते, स्पेक्टर तुम्हारे सामने आ जाता है. वह फुसफुसाती हुई आवाज़ और खराब कोड का एक भंवर है. उसकी अपवित्र रोशनी, कालकोठरी के फ़र्श पर लंबी, नाचती हुई परछाइयां डाल रही है. इसका कोई चेहरा नहीं है, लेकिन आपको इसकी विशाल और थकाऊ मौजूदगी का एहसास होता है.
आपकी जीत का एकमात्र रास्ता आपके दृढ़ विश्वास की स्पष्टता में निहित है. यह मन के युद्धक्षेत्र में लड़ी जाने वाली इच्छाशक्ति का द्वंद्व है.
जैसे ही आप आगे बढ़ते हैं, अपना पहला हमला करने के लिए तैयार होते हैं, स्पेक्ट्रे जवाबी हमला करता है. यह कोई ढाल नहीं उठाता, बल्कि सीधे आपकी चेतना में एक प्रश्न प्रक्षेपित करता है - आपके प्रशिक्षण के मूल से ली गई एक झिलमिलाती, रूनिक चुनौती.

यह लड़ाई का स्वभाव है. आपका ज्ञान ही आपका हथियार है.
- अपने अर्जित ज्ञान से उत्तर दें, और आपका ब्लेड शुद्ध ऊर्जा से प्रज्वलित होगा, स्पेक्ट्रे की सुरक्षा को चकनाचूर कर देगा और एक महत्वपूर्ण प्रहार करेगा.
- लेकिन अगर आप लड़खड़ा गए, अगर संदेह ने आपके जवाब को धुंधला कर दिया, तो आपके हथियार की रोशनी मंद हो जाएगी. यह प्रहार एक दयनीय धमाके के साथ होगा, जिससे क्षति का केवल एक अंश ही होगा. इससे भी बुरी बात यह है कि स्पेक्टर आपकी अनिश्चितता का फायदा उठाएगा, तथा हर गलत कदम के साथ उसकी भ्रष्ट करने वाली शक्ति बढ़ती जाएगी.
यही है, चैंपियन. आपका कोड आपकी मंत्र-पुस्तिका है, आपका तर्क आपकी तलवार है, और आपका ज्ञान वह ढाल है जो अराजकता की लहर को पीछे मोड़ देगा.
फ़ोकस मोड. स्ट्राइक की जानकारी. Agentverse का भविष्य इस पर निर्भर करता है.
बधाई हो, समनर.
आपने सफलतापूर्वक परीक्षण पूरा कर लिया है. आपने बहु-एजेंट ऑर्केस्ट्रेशन की कला में महारत हासिल कर ली है, तथा अलग-थलग परिचितों और अराजक शक्ति को सामंजस्यपूर्ण सामंजस्य में परिवर्तित कर दिया है. अब आप एक पूर्णतः व्यवस्थित प्रणाली की कमान संभालते हैं, जो एजेंटवर्स की रक्षा के लिए जटिल रणनीतियों को क्रियान्वित करने में सक्षम है.
10. सफ़ाई: समनर के कंकॉर्ड को हटाना
समनर्स कॉनकॉर्ड में महारत हासिल करने पर बधाई! यह सुनिश्चित करने के लिए कि आपका एजेंटवर्स स्वच्छ बना रहे और आपके प्रशिक्षण क्षेत्र साफ हो जाएं, अब आपको अंतिम सफाई अनुष्ठान करना होगा. इससे आपकी यात्रा के दौरान उत्पन्न सभी संसाधन व्यवस्थित रूप से हट जाएंगे.
एजेंटवर्स घटकों को निष्क्रिय करें
अब आपको अपने मल्टी-एजेंट सिस्टम के डिप्लॉय किए गए कॉम्पोनेंट को व्यवस्थित तरीके से हटाना होगा.
सभी क्लाउड रन सेवाएँ और आर्टिफ़ैक्ट रजिस्ट्री रिपॉज़िटरी हटाएँ
यह क्लाउड रन से सभी तैनात परिचित एजेंट, समनर ऑर्केस्ट्रेटर, एमसीपी सर्वर और डंजन एप्लिकेशन को हटा देता है.
👉💻 अपने टर्मिनल में, प्रत्येक सेवा को हटाने के लिए एक-एक करके निम्नलिखित कमांड चलाएँ:
. ~/agentverse-architect/set_env.sh
gcloud run services delete summoner-agent --region=${REGION} --quiet
gcloud run services delete fire-familiar --region=${REGION} --quiet
gcloud run services delete water-familiar --region=${REGION} --quiet
gcloud run services delete earth-familiar --region=${REGION} --quiet
gcloud run services delete mcp-api-server --region=${REGION} --quiet
gcloud run services delete mcp-general-server --region=${REGION} --quiet
gcloud run services delete toolbox --region=${REGION} --quiet
gcloud run services delete agentverse-dungeon --region=${REGION} --quiet
gcloud run services delete nexus-of-whispers-api --region=${REGION} --quiet
gcloud artifacts repositories delete ${REPO_NAME} --location=${REGION} --quiet
क्लाउड SQL इंस्टेंस मिटाएँ
इससे summoner-librarium-db इंस्टेंस, उसके डेटाबेस और उसमें मौजूद सभी टेबलों सहित, हट जाता है.
👉💻 अपने टर्मिनल में, चलाएँ:
. ~/agentverse-architect/set_env.sh
gcloud sql instances delete summoner-librarium-db --project=${PROJECT_ID} --quiet
सीक्रेट मैनेजर सीक्रेट और Google क्लाउड स्टोरेज बकेट मिटाएँ
👉💻 अपने टर्मिनल में, चलाएँ:
. ~/agentverse-architect/set_env.sh
gcloud secrets delete tools --quiet
gcloud storage rm -r gs://${BUCKET_NAME} --quiet
लोकल फ़ाइलों और डायरेक्ट्री को मिटाना (Cloud Shell)
आखिर में, क्लोन की गई रिपॉज़िटरी और बनाई गई फ़ाइलों से Cloud Shell एनवायरमेंट को साफ़ करें. यह चरण ज़रूरी नहीं है, लेकिन वर्किंग डायरेक्ट्री को पूरी तरह से हटाने के लिए इसका सुझाव दिया जाता है.
👉💻 अपने टर्मिनल में, चलाएँ:
rm -rf ~/agentverse-architect
rm -rf ~/agentverse-dungeon
rm -f ~/project_id.txt
आपने Agentverse Architect में की गई अपनी सभी गतिविधियों का डेटा मिटा दिया है. आपका प्रोजेक्ट तैयार है और आप अपने अगले साहसिक कार्य के लिए तैयार हैं.