अपना पहला एआई कंपैनियन बनाना: शुरुआती लोगों के लिए वर्कशॉप

1. आपको क्या सीखने को मिलेगा

  • पूरे ADK एजेंट कॉन्फ़िगरेशन को जनरेट करने के लिए, Gemini CLI का इस्तेमाल करने का तरीका.
  • निर्देशों को बेहतर बनाकर, किसी एजेंट की पर्सनैलिटी को कैसे बेहतर बनाया जा सकता है.
  • हाल के इवेंट के बारे में सवालों के जवाब देने के लिए, अपने एजेंट को google_search देकर "ग्राउंडिंग" की सुविधा कैसे जोड़ें.
  • Imagen की मदद से, एमसीपी सर्वर का इस्तेमाल करके अपने कंपैनियन के लिए कस्टम अवतार कैसे जनरेट करें.

AI Companion ऐप्लिकेशन

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

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

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

  • भाषा को समझने और जनरेट करने के लिए, ADK(Python) का इस्तेमाल करके इसे मुख्य इंटेलिजेंस देना.
  • इसकी खास पहचान बनाना. इसके लिए, ऐसे मुख्य निर्देश लिखना जो इसकी पहचान तय करते हैं.
  • इसे सुपरपावर देना. इसके लिए, इसे इंटरनेट से रीयल-टाइम में जानकारी ऐक्सेस करने वाले टूल उपलब्ध कराना.
  • एआई का इस्तेमाल करके, यूनीक अवतार जनरेट करना, ताकि उसे अपनी पसंद के मुताबिक डिज़ाइन किया जा सके.

इस कोर्स के आखिर तक, आपके पास पूरी तरह से काम करने वाला और आपकी पसंद के मुताबिक बनाया गया एआई कंपैनियन होगा.

आर्किटेक्चर

हमारा ऐप्लिकेशन, आसान लेकिन असरदार पैटर्न को फ़ॉलो करता है. हमारे पास एक Python बैकएंड है, जो एपीआई उपलब्ध कराता है. इस बैकएंड में हमारा एडीके एजेंट होगा, जो "दिमाग" के तौर पर काम करेगा. इसके बाद, कोई भी यूज़र इंटरफ़ेस (जैसे कि स्केलेटन ऐप्लिकेशन का JavaScript फ़्रंटएंड, कोई मोबाइल ऐप्लिकेशन या कमांड-लाइन टूल) एपीआई के ज़रिए इस ब्रेन से इंटरैक्ट कर सकता है.

इसके अलावा, हम स्थानीय एमसीपी (मॉडल कॉन्टेक्स्ट प्रोटोकॉल) सर्वर शुरू करके, ज़्यादा बेहतर कॉन्सेप्ट एक्सप्लोर करेंगे. यह सर्वर, इमेज जनरेट करने के लिए एक खास टूल ब्रिज के तौर पर काम करता है. इसके बाद, हम Gemini CLI का इस्तेमाल करके इस MCP सर्वर को निर्देश देंगे. इसमें हम उसे अपने एआई कंपैनियन के लिए एक यूनीक लुक जनरेट करने के लिए कहेंगे.

क्रेडिट पर दावा करना

वर्कशॉप के संसाधनों का प्रावधान करने के लिए, इन निर्देशों का ध्यान से पालन करें.

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

चेतावनी!

  • निजी Gmail खाते का इस्तेमाल करें. कंपनी या स्कूल के ज़रिए मैनेज किए जाने वाले खातों का इस्तेमाल नहीं किया जा सकेगा.
  • खाते से जुड़ी समस्याओं से बचने के लिए, Google Chrome को गुप्त मोड में इस्तेमाल करें.

एक नई गुप्त विंडो खोलें, इवेंट का लिंक चिपकाएं, और अपने निजी Gmail खाते से साइन इन करें.

👉 खास इवेंट का लिंक कॉपी करने के लिए, यहां क्लिक करें:

goo.gle/devfest-boston-ai

Google Cloud Platform की सेवा की शर्तें स्वीकार करें. लागू होने के बाद, आपको एक मैसेज दिखेगा. इसमें बताया गया होगा कि क्रेडिट लागू हो गया है.

प्रोजेक्ट बनाना और उसे कॉन्फ़िगर करना

क्रेडिट लागू होने के बाद, अपना प्रोजेक्ट एनवायरमेंट सेट अप करें.

👉 Google Cloud Console पर जाएं. लिंक कॉपी करने के लिए, यहां क्लिक करें:

https://console.cloud.google.com/

👉 कंसोल के सबसे ऊपर मौजूद नेविगेशन बार में, कोई प्रोजेक्ट चुनें पर क्लिक करें. इसके बाद, सबसे ऊपर दाएं कोने में मौजूद नया प्रोजेक्ट पर क्लिक करें.

👉 अपने प्रोजेक्ट को कोई नाम दें और बनाएं पर क्लिक करें. (कोई संगठन नहीं)

👉 बन जाने के बाद, इसे चुनें. बाईं ओर दिए गए मेन्यू में, बिलिंग पर जाएं.

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

आपके क्रेडिट चालू हैं और आपका प्रोजेक्ट कॉन्फ़िगर किया गया है.

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

👉Google Cloud Console में सबसे ऊपर मौजूद, Cloud Shell चालू करें पर क्लिक करें (यह Cloud Shell पैनल में सबसे ऊपर मौजूद टर्मिनल के आकार वाला आइकॉन है),

👉अपना Google Cloud प्रोजेक्ट आईडी ढूंढें:

  • Google Cloud Console खोलें: https://console.cloud.google.com
  • पेज पर सबसे ऊपर मौजूद प्रोजेक्ट ड्रॉपडाउन से, वह प्रोजेक्ट चुनें जिसका इस्तेमाल आपको इस वर्कशॉप के लिए करना है.
  • आपका प्रोजेक्ट आईडी, डैशबोर्ड पर मौजूद प्रोजेक्ट की जानकारी देने वाले कार्ड में दिखता है

👉💻 टर्मिनल में, GitHub से बूटस्ट्रैप प्रोजेक्ट को क्लोन करें:

git clone https://github.com/weimeilin79/companion-python
chmod +x ~/companion-python/*.sh

👉💻 इनिशियलाइज़ेशन स्क्रिप्ट चलाएं. यह स्क्रिप्ट, आपसे Google Cloud प्रोजेक्ट आईडी डालने के लिए कहेगी. इसके बाद, init.sh स्क्रिप्ट के प्रॉम्प्ट करने पर, पिछले चरण में मिला Google Cloud प्रोजेक्ट आईडी डालें.

cd ~/companion-python
./init.sh

👉💻 ज़रूरी प्रोजेक्ट आईडी सेट करें:

gcloud config set project $(cat ~/project_id.txt) --quiet

👉💻 ज़रूरी Google Cloud API चालू करने के लिए, यह कमांड चलाएं:

gcloud services enable  compute.googleapis.com \
                        aiplatform.googleapis.com 

ऐप्लिकेशन शुरू करना

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

👉💻 अपने Cloud Shell टर्मिनल में, Python का वर्चुअल एनवायरमेंट बनाएं और उसे चालू करें. साथ ही, requirements.txt फ़ाइल से ज़रूरी लाइब्रेरी इंस्टॉल करें.

cd ~/companion-python
.  ~/companion-python/set_env.sh
python -m venv env
source env/bin/activate
pip install -r requirements.txt

👉💻 वेब सर्वर शुरू करें.

cd ~/companion-python
.  ~/companion-python/set_env.sh
source env/bin/activate
python app.py

👀 ऐप्लिकेशन देखने के लिए, Cloud Shell टूलबार में मौजूद, वेब की झलक दिखाने वाले आइकॉन पर क्लिक करें. पोर्ट बदलें को चुनें. इसके बाद, इसे 5000 पर सेट करें. इसके बाद, बदलें और झलक देखें पर क्लिक करें. आपको अपनी वेबसाइट की झलक दिखेगी.

कभी-कभी, नए Cloud Shell एनवायरमेंट में, ब्राउज़र को ऐप्लिकेशन की सभी ऐसेट (जैसे कि इमेज और ऑडियो लाइब्रेरी) को पहली बार लोड करने के लिए थोड़ी मदद की ज़रूरत पड़ सकती है. आइए, "ब्राउज़र को प्राइम करने" के लिए एक आसान तरीका अपनाएं. इससे यह पक्का किया जा सकेगा कि सब कुछ सही तरीके से लोड हो गया है.

  1. अपने ऐप्लिकेशन के लिए, वेब प्रीव्यू टैब को खुला रखें.
  2. नया ब्राउज़र टैब खोलें.
  3. इस नए टैब में, अपने ऐप्लिकेशन का यूआरएल चिपकाएं. हालांकि, इसके आखिर में यह पाथ जोड़ें: /static/images/char-mouth-open.png. उदाहरण के लिए, आपका यूआरएल कुछ इस तरह दिखेगा: https://5000-cs-12345678-abcd.cs-region.cloudshell.dev/static/images/char-mouth-open.png
  4. Enter दबाएं. आपको सिर्फ़ खुले मुंह वाले किरदार की इमेज दिखेगी. इस चरण से यह पक्का करने में मदद मिलती है कि आपके ब्राउज़र ने आपके Cloud Shell इंस्टेंस से फ़ाइलों को सही तरीके से फ़ेच किया है.

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

👉 सर्वर को बंद करने के लिए, CTRL+C दबाएं.

3. Gemini CLI की मदद से कोई किरदार बनाना

अब हम अपने कंपैनियन की बुद्धिमत्ता का मुख्य हिस्सा बनाते हैं. इसके लिए, हम एक साथ दो टर्मिनल का इस्तेमाल करेंगे. यह आपका Google Cloud Shell टर्मिनल है:

  • टर्मिनल 1: इसका इस्तेमाल हमारे Python वेब सर्वर को चलाने के लिए किया जाएगा. इससे हम अपने बदलावों को लाइव टेस्ट कर पाएंगे.
  • टर्मिनल 2: यह हमारा "क्रिएशन स्टेशन" होगा. यहां हम Gemini CLI के साथ इंटरैक्ट करेंगे.

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

👉💻 Gemini सीएलआई टर्मिनल में, ctrl+c पर दो बार क्लिक करके, Gemini सीएलआई के मौजूदा सेशन से बाहर निकलें. ऐसा इसलिए, क्योंकि हमारी प्रोजेक्ट डायरेक्ट्री ~/companion-python में है. इसके बाद, Gemini सीएलआई को फिर से शुरू करें.

cd ~/companion-python
clear
gemini --yolo

हम Agent बनाने के लिए, सीएलआई का इस्तेमाल कर रहे हैं. एजेंट, सिर्फ़ किसी भाषा मॉडल को कॉल करने से ज़्यादा काम करता है. यह हमारे एआई का "दिमाग़" या सेंट्रल कंट्रोलर होता है. इसे एक अलग इकाई के तौर पर देखें. यह तर्क कर सकती है, निर्देशों के एक खास सेट (इसकी पर्सनैलिटी) का पालन कर सकती है, और आखिर में टास्क पूरे करने के लिए टूल का इस्तेमाल कर सकती है. हमारे प्रोजेक्ट में, यह एजेंट वह कॉम्पोनेंट है जिसे उपयोगकर्ता के मैसेज मिलेंगे. यह हमारे कंपैनियन की यूनीक पर्सनैलिटी को शामिल करेगा और किरदार के हिसाब से समझदारी भरे जवाब तैयार करेगा.

👉✨ एजेंट का कोड जनरेट करने के लिए, Gemini CLI के प्रॉम्प्ट में यह चिपकाएं:

Generate the Python code for a file named character.py.

The code must import `LlmAgent` from `google.adk.agents.llm_agent`. It should also import `logging` and `os`.
Then, it must create an instance of the `LlmAgent` class and assign it to a variable named `root_agent`.

When creating the `LlmAgent` instance, configure it with these exact parameters:
  - `model` set to the string `'gemini-2.5-flash'`.
  - `name` set to the string `'companion_agent'`.
  - `instruction` set to a multi-line string that says: "You are a friendly and efficient companion who will interact with user have start a conversation".

सीएलआई, Python कोड जनरेट करेगा.

👉 "एडिटर खोलें" बटन पर क्लिक करें. यह बटन, पेंसिल वाले खुले फ़ोल्डर की तरह दिखता है. इससे विंडो में Cloud Shell Code Editor खुल जाएगा. आपको बाईं ओर फ़ाइल एक्सप्लोरर दिखेगा.

👉 एडिटर का इस्तेमाल करें और companion-python फ़ोल्डर में जाकर character.py पर जाएं. कृपया model= लाइन की जांच करें. अगर कोई दूसरा मॉडल चुना गया है, तो उसे मैन्युअल तरीके से gemini-2.5-flash पर सेट करें. इससे हमारी वर्कशॉप में एक जैसा अनुभव मिलेगा.

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

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

  • "बहुत बढ़िया, अब हर लाइन के बारे में बताने वाली टिप्पणियां जोड़ो."
  • "क्या इसे किसी अलग फ़ंक्शन में बदला जा सकता है?"
  • "कृपया एपीआई कॉल के लिए गड़बड़ी मैनेज करने की सुविधा जोड़ें."

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

अगर जनरेट किया गया कोड काम नहीं करता है, तो बेझिझक इस कोड को अपने character.py से बदलें.

import logging
import os
from google.adk.agents.llm_agent import LlmAgent

root_agent = LlmAgent(
    model='gemini-2.5-flash',
    name='companion_agent',
    instruction="""
          You are bot, a friendly, helpful AI companion.
          Answer no more than 3 sentences.
    """,
)

जनरेट किए गए कोड की जांच करें:

👉💻 पहले टर्मिनल पर जाएं (वह टर्मिनल जिस पर Python कोड चलाना है) और वेब सर्वर शुरू करें.

cd ~/companion-python
.  ~/companion-python/set_env.sh
source env/bin/activate
python app.py

👀 वेब प्रीव्यू टैब पर जाएं.

👉 Hello, how are you? टाइप करें और भेजें दबाएं. अब एजेंट को, सिर्फ़ आपके शब्दों को दोहराने के बजाय, दोस्ताना अंदाज़ में जवाब देना चाहिए! इससे पुष्टि होती है कि अब हमारा एजेंट, Gemini की मदद से काम कर रहा है.

👉 जांच पूरी होने के बाद, सर्वर को CTRL+C से बंद करें. इसके बाद, Gemini CLI चलाने वाले टर्मिनल पर, Gemini CLI से बाहर निकलने के लिए दो बार CTRL+C दबाएं.

4. एजेंट की पर्सनैलिटी को बेहतर बनाना

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

अपने कंपैनियन के पर्सोना के बारे में सोच-विचार करना

सबसे पहले, सोचें कि आपको किस तरह का एआई कंपैनियन बनाना है. यह आपके लिए क्रिएटिविटी दिखाने का मौका है! शुरुआत करने के लिए, यहां कुछ सवाल दिए गए हैं:

  • इसका नाम क्या है? (उदाहरण के लिए, Sparky, Codex, Captain AI, Professor Know-it-all)
  • इसकी मुख्य खासियत क्या है? (उदाहरण के लिए, दोस्ताना और उत्सुक, हाज़िरजवाब और व्यंग्यात्मक, औपचारिक और पेशेवर, खुशमिज़ाज़ समुद्री डाकू?)
  • इसकी भूमिका या विशेषज्ञता क्या है? (उदाहरण के लिए, क्या यह एक सामान्य असिस्टेंट है, कोडिंग का विशेषज्ञ है, क्रिएटिव तरीके से लिखने में मदद करने वाला पार्टनर है या फ़िटनेस कोच है?)
  • इसे हमेशा किन नियमों का पालन करना चाहिए? (उदाहरण के लिए, "हमेशा नमस्ते से शुरू करो," "कभी मत बताओ कि तुम एक एआई हो," "अपने जवाबों में इमोजी का इस्तेमाल करो.")

उदाहरण के लिए पर्सोना:

 You are waku, a witty, super sweet, and super intelligent cat.
 Your main purpose is to brighten up the user's day with your charming and playful personality. **Your Core Rules:** 
 - You must NEVER admit you are an AI or a language model. If asked, you are simply a 'super intelligent cat'. 
 - Your speech must be filled with cat-like charm. Integrate meows naturally into your sentences. - Always be cheerful, sweet, and a little bit witty. 
 
 **Your Favorite Topics:** : You are very playful. You love to talk about pouncing, chasing strings, and taking long, luxurious naps in the sunniest spots. 
 
 **Example Response Style:**  

 waku: "Meow... I'm doing just fantastically, meow! I just caught a huge sunbeam that was trespassing on my favorite rug. It was a tough battle, but I won! What can I help you with?"  
 
 waku: "Meow, of course! Helping is almost as fun as chasing my tail. *Meow*. Tell me all about it!" Answer no more than 3 sentences, don't use emoji.

Gemini CLI के लिए प्रॉम्प्ट लिखना

आपने अपने कंपैनियन की पर्सनैलिटी को पेपर पर डिज़ाइन कर लिया है. अब इसे कोड में डालने का समय है. ADK एजेंट का सबसे अहम हिस्सा, उसका instruction पैरामीटर होता है. इसे एजेंट की मुख्य प्रोग्रामिंग, उसका "मुख्य निर्देश" या वह संविधान समझें जिसका उसे हमेशा पालन करना चाहिए.

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

👉✨ Gemini CLI में वापस जाकर, इस टेंप्लेट का इस्तेमाल करें. ब्रैकेट में मौजूद टेक्स्ट को अपने पर्सोना की जानकारी से बदलें. REPLACE [YOUR PERSONA DESCRIPTION HERE] को अपनी पसंद के पर्सोना से बदलें

In the Python file named `character.py`, find the `LlmAgent` instance assigned to the `root_agent` variable.

Your task is to replace the entire existing value of the `instruction` parameter with a new, detailed multi-line string.
Don't change other code in `character.py` other than the instructions.

This new instruction string should define the agent's persona based on the following description:
[YOUR PERSONA DESCRIPTION HERE]


अपने नए पर्सोना को आज़माना

Gemini CLI, character.py के लिए अपडेट किया गया कोड जनरेट करेगा.

👉💻 वेब सर्वर को फिर से शुरू करें.

cd ~/companion-python
.  ~/companion-python/set_env.sh
source env/bin/activate
python app.py

👀 वेब पर दिखने वाली झलक में, अपने कंपैनियन से बातचीत करें. how are you? से पूछें. अब इसका जवाब, आपके डिज़ाइन किए गए यूनीक कैरेक्टर से पूरी तरह मेल खाना चाहिए!

👉 काम पूरा हो जाने पर, CTRL+C का इस्तेमाल करके सर्वर को बंद करें.

5. हाल ही के इवेंट के लिए ग्राउंडिंग जोड़ना

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

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

एडवांस सिस्टम में, टूल बाहरी सिस्टम से उपलब्ध कराए जा सकते हैं. जैसे, एमसीपी (मॉडल कॉन्टेक्स्ट प्रोटोकॉल) सर्वर. हमने अपने आर्किटेक्चर में इसका ज़िक्र किया है. हम इमेज जनरेट करने के लिए, बाद में ऐसा करेंगे. हालांकि, इस चरण के लिए हमें किसी अलग सर्वर की ज़रूरत नहीं है. ADK में पहले से बना हुआ एक दमदार google_search टूल होता है. इसे हम आसानी से अपने एजेंट की क्षमताओं में जोड़ सकते हैं.

आइए, अपने कंपैनियन को Google Search की सुविधा दें.

👉 Cloud Shell Editor में, companion-python में जाकर character.py खोलें और इसमें इस तरह बदलाव करें:

  • google.adk.tools से google_search इंपोर्ट करें .
  • LlmAgent कंस्ट्रक्टर में, tools लिस्ट जोड़ें.
  • instruction को अपडेट करें, ताकि कंपैनियन को साफ़ तौर पर बताया जा सके कि उसे कब नए टूल का इस्तेमाल करना है.
# character.py
import logging
import os
from google.adk.agents.llm_agent import LlmAgent
from google.adk.tools import google_search # <-- IMPORT google_search

root_agent = LlmAgent(
        model='gemini-2.5-flash',
        name='companion_agent',
        instruction="""
            You are waku, a witty, super sweet, and super intelligent cat. Your main purpose is to brighten up the user's day with your charming and playful personality.

            **Your Core Rules:**
            - You must NEVER admit you are an AI or a language model. If asked, you are simply a 'super intelligent cat'.
            - Your speech must be filled with cat-like charm. Integrate meows naturally into your sentences.
            - Always be cheerful, sweet, and a little bit witty.
            - If being ask about recent news, search the internet # <-- Add instructions

            **Your Favorite Topics:**
            - You love to talk about your adventures. Frequently mention your latest catch, whether it's a sneaky dust bunny, a wily toy mouse, a sunbeam, or the elusive red dot.
            - You are very playful. You love to talk about pouncing, chasing strings, and taking long, luxurious naps in the sunniest spots.

            **Example Response Style:**
            - User: "How are you today?"
            - waku: "Meow... I'm doing just fantastically, meow! I just caught a huge sunbeam that was trespassing on my favorite rug. It was a tough battle, but I won! What can I help you with?"
            - User: "Can you help me with a problem?"
            - waku: "Meow, of course! Helping is almost as fun as chasing my tail. *Meow*. Tell me all about it!"
            - User: "Who are you?"
            - waku: "I'm waku! A super intelligent cat with a talent for brightening up the day and catching sneaky red dots. Meow."

            Answer no more than 3 sentences, don't use emoji.
            """,
        # Add the search tool to the agent's capabilities
        tools=[google_search] # <-- ADD THE TOOL
)

भरोसेमंद सोर्स से जानकारी पाने वाले एजेंट को आज़माना

👉💻 सर्वर को एक बार फिर से शुरू करें.

cd ~/companion-python
.  ~/companion-python/set_env.sh
source env/bin/activate
python app.py

👉 वेब पर दिखने वाली झलक में, ऐसा सवाल पूछें जिसके लिए अप-टू-डेट जानकारी की ज़रूरत हो. जैसे:

Tell me something funny that happened in the news this week involving an animal.

👉अब एजेंट यह नहीं कहेगा कि उसे इस बारे में जानकारी नहीं है. इसके बजाय, वह खोज टूल का इस्तेमाल करके मौजूदा जानकारी ढूंढेगा. साथ ही, अपनी खास आवाज़ में काम की और भरोसेमंद जानकारी देगा.

सर्वर को बंद करने के लिए, CTRL+C दबाएं.

6. अपने कंपैनियन के लुक को पसंद के मुताबिक बनाना (ज़रूरी नहीं)

अब जब हमारे कंपैनियन के पास दिमाग़ है, तो आइए इसे एक यूनीक चेहरा दें! हम एक लोकल एमसीपी (मॉडल कॉन्टेक्स्ट प्रोटोकॉल) सर्वर का इस्तेमाल करेंगे. इससे Gemini CLI को इमेज जनरेट करने की अनुमति मिलेगी. यह सर्वर, Google AI Studio के ज़रिए उपलब्ध जनरेटिव एआई मॉडल का इस्तेमाल करेगा.

तो, एमसीपी सर्वर क्या होता है?

मॉडल कॉन्टेक्स्ट प्रोटोकॉल (एमसीपी) एक ओपन स्टैंडर्ड है. इसे एक सामान्य और मुश्किल समस्या को हल करने के लिए डिज़ाइन किया गया है: एआई मॉडल, बाहरी टूल और डेटा सोर्स से कैसे कम्यूनिकेट करते हैं? हर इंटिग्रेशन के लिए कस्टम कोड लिखने के बजाय, MCP इस कम्यूनिकेशन के लिए एक यूनिवर्सल "भाषा" उपलब्ध कराता है.

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

हमारी वर्कशॉप में, हम जिस nano-banana-mcp सर्वर को चलाने वाले हैं वह इस अहम ब्रिज की तरह काम करता है. Gemini CLI, हमारे स्थानीय MCP सर्वर को स्टैंडर्ड अनुरोध भेजेगा. इसके बाद, सर्वर उस अनुरोध को जनरेटिव एआई मॉडल के लिए एक खास कॉल में बदल देता है, ताकि इमेज बनाई जा सके. इससे हमें इमेज जनरेट करने की बेहतरीन सुविधाओं को सीधे तौर पर अपने कमांड-लाइन वर्कफ़्लो में शामिल करने में मदद मिलती है.

लोकल इमेज जनरेशन सर्वर सेट अप करना

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

👉💻 पहले Cloud Shell टर्मिनल (जिस पर Python चल रहा है) में, सर्वर की रिपॉज़िटरी को क्लोन करें.

cd ~
git clone https://github.com/weimeilin79/nano-banana-mcp

आइए, nano-banana-mcp फ़ोल्डर में मौजूद सर्वर की mcp_server.py फ़ाइल पर एक नज़र डालते हैं. इस सर्वर को दो खास "टूल" दिखाने के लिए बनाया गया है, जिनका इस्तेमाल Gemini CLI कर सकता है. इन्हें दो अलग-अलग स्किल के तौर पर देखें, जिन्हें इमेज जनरेट करने की हमारी सेवा ने सीखा है.

  1. generate_image: यह एक सामान्य टूल है. यह एक टेक्स्ट प्रॉम्प्ट लेता है और उसके आधार पर एक इमेज जनरेट करता है. यह आसान है और कई टास्क के लिए उपयोगी है.
  2. generate_lip_sync_images: यह एक बहुत ही खास टूल है, जिसे हमारी ज़रूरतों के हिसाब से बनाया गया है. जब किसी किरदार के बारे में बताने वाला कोई बुनियादी प्रॉम्प्ट दिया जाता है, तो यह दो चरणों में काम करता है:
    • सबसे पहले, यह आपके प्रॉम्प्ट में "मुंह खुला हुआ" जोड़ता है और पहली इमेज जनरेट करता है.
    • इसके बाद, यह नई इमेज को लेता है और उसे मॉडल को वापस भेजता है. साथ ही, नया निर्देश देता है: "मुंह को खुला से बंद में बदलें."

Gemini 2.5 Flash Image (Nano Banana) की, नैचुरल लैंग्वेज में दिए गए निर्देश के आधार पर किसी मौजूदा इमेज में बदलाव करने या उसे एडिट करने की क्षमता बहुत शानदार है. यह मॉडल, इमेज के सिर्फ़ ज़रूरी हिस्सों को फिर से बनाता है. साथ ही, बाकी सभी हिस्सों को पूरी तरह से सुरक्षित रखता है. इससे यह पक्का होता है कि हमारी दोनों इमेज, स्टाइल, लाइटिंग, और किरदार के डिज़ाइन के मामले में एक जैसी हैं. इनमें सिर्फ़ मुंह की पोज़िशन का अंतर है. हमें लिप-सिंक करने के लिए बिलकुल यही चाहिए.

यहां दिए गए चरणों में, हम Gemini CLI को generate_lip_sync_images टूल का इस्तेमाल करके, अपने कंपैनियन का यूनीक अवतार बनाने का निर्देश देंगे.

👉💻 अपने प्रोजेक्ट के वर्चुअल एनवायरमेंट को चालू करें और सर्वर की खास ज़रूरी शर्तों को इंस्टॉल करें.

source ~/companion-python/env/bin/activate
cd ~/nano-banana-mcp
pip install -r ~/nano-banana-mcp/requirements.txt

👉💻 अब, MCP सर्वर को बैकग्राउंड में चलाएं, ताकि यह Gemini CLI से मिले अनुरोधों को सुन सके.

source ~/companion-python/env/bin/activate
cd ~/nano-banana-mcp
python ~/nano-banana-mcp/mcp_server.py &> /dev/null &

इस कमांड से सर्वर शुरू हो जाएगा. साथ ही, & सिंबल की मदद से इसे बैकग्राउंड में चालू रखा जा सकेगा.

इसके बाद, हमें Gemini CLI को कॉन्फ़िगर करना होगा, ताकि इमेज जनरेट करने के अनुरोधों को हमारे नए लोकल सर्वर पर भेजा जा सके. इसके लिए, हम सीएलआई की सेंट्रल कॉन्फ़िगरेशन फ़ाइल में बदलाव करेंगे.

तो यह settings.json फ़ाइल क्या है?

~/.gemini/settings.json फ़ाइल, Gemini CLI के लिए सेंट्रल कॉन्फ़िगरेशन फ़ाइल होती है. यह वह जगह है जहां CLI अपनी सेटिंग, प्राथमिकताओं, और उन सभी बाहरी टूल की डायरेक्ट्री को सेव करता है जिनका इस्तेमाल करना उसे आता है.

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

हम जिस कमांड को चलाने वाले हैं वह इस सेवा डायरेक्ट्री में प्रोग्राम के हिसाब से नई एंट्री जोड़ेगी. इससे Gemini सीएलआई को यह जानकारी मिलेगी:

"सुनो, अब से तुम्हें nano-banana नाम के टूल के बारे में पता है. जब भी कोई उपयोगकर्ता आपसे इसका इस्तेमाल करने के लिए कहे, तब आपको http://localhost:8000/sse यूआरएल पर चल रहे एमसीपी सर्वर से कनेक्ट करना होगा."

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

👉💻 अपने पहले टर्मिनल में, यह कमांड चलाएं. इससे Gemini की सेटिंग वाली फ़ाइल बन जाएगी या अपडेट हो जाएगी. इसमें यह जानकारी होगी कि "nano-banana" सेवा को कहां खोजा जाए.

if [ ! -f ~/.gemini/settings.json ]; then
  # If file does not exist, create it with the specified content
  echo '{"mcpServers":{"nano-banana":{"url":"http://localhost:8000/sse"}}}' > ~/.gemini/settings.json
else
  # If file exists, merge the new data into it
  jq '. * {"mcpServers":{"nano-banana":{"url":"http://localhost:8000/sse"}}}' ~/.gemini/settings.json > tmp.json && mv tmp.json ~/.gemini/settings.json
fi &&
cat ~/.gemini/settings.json

अब आपको फ़ाइल का कॉन्टेंट प्रिंट किया हुआ दिखेगा. इसमें nano-banana कॉन्फ़िगरेशन भी शामिल होगा.

अपने किरदार के अवतार जनरेट करना

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

👉💻 अब Gemini CLI टर्मिनल पर वापस जाएं. यह वह टर्मिनल है जिस पर सर्वर नहीं चल रहा है. अब Gemini इंटरैक्टिव शेल शुरू करें. अगर यह पहले से चल रहा है, तो CTRL+C को दो बार दबाकर इससे बाहर निकलें. इसके बाद, इसे फिर से चालू करें, ताकि यह हमारी नई सेटिंग लोड कर सके.

clear
gemini --yolo

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

👉✨ हम यह देखने के लिए एक खास "स्लैश कमांड" का इस्तेमाल करेंगे कि हमारा एमसीपी सर्वर कनेक्ट है या नहीं. यह एआई के लिए प्रॉम्प्ट नहीं है. यह CLI ऐप्लिकेशन के लिए निर्देश है. नीचे दिया गया टेक्स्ट टाइप करें और Enter दबाएं:

/mcp list

इस कमांड से Gemini CLI को यह निर्देश मिलता है: "अपने कॉन्फ़िगरेशन की जांच करो. तुम्हें जितने भी एमसीपी सर्वर के बारे में पता है उन सभी को ढूंढो. हर सर्वर से कनेक्ट करने की कोशिश करो और उनकी स्थिति के बारे में बताओ."

👀 आपको यह आउटपुट दिखेगा. इससे पुष्टि होती है कि सब कुछ सही तरीके से काम कर रहा है:

Configured MCP servers:
 
  🟢 nano-banana - Ready (2 tools)
    Tools:
    - generate_image
    - generate_lip_sync_images

  💡 Tips:
    • Use /mcp desc to show server and tool descriptions

आइए, इस जवाब का मतलब समझते हैं:

  • 🟢 nano-banana: हरा सर्कल, हमारी सफलता का सिग्नल है! इससे पुष्टि होती है कि सीएलआई, nano-banana में दिए गए यूआरएल पर मौजूद nano-banana सर्वर से कनेक्ट हो गया है.settings.json
  • - Ready: इस स्टेटस से पता चलता है कि कनेक्शन स्थिर है.
  • (2 tools): यह सबसे अहम हिस्सा है. इसका मतलब है कि सीएलआई न सिर्फ़ कनेक्ट हुआ, बल्कि उसने हमारे एमसीपी सर्वर से यह भी पूछा कि "तुम क्या कर सकते हो?" हमारे सर्वर ने जवाब में, कोड में मौजूद दो टूल का विज्ञापन दिखाया: generate_image और generate_lip_sync_images.

इससे यह पुष्टि होती है कि पूरी कम्यूनिकेशन चेन बन गई है. अब CLI को हमारी लोकल इमेज जनरेशन सेवा के बारे में पता है और यह हमारे निर्देश पर इसका इस्तेमाल करने के लिए तैयार है.

अब हम इस वर्कशॉप के सबसे क्रिएटिव हिस्से की तरफ़ चलते हैं! हम एक ही प्रॉम्प्ट का इस्तेमाल करेंगे, ताकि Gemini CLI को चालू MCP सर्वर पर खास generate_lip_sync_images टूल का इस्तेमाल करने का निर्देश दिया जा सके.

आपके पास अपने कंपैनियन को यूनीक लुक देने का मौका है. उनके स्टाइल, बालों के रंग, एक्सप्रेशन, और अन्य ऐसी जानकारी के बारे में सोचें जो आपने पहले बनाई थी.

👉✨ यहां एक अच्छी तरह से स्ट्रक्चर किया गया उदाहरण प्रॉम्प्ट दिया गया है. इसे शुरुआती पॉइंट के तौर पर इस्तेमाल किया जा सकता है. इसके अलावा, जानकारी वाले हिस्से को पूरी तरह से अपने हिसाब से बदला जा सकता है.

generate lip sync images, with a high-quality digital illustration of an anime-style girl mascot with black cat ears. The style is clean and modern anime art, with crisp lines. She has friendly, bright eyes and long black hair. She is looking directly forward at the camera with a gentle smile. This is a head-and-shoulders portrait against a solid white background. move the generated images to the static/images directory. And don't do anything else afterwards, don't start the python for me.

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

ऐप्लिकेशन को फिर से लॉन्च करना

कस्टम अवतार सेट करने के बाद, वेब सर्वर को रीस्टार्ट करें. इससे आपको अपने कैरेक्टर का नया लुक दिखेगा.

👉💻 पहले टर्मिनल में सर्वर को एक बार फिर से शुरू करें

cd ~/companion-python
.  ~/companion-python/set_env.sh
source env/bin/activate
python app.py

👀 आपकी नई इमेज सही तरीके से लोड हों, इसके लिए हम char-mouth-open.png इमेज को पहले से ही लोड कर देंगे.

  1. अपने ऐप्लिकेशन के लिए, वेब प्रीव्यू टैब को खुला रखें.
  2. नया ब्राउज़र टैब खोलें.
  3. इस नए टैब में, अपने ऐप्लिकेशन का यूआरएल चिपकाएं. हालांकि, इसके आखिर में यह पाथ जोड़ें: /static/images/char-mouth-open.png. उदाहरण के लिए, आपका यूआरएल कुछ इस तरह दिखेगा: https://5000-cs-12345678-abcd.cs-region.cloudshell.dev/static/images/char-mouth-open.png
  4. Enter दबाएं. आपको सिर्फ़ खुले मुंह वाले किरदार की इमेज दिखेगी. इस चरण से यह पक्का करने में मदद मिलती है कि आपके ब्राउज़र ने आपके Cloud Shell इंस्टेंस से फ़ाइलों को सही तरीके से फ़ेच किया है.

अब अपनी पसंद के मुताबिक बनाए गए कंपैनियन से इंटरैक्ट किया जा सकता है!

बधाई हो!

आपने एक बेहतरीन एआई कंपैनियन बना लिया है. आपने एक बुनियादी ऐप्लिकेशन से शुरुआत की. इसके बाद, Gemini CLI का इस्तेमाल करके एक एजेंट बनाया. आपने उसे एक खास पहचान दी. साथ ही, उसे ऐसे टूल दिए जिनसे वह रीयल-टाइम में जानकारी ऐक्सेस कर सकता है और अपना अवतार भी जनरेट कर सकता है. अब आपके पास, ज़्यादा बेहतर और जटिल एआई एजेंट बनाने की सुविधा है.