Gemini 3 Flash और AlloyDB की मदद से, रीयल-टाइम सरप्लस इंजन बनाना

1. खास जानकारी

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

Gemini 3.0 Flash और AlloyDB AI को इंटिग्रेट करके, आपको डेटाबेस में मौजूद डेटा को बेहतर तरीके से समझने में मदद मिलेगी. आपको यह पता चलेगा कि एसक्यूएल में सीधे तौर पर मल्टीमॉडल आइटम का विश्लेषण और सेमैंटिक डिस्कवरी कैसे की जाती है. इससे, इंतज़ार के समय और आर्किटेक्चरल ब्लोट के "एआई टैक्स" को कम किया जा सकता है.

1da27e0c4d9a33e0.jpeg

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

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

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

  • एक क्लिक में प्रोविज़निंग: एआई वर्कलोड के लिए डिज़ाइन किए गए AlloyDB क्लस्टर और इंस्टेंस को सेट अप करने का तरीका.
  • डेटाबेस में एंबेड करना: INSERT स्टेटमेंट में सीधे तौर पर text-embedding-005 वेक्टर जनरेट करना.
  • मल्टीमॉडल रीज़निंग: Gemini 3.0 Flash का इस्तेमाल करके, आइटम "देखना" और डेटिंग के लिए मज़ेदार बायो अपने-आप जनरेट करना.
  • सेमैंटिक डिस्कवरी: ai.if() फ़ंक्शन का इस्तेमाल करके, एसक्यूएल क्वेरी में लॉजिक के आधार पर "वाइब चेक" करना. इससे, सिर्फ़ गणित के आधार पर नहीं, बल्कि कॉन्टेक्स्ट के आधार पर नतीजों को फ़िल्टर किया जा सकता है.

आर्किटेक्चर

Neighbor Loop, ऐप्लिकेशन लेयर की पारंपरिक समस्याओं को हल करता है. डेटा को प्रोसेस करने के लिए, हम उसे बाहर नहीं निकालते. इसके बजाय, हम इनका इस्तेमाल करते हैं:

  1. AlloyDB AI: रीयल-टाइम में वेक्टर जनरेट करने और उन्हें सेव करने के लिए.
  2. Google Cloud Storage: इमेज सेव करने के लिए
  3. Gemini 3.0 Flash: इमेज और टेक्स्ट डेटा पर, एक सेकंड से भी कम समय में तर्क करने के लिए, सीधे तौर पर एसक्यूएल का इस्तेमाल किया जा सकता है.
  4. Cloud Run: इसका इस्तेमाल, हल्के-फुल्के और एक फ़ाइल वाले Flask बैकएंड को होस्ट करने के लिए किया जाता है.

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

  • कोई ब्राउज़र, जैसे कि Chrome या Firefox.
  • बिलिंग की सुविधा वाला Google Cloud प्रोजेक्ट.
  • एसक्यूएल और Python की बुनियादी जानकारी होना.

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

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

  1. Google Cloud Console में, प्रोजेक्ट चुनने वाले पेज पर, Google Cloud प्रोजेक्ट चुनें या बनाएं.
  2. पक्का करें कि आपके Cloud प्रोजेक्ट के लिए बिलिंग चालू हो. किसी प्रोजेक्ट के लिए बिलिंग चालू है या नहीं, यह देखने का तरीका जानें.
  3. आपको Cloud Shell का इस्तेमाल करना होगा. यह Google Cloud में चलने वाला कमांड-लाइन एनवायरमेंट है. Google Cloud Console में सबसे ऊपर मौजूद, Cloud Shell चालू करें पर क्लिक करें.

Cloud Shell बटन की इमेज चालू करें

  1. Cloud Shell से कनेक्ट होने के बाद, यह देखने के लिए कि आपकी पुष्टि हो चुकी है और प्रोजेक्ट को आपके प्रोजेक्ट आईडी पर सेट किया गया है, इस कमांड का इस्तेमाल करें:
gcloud auth list
  1. यह पुष्टि करने के लिए कि gcloud कमांड को आपके प्रोजेक्ट के बारे में पता है, Cloud Shell में यह कमांड चलाएं.
gcloud config list project
  1. अगर आपका प्रोजेक्ट सेट नहीं है, तो इसे सेट करने के लिए इस निर्देश का इस्तेमाल करें:
gcloud config set project <YOUR_PROJECT_ID>
  1. ज़रूरी एपीआई चालू करें: लिंक पर जाएं और एपीआई चालू करें.

इसके अलावा, इसके लिए gcloud कमांड का इस्तेमाल किया जा सकता है. gcloud कमांड और उनके इस्तेमाल के बारे में जानने के लिए, दस्तावेज़ देखें.

समस्याएं और उन्हें हल करने का तरीका

"घोस्ट प्रोजेक्ट" सिंड्रोम

आपने gcloud config set project चलाया है, लेकिन Console के यूज़र इंटरफ़ेस (यूआई) में कोई दूसरा प्रोजेक्ट देखा जा रहा है. सबसे ऊपर बाईं ओर मौजूद ड्रॉपडाउन में, प्रोजेक्ट आईडी देखें!

बिलिंग बैरिकेड

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

एपीआई के डेटा को अपडेट होने में लगने वाला समय

आपने "एपीआई चालू करें" पर क्लिक किया है, लेकिन कमांड लाइन में अब भी Service Not Enabled दिख रहा है. इसके लिए 60 सेकंड इंतज़ार करें. क्लाउड को अपने न्यूरॉन को चालू करने में कुछ समय लगता है.

कोटा Quags

अगर आपने नया ट्रायल खाता इस्तेमाल किया है, तो हो सकता है कि आपने AlloyDB इंस्टेंस के लिए क्षेत्र के हिसाब से तय किया गया कोटा पूरा कर लिया हो. अगर us-central1 काम नहीं करता है, तो us-east1 आज़माएं.

"छिपा हुआ" सर्विस एजेंट

कभी-कभी, AlloyDB सेवा एजेंट को aiplatform.user भूमिका अपने-आप नहीं मिलती. अगर आपकी एसक्यूएल क्वेरी, Gemini से बाद में कम्यूनिकेट नहीं कर पाती हैं, तो आम तौर पर इसकी वजह यही होती है.

3. डेटाबेस सेटअप करना

इस लैब में, हम टेस्ट डेटा के लिए AlloyDB का इस्तेमाल करेंगे. यह सभी संसाधनों को सेव करने के लिए, क्लस्टर का इस्तेमाल करता है. जैसे, डेटाबेस और लॉग. हर क्लस्टर में एक प्राइमरी इंस्टेंस होता है, जो डेटा का ऐक्सेस पॉइंट उपलब्ध कराता है. टेबल में असल डेटा होगा.

आइए, एक AlloyDB क्लस्टर, इंस्टेंस, और टेबल बनाएं. इसमें टेस्ट डेटासेट लोड किया जाएगा.

  1. उस ब्राउज़र में नीचे दिए गए बटन पर क्लिक करें या लिंक को कॉपी करें जिसमें Google Cloud Console का उपयोगकर्ता लॉग इन है.

  1. यह चरण पूरा होने के बाद, repo को आपके लोकल क्लाउड शेल एडिटर में क्लोन कर दिया जाएगा. इसके बाद, प्रोजेक्ट फ़ोल्डर में जाकर नीचे दिए गए कमांड को चलाया जा सकेगा. यह पक्का करना ज़रूरी है कि आप प्रोजेक्ट डायरेक्ट्री में हों:
sh run.sh
  1. अब यूज़र इंटरफ़ेस (टर्मिनल में लिंक पर क्लिक करके या टर्मिनल में "वेब पर झलक देखें" लिंक पर क्लिक करके) का इस्तेमाल करें.
  2. शुरू करने के लिए, प्रोजेक्ट आईडी, क्लस्टर, और इंस्टेंस के नाम डालें.
  3. जब तक लॉग स्क्रोल होते हैं, तब तक जाकर कॉफ़ी ले आएं. यहां यह भी बताया गया है कि पर्दे के पीछे यह कैसे काम करता है.

समस्याएं और उन्हें हल करने का तरीका

"धैर्य" की समस्या

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

क्षेत्र की जानकारी मेल न खाना

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

ज़ॉम्बी क्लस्टर

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

Cloud Shell का टाइम आउट होना

अगर आपका कॉफ़ी ब्रेक 30 मिनट का है, तो Cloud Shell स्लीप मोड में जा सकता है और sh run.sh की प्रोसेस बंद हो सकती है. टैब को चालू रखें!

4. स्कीमा प्रोविज़निंग

AlloyDB क्लस्टर और इंस्टेंस चालू होने के बाद, AlloyDB Studio के एसक्यूएल एडिटर पर जाएं. यहां एआई एक्सटेंशन चालू करें और स्कीमा उपलब्ध कराएं.

1e3ac974b18a8113.png

आपको इंस्टेंस बनने तक इंतज़ार करना पड़ सकता है. इसके बाद, क्लस्टर बनाते समय बनाए गए क्रेडेंशियल का इस्तेमाल करके, AlloyDB में साइन इन करें. PostgreSQL में पुष्टि करने के लिए, इस डेटा का इस्तेमाल करें:

  • उपयोगकर्ता नाम : "postgres"
  • डेटाबेस : "postgres"
  • पासवर्ड : "alloydb" (या क्रिएशन के समय सेट किया गया कोई भी पासवर्ड)

AlloyDB Studio में पुष्टि हो जाने के बाद, SQL कमांड को एडिटर में डाला जाता है. आखिरी विंडो के दाईं ओर मौजूद प्लस आइकॉन का इस्तेमाल करके, एक से ज़्यादा Editor विंडो जोड़ी जा सकती हैं.

28cb9a8b6aa0789f.png

AlloyDB के लिए एडिटर विंडो में कमांड डालें. इसके लिए, ज़रूरत के हिसाब से Run, Format, और Clear विकल्पों का इस्तेमाल करें.

एक्सटेंशन चालू करना

इस ऐप्लिकेशन को बनाने के लिए, हम pgvector और google_ml_integration एक्सटेंशन का इस्तेमाल करेंगे. pgvector एक्सटेंशन की मदद से, वेक्टर एम्बेडिंग को सेव किया जा सकता है और उन्हें खोजा जा सकता है. google_ml_integration एक्सटेंशन, ऐसे फ़ंक्शन उपलब्ध कराता है जिनका इस्तेमाल करके, SQL में अनुमान पाने के लिए Vertex AI के अनुमान लगाने वाले एंडपॉइंट को ऐक्सेस किया जाता है. इन एक्सटेंशन को चालू करें. इसके लिए, ये DDL चलाएं:

CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;

टेबल बनाना

AlloyDB Studio में, नीचे दिए गए डीडीएल स्टेटमेंट का इस्तेमाल करके टेबल बनाई जा सकती है:

-- Items Table (The "Profile" you swipe on)
CREATE TABLE items (
   item_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
   owner_id UUID,
   provider_name TEXT,
   provider_phone TEXT,
   title TEXT,
   bio TEXT,
   category TEXT,
   image_url TEXT,
   item_vector VECTOR(768),
   status TEXT DEFAULT 'available',
   created_at TIMESTAMP DEFAULT NOW()
);

-- Swipes Table (The Interaction)
CREATE TABLE swipes (
   swipe_id SERIAL PRIMARY KEY,
   swiper_id UUID,
   item_id UUID REFERENCES items(item_id),
   direction TEXT CHECK (direction IN ('left', 'right')),
   is_match BOOLEAN DEFAULT FALSE,
   created_at TIMESTAMP DEFAULT NOW()
);

item_vector कॉलम में, टेक्स्ट की वेक्टर वैल्यू सेव की जा सकेंगी.

अनुमति दें

"embedding" फ़ंक्शन पर 'लागू करें' की अनुमति देने के लिए, नीचे दिया गया स्टेटमेंट चलाएं:

GRANT EXECUTE ON FUNCTION embedding TO postgres;

AlloyDB सेवा खाते को Vertex AI User की भूमिका असाइन करना

Google Cloud IAM Console में जाकर, AlloyDB सेवा खाते को "Vertex AI User" की भूमिका का ऐक्सेस दें. यह सेवा खाता इस तरह दिखता है: service-<<PROJECT_NUMBER >>@gcp-sa-alloydb.iam.gserviceaccount.com. PROJECT_NUMBER में आपका प्रोजेक्ट नंबर होगा.

इसके अलावा, Cloud Shell टर्मिनल से नीचे दिया गया कमांड भी चलाया जा सकता है:

PROJECT_ID=$(gcloud config get-value project)


gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"

AlloyDB में Gemini 3 Flash मॉडल रजिस्टर करना

AlloyDB क्वेरी एडिटर में जाकर, यहां दिया गया एसक्यूएल स्टेटमेंट चलाएं

CALL google_ml.create_model(
   model_id => 'gemini-3-flash-preview',
   model_request_url => 'https://aiplatform.googleapis.com/v1/projects/<<YOUR_PROJECT_ID>>/locations/global/publishers/google/models/gemini-3-flash-preview:generateContent',
   model_qualified_name => 'gemini-3-flash-preview',
   model_provider => 'google',
   model_type => 'llm',
   model_auth_type => 'alloydb_service_agent_iam'
);
--replace <<YOUR_PROJECT_ID>> with your project id.

समस्याएं और उन्हें हल करने का तरीका

"पासवर्ड भूल जाना" लूप

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

"एक्सटेंशन नहीं मिला" गड़बड़ी

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

IAM के लागू होने में लगने वाला समय

आपने gcloud IAM कमांड चलाई, लेकिन SQL CALL में अब भी अनुमति से जुड़ी गड़बड़ी आ रही है. IAM में किए गए बदलावों को Google के बैकबोन नेटवर्क पर लागू होने में थोड़ा समय लग सकता है. साँस लें.

वेक्टर डाइमेंशन मेल नहीं खाते

items टेबल को VECTOR(768) पर सेट किया गया है. अगर बाद में किसी दूसरे मॉडल (जैसे कि 1536-डिम मॉडल) का इस्तेमाल किया जाता है, तो आपके इंसर्ट बहुत ज़्यादा हो जाएंगे. text-embedding-005 पर बने रहें.

प्रोजेक्ट आईडी में टाइपिंग से जुड़ी गड़बड़ी

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

5. इमेज स्टोरेज (Google Cloud Storage)

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

  1. बकेट बनाएं: अपने GCP प्रोजेक्ट में एक नई बकेट बनाएं.उदाहरण के लिए, neighborloop-images. इसे उसी इलाके में बनाएं जहां आपका डेटाबेस और ऐप्लिकेशन मौजूद है.
  2. सार्वजनिक ऐक्सेस कॉन्फ़िगर करें: * बकेट के अनुमतियां टैब पर जाएं.
  3. allUsers प्रिंसिपल जोड़ें.
  4. स्टोरेज ऑब्जेक्ट व्यूअर की भूमिका असाइन करें, ताकि सभी लोग फ़ोटो देख सकें. साथ ही, डेमो अपलोड करने के लिए स्टोरेज ऑब्जेक्ट क्रिएटर की भूमिका असाइन करें.

दूसरा तरीका (सेवा खाता): अगर आपको सार्वजनिक ऐक्सेस का इस्तेमाल नहीं करना है, तो पक्का करें कि आपके ऐप्लिकेशन के सेवा खाते को AlloyDB का पूरा ऐक्सेस दिया गया हो. साथ ही, ऑब्जेक्ट को सुरक्षित तरीके से मैनेज करने के लिए, स्टोरेज की ज़रूरी भूमिकाएं दी गई हों.

समस्याएं और उन्हें हल करने का तरीका

The Region Drag

अगर आपका डेटाबेस us-central1 में है और आपका बकेट europe-west1 में है, तो इसका मतलब है कि एआई की परफ़ॉर्मेंस धीमी हो रही है. "वाइब चेक" तेज़ी से होता है, लेकिन यूज़र इंटरफ़ेस (यूआई) के लिए इमेज फ़ेच करने में समय लगेगा. उन्हें एक ही इलाके में रखें!

बकेट के नाम का यूनीक होना

बकेट के नाम, ग्लोबल नेमस्पेस होते हैं. अगर आपको अपनी बकेट का नाम neighborloop-images रखना है, तो हो सकता है कि किसी और ने पहले से ही यह नाम रखा हो. अगर आपका क्रिएटिव नहीं बन पाता है, तो कोई रैंडम सफ़िक्स जोड़ें.

"क्रिएटर" बनाम "दर्शक" के बीच अंतर न कर पाना

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

6. आइए, ऐप्लिकेशन बनाएं

इस रेपो को अपने प्रोजेक्ट में क्लोन करें और आइए, इसके बारे में जानते हैं.

  1. इसे क्लोन करने के लिए, अपने Cloud Shell टर्मिनल में (रूट डायरेक्ट्री में या जहां भी आपको यह प्रोजेक्ट बनाना है), यह कमांड चलाएं:
git clone https://github.com/AbiramiSukumaran/neighbor-loop

इससे प्रोजेक्ट बन जाएगा. इसकी पुष्टि Cloud Shell Editor में की जा सकती है.

53a398aff6ba7d5b.png

  1. Gemini API पासकोड पाने का तरीका
  2. Google AI Studio पर जाएं: aistudio.google.com पर जाएं.
  3. साइन इन करें: उस Google खाते का इस्तेमाल करें जिसका इस्तेमाल Google Cloud प्रोजेक्ट के लिए किया जा रहा है.
  4. एपीआई पासकोड बनाएं:
  5. बाईं ओर मौजूद साइडबार में, "एपीआई कुंजी पाएं" पर क्लिक करें.
  6. "नए प्रोजेक्ट में एपीआई पासकोड बनाएं" बटन पर क्लिक करें.
  7. कुंजी कॉपी करें: कुंजी जनरेट होने के बाद, कॉपी करें आइकॉन पर क्लिक करें.
  8. अब .env फ़ाइल में एनवायरमेंट वैरिएबल सेट करें
GEMINI_API_KEY=<<YOUR_GEMINI_API_KEY>>
DATABASE_URL=postgresql+pg8000://postgres:<<YOUR_PASSWORD>>@<<HOST_IP>>:<<PORT>>/postgres
GCS_BUCKET_NAME=<<YOUR_GCS_BUCKET>>

प्लेसहोल्डर <<YOUR_GEMINI_API_KEY>>, <<YOUR_PASSWORD>, <<HOST_IP>>, <<PORT>> and <<YOUR_GCS_BUCKET>>. की वैल्यू बदलें

समस्याएं और उन्हें हल करने का तरीका

एक से ज़्यादा खातों की वजह से होने वाली उलझन

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

"बिना शुल्क वाला टियर" कोटा पूरा हो गया है

अगर आपने बिना शुल्क वाला टियर इस्तेमाल किया है, तो दर की सीमाएं (आरपीएम - हर मिनट के अनुरोध) लागू होती हैं. Neighbor Loop में बहुत तेज़ी से "स्वाइप" करने पर, आपको 429 Too Many Requests गड़बड़ी का मैसेज मिल सकता है. आराम से जवाब दें!

Exposed Key Security

अगर आपने गलती से, कुंजी वाली .env फ़ाइल को git commit कर दिया हो. .env को हमेशा अपनी .gitignore में जोड़ें.

"कनेक्शन टाइमआउट" अमान्य करना

आपने अपनी .env फ़ाइल में निजी आईपी पते का इस्तेमाल किया है, लेकिन वीपीसी के बाहर से कनेक्ट करने की कोशिश की जा रही है (जैसे, आपकी लोकल मशीन). प्राइवेट आईपी पतों को सिर्फ़ एक ही Google Cloud नेटवर्क से ऐक्सेस किया जा सकता है. सार्वजनिक आईपी पर स्विच करें!

पोर्ट 5432 के बारे में अनुमान

5432, PostgreSQL का स्टैंडर्ड पोर्ट है. हालांकि, अगर आपको Auth Proxy का इस्तेमाल करना है, तो AlloyDB के लिए कभी-कभी पोर्ट के खास कॉन्फ़िगरेशन की ज़रूरत होती है. इस लैब के लिए, पक्का करें कि आपने होस्ट स्ट्रिंग के आखिर में :5432 का इस्तेमाल किया हो.

"भरोसेमंद नेटवर्क" Gatekeeper

सार्वजनिक आईपी होने पर भी, AlloyDB "कनेक्ट करने की अनुमति नहीं देगा". ऐसा तब तक होगा, जब तक आपने कोड चलाने वाले कंप्यूटर के आईपी पते को अनुमति नहीं दी है.हल करें: AlloyDB इंस्टेंस की सेटिंग में जाकर, अनुमति वाले नेटवर्क में 0.0.0.0/0 (सिर्फ़ अस्थायी जांच के लिए!) या अपना आईपी पता जोड़ें.

एसएसएल/टीएलएस हैंडशेक नहीं हो सका

AlloyDB, सुरक्षित कनेक्शन को प्राथमिकता देता है. अगर आपका DATABASE_URL, ड्राइवर के बारे में सही जानकारी नहीं देता है (जैसे कि pg8000 का इस्तेमाल करना), तो हो सकता है कि हैंडशेक चुपचाप फ़ेल हो जाए. इससे आपको "डेटाबेस से कनेक्ट नहीं किया जा सका" गड़बड़ी का सामान्य मैसेज दिखेगा.

"प्राइमरी वर्सेस रीड पूल" स्वैप

अगर आपने प्राइमरी इंस्टेंस के बजाय Read Pool का आईपी पता कॉपी कर लिया है, तो आपका ऐप्लिकेशन आइटम खोजने के लिए काम करेगा. हालांकि, नया आइटम लिस्ट करने की कोशिश करने पर, यह "सिर्फ़ पढ़ने के लिए" गड़बड़ी के साथ क्रैश हो जाएगा. लिखने के लिए, हमेशा प्राइमरी इंस्टेंस के आईपी पते का इस्तेमाल करें.

7. आइए, कोड की जांच करें

आपके सामान के लिए "डेटिंग प्रोफ़ाइल"

c2c543562cc9b353.png

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

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

prompt = """
You are a witty community manager for NeighborLoop.
Analyze this surplus item and return JSON:
{
   "bio": "First-person witty dating-style profile bio for the product, not longer than 2 lines",
   "category": "One-word category",
   "tags": ["tag1", "tag2"]
}
"""
response = genai_client.models.generate_content(
   model="gemini-3-flash-preview",
   contents=[types.Part.from_bytes(data=image_bytes, mime_type="image/jpeg"), prompt],
   config=types.GenerateContentConfig(response_mime_type="application/json")
)

21f871a1b549efcf.png

डेटाबेस में रीयल-टाइम एम्बेडिंग

aa783a459f1b02da.png

AlloyDB की सबसे बेहतरीन सुविधाओं में से एक यह है कि इसमें एसक्यूएल कॉन्टेक्स्ट से बाहर निकले बिना, एम्बेडिंग जनरेट की जा सकती हैं. Python में एम्बेडिंग मॉडल को कॉल करने और वेक्टर को DB पर वापस भेजने के बजाय, मैं एम्बेडिंग() फ़ंक्शन का इस्तेमाल करके, INSERT स्टेटमेंट में यह सब करता हूं:

INSERT INTO items (owner_id, provider_name, provider_phone, title, bio, category, image_url, status, item_vector)
VALUES (
   :owner, :name, :phone, :title, :bio, :cat, :url, 'available',
   embedding('text-embedding-005', :title || ' ' || :bio)::vector
)

इससे यह पक्का होता है कि पोस्ट किए जाने के तुरंत बाद, हर आइटम को उसके मतलब के हिसाब से "खोजा जा सकता है". ध्यान दें कि यह हिस्सा, Neighbor Loop ऐप्लिकेशन की "प्रॉडक्ट की लिस्टिंग" सुविधा के बारे में बताता है.

प्रॉडक्ट लिस्टिंग की सुविधा का स्क्रीनशॉट जोड़ना

Gemini 3.0 की मदद से, ऐडवांस वेक्टर सर्च और स्मार्ट फ़िल्टरिंग की सुविधा

स्टैंडर्ड कीवर्ड सर्च की सुविधा सीमित है. अगर "कुर्सी ठीक करने के लिए कुछ" खोजा जाता है, तो हो सकता है कि पारंपरिक डेटाबेस में कोई नतीजा न मिले. ऐसा तब होता है, जब "कुर्सी" शब्द किसी टाइटल में न हो. Neighbor Loop, AlloyDB AI की बेहतर वेक्टर सर्च सुविधा का इस्तेमाल करके इस समस्या को हल करता है.

pgvector एक्सटेंशन और AlloyDB के ऑप्टिमाइज़ किए गए स्टोरेज का इस्तेमाल करके, हम बहुत तेज़ी से मिलती-जुलती चीज़ों को खोज सकते हैं. हालांकि, वेक्टर प्रॉक्सिमिटी को एलएलएम पर आधारित लॉजिक के साथ मिलाने पर, हमें बेहतर नतीजे मिलते हैं.

AlloyDB AI की मदद से, हम अपनी एसक्यूएल क्वेरी में सीधे तौर पर Gemini जैसे मॉडल को कॉल कर सकते हैं. इसका मतलब है कि हम सिमैंटिक डिस्कवरी कर सकते हैं. इसमें ai.if() फ़ंक्शन का इस्तेमाल करके, लॉजिक के आधार पर "सटीकता की जांच" शामिल है:

SELECT item_id, title, bio, category, image_url,
      1 - (item_vector <=> embedding('text-embedding-005', :query)::vector) as score
FROM items
WHERE status = 'available'
 AND item_vector IS NOT NULL
 AND ai.if(
       prompt => 'Does this text: "' || bio ||'" match the user request: "' ||  :query || '", at least 60%? "',
       model_id => 'gemini-3-flash-preview'
     ) 
ORDER BY score DESC
LIMIT 5

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

सिमैंटिक सर्च की सुविधा का स्क्रीनशॉट

"मैच करने के लिए स्वाइप करें" लूप

यूज़र इंटरफ़ेस (यूआई) में, ताश के पत्तों का क्लासिक डेक दिखता है.

बाईं ओर स्वाइप करें: खारिज करें.

दाईं ओर स्वाइप करें: यह मैच है!

स्वाइप करके मैच करने की सुविधा का स्क्रीनशॉट

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

8. इसे Cloud Run पर डिप्लॉय करते हैं

  1. इसे Cloud Run पर डिप्लॉय करें. इसके लिए, Cloud Shell टर्मिनल में यह कमांड चलाएं. यह वह टर्मिनल होना चाहिए जहां प्रोजेक्ट को क्लोन किया गया है. साथ ही, पक्का करें कि आप प्रोजेक्ट के रूट फ़ोल्डर में हों.

इसे अपने Cloud Shell टर्मिनल में चलाएं:

gcloud beta run deploy neighbor-loop \
   --source . \
   --region=us-central1 \
   --network=<<YOUR_NETWORK_NAME>> \
   --subnet=<<YOUR_SUBNET_NAME>> \
   --allow-unauthenticated \
   --vpc-egress=all-traffic \
   --set-env-vars GEMINI_API_KEY=<<YOUR_GEMINI_API_KEY>>,DATABASE_URL=postgresql+pg8000://postgres:<<YOUR_PASSWORD>>@<<PRIVATE_IP_HOST>>:<<PORT>>/postgres,GCS_BUCKET_NAME=<<YOUR_GCS_BUCKET>>

प्लेसहोल्डर <<YOUR_GEMINI_API_KEY>>, <<YOUR_PASSWORD>, <<PRIVATE_IP_HOST>>, <<PORT>> and <<YOUR_GCS_BUCKET>> की वैल्यू बदलें

कमांड पूरी होने के बाद, यह सेवा का यूआरएल जनरेट करेगा. इसे कॉपी करें.

  1. Cloud Run सेवा खाते को AlloyDB क्लाइंट की भूमिका असाइन करें.इससे आपका सर्वरलेस ऐप्लिकेशन, डेटाबेस में सुरक्षित तरीके से टनल कर पाएगा.

इसे अपने Cloud Shell टर्मिनल में चलाएं:

# 1. Get your Project ID and Project Number
PROJECT_ID=$(gcloud config get-value project)
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")

# 2. Grant the AlloyDB Client role
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/alloydb.client"

अब सेवा के यूआरएल (Cloud Run एंडपॉइंट, जिसे आपने पहले कॉपी किया था) का इस्तेमाल करें और ऐप्लिकेशन को टेस्ट करें. उस पुराने पावर टूल की फ़ोटो अपलोड करें और Gemini को बाकी काम करने दें!

समस्याएं और उन्हें हल करने का तरीका

"बदलाव नहीं हो सका" लूप

अगर डिप्लॉयमेंट पूरा हो जाता है, लेकिन यूआरएल से 500 Internal Server Error मिलता है, तो लॉग देखें! आम तौर पर, ऐसा एनवायरमेंट वैरिएबल मौजूद न होने की वजह से होता है. जैसे, आपके DATABASE_URL में टाइप की गई कोई गलत वैल्यू. इसके अलावा, ऐसा तब भी हो सकता है, जब Cloud Run सेवा खाते के पास आपकी GCS बकेट से डेटा पढ़ने की अनुमतियां न हों.

IAM की "शैडो" भूमिका

अगर आपके पास डिप्लॉय करने की अनुमति है, तब भी Cloud Run सेवा खाते (आम तौर पर [project-number]-compute@developer.gserviceaccount.com) को डेटाबेस से कनेक्शन बनाने के लिए, AlloyDB Client भूमिका की ज़रूरत होती है.

9. समस्या हल करने के बेहतर तरीके

b6cdd3785d5461a9.jpeg

10. डेमो

आपके पास जांच के लिए, अपने एंड पॉइंट का इस्तेमाल करने का विकल्प होना चाहिए.

हालांकि, डेमो के तौर पर कुछ दिनों के लिए, इसका इस्तेमाल किया जा सकता है:

11. व्यवस्थित करें

इस लैब को पूरा करने के बाद, alloyDB क्लस्टर और इंस्टेंस को मिटाना न भूलें.

इससे क्लस्टर और उसके इंस्टेंस मिट जाएंगे.

12. बधाई हो

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

Gemini 3 Flash की तेज़ स्पीड और AlloyDB की ऑप्टिमाइज़ की गई वेक्टर प्रोसेसिंग, कम्यूनिटी-ड्रिवन प्लैटफ़ॉर्म के लिए वाकई में एक नई उपलब्धि है.