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

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

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

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

645daa545b0e46a6.png

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

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

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

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

आर्किटेक्चर

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

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

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

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

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

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

  1. Google Cloud Console में, प्रोजेक्ट चुनने वाले पेज पर जाकर, Google Cloud प्रोजेक्ट चुनें या बनाएं.
  2. पक्का करें कि आपके Cloud प्रोजेक्ट के लिए बिलिंग चालू हो. किसी प्रोजेक्ट के लिए बिलिंग चालू है या नहीं, यह देखने का तरीका जानें.
  1. आपको 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 के यूज़र इंटरफ़ेस (यूआई) में कोई दूसरा प्रोजेक्ट देखा जा रहा है. सबसे ऊपर बाईं ओर मौजूद ड्रॉपडाउन में प्रोजेक्ट आईडी देखें!

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

आपने प्रोजेक्ट चालू कर दिया है, लेकिन बिलिंग खाते की जानकारी नहीं दी है. अगर बिलिंग की जानकारी नहीं दी गई है, तो Cloud SQL शुरू नहीं होगा.

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

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

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

इस लैब में, हम टेस्ट डेटा के लिए डेटाबेस के तौर पर Cloud SQL for PostgreSQL का इस्तेमाल करेंगे.

आइए, एक Cloud SQL इंस्टेंस बनाएं, जहां टेस्ट डेटासेट लोड किया जाएगा.

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

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

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

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

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

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

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

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

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

5a835906362f7609.png

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

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

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

9408d708b7dac90c.png

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

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

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

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

टेबल बनाना

Cloud SQL 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;

एमएल इंटिग्रेशन चालू करना

अपने डेटाबेस में सीधे तौर पर मशीन लर्निंग की सुविधाओं का इस्तेमाल करने के लिए, आपको एमएल इंटिग्रेशन फ़्लैग चालू करना होगा.

Cloud Shell टर्मिनल से यह कमांड चलाएं:

INSTANCE_NAME="<<The name of your Cloud SQL Instance>>"

gcloud sql instances patch $INSTANCE_NAME --tier=db-custom-1-3840

gcloud sql instances patch $INSTANCE_NAME \
    --database-flags=cloudsql.enable_google_ml_integration=on

gcloud sql instances patch $INSTANCE_NAME --enable-google-ml-integration

Cloud SQL सेवा खाते को Vertex AI उपयोगकर्ता की भूमिका असाइन करना

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

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

INSTANCE_NAME="<<The name of your Cloud SQL Instance>>"
PROJECT_ID=$(gcloud config get-value project)

SA_EMAIL=$(gcloud sql instances describe $INSTANCE_NAME --format='value(serviceAccountEmailAddress)')
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:$SA_EMAIL" \
    --role="roles/aiplatform.user"

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

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

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 => 'generic',
    model_auth_type => 'cloudsql_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 कॉल में, अगर आपने ब्रैकेट « » छोड़ दिए हैं या प्रोजेक्ट आईडी गलत टाइप किया है, तो मॉडल रजिस्ट्रेशन सफल दिखेगा. हालांकि, पहली क्वेरी के दौरान यह काम नहीं करेगा. अपनी स्ट्रिंग की दोबारा जांच करें!

Vertex AI इंटिग्रेशन बंद है

–enable-google-ml-integration चलाएं (डेटाबेस फ़्लैग से अलग)

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

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

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

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

अगर आपको कमांड चलाने के साथ-साथ सार्वजनिक ऐक्सेस देना है. Cloud Shell टर्मिनल में यहां दिए गए कमांड चलाएं:

BUCKET_NAME="<<your-bucket-name>>"
gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \
    --member="allUsers" \
    --role="roles/storage.objectViewer"

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

The Region Drag

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

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

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

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

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

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

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

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

cd neighbor-loop-cloud-sql/

इससे प्रोजेक्ट बन जाएगा. इसकी पुष्टि 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 कर दिया है और उसमें कुंजी मौजूद है. हमेशा अपने .gitignore में .env जोड़ें.

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

Cloud SQL की सबसे बेहतरीन सुविधाओं में से एक यह है कि इसमें एसक्यूएल कॉन्टेक्स्ट से बाहर निकले बिना, एम्बेडिंग जनरेट की जा सकती हैं. Python में एम्बेडिंग मॉडल को कॉल करने और वेक्टर को वापस डीबी में भेजने के बजाय, मैं एम्बेडिंग() फ़ंक्शन का इस्तेमाल करके, 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 की मदद से, ऐडवांस वेक्टर सर्च और स्मार्ट फ़िल्टरिंग की सुविधा

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

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

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 
ORDER BY score DESC 
LIMIT 5

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

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

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

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

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

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

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

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

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

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

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

gcloud run deploy neighbor-loop-cloud-sql \
   --source . \
   --region=us-central1 \
   --allow-unauthenticated \
   --network=easy-cloudsql-vpc \
   --subnet=easy-cloudsql-subnet \
   --vpc-egress=private-ranges-only \
   --set-env-vars GEMINI_API_KEY=<<YOUR_GEMINI_API_KEY>>,DATABASE_URL=postgresql+pg8000://postgres:<<YOUR_PASSWORD>>@<<PRIVATE_IP_HOST>>:5432/postgres,GCS_BUCKET_NAME=<<YOUR_GCS_BUCKET>>

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

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

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

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

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

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

9. गड़बड़ी ठीक करने के बेहतर तरीके

206a26fcd93ea48.png

10. डेमो

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

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

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

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

12. बधाई हो

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

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