आरएजी के लिए, Google Gemini की फ़ाइल खोजने वाले टूल का इस्तेमाल करना

1. परिचय

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

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

  • आरएजी की बुनियादी बातें और इसकी ज़रूरत क्यों है.
  • Gemini की फ़ाइल खोजने की सुविधा क्या है और इसके फ़ायदे क्या हैं.
  • फ़ाइल सर्च स्टोर बनाने का तरीका.
  • फ़ाइल खोज स्टोर में, अपनी पसंद के मुताबिक बनाई गई फ़ाइलें अपलोड करने का तरीका.
  • आरएजी के लिए, Gemini की फ़ाइल खोजने वाले टूल का इस्तेमाल कैसे करें.
  • Google एजेंट डेवलपमेंट किट (एडीके) का इस्तेमाल करने के फ़ायदे.
  • ADK का इस्तेमाल करके बनाए गए एजेंटिक समाधान में, Gemini के फ़ाइल खोजने वाले टूल का इस्तेमाल कैसे करें.
  • Google Search जैसे Google के "नेटिव" टूल के साथ-साथ, Gemini के फ़ाइल खोजने वाले टूल का इस्तेमाल कैसे करें.

आपको क्या करना होगा

  • Google Cloud प्रोजेक्ट बनाएं और डेवलपमेंट एनवायरमेंट सेट अप करें.
  • Google के जनरेटिव एआई एसडीके का इस्तेमाल करके, Gemini पर आधारित एक सामान्य एजेंट बनाएं. हालांकि, इसमें एआई डेवलपमेंट किट (एडीके) का इस्तेमाल न करें. इस एजेंट में Google Search का इस्तेमाल करने की सुविधा होनी चाहिए, लेकिन इसमें RAG की सुविधा नहीं होनी चाहिए.
  • यह दिखाता हो कि वह किसी खास विषय के बारे में सटीक और अच्छी क्वालिटी की जानकारी नहीं दे सकता.
  • Gemini File Search Store बनाने और उसे मैनेज करने के लिए, Jupyter notebook बनाएं. इसे स्थानीय तौर पर या Google Colab पर चलाया जा सकता है.
  • नोटबुक का इस्तेमाल करके, फ़ाइल खोजने की सुविधा वाले स्टोर में पसंद के मुताबिक कॉन्टेंट अपलोड करें.
  • ऐसा एजेंट बनाओ जिसमें फ़ाइल खोजने की सुविधा जुड़ी हो. साथ ही, यह साबित करो कि वह बेहतर जवाब दे सकता है.
  • हमारे शुरुआती "बेसिक" एजेंट को Google Search टूल के साथ ADK एजेंट में बदलें.
  • ADK वेब यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके, एजेंट की जांच करें.
  • फ़ाइल खोजने की सुविधा को ADK एजेंट में शामिल करें. इसके लिए, एजेंट-एज़-ए-टूल पैटर्न का इस्तेमाल करें, ताकि हम Google Search टूल के साथ-साथ फ़ाइल खोजने के टूल का इस्तेमाल कर सकें.

2. आरएजी क्या है और इसकी ज़रूरत क्यों है

सही कहा... Retrieval Augmented Generation.

अगर आप यहां हैं, तो शायद आपको पता होगा कि यह क्या है. हालांकि, हम आपको इसके बारे में एक बार फिर बता देते हैं. एलएलएम (जैसे कि Gemini) बहुत अच्छे होते हैं, लेकिन इनमें कुछ समस्याएं होती हैं:

  1. इनमें हमेशा पुरानी जानकारी होती है: इनके पास सिर्फ़ ट्रेनिंग के दौरान सीखी गई जानकारी होती है.
  2. उन्हें हर चीज़ के बारे में जानकारी नहीं होती: बेशक, मॉडल बहुत बड़े होते हैं, लेकिन उन्हें हर चीज़ के बारे में जानकारी नहीं होती.
  3. उन्हें आपकी मालिकाना हक वाली जानकारी नहीं पता होती: उनके पास काफ़ी जानकारी होती है, लेकिन उन्होंने आपके इंटरनल दस्तावेज़, आपके ब्लॉग या आपके Jira टिकट नहीं पढ़े होते हैं.

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

एक तरीका यह है कि हम अपनी मालिकाना हक वाली जानकारी को सीधे तौर पर बातचीत के कॉन्टेक्स्ट में डाल दें. कम जानकारी के लिए यह ठीक है, लेकिन ज़्यादा जानकारी होने पर यह समस्या तेज़ी से बढ़ती है. खास तौर पर, इससे ये समस्याएं होती हैं:

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

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

यह बाहरी डेटा को इंपोर्ट करके, उसे छोटे-छोटे हिस्सों में बांटता है. इसके बाद, डेटा को वेक्टर एम्बेडिंग में बदलता है. फिर, उन एम्बेडिंग को किसी सही वेक्टर डेटाबेस में सेव और इंडेक्स करता है.

59f80cd49a8d8fdb.png

इसलिए, RAG को लागू करने के लिए, हमें आम तौर पर इन बातों का ध्यान रखना होता है:

  1. वेक्टर डेटाबेस (Pinecone, Weaviate, pgvector के साथ Postgres...) को स्पिन अप करना.
  2. अपने दस्तावेज़ों (जैसे, PDF, मार्कडाउन वगैरह) को छोटे-छोटे हिस्सों में बांटने के लिए, चंकिंग स्क्रिप्ट लिखना.
  3. एम्बेडिंग मॉडल का इस्तेमाल करके, उन चंक के लिए एम्बेडिंग (वेक्टर) जनरेट करना.
  4. वेक्टर डेटाबेस में वेक्टर सेव करना.

हालांकि, दोस्त एक-दूसरे को ज़्यादा जटिल चीज़ें बनाने से रोकते हैं. अगर हम आपसे कहें कि ऐसा करने का एक आसान तरीका है, तो क्या होगा?

3. ज़रूरी शर्तें

Google Cloud प्रोजेक्ट बनाना

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

पक्का करें कि आपके प्रोजेक्ट के लिए बिलिंग चालू हो. अपने प्रोजेक्ट का बिलिंग स्टेटस देखने का तरीका जानने के लिए, यह गाइड देखें.

ध्यान दें कि इस कोडलैब को पूरा करने के लिए, आपको कोई शुल्क नहीं देना होगा. ज़्यादा से ज़्यादा कुछ पैसे.

आगे बढ़ें और अपना प्रोजेक्ट तैयार करें. मैं इंतज़ार करूंगा.

डेमो रेपो का क्लोन बनाना

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

अपने टर्मिनल से या Google Cloud Shell Editor में इंटिग्रेट किए गए टर्मिनल से, ये कमांड चलाएं. Cloud Shell और इसका एडिटर बहुत काम का है. इसमें आपकी ज़रूरत की सभी कमांड पहले से इंस्टॉल होती हैं और सब कुछ "आउट-ऑफ़-द-बॉक्स" काम करता है.

git clone https://github.com/derailed-dash/gemini-file-search-demo
cd gemini-file-search-demo

इस ट्री में, रेपो में मौजूद मुख्य फ़ोल्डर और फ़ाइलें दिखाई गई हैं:

gemini-file-search-demo/
├── app/
│   ├── basic_agent_adk/        # Agent with Google Search, using ADK framework
│   │   └── agent.py
│   ├── rag_agent_adk/          # Agent with Google Search and File Search, using ADK framework
│   │   ├── agent.py            
│   │   └── tools_custom.py      
│   ├── sdk_agent.py            # Agent using GenAI SDK (no ADK) with Google Search tool
│   └── sdk_rag_agent.py        # Agent using GenAI SDK (no ADK) with Gemini File Search tool
├── data/
│   └── story.md                # Sample story with "bespoke content" to use with Gemini File Search Store
├── notebooks/
│   └── file_search_store.ipynb # Jupyter notebook for creating and managing Gemini File Search Store
│
├── .env.template               # Template for environment variables - make a copy as .env
├── Makefile                    # Makefile for `make` commands
├── pyproject.toml              # Project configuration and dependencies
└── README.md                   # This file

इस फ़ोल्डर को Cloud Shell Editor या अपने पसंदीदा एडिटर में खोलें. (क्या आपने Antigravity का इस्तेमाल किया है? अगर आपने अब तक इसका इस्तेमाल नहीं किया है, तो अभी इसे आज़माएं.)

ध्यान दें कि इस रिपॉज़िटरी में, फ़ाइल data/story.md में एक सैंपल स्टोरी - "द वर्महोल इनकर्सन" मौजूद है. मैंने इसे Gemini की मदद से लिखा है! यह कमांडर डैज़बो और उसकी समझदार स्टारशिप के स्क्वाड्रन के बारे में है. (मैंने Elite Dangerous गेम से कुछ प्रेरणा ली है.) यह कहानी, हमारी ‘खास जानकारी का डेटाबेस' के तौर पर काम करती है. इसमें ऐसे खास तथ्य शामिल हैं जिनके बारे में Gemini को जानकारी नहीं है. साथ ही, Google Search का इस्तेमाल करके भी Gemini इन तथ्यों को खोज नहीं सकता.

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

आपकी सुविधा के लिए, हमने Makefile उपलब्ध कराया है. इससे आपको कई कमांड आसानी से चलाने में मदद मिलेगी. आपको खास निर्देश याद रखने की ज़रूरत नहीं है. इसके बजाय, make <target> जैसे निर्देश का इस्तेमाल किया जा सकता है. हालांकि, make सिर्फ़ Linux / MacOS / WSL एनवायरमेंट में उपलब्ध है. अगर Windows का इस्तेमाल WSL के बिना किया जा रहा है, तो आपको उन सभी कमांड को चलाना होगा जो make टारगेट में शामिल हैं.

# Install dependencies with make
make install

# If you don't have make...
uv sync --extra jupyter

Cloud Shell Editor में make install चलाने पर, यह ऐसा दिखता है:

64ed9878be59adad.png

Gemini API पासकोड बनाना

Gemini Developer API का इस्तेमाल करने के लिए, आपको Gemini API कुंजी की ज़रूरत होगी. Gemini फ़ाइल खोजने वाले टूल का इस्तेमाल करने के लिए, हमें इसकी ज़रूरत होती है. एपीआई पासकोड पाने का सबसे आसान तरीका, Google AI Studio का इस्तेमाल करना है. यह आपके Google Cloud प्रोजेक्ट के लिए, एपीआई पासकोड पाने का आसान इंटरफ़ेस उपलब्ध कराता है. खास चरणों के बारे में जानने के लिए, यह गाइड देखें.

एपीआई कुंजी बन जाने के बाद, उसे कॉपी करें और सुरक्षित रखें.

अब आपको इस एपीआई कुंजी को एनवायरमेंट वैरिएबल के तौर पर सेट करना होगा. हम .env फ़ाइल का इस्तेमाल करके ऐसा कर सकते हैं. शामिल किए गए .env.example को .env नाम की नई फ़ाइल के तौर पर कॉपी करें. फ़ाइल कुछ ऐसी दिखनी चाहिए:

export GEMINI_API_KEY="your-api-key"
export MODEL="gemini-2.5-flash"
export STORE_NAME="demo-file-store"

your-api-key की जगह अपनी एपीआई कुंजी डालें. अब यह कुछ ऐसा दिखना चाहिए:

70fba02ac80c3790.png

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

source .env

4. बेसिक एजेंट

सबसे पहले, आइए एक बेसलाइन तय करें. हम एक सामान्य एजेंट को चलाने के लिए, रॉ google-genai SDK का इस्तेमाल करेंगे.

कोड

app/sdk_agent.py पर एक नज़र डालें. यह कम से कम ज़रूरी शर्तों को पूरा करने वाला ऐसा तरीका है जो:

  • यह कुकी, genai.Client को इंस्टैंशिएट करती है.
  • इस नीति से, google_search टूल चालू होता है.
  • हो गया. कोई आरएजी नहीं.

कोड को ध्यान से देखें और पक्का करें कि आपको समझ आ गया हो कि यह क्या करता है.

इसे चलाना

# With make
make sdk-agent

# Without make
uv run python app/sdk_agent.py

चलिए, इससे एक सामान्य सवाल पूछते हैं:

> What is the stock price of Google?

इसमें Google Search का इस्तेमाल करके, मौजूदा कीमत का सही जवाब दिया जाना चाहिए:

c1b9b6c7b37290ee.png

अब हम इससे ऐसा सवाल पूछते हैं जिसका जवाब इसे नहीं पता. इसके लिए, एजेंट को हमारी कहानी पढ़नी होगी.

> Who pilots the 'Too Many Pies' ship?

यह जवाब देने में गड़बड़ी कर सकता है या गलत जानकारी दे सकता है. आइए देखते हैं:

945003150f7099cd.png

हालांकि, मॉडल इस सवाल का जवाब नहीं दे पाता. इसे पता ही नहीं है कि हम किस बारे में बात कर रहे हैं!

अब एजेंट से बाहर निकलने के लिए, quit टाइप करें.

5. Gemini की मदद से फ़ाइलें खोजने की सुविधा के बारे में जानकारी

a1af82c360b915e9.png

Gemini की फ़ाइल खोजने की सुविधा में, इन दो चीज़ों का इस्तेमाल किया जाता है:

  1. पूरी तरह से मैनेज किया गया RAG सिस्टम: इसमें आपको कई फ़ाइलें देनी होती हैं. Gemini File Search, आपके लिए फ़ाइलों को छोटे-छोटे हिस्सों में बांटने, उन्हें एम्बेड करने, सेव करने, और वेक्टर इंडेक्सिंग का काम करता है.
  2. एजेंट के तौर पर काम करने वाला "टूल": इसमें, Gemini की फ़ाइल खोजने की सुविधा को एजेंट की परिभाषा में टूल के तौर पर जोड़ा जा सकता है. साथ ही, टूल को फ़ाइल खोजने की सुविधा वाले स्टोर पर भेजा जा सकता है.

हालांकि, सबसे अहम बात यह है कि यह Gemini API में ही शामिल है. इसका मतलब है कि इसका इस्तेमाल करने के लिए, आपको कोई अन्य एपीआई चालू करने या कोई अलग प्रॉडक्ट डिप्लॉय करने की ज़रूरत नहीं है. इसलिए, यह वाकई out-of-the-box सुविधा है.

Gemini की मदद से फ़ाइलें खोजने की सुविधाएँ

इसकी कुछ विशेषताएं ये हैं:

  • चंकिंग, एम्बेड करने, सेव करने, और इंडेक्स करने की प्रोसेस की जानकारी, डेवलपर के तौर पर आपसे छिपाकर रखी जाती है. इसका मतलब है कि आपको एम्बेडिंग मॉडल (जो Gemini Embeddings है) या नतीजे के तौर पर मिले वेक्टर कहां सेव किए जाते हैं, इसके बारे में जानने की ज़रूरत नहीं है. आपको वेक्टर डेटाबेस से जुड़े कोई भी फ़ैसले लेने की ज़रूरत नहीं है.
  • यह कई तरह के दस्तावेज़ों के साथ काम करता है. इसमें PDF, DOCX, Excel, SQL, JSON, Jupyter नोटबुक, HTML, Markdown, CSV, और यहां तक कि zip फ़ाइलें भी शामिल हैं. हालांकि, यह सिर्फ़ इन तक सीमित नहीं है. पूरी सूची यहां देखी जा सकती है. इसलिए, उदाहरण के लिए, अगर आपको अपने एजेंट को टेक्स्ट, तस्वीरों, और टेबल वाली PDF फ़ाइलों से जानकारी देनी है, तो आपको इन PDF फ़ाइलों को पहले से प्रोसेस करने की ज़रूरत नहीं है. बस रॉ PDF फ़ाइलें अपलोड करें. बाकी काम Gemini कर देगा.
  • हम अपलोड की गई किसी भी फ़ाइल में कस्टम मेटाडेटा जोड़ सकते हैं. इससे, रन टाइम में यह फ़िल्टर करने में मदद मिलती है कि हमें टूल के लिए किन फ़ाइलों का इस्तेमाल करना है.

डेटा कहां सेव होता है?

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

जवाब: File Search Store. यह आपकी एम्बेडिंग के लिए पूरी तरह से मैनेज किया गया कंटेनर है. आपको यह जानने की ज़रूरत नहीं है कि यह कैसे काम करता है. आपको बस एक बकेट (प्रोग्राम के हिसाब से) बनानी है. इसके बाद, उसमें अपनी फ़ाइलें अपलोड करनी हैं.

यह सस्ता है!

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

असल में, आपको सिर्फ़ अपलोड/इंडेक्सिंग के समय एम्बेडिंग बनाने के लिए पेमेंट करना होता है. लिखते समय, इसकी कीमत 10 लाख टोकन के लिए 0.15 डॉलर है. यह काफ़ी सस्ता है.

6. हम Gemini की फ़ाइल खोजने की सुविधा का इस्तेमाल कैसे करते हैं?

इसके दो फ़ेज़ होते हैं:

  1. फ़ाइल सर्च स्टोर में एम्बेडिंग बनाएं और सेव करें.
  2. अपने एजेंट से, फ़ाइल खोजने की सुविधा देने वाले स्टोर के बारे में क्वेरी करें.

पहला चरण - Gemini की फ़ाइल खोजने की सुविधा वाला स्टोर बनाने और उसे मैनेज करने के लिए Jupyter Notebook का इस्तेमाल करना

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

इस फ़ेज़ को, आपको अपने डिप्लॉय किए गए एजेंटिक ऐप्लिकेशन में पैकेज करने की ज़रूरत नहीं है. हां, अगर आपको ऐसा करना है, तो किया जा सकता है. उदाहरण के लिए, अगर आपको अपने एजेंटिक ऐप्लिकेशन के एडमिन उपयोगकर्ताओं के लिए कोई यूज़र इंटरफ़ेस (यूआई) बनाना है. हालांकि, अक्सर यह काफ़ी होता है कि आपके पास ऐसा कोड हो जिसे ज़रूरत के हिसाब से चलाया जा सके. और इस कोड को ज़रूरत के हिसाब से चलाने का सबसे अच्छा तरीका क्या है? Jupyter notebook!

द नोटबुक

अपने एडिटर में notebooks/file_search_store.ipynb फ़ाइल खोलें. अगर आपको Jupyter VS Code के किसी एक्सटेंशन को इंस्टॉल करने के लिए कहा जाता है, तो कृपया उसे इंस्टॉल करें.

Cloud Shell Editor में खोलने पर, यह इस तरह दिखेगा:

b87aed3c36a44e81.png

आइए, इसे एक-एक करके सेल में चलाएं. सबसे पहले, ज़रूरी इंपोर्ट के साथ Setup सेल को एक्ज़ीक्यूट करें. अगर आपने पहले कभी नोटबुक नहीं चलाई है, तो आपसे ज़रूरी एक्सटेंशन इंस्टॉल करने के लिए कहा जाएगा. आगे बढ़ें और ऐसा करें. इसके बाद, आपसे कर्नल चुनने के लिए कहा जाएगा. "Python environments..." को चुनें. इसके बाद, उस स्थानीय .venv को चुनें जिसे हमने पहले make install चलाते समय इंस्टॉल किया था:

1101585f7bd5040f.png

इसके बाद:

  • एनवायरमेंट वैरिएबल को पुल करने के लिए, "Local Only" सेल को चलाएं.
  • Gemini Gen AI Client को शुरू करने के लिए, "Client Initialisation" सेल को चलाएं.
  • नाम के हिसाब से Gemini File Search Store को वापस पाने के लिए, हेल्पर फ़ंक्शन के साथ "Retrieve the Store" सेल को चलाएँ.

अब हम स्टोर बनाने के लिए तैयार हैं.

  • स्टोर बनाने के लिए, "Create the Store (One Time)" सेल को चलाएं. हमें ऐसा सिर्फ़ एक बार करना होगा. अगर कोड सही तरीके से काम करता है, तो आपको यह मैसेज दिखेगा "Created store: fileSearchStores/<someid>"
  • इसमें क्या है, यह देखने के लिए "View the Store" सेल चलाएं. इस समय, आपको दिखेगा कि इसमें कोई दस्तावेज़ नहीं है.

बढ़िया! अब हमारे पास Gemini की फ़ाइल खोजने की सुविधा वाला स्टोर उपलब्ध है.

डेटा अपलोड करना

हमें स्टोर पर data/story.md अपलोड करना है. तो निम्न कार्य करें:

  • उस सेल को चलाएं जो अपलोड करने का पाथ सेट करता है. यह हमारे data/ फ़ोल्डर की ओर ले जाता है.
  • अगली सेल चलाएं. इससे स्टोर पर फ़ाइलें अपलोड करने के लिए, यूटिलिटी फ़ंक्शन बनाए जाते हैं. ध्यान दें कि इस सेल में मौजूद कोड, अपलोड की गई हर फ़ाइल से मेटाडेटा निकालने के लिए Gemini का इस्तेमाल करता है. हम निकाली गई इन वैल्यू को स्टोर में कस्टम मेटाडेटा के तौर पर सेव करते हैं. (आपको ऐसा करने की ज़रूरत नहीं है, लेकिन यह एक ज़रूरी काम है.)
  • फ़ाइल अपलोड करने के लिए, सेल चलाएं. ध्यान दें कि अगर हमने पहले भी इसी नाम की कोई फ़ाइल अपलोड की है, तो नोटबुक नया वर्शन अपलोड करने से पहले मौजूदा वर्शन को मिटा देगी. आपको एक मैसेज दिखेगा, जिसमें यह बताया जाएगा कि फ़ाइल अपलोड हो गई है.

4aeb3d5c91a66358.png

दूसरा चरण - हमारे एजेंट में Gemini की फ़ाइल खोजने की सुविधा के साथ RAG को लागू करना

हमने Gemini File Search Store बनाया है और उसमें अपनी कहानी अपलोड की है. अब हमारे एजेंट में, फ़ाइल खोजने की सुविधा का इस्तेमाल करने का समय आ गया है. आइए, एक नया एजेंट बनाते हैं. यह Google Search के बजाय, फ़ाइल खोजने की सुविधा का इस्तेमाल करेगा. app/sdk_rag_agent.py पर एक नज़र डालें.

सबसे पहले, ध्यान दें कि हमने स्टोर का नाम पास करके, स्टोर की जानकारी पाने के लिए एक फ़ंक्शन लागू किया है:

def get_store(client: genai.Client, store_name: str) -> types.FileSearchStore | None:
    """Retrieve a store by display name"""
    try:
        for a_store in client.file_search_stores.list():
            if a_store.display_name == store_name:
                return a_store
    except Exception as e:
        logger.error(f"Error listing stores: {e}")
    return None

स्टोर बन जाने के बाद, इसे इस्तेमाल करना उतना ही आसान है जितना इसे अपने एजेंट से टूल के तौर पर अटैच करना. जैसे:

   file_search_tool = types.Tool(file_search=types.FileSearch(file_search_store_names=[store.name]))

RAG एजेंट को चलाना

इसे इस तरह लॉन्च किया जाता है:

make sdk-rag-agent

# Or, without make:
uv run python app/sdk_rag_agent.py

आइए, उस सवाल को पूछते हैं जिसका जवाब पिछला एजेंट नहीं दे सका:

> Who pilots the 'Too Many Pies' ship?

और जवाब क्या है?

15659914bcdee9c7.png

हो गया! जवाब से हमें यह पता चलता है कि:

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

एजेंट को बंद करने के लिए, quit टाइप करें.

7. हमारे एजेंट को एडीके का इस्तेमाल करने के लिए बदलना

Google का Agent Development Kit (ADK), डेवलपर के लिए एक ओपन सोर्स मॉड्यूलर फ़्रेमवर्क और एसडीके है. इसकी मदद से, एजेंट और एजेंटिक सिस्टम बनाए जा सकते हैं. इससे हमें मल्टी-एजेंट सिस्टम बनाने और उन्हें आसानी से व्यवस्थित करने में मदद मिलती है. ADK को Gemini और Google के नेटवर्क के लिए ऑप्टिमाइज़ किया गया है. हालांकि, यह मॉडल और डिप्लॉयमेंट के हिसाब से काम करता है. साथ ही, इसे अन्य फ़्रेमवर्क के साथ काम करने के लिए बनाया गया है. अगर आपने अब तक ADK का इस्तेमाल नहीं किया है, तो इसके बारे में ज़्यादा जानने के लिए ADK के दस्तावेज़ पर जाएं.

app/basic_agent_adk/agent.py पर एक नज़र डालें. इस सैंपल कोड में देखा जा सकता है कि हमने दो एजेंट लागू किए हैं:

  1. एक root_agent जो उपयोगकर्ता के साथ इंटरैक्शन को मैनेज करता है. इसमें हमने सिस्टम के लिए मुख्य निर्देश दिए हैं.
  2. एक अलग SearchAgent जो google.adk.tools.google_search का इस्तेमाल टूल के तौर पर करता है.

root_agent, SearchAgent का इस्तेमाल एक टूल के तौर पर करता है. इसे इस लाइन का इस्तेमाल करके लागू किया जाता है:

   tools=[AgentTool(agent=search_agent)],

रूट एजेंट का सिस्टम प्रॉम्प्ट ऐसा दिखता है:

You are a helpful AI assistant designed to provide accurate and useful information.
If you don't know the answer, use the SearchAgent to perform a Google search.
Do not attempt to search more than ONCE.
If the search yields no relevant results or returns unrelated content, you MUST immediately respond with: "I could not find any information about that."
Do NOT retry the search with different terms. Do NOT ask for clarification. FAIL FAST.

एजेंट को आज़माना

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

हम इस इंटरफ़ेस को इस कमांड को चलाकर लॉन्च कर सकते हैं:

make adk-playground

# Or, without make:
uv run adk web app --port 8501 --reload_agents

ध्यान दें कि यह कमांड, adk web टूल को app फ़ोल्डर पर ले जाती है. यहां यह अपने-आप ऐसे सभी ADK एजेंट का पता लगा लेगा जो root_agent लागू करते हैं. इसलिए, इसे आज़माकर देखें:

89218e7915011dd3.png

कुछ सेकंड बाद, ऐप्लिकेशन तैयार हो जाता है. अगर कोड को स्थानीय तौर पर चलाया जा रहा है, तो अपने ब्राउज़र पर http://127.0.0.1:8501 खोजें. अगर Cloud Shell Editor में कोड चलाया जा रहा है, तो "वेब प्रीव्यू" पर क्लिक करें और पोर्ट को 8501 पर बदलें:

1b416cc40d67d794.png

यूज़र इंटरफ़ेस (यूआई) दिखने पर, ड्रॉपडाउन से basic_agent_adk को चुनें. इसके बाद, हम इससे सवाल पूछ सकते हैं:

a2acc9901de49e20.gif

अब तक सब ठीक है! वेब यूज़र इंटरफ़ेस (यूआई) में यह भी दिखता है कि रूट एजेंट, SearchAgent को कब ऐक्सेस दे रहा है. यह बहुत काम की सुविधा है.

अब हम इससे वह सवाल पूछते हैं जिसके लिए हमारी कहानी के बारे में जानकारी होना ज़रूरी है:

5a9f9ec06a29160.png

इसे खुद आज़माकर देखें. आपको पता चलेगा कि यह निर्देश के मुताबिक, तुरंत काम नहीं करता.

ADK एजेंट में फ़ाइल सर्च स्टोर को शामिल करना

अब हम इन सभी को एक साथ जोड़ेंगे. हम एक ऐसा ADK एजेंट चलाएंगे जो फ़ाइल सर्च स्टोर और Google Search, दोनों का इस्तेमाल कर सकता है. app/rag_agent_adk/agent.py में मौजूद कोड देखें.

यह कोड, पिछले उदाहरण से मिलता-जुलता है. हालांकि, इसमें कुछ मुख्य अंतर हैं:

  1. हमारे पास एक रूट एजेंट है, जो दो विशेषज्ञ एजेंटों को मैनेज करता है:
  2. RagAgent: यह खास तौर पर जानकारी देने वाला एजेंट है. यह Gemini File Search Store का इस्तेमाल करता है
  3. SearchAgent: सामान्य जानकारी का विशेषज्ञ - Google Search का इस्तेमाल करता है
  4. ADK में अब तक FileSearch के लिए बिल्ट-इन रैपर नहीं है. इसलिए, हम FileSearch टूल को रैप करने के लिए, कस्टम रैपर क्लास FileSearchTool का इस्तेमाल करते हैं. यह file_search_store_names कॉन्फ़िगरेशन को लो-लेवल मॉडल अनुरोध में इंजेक्ट करता है. इसे अलग स्क्रिप्ट app/rag_agent_adk/tools_custom.py में लागू किया गया है.

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

गड़बड़ी - कोई गड़बड़ी हुई: 400 INVALID_ARGUMENT. {‘error': {‘code': 400, ‘message': ‘Search as a tool and file search tool are not supported together', ‘status': ‘INVALID_ARGUMENT'}}

गड़बड़ी: 400 INVALID_ARGUMENT. {‘error': {‘code': 400, ‘message': ‘Search as a tool and file search tool are not supported together', ‘status': ‘INVALID_ARGUMENT'}}

इसके लिए, दोनों स्पेशलिस्ट एजेंट को अलग-अलग सब-एजेंट के तौर पर लागू करें. साथ ही, एजेंट-एज़-अ-टूल पैटर्न का इस्तेमाल करके, उन्हें रूट एजेंट को पास करें. इसके अलावा, रूट एजेंट के सिस्टम निर्देश में, RagAgent का इस्तेमाल करने के बारे में साफ़ तौर पर बताया गया है:

तुम एक मददगार एआई असिस्टेंट हो. तुम्हें सटीक और काम की जानकारी देने के लिए डिज़ाइन किया गया है.

आपके पास दो विशेषज्ञ एजेंटों से संपर्क करने का विकल्प है:

  1. RagAgent: यह इंटरनल नॉलेज बेस से, ज़रूरत के हिसाब से जानकारी पाने के लिए इस्तेमाल किया जाता है.
  2. SearchAgent: Google Search से सामान्य जानकारी पाने के लिए.

RagAgent को हमेशा सबसे पहले आज़माएं. अगर इससे काम का जवाब नहीं मिलता है, तो SearchAgent का इस्तेमाल करें.

फ़ाइनल टेस्ट

ADK के वेब यूज़र इंटरफ़ेस (यूआई) को पहले की तरह चलाएं:

make adk-playground

# Or, without make:
uv run adk web app --port 8501 --reload_agents

इस बार, यूज़र इंटरफ़ेस (यूआई) में rag_agent_adk को चुनें. इसे चलाकर देखें: c4d2cdaa3257e115.gif

हम देख सकते हैं कि यह सवाल के आधार पर सही सब-एजेंट चुनता है.

8. नतीजा

इस कोडलैब को पूरा करने के लिए बधाई!

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

हमें यह पता चला:

  • Gemini की फ़ाइल खोजने की सुविधा, मैनेज किया गया RAG समाधान है. इससे समय और मानसिक शांति मिलती है.
  • ADK की मदद से, हमें मल्टी-एजेंट वाले मुश्किल ऐप्लिकेशन के लिए ज़रूरी स्ट्रक्चर मिलता है. साथ ही, यह डेवलपर को Web UI जैसे इंटरफ़ेस के ज़रिए आसानी से काम करने की सुविधा देता है.
  • "Agent-as-a-Tool" पैटर्न, टूल के साथ काम करने से जुड़ी समस्याओं को हल करता है.

हमें उम्मीद है कि यह लैब आपके लिए मददगार साबित हुई होगी. फिर मिलते हैं!