ADK, MCP, और मेमोरी बैंक की मदद से, लोगों की दिलचस्पी के हिसाब से एजेंट बनाना

1. परिचय

मॉडर्न एजेंट स्टैक

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

demo1demo2

इस वर्कशॉप में, आपको तीन बुनियादी टेक्नोलॉजी का इस्तेमाल करके, एक बेहतर एजेंटिक सिस्टम को डिज़ाइन और बनाने का तरीका सिखाया जाएगा:

  1. कनेक्टिविटी (एमसीपी): इससे आपके एजेंट को लोकल टूल और डेटा का ऐक्सेस मिलता है.
  2. ऑर्केस्ट्रेशन (एडीके): एजेंट के तर्क देने की प्रोसेस और स्थिति को मैनेज करने के लिए.
  3. मेमोरी (मेमोरी बैंक): लंबे समय तक, अपने हिसाब से कॉन्टेक्स्ट पाने के लिए.

workshop_overview

मुख्य सिद्धांत

कॉम्पोनेंट

फ़ंक्शन

मॉडल कॉन्टेक्स्ट प्रोटोकॉल (एमसीपी)

यह एक यूनिवर्सल स्टैंडर्ड है. यह कस्टम इंटिग्रेशन के बिना, एआई मॉडल को बाहरी सिस्टम (डेटाबेस, फ़ाइल सिस्टम, एपीआई) से कनेक्ट करता है.

Agent Development Kit (ADK)

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

सेशन सर्विस

यह कुकी, शॉर्ट-टर्म मेमोरी को मैनेज करती है. यह बातचीत के कॉन्टेक्स्ट को बनाए रखता है. जैसे, "उपयोगकर्ता ने अभी क्या पूछा?") के तौर पर सेव किया जाता है. हालांकि, सेशन खत्म होने पर इसे मिटा दिया जाता है.

Vertex AI Memory Bank

यह लंबे समय तक चलने वाली मेमोरी को मैनेज करता है. यह कुकी, उपयोगकर्ता के हिसाब से तथ्यों और प्राथमिकताओं को सेव करती है. जैसे, "उपयोगकर्ता को Python पसंद है") को अनिश्चित काल के लिए सेव किया जाता है, ताकि एजेंट आने वाले समय में उपयोगकर्ता के साथ बातचीत को ज़्यादा निजी बना सके.

Vertex AI Agent Engine

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

आपको क्या बनाना है

इन कॉन्सेप्ट को दिखाने के लिए, आपको छुट्टियों के लिए डिज़ाइन असिस्टेंट बनाना होगा. यह एजेंट, उपयोगकर्ता के अनुरोधों को पूरा कर पाएगा. साथ ही, स्थानीय Python टूल को अपने-आप व्यवस्थित करके, उपयोगकर्ता के हिसाब से कोड और इमेज जनरेट कर पाएगा.

आपको तीन चरणों से गुज़रना होगा:

  1. टूलिंग लेयर: एआई को लोकल Python फ़ंक्शन दिखाने के लिए, एमसीपी सर्वर बनाएं.
  2. एजेंट लेयर: ADK का इस्तेमाल करके, ऐसा एजेंट बनाएं जो कई चरणों वाले वर्कफ़्लो की योजना बनाए और उन्हें लागू करे.
  3. मेमोरी लेयर: मेमोरी बैंक को इंटिग्रेट करें, ताकि एजेंट को उपयोगकर्ता की स्टाइल से जुड़ी प्राथमिकताओं के बारे में जानने और उन्हें याद रखने में मदद मिल सके.

2. सेट करें

एआई एजेंट को बेहतर तरीके से काम करने के लिए, हमें दो चीज़ों की ज़रूरत होती है: पहला, Google Cloud प्रोजेक्ट.

पहला हिस्सा: बिलिंग खाता चालू करना

  • पांच डॉलर के क्रेडिट के साथ बिलिंग खाते पर दावा करें. आपको इसकी ज़रूरत डिप्लॉयमेंट के लिए पड़ेगी. पक्का करें कि आपने अपने gmail खाते से साइन इन किया हो.

दूसरा हिस्सा: ओपन एनवायरमेंट

  1. 👉 सीधे Cloud Shell Editor पर जाने के लिए, इस लिंक पर क्लिक करें
  2. 👉 अगर आज किसी भी समय अनुमति देने के लिए कहा जाता है, तो जारी रखने के लिए अनुमति दें पर क्लिक करें. Cloud Shell को अनुमति देने के लिए क्लिक करें
  3. 👉 अगर टर्मिनल स्क्रीन पर सबसे नीचे नहीं दिखता है, तो इसे खोलें:
    • देखें पर क्लिक करें
    • टर्मिनलCloud Shell Editor में नया टर्मिनल खोलें पर क्लिक करें
  4. 👉💻 टर्मिनल में, पुष्टि करें कि आपने पहले ही पुष्टि कर ली है और प्रोजेक्ट को अपने प्रोजेक्ट आईडी पर सेट किया गया है. इसके लिए, यह कमांड इस्तेमाल करें:
    gcloud auth list
    
  5. 👉💻 GitHub से बूटस्ट्रैप प्रोजेक्ट का क्लोन बनाएं:
    git clone https://github.com/cuppibla/holiday_workshop
    
  6. 👉💻 प्रोजेक्ट डायरेक्ट्री से सेटअप स्क्रिप्ट चलाएं.
    cd ~/holiday_workshop
    ./init.sh
    
    स्क्रिप्ट, सेटअप की बाकी प्रोसेस को अपने-आप पूरा कर देगी.
  7. 👉💻 ज़रूरी प्रोजेक्ट आईडी सेट करें:
    gcloud config set project $(cat ~/project_id.txt) --quiet
    

तीसरा हिस्सा: अनुमति सेट अप करना

  1. 👉💻 यहां दी गई कमांड का इस्तेमाल करके, ज़रूरी एपीआई चालू करें. इसमें कुछ मिनट लग सकते हैं.
    gcloud services enable \
        cloudresourcemanager.googleapis.com \
        servicenetworking.googleapis.com \
        run.googleapis.com \
        aiplatform.googleapis.com \
        compute.googleapis.com
    
  2. 👉💻 टर्मिनल में ये कमांड चलाकर, ज़रूरी अनुमतियां दें:
    . ~/holiday_workshop/set_env.sh
    

ध्यान दें कि आपके लिए एक .env फ़ाइल बनाई गई है. इससे आपके प्रोजेक्ट की जानकारी दिखती है.

3. एमसीपी की मदद से बेहतर परफ़ॉर्म करना

एआई के लिए "यूएसबी-सी" मोमेंट

कल्पना करें कि हर बार नया माउस खरीदने पर, आपको उसे अपने मदरबोर्ड से सोल्डर करना पड़ता है. हाल ही में, एआई टूल की यही स्थिति थी. डेवलपर को एलएलएम को डेटाबेस, फ़ाइल सिस्टम या एपीआई से कनेक्ट करने के लिए, कस्टम "ग्लू कोड" लिखना पड़ता था.

मॉडल कॉन्टेक्स्ट प्रोटोकॉल (एमसीपी) डालें. एमसीपी को एआई ऐप्लिकेशन के लिए यूएसबी-सी पोर्ट के तौर पर देखें. यह एआई मॉडल को डेटा सोर्स और टूल से कनेक्ट करने का एक स्टैंडर्ड तरीका उपलब्ध कराता है.

अगर आपने अपने टूल के लिए एक बार एमसीपी सर्वर बनाया है, तो कोड की एक भी लाइन में बदलाव किए बिना, इसे Gemini CLI, आईडीई या एमसीपी के साथ काम करने वाले किसी अन्य क्लाइंट में प्लग किया जा सकता है.

आपको क्या बनाना है

mcp_server

इस कोडलैब में, आपको छुट्टियों के लिए डिज़ाइन असिस्टेंट बनाने का तरीका बताया जाएगा. यह असिस्टेंट:

  1. एमसीपी का इस्तेमाल करके, आपके लोकल एनवायरमेंट (Studio टूल) से कनेक्ट करता है.
  2. एजेंट डेवलपमेंट किट (एडीके) का इस्तेमाल करके, बातचीत के कॉन्टेक्स्ट को भरोसेमंद तरीके से मैनेज करता है.
  3. आपकी प्राथमिकताओं को याद रखता है. उदाहरण के लिए, "मुझे Python कोड पसंद है") को अलग-अलग सेशन में सेव किया जा सकता है. इसके लिए, Vertex AI Memory Bank का इस्तेमाल करें.

सर्वर लॉजिक बनाना

हमने एनवायरमेंट तैयार कर लिया है, लेकिन सर्वर लॉजिक पूरा नहीं है. हमें चार खास टूल लागू करने होंगे. इनका इस्तेमाल हमारा एजेंट, छुट्टियों के लिए कार्ड बनाने के लिए करेगा.

पहला हिस्सा: सर्वर का स्ट्रक्चर खोलना

हम 01-MCP-Files-Testing/01-starter डायरेक्ट्री में काम करेंगे.

  1. अपने Cloud Shell टर्मिनल में, पक्का करें कि आप सही डायरेक्ट्री में हों:
    cd ~/holiday_workshop/01-MCP-Files-Testing/01-starter/
    
  2. Cloud Shell Editor में फ़ाइल खोलने के लिए, यह कमांड चलाएं:
    cloudshell edit ~/holiday_workshop/01-MCP-Files-Testing/01-starter/mcp_server.py
    

आपको दिखेगा कि बॉयलरप्लेट कोड (एमसीपी सर्वर सेट अप करना, कनेक्शन मैनेज करना, और Vertex AI क्लाइंट को शुरू करना) पहले ही पूरा हो चुका है. हालांकि, फ़िलहाल चार मुख्य फ़ंक्शन खाली प्लेसहोल्डर हैं.

दूसरा भाग: हॉलिडे सीन जनरेटर को लागू करना

सबसे पहले, हमें एक ऐसे टूल की ज़रूरत होगी जो उपयोगकर्ता की दिलचस्पी के हिसाब से (जैसे, "पक्षी") और उसे इमेज जनरेट करने के लिए ऑप्टिमाइज़ किए गए, ज़्यादा जानकारी वाले प्रॉम्प्ट में बदल देता है.

generate_holiday_scene फ़ंक्शन में मौजूद #REPLACE_GENERATE_HOLIDAY_SCENE टिप्पणी ढूंढें.

इस पूरी लाइन की जगह यह कोड डालें:

    prompt = (
        f"""
        Create a cozy, high-fidelity 3D render of a winter holiday scene.
        The scene should be warm and inviting with soft cinematic lighting.
        
        Seamlessly integrate the following specific theme/interest into the 
        holiday decor or landscape: {interest}.
        
        The style should be whimsical but detailed.
        Aspect Ratio: 16:9 Landscape.
        """
    )
    generate_image(prompt, "16:9", "static/generated_scene.png")
    return "Done! Saved at generated_scene.png"

तीसरा हिस्सा: फ़ोटो में बदलाव करने के बाद मिले नतीजे को लागू करना

आखिर में, हम चाहते हैं कि रोशनी और स्टाइल बिलकुल असली लगे और त्योहार के हिसाब से हो.

टिप्पणी #REPLACE_GENERATE_FINAL_PHOTO ढूंढें.

स्टाइल ट्रांसफ़र और रेंडरिंग की प्रोसेस पूरी करने के लिए, इस पूरी लाइन को इस कोड से बदलें:

    prompt = (
        """
        Generate a photorealistic close-up shot of a rustic wooden fireplace mantle.
        
        Lighting: Warm, glowing ambient light from a fire below (out of frame).
        Background: Softly blurred (bokeh) pine garland and twinkling lights.
        
        Foreground Composition:
        1. A wooden picture frame containing the [attached selfie image]. 
           The face in the photo must be clearly visible.
        2. A folded holiday greeting card standing upright next to the frame. 
           The front of the card displays the [attached holiday scene image] as a print.
           
        Ensure the perspective is grounded and realistic, as if taken with a 50mm lens.
        """
    )
    generate_image(prompt, "16:9", "static/generated_final_photo.png", ["static/generated_selfie.png", "static/generated_scene.png"])
    return "Done! Saved at generated_final_photo.png"

एनवायरमेंट सेटअप करना

कोड को लागू करने के बाद, हमें यह पक्का करना होगा कि हमारी डिपेंडेंसी इंस्टॉल हो गई हों. हम uv का इस्तेमाल करेंगे. यह Python पैकेज और प्रोजेक्ट मैनेजर है.

👉💻 अपने टर्मिनल में, FastMCP को हमारे प्रोजेक्ट की डिपेंडेंसी के तौर पर जोड़ने के लिए, यह कमांड चलाएं:

cd ~/holiday_workshop/01-MCP-Files-Testing/01-starter/
uv add fastmcp

आपको दिखेगा कि आपकी ~/holiday_workshop/01-MCP-Files-Testing/01-starter/pyproject.toml फ़ाइल में एक नई डिपेंडेंसी fastmcp>=2.13.3 जोड़ी गई है.

4. एमसीपी सर्वर के लिए Gemini CLI की मदद से टेस्टिंग करना

अब हमारा सर्वर कोड पूरा हो गया है, तो हम इसकी जांच कैसे करें?

आम तौर पर, बैकएंड सर्वर की जांच करने के लिए, फ़्रंटएंड यूज़र इंटरफ़ेस (यूआई) बनाना होता है या जटिल curl अनुरोध लिखने होते हैं. हालांकि, यहाँ Gemini CLI का इस्तेमाल किया जा सकता है.

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

कनेक्ट करें और चलाएं

हम Gemini CLI को mcp add कमांड का इस्तेमाल करके, अपने सर्वर को मैनेज करने के लिए कहेंगे.

अपने टर्मिनल में, यह कमांड चलाएं:

gemini mcp add holidays uv run ~/holiday_workshop/01-MCP-Files-Testing/01-starter/mcp_server.py
  • add holidays: हमने अपने सर्वर को एक निकनेम ("छुट्टियां") दिया है.
  • uv run ...: हमने Python सर्वर को शुरू करने के लिए साफ़ तौर पर कमांड दी है. हमने अभी-अभी इसमें बदलाव किया है.

आइए, साथ मिलकर कॉन्टेंट बनाएं!

अब चैट सेशन शुरू करें:

gemini

यह जांच करने के लिए कि Gemini आपके नए टूल को "देख" सकता है या नहीं, यह प्रॉम्प्ट आज़माएँ. ध्यान दें कि आपको Gemini CLI को, छुट्टियों की जानकारी देने वाले टूल का इस्तेमाल करने की अनुमति देनी पड़ सकती है.

  • 👉 उपयोगकर्ता:
    "I want to create a festive holiday photo. I like birds a lot."
    
  • Gemini:
    *Thinking...*
    *Calling tool: generate_holiday_scene(interest='birds')*
    
    Done! Saved at generated_scene.png
    
  • 👉 उपयोगकर्ता:
    "Great! Now generate a knitting pattern for a sweater with reindeer on it."
    
  • Gemini:
    *Thinking...*
    *Calling tool: generate_sweater_pattern(motif='reindeer')*
    
    Done! Saved at generated_pattern.png
    
    आपने एमसीपी का इस्तेमाल किया था. इसलिए, एआई को यह पता चल गया कि आपकी ज़रूरत को पूरा करने के लिए, किस Python फ़ंक्शन को कॉल करना है!

इमेज की समीक्षा करना

  • Control+C दबाकर, Gemini CLI को बंद करें.
  • अपने फ़ोल्डर में जनरेट की गई फ़ोटो देखें: ~/holiday_workshop/01-MCP-Files-Testing/01-starter/static.

अपनी फ़ोटो यहां देखें:

निष्कर्ष और अगले चरण

बधाई हो! आपने एमसीपी सर्वर बना लिया है. अब आपके पास "एआई टूल" का एक ऐसा सेट है जो पैटर्न जनरेट कर सकता है, कंपोज़िट इमेज बना सकता है, और सीन को बेहतर बना सकता है.

हालांकि, क्या आपने ऊपर दिए गए टेस्ट में कुछ देखा? आपको प्रोसेस को आगे बढ़ाना था. आपको सीन के बारे में पूछना था, इसके बाद पैटर्न के बारे में पूछना था, इसके बाद दोनों को एक साथ लाने के लिए कहना था.

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

अगले सेक्शन में, हम इस क्रिएटिव गड़बड़ी को ठीक करेंगे. हम एक स्ट्रक्चर्ड एजेंट बनाने के लिए, एजेंट डेवलपमेंट किट (एडीके) को लागू करने जा रहे हैं. यह एजेंट, इन एमसीपी टूल को एक बेहतरीन प्रोडक्शन पाइपलाइन में व्यवस्थित करता है.

5. ADK एजेंट की वाइब कोडिंग करना

हमारे पास टूल का एक वर्किंग सेट (हमारा एमसीपी सर्वर) है. हालांकि, फ़िलहाल हम ही सारे काम कर रहे हैं. जैसे, Gemini को यह बताना कि किस टूल को कब कॉल करना है.

इस सेक्शन में, हम एक एआई एजेंट बनाएंगे. यह एक ऐसा सिस्टम है जो तर्क दे सकता है, प्लान बना सकता है, और एक से ज़्यादा चरणों वाले टास्क अपने-आप पूरे कर सकता है. इसके लिए, हम एजेंट डेवलपमेंट किट (एडीके) का इस्तेमाल करेंगे.

agent_mcp

एजेंट क्या होता है?

अगर एमसीपी टूल "हाथ" (काम करने वाले) हैं, तो एजेंट "दिमाग" है. कोई एजेंट, एलएलएम का इस्तेमाल करके उपयोगकर्ता के मकसद को समझता है ("मेरे लिए छुट्टियों का कार्ड बनाओ"), उसे चरणों में बांटता है ("पहले मुझे एक सीन चाहिए, फिर एक पैटर्न..."), और यह तय करता है कि लक्ष्य को पूरा करने के लिए किन टूल का इस्तेमाल करना है.

एडीके क्या है?

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

कॉन्टेक्स्ट के हिसाब से वाइब कोडिंग

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

हम कोड की एक भी लाइन लिखने से पहले, Gemini CLI की मेमोरी सुविधाओं का इस्तेमाल करेंगे.

1. एनवायरमेंट तैयार करना

अपना टर्मिनल खोलें और स्टार्टर डायरेक्ट्री पर जाएं:

cd ~/holiday_workshop/02-Vibe-Coding-ADK-Agent/01-starter

Gemini CLI शुरू करें:

gemini

2. कॉन्टेक्स्ट और मेमोरी को मैनेज करना

वाइब-कोडिंग करते समय, एआई को यह पता होना चाहिए कि वह कौन है और उसे क्या पता है. Gemini CLI की मदद से, हम इसे साफ़ तौर पर मैनेज कर सकते हैं.

  • /memory show: इसे टाइप करके देखें कि एआई को फ़िलहाल आपके प्रोजेक्ट और सेशन के बारे में क्या जानकारी है.
  • /memory add: इसका इस्तेमाल, एआई को बुनियादी जानकारी देने के लिए करें. एआई को यह जानकारी पूरी बातचीत के दौरान याद रखनी चाहिए.

सबसे पहले, हम अपने कोडिंग पार्टनर के पर्सोना को तय करते हैं. Gemini CLI में यह कमांड चलाएं:

/memory add "You are an expert Python developer specialized in the Google Agent Development Kit (ADK). You write clean, modular code and prefer using the latest ADK patterns."

Gemini अब अपनी भूमिका को समझता है. इस कॉन्टेक्स्ट का इस्तेमाल, आने वाले हर जवाब में किया जाएगा. इससे यह पक्का किया जा सकेगा कि एआई से जनरेट किया गया कोड, एडीके के मुताबिक है.

3. पहला चरण: बुनियादी एजेंट को वाइब-कोडिंग करना

पूरे सिस्टम को एक साथ जनरेट करने के बजाय, आइए हम इसकी बुनियादी संरचना से शुरुआत करते हैं. हम फ़ाइल स्ट्रक्चर और एजेंट की बुनियादी पर्सनैलिटी तय करना चाहते हैं.

Gemini CLI में यहां दिया गया प्रॉम्प्ट डालें:

Let's start by building the basic agent structure. 

Please create a file structure for a `root_agent`. 
1. Create `root_agent/__init__.py` that imports `agent`.
2. Create `root_agent/agent.py` by following exactly how this file is doing import and agent creation @~/holiday_workshop/02-Vibe-Coding-ADK-Agent/01-starter/agent_reference.py

In `agent.py`:
- Create an `Agent` named "root_agent" using the model "gemini-2.5-flash".
- The instruction string should define a "Holiday Magic Assistant". 
- The personality should be enthusiastic (`🎄✨`) and prefer "cute, kawaii, cartoon" styles for any visual tasks.

Gemini, फ़ाइल का स्ट्रक्चर और शुरुआती Python कोड जनरेट करेगा. इसकी समीक्षा करके पक्का करें कि यह सही दिख रहा है. इसके बाद, बदलावों को लागू करें/स्वीकार करें.

4. दूसरा चरण: एमसीपी सर्वर (टूल) जोड़ना

अब हमारे पास एक बुनियादी एजेंट है. हमें इसे "हाथ" देने होंगे. हमें एजेंट को उस एमसीपी सर्वर से कनेक्ट करना होगा जिसे हमने पिछले लैब में बनाया था.

Gemini CLI में यहां दिया गया प्रॉम्प्ट डालें:

Now, let's give the agent access to tools. Update `agent.py` to include our local MCP server. By following exactly how this agent is connecting to mcp tool @~/holiday_workshop/02-Vibe-Coding-ADK-Agent/01-starter/agent_reference.py

In `agent.py`:
- Import `McpToolset` to define our STDIO MCP server. as @~/holiday_workshop/02-Vibe-Coding-ADK-Agent/01-starter/agent_reference.py
- Connect to the python file located at `../mcp_server.py` relative to agent.py.

Gemini अब आपके मौजूदा agent.py को फिर से फ़ैक्टर करेगा, ताकि इसमें टूल की परिभाषाएं और कनेक्शन लॉजिक शामिल किया जा सके.

ध्यान दें: अगर आपको अपने काम की जांच करनी है या जनरेट किया गया कोड उम्मीद के मुताबिक काम नहीं कर रहा है, तो अपनी फ़ाइलों की तुलना, यहां दिए गए रेफ़रंस समाधान से करें: ~/holiday_workshop/02-Vibe-Coding-ADK-Agent/solution

6. एजेंट वेब इंटरफ़ेस चलाना

ADK में, adk web नाम का टेस्टिंग इंटरफ़ेस पहले से मौजूद होता है. इससे एक लाइटवेट चैट यूज़र इंटरफ़ेस (यूआई) खुल जाता है, ताकि हम अपने एजेंट से तुरंत बात कर सकें.

  1. अगर GeminiCLI अब भी खुला है, तो उसे बंद करने के लिए control+C दबाएं. अब अपने टर्मिनल में(यह solution फ़ोल्डर में है. अपने कोड की जांच करने के लिए, starter पर जाएं और अपने starter फ़ोल्डर में uv run adk web चलाएं), यह कमांड चलाएं:
    cd ~/holiday_workshop/02-Vibe-Coding-ADK-Agent/02-solution
    uv run adk web --port 8000
    
  2. Cloud Shell आपको सूचना देगा कि पोर्ट 8000 पर कोई सेवा चल रही है. "वेब पर झलक देखें" -> "पोर्ट 8000 पर झलक देखें" पर क्लिक करें.

एजेंट को टेस्ट करना

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

ये प्रॉम्प्ट आज़माएं:

  • "नमस्ते! तुम कौन हो?"
    • (जवाब में उत्साह और त्योहार का माहौल होना चाहिए).
  • "मुझे अपने हॉलिडे कार्ड के लिए बैकग्राउंड चाहिए. इसे बर्फ़ीला गांव बनाओ."
    • (The Agent should call generate_holiday_scene. ध्यान दें कि यह सिस्टम के निर्देशों में तय की गई "प्यारा/कार्टून" स्टाइल को अपने-आप लागू करता है).
  • "पिज़्ज़ा के छोटे-छोटे स्लाइस वाला स्वेटर पैटर्न जनरेट करो."
    • (एजेंट को generate_sweater_pattern पर कॉल करना चाहिए).

जनरेट की गई इमेज यहां देखी जा सकती है:

जांच पूरी होने पर, बाहर निकलने के लिए Control+C दबाएं.

निष्कर्ष और अगले चरण

आपने अब कॉन्टेक्स्ट के हिसाब से काम करने वाले तरीके का इस्तेमाल करके, Google ADK एजेंट को "Vibe-Coded" कर दिया है!

  • हमने कॉन्टेक्स्ट सेट किया: हमने /memory add का इस्तेमाल करके, किसी विशेषज्ञ के पर्सोना को तय किया.
  • हमने Iteratively बनाया: हमने सबसे पहले इसका स्ट्रक्चर बनाया. इसके बाद, टूल कनेक्शन जोड़े.

ADK में शामिल वेब प्रीव्यू की सुविधा, टेस्टिंग के लिए बहुत अच्छी है. हालांकि, हमें अपने फ़ाइनल प्रॉडक्ट के लिए, ब्रैंड के हिसाब से पसंद के मुताबिक अनुभव चाहिए. अगले सेक्शन में, हम इस एजेंट को कस्टम वेब फ़्रंटएंड में इंटिग्रेट करेंगे.

7. यूज़र इंटरफ़ेस (यूआई) के साथ एडीके को कनेक्ट करना

backend_architecture

अब हमारे पास एजेंट की परिभाषा है. इसलिए, हमें इसे चलाना होगा. ऐसे में, Runner और Session Service काम आती हैं.

लागू करना

  1. 👉 अपनी कमांड में यह टाइप करें:
    cloudshell edit ~/holiday_workshop/03-Connect-ADK-MCP-UI/01-starter/backend/main.py
    
    इससे आपके एडिटर में ~/holiday_workshop/03-Connect-ADK-MCP-UI/01-starter/backend/main.py खुलता है.
  2. # TODO: Create Session Service की जगह यह डालें:
    from google.adk.sessions import InMemorySessionService
    from google.adk.memory import InMemoryMemoryService
    session_service = InMemorySessionService()
    memory_service = InMemoryMemoryService()
    
  3. # TODO: Initialize Runner की जगह यह डालें:
    runner = Runner(
        app_name="agents",
        agent=christmas_agent,
        session_service=session_service,
        memory_service=memory_service,
    )
    
  1. इस ~/holiday_workshop/03-Connect-ADK-MCP-UI/01-starter/backend/main.py(कोई कार्रवाई ज़रूरी नहीं है) पर लाइन 158 की समीक्षा करें: अगर आपको लगता है कि ऐप्लिकेशन को फ़ाइनल जवाब कैसे मिलता है? यहां इवेंट लूप दिया गया है, जो रनर की मदद से काम करता है:
    async for event in runner.run_async(
        user_id=user_id,
        session_id=session_id,
        new_message=content
    )
    

ज़्यादा जानकारी: आर्किटेक्चर और डिप्लॉयमेंट

हम इस एजेंट को उपलब्ध कराने के लिए, FastAPI का इस्तेमाल कर रहे हैं.

  • FastAPI का इस्तेमाल क्यों करें?: एजेंट अक्सर I/O बाउंड होते हैं (एलएलएम के लिए इंतज़ार करते हैं). FastAPI की एसिंक सुविधा, इस काम को आसानी से पूरा करती है.
  • स्टेटलेसनेस: ध्यान दें कि हमारा एपीआई एंडपॉइंट स्टेटलेस है. हम ग्लोबल स्कोप में वैरिएबल सेव नहीं करते. हम हर अनुरोध के लिए, session_id और SessionService पर भरोसा करते हैं, ताकि स्थिति को फिर से बनाया जा सके. इसका मतलब है कि इसे Cloud Run (बिना सर्वर के) पर डिप्लॉय किया जा सकता है और इसे शून्य तक बढ़ाया जा सकता है!

8. एजेंट मैजिक की मदद से ऐप्लिकेशन आज़माएं

  1. 👉💻 अपने कमांड में यह टाइप करें:
    cd ~/holiday_workshop/03-Connect-ADK-MCP-UI/01-starter
    ./start_app.sh
    
    इससे आपके एडिटर में ~/holiday_workshop/03-Connect-ADK-MCP-UI/01-starter/backend/main.py खुलता है.
  2. आपको इस तरह का नतीजा दिखेगा:portresult👉👉 पक्का करें कि आपने http://localhost:5173/ पर क्लिक किया हो या नई विंडो खोलकर http://localhost:5173/ टाइप किया हो.
  3. इसके बाद, आपको चैट इंटरफ़ेस वाली वेबसाइट दिखेगी: वेबसाइट
  4. एक इमेज अपलोड करके जांच करें(यह आपकी या आपके पालतू जानवर की हो सकती है) अपलोड करें
  5. 👉 इसके बाद,
    Can you generate a picture my cat wearing snowflake pattern sweater?
    
    आपको जनरेट की गई इमेज यहां दिखेगी: cat
  6. 👉💻 जांच पूरी होने के बाद, प्रोसेस को बंद करने के लिए टर्मिनल में control+C दबाएं.

अगर आपको लगता है कि चीज़ें उम्मीद के मुताबिक काम नहीं कर रही हैं, तो ~/holiday_workshop/03-Connect-ADK-MCP-UI/02-solution पर जाएं और ./start_app.sh चलाएं. इसके बाद, ऊपर दिया गया तरीका अपनाएं.

9. Vertex AI Memory Bank

agent_memory

शॉर्ट टर्म मेमोरी बनाम लॉन्ग टर्म मेमोरी

  • हाल ही में की गई बातचीत का कॉन्टेक्स्ट: "मैंने अभी क्या कहा?" (सेशन का इतिहास). चैट विंडो बंद होने पर, यह जानकारी मिट जाती है.
  • लॉन्ग-टर्म मेमोरी: "मेरी पसंदीदा प्रोग्रामिंग भाषा कौनसी है?" (उपयोगकर्ता की प्राथमिकताएं). यह हमेशा के लिए सेव होना चाहिए.

Vertex AI Memory Bank, लंबी अवधि के लिए स्टोरेज उपलब्ध कराता है. इससे एजेंट को उपयोगकर्ता की निजी जानकारी सेव करने और उसे वापस पाने की अनुमति मिलती है.

सेशन बनाम मेमोरी बैंक

  • सेशन (VertexAiSessionService): यह लॉग है. यह हर मैसेज, टूल कॉल, और इवेंट (AppendEvent, ListEvents) के क्रम से लगे रॉ डेटा को सेव करता है. इससे यह पता चलता है कि क्या हुआ.
  • मेमोरी बैंक (VertexAiMemoryBankService): यह नॉलेज है. यह कुकी, लंबे समय तक काम आने वाले तथ्यों (GenerateMemories, RetrieveMemories) को सेव करती है. इसका दायरा किसी खास user_id तक सीमित होता है. इससे निजता और सुरक्षा बनी रहती है.
  1. 👉💻 अपने कमांड में यह टाइप करें:
    cloudshell edit ~/holiday_workshop/04-Adding-Memory-Bank/01-starter/backend/main.py
    
    इससे आपके एडिटर में ~/holiday_workshop/04-Adding-Memory-Bank/01-starter/backend/main.py खुलता है.
  2. # TODO: Create Vertex AI Session Service & Memory Bank Service को ढूंढें और पूरी लाइन को इससे बदलें:
        session_service = VertexAiSessionService(
            project=PROJECT_ID, location=LOCATION, agent_engine_id=AGENT_ENGINE_ID
        )
        memory_service = VertexAiMemoryBankService(
            project=PROJECT_ID, location=LOCATION, agent_engine_id=AGENT_ENGINE_ID
        )
    
    

memory_compare

  1. 👉💻 अपने कमांड में यह टाइप करें:
    cloudshell edit ~/holiday_workshop/04-Adding-Memory-Bank/01-starter/backend/deploy_agent.py
    
    इससे आपके एडिटर में ~/holiday_workshop/04-Adding-Memory-Bank/01-starter/backend/deploy_agent.py खुलता है.
  2. # TODO: Set Up Configuration की जगह यह डालें:
    # Basic configuration types
    MemoryBankConfig = types.ReasoningEngineContextSpecMemoryBankConfig
    SimilaritySearchConfig = (
        types.ReasoningEngineContextSpecMemoryBankConfigSimilaritySearchConfig
    )
    GenerationConfig = types.ReasoningEngineContextSpecMemoryBankConfigGenerationConfig
    
    # Advanced configuration types
    CustomizationConfig = types.MemoryBankCustomizationConfig
    MemoryTopic = types.MemoryBankCustomizationConfigMemoryTopic
    CustomMemoryTopic = types.MemoryBankCustomizationConfigMemoryTopicCustomMemoryTopic
    GenerateMemoriesExample = types.MemoryBankCustomizationConfigGenerateMemoriesExample
    ConversationSource = (
        types.MemoryBankCustomizationConfigGenerateMemoriesExampleConversationSource
    )
    ConversationSourceEvent = (
        types.MemoryBankCustomizationConfigGenerateMemoriesExampleConversationSourceEvent
    )
    ExampleGeneratedMemory = (
        types.MemoryBankCustomizationConfigGenerateMemoriesExampleGeneratedMemory
    )
    

memory_process

  1. 👉 उसी फ़ाइल में: 04-Adding-Memory-Bank/01-starter/backend/deploy_agent.py. # TODO: Set up topic ढूंढें और पूरी लाइन को इससे बदलें:
        custom_topics = [
            # Topic 1: Sweater Preference
            MemoryTopic(
                custom_memory_topic=CustomMemoryTopic(
                    label="sweater_preference",
                    description="""Extract the user's preferences for sweater styles, patterns, and designs. Include:
                    - Specific patterns (snowflake, reindeer, geometric, fair isle, solid, etc.)
                    - Style preferences (chunky knit, cardigan, pullover, turtleneck, oversized, fitted)
                    - Color preferences (red, green, navy, pastel, etc.)
                    - Material preferences if mentioned (wool, cotton, cashmere, itchy/soft)
                    - Themes (retro, modern, ugly christmas sweater, elegant)
    
                    Example: "User wants a retro style sweater with a pixelated reindeer pattern."
                    Example: "User prefers dark blue colors and hates itchy wool."
                    """,
                )
            ),
            # Topic 2: Personal Context
            MemoryTopic(
                custom_memory_topic=CustomMemoryTopic(
                    label="personal_context",
                    description="""Extract the user's personal context including hobbies, pets, interests, job, and preferred scenes. Include:
                    - Hobbies and activities (skiing, reading, gaming, cooking, etc.)
                    - Pets (type, breed, name, color)
                    - Job or profession if relevant to their style
                    - General interests (sci-fi, nature, vintage, tech)
                    - Preferred scenes or vibes (cozy fireplace, snowy mountain, cyberpunk city, beach)
    
                    Example: "User has a golden retriever named Max."
                    Example: "User loves skiing and wants a snowy mountain background."
                    Example: "User is a software engineer who likes cyberpunk aesthetics."
                    """,
                )
            )
        ]
    
  2. 👉 एक ही फ़ाइल में: 04-Adding-Memory-Bank/01-starter/backend/deploy_agent.py. # TODO: Create Agent Engine ढूंढें और पूरी लाइन को इससे बदलें:
        agent_engine = client.agent_engines.create(
            config={
                "display_name": AGENT_DISPLAY_NAME,
                "context_spec": {
                    "memory_bank_config": {
                        "generation_config": {
                            "model": f"projects/{PROJECT_ID}/locations/{LOCATION}/publishers/google/models/gemini-2.5-flash"
                        },
                        "customization_configs": [customization_config]
                    }
                },
            }
        )
    

सिर्फ़ प्रॉम्प्ट का इस्तेमाल क्यों नहीं करना चाहिए?

आपके मन में यह सवाल आ सकता है कि "हम उपयोगकर्ता के इतिहास को सीधे तौर पर प्रॉम्प्ट में क्यों नहीं चिपका देते?"

  • साइज़ की सीमाएं: कॉन्टेक्स्ट विंडो बड़ी होती हैं, लेकिन इनकी कोई सीमा नहीं होती. पांच साल का इतिहास नहीं दिखाया जा सकता.
  • लागत: हर "नमस्ते" के लिए 10 लाख टोकन प्रोसेस करने पर बहुत ज़्यादा लागत आती है.
  • फ़ोकस: मेमोरी बैंक, आपके एजेंट के लिए सर्च इंजन के तौर पर काम करता है. यह सिर्फ़ काम के तथ्य हासिल करता है.
  1. 👉💻 अपने कमांड में यह टाइप करें:
    cloudshell edit ~/holiday_workshop/04-Adding-Memory-Bank/01-starter/backend/agent.py
    
    इससे आपके एडिटर में ~/holiday_workshop/04-Adding-Memory-Bank/01-starter/backend/agent.py खुलता है.
  2. फ़ाइल में: ~/holiday_workshop/04-Adding-Memory-Bank/01-starter/backend/agent.py# TODO: Add PreloadMemoryTool की जगह यह डालें:
    if USE_MEMORY_BANK:
        agent_tools.append(PreloadMemoryTool())
    

PreloadMemoryTool और add_session_to_memory

agent.py में, आपको दो मुख्य कॉम्पोनेंट दिखेंगे:

  • PreloadMemoryTool: यह एक ऐसा टूल है जिसकी मदद से एजेंट "Google पर खुद खोज कर सकता है." अगर उपयोगकर्ता कुछ अस्पष्ट सवाल पूछता है, जैसे कि "मुझे मेरी पसंदीदा कॉफ़ी लाओ", तो एजेंट जवाब देने से पहले, इस टूल का इस्तेमाल करके मेमोरी बैंक में "कॉफ़ी की प्राथमिकताएं" के बारे में क्वेरी कर सकता है.
  • add_session_to_memory: यह बैकग्राउंड कॉलबैक है.
    • एक साथ काम नहीं करने वाली प्रोसेस क्यों? मेमोरी सेव करने में समय लगता है. जैसे, चैट की खास जानकारी तैयार करना और तथ्यों को निकालना. हम नहीं चाहते कि उपयोगकर्ता को इसके लिए इंतज़ार करना पड़े. हम इसे बैकग्राउंड में (add_session_to_memory) चलाते हैं. इसके लिए, हम after_agent_callback का इस्तेमाल करते हैं.

10. Memory Bank In Action

  1. 👉💻 अपने कमांड में यह टाइप करें:
    cd ~/holiday_workshop/04-Adding-Memory-Bank/01-starter
    ./use_memory_bank.sh
    
    आपको नतीजे इस तरह दिखेंगे:deploy_agent_result अपनी ~/holiday_workshop/.env फ़ाइल देखें. आपको (कोई कार्रवाई ज़रूरी नहीं है) दिखेगा
    USE_MEMORY_BANK=TRUE
    AGENT_ENGINE_ID={agent_engine_id}
    
  2. 👉💻 ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) की मदद से मेमोरी की जांच करें. अपनी कमांड में यह टाइप करें:
    cd ~/holiday_workshop/04-Adding-Memory-Bank/01-starter
    ./start_app.sh
    
    पक्का करें कि आपने http://localhost:5173/ पर क्लिक किया हो या नई विंडो खोलकर http://localhost:5173/ टाइप किया हो. ध्यान दें कि Uvicorn running on http://0.0.0.0:8000 सिर्फ़ बैकएंड सर्वर है. यह वह लिंक नहीं है जिस पर हमें क्लिक करना है. अब वेबसाइट में चैट इंटरफ़ेस, आपके लिए निजी एजेंट बन गया है!वेबसाइट
  3. 👉मेमोरी की जांच करें. अगर यूज़र इंटरफ़ेस में टाइप किया जाता है, तो:
    I want a sweater that matches my dog. He's a golden retriever.
    
    I'm a programmer, so I want something geeky. Maybe a matrix style?
    
    I like snowflake sweater pattern
    

एजेंट इसे प्राथमिकता के तौर पर पहचान लेगा और इसे मेमोरी बैंक में सेव कर लेगा.

अगर आपने अगले हफ़्ते(या Control+C और ./start_app.sh दबाकर ऐप्लिकेशन को रीस्टार्ट करने के बाद) पूछा:

what is my preference on sweater pattern?

एजेंट, मेमोरी बैंक से क्वेरी करेगा, आपकी पसंद देखेगा, और बिना पूछे स्वेटर का पैटर्न जनरेट करेगा. 10-नतीजे

  1. Google Cloud Console Agent Engine पर जाकर, Vertex AI Agent Engine में पुष्टि करें
    • पक्का करें कि आपने सबसे ऊपर बाईं ओर मौजूद प्रोजेक्ट सिलेक्टर से प्रोजेक्ट चुना हो:प्रोजेक्ट सिलेक्टर
    • इसके बाद, उस एजेंट इंजन की पुष्टि करें जिसे आपने अभी-अभी पिछली कमांड से डिप्लॉय किया है use_memory_bank.shएजेंट इंजनआपने अभी-अभी जो एजेंट इंजन बनाया है उस पर क्लिक करें.
  2. डिप्लॉय किए गए इस एजेंट में, Memories टैब पर क्लिक करें. यहां आपको सभी यादें दिखेंगी.यादें देखना

बधाई हो! आपने मेमोरी बैंक को अपने एजेंट से अटैच कर दिया है!

11. नतीजा

खास जानकारी

आपने एक ऐसा एजेंटिक सिस्टम तैयार किया है जो पूरी तरह से काम करता है.

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

अगले चरण

  • अपना एमसीपी सर्वर बनाएं: अपने इंटरनल एपीआई या डेटाबेस के लिए एक सर्वर बनाएं.
  • ADK के पैटर्न एक्सप्लोर करें: ADK के दस्तावेज़ में "रीज़निंग लूप" और "ऑर्केस्ट्रेशन" के बारे में जानें.
  • डिप्लॉय करना: अपने एजेंट को लोकल स्क्रिप्ट से Cloud Run पर प्रोडक्शन सर्विस में ले जाएं.