1. परिचय
इस कोडलैब में, आपको वेक्टर सर्च को Vertex AI embeddings के साथ मिलाकर, AlloyDB AI का इस्तेमाल करने का तरीका बताया जाएगा. यह लैब, AlloyDB AI की सुविधाओं के लिए बनाए गए लैब कलेक्शन का हिस्सा है. दस्तावेज़ में AlloyDB AI पेज पर जाकर, इस बारे में ज़्यादा पढ़ें.

ज़रूरी शर्तें
- Google Cloud Console की बुनियादी जानकारी
- कमांड लाइन इंटरफ़ेस और Google Cloud Shell में बुनियादी कौशल
आपको क्या सीखने को मिलेगा
- AlloyDB क्लस्टर और प्राइमरी इंस्टेंस को डिप्लॉय करने का तरीका
- Google Compute Engine वीएम से AlloyDB से कनेक्ट करने का तरीका
- डेटाबेस बनाने और AlloyDB AI को चालू करने का तरीका
- डेटाबेस में डेटा लोड करने का तरीका
- AlloyDB Studio का इस्तेमाल कैसे करें
- AlloyDB में Vertex AI के एम्बेडिंग मॉडल का इस्तेमाल कैसे करें
- Vertex AI Studio का इस्तेमाल कैसे करें
- Vertex AI के जनरेटिव मॉडल का इस्तेमाल करके, खोज के नतीजों को बेहतर बनाने का तरीका
- वेक्टर इंडेक्स का इस्तेमाल करके परफ़ॉर्मेंस को बेहतर बनाने का तरीका
आपको इन चीज़ों की ज़रूरत होगी
- Google Cloud खाता और Google Cloud प्रोजेक्ट
- कोई वेब ब्राउज़र, जैसे कि Chrome
2. सेटअप और ज़रूरी शर्तें
प्रोजेक्ट सेटअप करना
- Google Cloud Console में साइन इन करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.
ऑफ़िस या स्कूल वाले खाते के बजाय, निजी खाते का इस्तेमाल करें.
- कोई नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. Google Cloud Console में नया प्रोजेक्ट बनाने के लिए, हेडर में मौजूद 'कोई प्रोजेक्ट चुनें' बटन पर क्लिक करें. इससे एक पॉप-अप विंडो खुलेगी.

'कोई प्रोजेक्ट चुनें' विंडो में, 'नया प्रोजेक्ट' बटन दबाएं. इससे नए प्रोजेक्ट के लिए एक डायलॉग बॉक्स खुलेगा.

डायलॉग बॉक्स में, अपने हिसाब से प्रोजेक्ट का नाम डालें और जगह चुनें.

- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. प्रोजेक्ट के नाम का इस्तेमाल Google API नहीं करते हैं. इसे कभी भी बदला जा सकता है.
- प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. Google Cloud Console, यूनीक आईडी अपने-आप जनरेट करता है. हालांकि, इसे अपनी पसंद के मुताबिक बनाया जा सकता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो कोई दूसरा आईडी जनरेट करें. इसके अलावा, अपनी पसंद का आईडी डालकर भी देखा जा सकता है कि वह उपलब्ध है या नहीं. ज़्यादातर कोडलैब में, आपको अपने प्रोजेक्ट आईडी का रेफ़रंस देना होगा. इसे आम तौर पर, PROJECT_ID प्लेसहोल्डर से पहचाना जाता है.
- आपकी जानकारी के लिए बता दें कि एक तीसरी वैल्यू भी होती है, जिसे प्रोजेक्ट नंबर कहते हैं. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
बिलिंग चालू करना
बिलिंग चालू करने के लिए, आपके पास दो विकल्प हैं. आपके पास निजी बिलिंग खाते का इस्तेमाल करने का विकल्प होता है. इसके अलावा, यहां दिए गए तरीके से क्रेडिट रिडीम किए जा सकते हैं.
Google Cloud के 500 रुपये के क्रेडिट रिडीम करें (ज़रूरी नहीं)
इस वर्कशॉप को चलाने के लिए, आपके पास कुछ क्रेडिट वाला बिलिंग खाता होना चाहिए. अगर आपको अपने बिलिंग सिस्टम का इस्तेमाल करना है, तो इस चरण को छोड़ा जा सकता है.
- इस लिंक पर क्लिक करें और किसी निजी Google खाते से साइन इन करें.
- आपको कुछ ऐसा दिखेगा:

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

- 'पुष्टि करें' पर क्लिक करें. अब आप Google Cloud Platform के ट्रायल बिलिंग खाते से कनेक्ट हो गए हैं.

निजी बिलिंग खाता सेट अप करना
अगर आपने Google Cloud क्रेडिट का इस्तेमाल करके बिलिंग सेट अप की है, तो इस चरण को छोड़ा जा सकता है.
निजी बिलिंग खाता सेट अप करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करने के लिए यहां जाएं.
ध्यान दें:
- इस लैब को पूरा करने में, क्लाउड संसाधनों पर 3 डॉलर से कम खर्च आना चाहिए.
- ज़्यादा शुल्क से बचने के लिए, इस लैब के आखिर में दिए गए निर्देशों का पालन करके संसाधनों को मिटाया जा सकता है.
- नए उपयोगकर्ता, 300 डॉलर के मुफ़्त में आज़माने की सुविधा का फ़ायदा पा सकते हैं.
Cloud Shell शुरू करें
Google Cloud को अपने लैपटॉप से रिमोटली ऐक्सेस किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जाएगा. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.
Google Cloud Console में, सबसे ऊपर दाएं कोने में मौजूद टूलबार पर, Cloud Shell आइकॉन पर क्लिक करें:

इसके अलावा, G और फिर S दबाकर भी यह सुविधा ऐक्सेस की जा सकती है. अगर Google Cloud Console में हैं, तो इस क्रम को दबाने पर Cloud Shell चालू हो जाएगा. इसके अलावा, इस लिंक का इस्तेमाल करके भी Cloud Shell चालू किया जा सकता है.
इसे चालू करने और एनवायरमेंट से कनेक्ट करने में सिर्फ़ कुछ सेकंड लगेंगे. यह प्रोसेस पूरी होने के बाद, आपको कुछ ऐसा दिखेगा:

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है. साथ ही, यह Google Cloud पर काम करता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में मौजूद सभी टास्क, ब्राउज़र में किए जा सकते हैं. आपको कुछ भी इंस्टॉल करने की ज़रूरत नहीं है.
3. शुरू करने से पहले
एपीआई चालू करना
आउटपुट:
AlloyDB, Compute Engine, नेटवर्किंग सेवाएं, और Vertex AI का इस्तेमाल करने के लिए, आपको अपने Google Cloud प्रोजेक्ट में इनके एपीआई चालू करने होंगे.
एपीआई चालू करना
टर्मिनल में Cloud Shell के अंदर, पक्का करें कि आपका प्रोजेक्ट आईडी सेट अप हो:
gcloud config set project [YOUR-PROJECT-ID]
PROJECT_ID एनवायरमेंट वैरिएबल सेट करें:
PROJECT_ID=$(gcloud config get-value project)
ज़रूरी सभी एपीआई चालू करें:
gcloud services enable alloydb.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
aiplatform.googleapis.com
अनुमानित आउटपुट
student@cloudshell:~ (test-project-001-402417)$ gcloud config set project test-project-001-402417
Updated property [core/project].
student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-14650]
student@cloudshell:~ (test-project-001-402417)$
student@cloudshell:~ (test-project-001-402417)$ gcloud services enable alloydb.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
aiplatform.googleapis.com
Operation "operations/acat.p2-4470404856-1f44ebd8-894e-4356-bea7-b84165a57442" finished successfully.
एपीआई के बारे में जानकारी
- AlloyDB API (
alloydb.googleapis.com) की मदद से, AlloyDB for PostgreSQL क्लस्टर बनाए, मैनेज किए जा सकते हैं, और उन्हें स्केल किया जा सकता है. यह PostgreSQL के साथ काम करने वाली, पूरी तरह से मैनेज की गई डेटाबेस सेवा है. इसे एंटरप्राइज़ के लेन-देन और विश्लेषण से जुड़े कामों के लिए डिज़ाइन किया गया है. - Compute Engine API (
compute.googleapis.com) की मदद से, वर्चुअल मशीनें (वीएम), परसिस्टेंट डिस्क, और नेटवर्क सेटिंग बनाई और मैनेज की जा सकती हैं. यह Infrastructure-as-a-Service (IaaS) की बुनियादी सुविधाएं उपलब्ध कराता है. इनकी मदद से, अपने वर्कलोड चलाए जा सकते हैं. साथ ही, मैनेज की जाने वाली कई सेवाओं के लिए बुनियादी इंफ़्रास्ट्रक्चर को होस्ट किया जा सकता है. - Cloud Resource Manager API (
cloudresourcemanager.googleapis.com) की मदद से, Google Cloud प्रोजेक्ट के मेटाडेटा और कॉन्फ़िगरेशन को प्रोग्राम के हिसाब से मैनेज किया जा सकता है. इससे आपको संसाधनों को व्यवस्थित करने, पहचान और ऐक्सेस मैनेजमेंट (IAM) नीतियों को मैनेज करने, और प्रोजेक्ट के क्रम में अनुमतियों की पुष्टि करने में मदद मिलती है. - Service Networking API (
servicenetworking.googleapis.com) की मदद से, अपने वर्चुअल प्राइवेट क्लाउड (वीपीसी) नेटवर्क और Google की मैनेज की गई सेवाओं के बीच प्राइवेट कनेक्टिविटी को अपने-आप सेटअप किया जा सकता है. खास तौर पर, AlloyDB जैसी सेवाओं के लिए प्राइवेट आईपी ऐक्सेस सेट अप करने के लिए इसकी ज़रूरत होती है, ताकि वे आपके अन्य संसाधनों के साथ सुरक्षित तरीके से कम्यूनिकेट कर सकें. - Vertex AI API (
aiplatform.googleapis.com) की मदद से, आपके ऐप्लिकेशन मशीन लर्निंग मॉडल बना सकते हैं, उन्हें डिप्लॉय कर सकते हैं, और बड़े पैमाने पर उपलब्ध करा सकते हैं. यह Google Cloud की सभी एआई सेवाओं के लिए, एक जैसा इंटरफ़ेस उपलब्ध कराता है. इसमें जनरेटिव एआई मॉडल (जैसे, Gemini) का ऐक्सेस और कस्टम मॉडल ट्रेनिंग शामिल है.
Vertex AI के एम्बेडिंग मॉडल का इस्तेमाल करने के लिए, अपने डिफ़ॉल्ट क्षेत्र को कॉन्फ़िगर किया जा सकता है. हालांकि, यह ज़रूरी नहीं है. Vertex AI की सुविधा देने वाले देशों/इलाकों के बारे में ज़्यादा जानें. इस उदाहरण में, हम us-central1 क्षेत्र का इस्तेमाल कर रहे हैं.
gcloud config set compute/region us-central1
4. AlloyDB डिप्लॉय करना
AlloyDB क्लस्टर बनाने से पहले, हमें अपने वीपीसी में एक उपलब्ध निजी आईपी रेंज की ज़रूरत होती है, ताकि इसका इस्तेमाल आने वाले समय में AlloyDB इंस्टेंस के लिए किया जा सके. अगर हमारे पास यह नहीं है, तो हमें इसे बनाना होगा. साथ ही, इसे Google की आंतरिक सेवाओं के लिए इस्तेमाल करने की अनुमति देनी होगी. इसके बाद, हम क्लस्टर और इंस्टेंस बना पाएंगे.
निजी आईपी रेंज बनाना
हमें AlloyDB के लिए, अपने वीपीसी में निजी सेवा ऐक्सेस कॉन्फ़िगरेशन को कॉन्फ़िगर करना होगा. यहां यह मान लिया गया है कि प्रोजेक्ट में "डिफ़ॉल्ट" वीपीसी नेटवर्क है और इसका इस्तेमाल सभी कार्रवाइयों के लिए किया जाएगा.
निजी आईपी रेंज बनाएं:
gcloud compute addresses create psa-range \
--global \
--purpose=VPC_PEERING \
--prefix-length=24 \
--description="VPC private service access" \
--network=default
अलॉट की गई आईपी रेंज का इस्तेमाल करके, निजी कनेक्शन बनाएं:
gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=psa-range \
--network=default
कंसोल का अनुमानित आउटपुट:
student@cloudshell:~ (test-project-402417)$ gcloud compute addresses create psa-range \
--global \
--purpose=VPC_PEERING \
--prefix-length=24 \
--description="VPC private service access" \
--network=default
Created [https://www.googleapis.com/compute/v1/projects/test-project-402417/global/addresses/psa-range].
student@cloudshell:~ (test-project-402417)$ gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=psa-range \
--network=default
Operation "operations/pssn.p24-4470404856-595e209f-19b7-4669-8a71-cbd45de8ba66" finished successfully.
student@cloudshell:~ (test-project-402417)$
AlloyDB क्लस्टर बनाएं
इस सेक्शन में, हम us-central1 इलाके में एक AlloyDB क्लस्टर बना रहे हैं.
postgres उपयोगकर्ता के लिए पासवर्ड तय करें. आपके पास अपना पासवर्ड तय करने या पासवर्ड जनरेट करने के लिए, रैंडम फ़ंक्शन का इस्तेमाल करने का विकल्प होता है
export PGPASSWORD=`openssl rand -hex 12`
कंसोल का अनुमानित आउटपुट:
student@cloudshell:~ (test-project-402417)$ export PGPASSWORD=`openssl rand -hex 12`
PostgreSQL का पासवर्ड नोट करें, ताकि इसे बाद में इस्तेमाल किया जा सके.
echo $PGPASSWORD
postgres उपयोगकर्ता के तौर पर इंस्टेंस से कनेक्ट करने के लिए, आपको आने वाले समय में इस पासवर्ड की ज़रूरत होगी. हमारा सुझाव है कि इसे लिख लें या कहीं कॉपी कर लें, ताकि बाद में इसका इस्तेमाल किया जा सके.
कंसोल का अनुमानित आउटपुट:
student@cloudshell:~ (test-project-402417)$ echo $PGPASSWORD bbefbfde7601985b0dee5723
मुफ़्त में आज़माने के लिए क्लस्टर बनाना
अगर आपने पहले कभी AlloyDB का इस्तेमाल नहीं किया है, तो बिना किसी शुल्क के आज़माने के लिए क्लस्टर बनाया जा सकता है:
रीजन और AlloyDB क्लस्टर का नाम तय करें. हम us-central1 क्षेत्र और alloydb-aip-01 को क्लस्टर के नाम के तौर पर इस्तेमाल करने जा रहे हैं:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
क्लस्टर बनाने के लिए, यह कमांड चलाएं:
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION \
--subscription-type=TRIAL
कंसोल का अनुमानित आउटपुट:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION \
--subscription-type=TRIAL
Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4
Creating cluster...done.
उसी Cloud Shell सेशन में, हमारे क्लस्टर के लिए AlloyDB प्राइमरी इंस्टेंस बनाएं. अगर आपका कनेक्शन बंद हो जाता है, तो आपको क्षेत्र और क्लस्टर के नाम वाले एनवायरमेंट वैरिएबल फिर से तय करने होंगे.
gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=8 \
--region=$REGION \
--cluster=$ADBCLUSTER
कंसोल का अनुमानित आउटपुट:
student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=8 \
--region=$REGION \
--availability-type ZONAL \
--cluster=$ADBCLUSTER
Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721
Creating instance...done.
AlloyDB Standard क्लस्टर बनाना
अगर यह प्रोजेक्ट में आपका पहला AlloyDB क्लस्टर नहीं है, तो स्टैंडर्ड क्लस्टर बनाना जारी रखें.
रीजन और AlloyDB क्लस्टर का नाम तय करें. हम us-central1 क्षेत्र और alloydb-aip-01 को क्लस्टर के नाम के तौर पर इस्तेमाल करने जा रहे हैं:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
क्लस्टर बनाने के लिए, यह कमांड चलाएं:
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION
कंसोल का अनुमानित आउटपुट:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION
Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4
Creating cluster...done.
उसी Cloud Shell सेशन में, हमारे क्लस्टर के लिए AlloyDB प्राइमरी इंस्टेंस बनाएं. अगर आपका कनेक्शन बंद हो जाता है, तो आपको क्षेत्र और क्लस्टर के नाम वाले एनवायरमेंट वैरिएबल फिर से तय करने होंगे.
gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=2 \
--region=$REGION \
--cluster=$ADBCLUSTER
कंसोल का अनुमानित आउटपुट:
student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=2 \
--region=$REGION \
--availability-type ZONAL \
--cluster=$ADBCLUSTER
Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721
Creating instance...done.
5. AlloyDB से कनेक्ट करना
AlloyDB को सिर्फ़ प्राइवेट कनेक्शन का इस्तेमाल करके डिप्लॉय किया जाता है. इसलिए, हमें डेटाबेस के साथ काम करने के लिए, PostgreSQL क्लाइंट इंस्टॉल की गई वीएम की ज़रूरत होती है.
GCE वीएम डिप्लॉय करना
AlloyDB क्लस्टर के लिए, उसी इलाके और वीपीसी में एक GCE वीएम बनाएं.
Cloud Shell में यह कमांड चलाएं:
export ZONE=us-central1-a
gcloud compute instances create instance-1 \
--zone=$ZONE \
--create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" --format="value(name)") \
--scopes=https://www.googleapis.com/auth/cloud-platform
कंसोल का अनुमानित आउटपुट:
student@cloudshell:~ (test-project-402417)$ export ZONE=us-central1-a
student@cloudshell:~ (test-project-402417)$ export ZONE=us-central1-a
gcloud compute instances create instance-1 \
--zone=$ZONE \
--create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" --format="value(name)") \
--scopes=https://www.googleapis.com/auth/cloud-platform
Created [https://www.googleapis.com/compute/v1/projects/test-project-402417/zones/us-central1-a/instances/instance-1].
NAME: instance-1
ZONE: us-central1-a
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.0.2
EXTERNAL_IP: 34.71.192.233
STATUS: RUNNING
Postgres Client इंस्टॉल करना
डिप्लॉय की गई वीएम पर, PostgreSQL क्लाइंट सॉफ़्टवेयर इंस्टॉल करें
वीएम से कनेक्ट करें:
gcloud compute ssh instance-1 --zone=us-central1-a
कंसोल का अनुमानित आउटपुट:
student@cloudshell:~ (test-project-402417)$ gcloud compute ssh instance-1 --zone=us-central1-a Updating project ssh metadata...working..Updated [https://www.googleapis.com/compute/v1/projects/test-project-402417]. Updating project ssh metadata...done. Waiting for SSH key to propagate. Warning: Permanently added 'compute.5110295539541121102' (ECDSA) to the list of known hosts. Linux instance-1.us-central1-a.c.gleb-test-short-001-418811.internal 6.1.0-18-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.76-1 (2024-02-01) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. student@instance-1:~$
वर्चुअल मशीन में, कमांड चलाने वाला सॉफ़्टवेयर इंस्टॉल करें:
sudo apt-get update
sudo apt-get install --yes postgresql-client
कंसोल का अनुमानित आउटपुट:
student@instance-1:~$ sudo apt-get update sudo apt-get install --yes postgresql-client Get:1 https://packages.cloud.google.com/apt google-compute-engine-bullseye-stable InRelease [5146 B] Get:2 https://packages.cloud.google.com/apt cloud-sdk-bullseye InRelease [6406 B] Hit:3 https://deb.debian.org/debian bullseye InRelease Get:4 https://deb.debian.org/debian-security bullseye-security InRelease [48.4 kB] Get:5 https://packages.cloud.google.com/apt google-compute-engine-bullseye-stable/main amd64 Packages [1930 B] Get:6 https://deb.debian.org/debian bullseye-updates InRelease [44.1 kB] Get:7 https://deb.debian.org/debian bullseye-backports InRelease [49.0 kB] ...redacted... update-alternatives: using /usr/share/postgresql/13/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode Setting up postgresql-client (13+225) ... Processing triggers for man-db (2.9.4-2) ... Processing triggers for libc-bin (2.31-13+deb11u7) ...
इंस्टेंस से कनेक्ट करना
psql का इस्तेमाल करके, वीएम से प्राइमरी इंस्टेंस से कनेक्ट करें.
उसी Cloud Shell टैब में, जिसमें instance-1 वीएम के लिए एसएसएच सेशन खुला है.
GCE वीएम से AlloyDB से कनेक्ट करने के लिए, AlloyDB के नोट किए गए पासवर्ड (PGPASSWORD) की वैल्यू और AlloyDB क्लस्टर आईडी का इस्तेमाल करें:
export PGPASSWORD=<Noted password>
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres sslmode=require"
कंसोल का अनुमानित आउटपुट:
student@instance-1:~$ export PGPASSWORD=CQhOi5OygD4ps6ty student@instance-1:~$ ADBCLUSTER=alloydb-aip-01 student@instance-1:~$ REGION=us-central1 student@instance-1:~$ INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)") gleb@instance-1:~$ psql "host=$INSTANCE_IP user=postgres sslmode=require" psql (15.6 (Debian 15.6-0+deb12u1), server 15.5) SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off) Type "help" for help. postgres=>
psql सेशन बंद करें:
exit
6. डेटाबेस तैयार करना
हमें एक डेटाबेस बनाना होगा. साथ ही, Vertex AI इंटिग्रेशन को चालू करना होगा. इसके बाद, डेटाबेस ऑब्जेक्ट बनाने होंगे और डेटा इंपोर्ट करना होगा.
AlloyDB को ज़रूरी अनुमतियां देना
AlloyDB सेवा एजेंट को Vertex AI की अनुमतियां दें.
सबसे ऊपर मौजूद "+" साइन का इस्तेमाल करके, 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"
कंसोल का अनुमानित आउटपुट:
student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project) Your active configuration is: [cloudshell-11039] student@cloudshell:~ (test-project-001-402417)$ 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" Updated IAM policy for project [test-project-001-402417]. bindings: - members: - serviceAccount:service-4470404856@gcp-sa-alloydb.iam.gserviceaccount.com role: roles/aiplatform.user - members: ... etag: BwYIEbe_Z3U= version: 1
टैब में "exit" कमांड डालकर टैब बंद करें:
exit
डेटाबेस बनाएं
डेटाबेस बनाने के बारे में क्विकस्टार्ट गाइड.
GCE वीएम सेशन में यह कमांड चलाएं:
डेटाबेस बनाएं:
psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE quickstart_db"
कंसोल का अनुमानित आउटपुट:
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE quickstart_db" CREATE DATABASE student@instance-1:~$
Vertex AI इंटिग्रेशन चालू करना
डेटाबेस में Vertex AI इंटिग्रेशन और pgvector एक्सटेंशन चालू करें.
GCE वीएम में यह कमांड चलाएं:
psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE"
psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "CREATE EXTENSION IF NOT EXISTS vector"
कंसोल का अनुमानित आउटपुट:
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE" psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "CREATE EXTENSION IF NOT EXISTS vector" CREATE EXTENSION CREATE EXTENSION student@instance-1:~$
डेटा इंपोर्ट करना
तैयार किया गया डेटा डाउनलोड करें और उसे नए डेटाबेस में इंपोर्ट करें.
GCE वीएम में यह कमांड चलाएं:
gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"
gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_products.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_products from stdin csv header"
gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_inventory.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_inventory from stdin csv header"
gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_stores.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_stores from stdin csv header"
कंसोल का अनुमानित आउटपुट:
student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" SET SET SET SET SET set_config ------------ (1 row) SET SET SET SET SET SET CREATE TABLE ALTER TABLE CREATE TABLE ALTER TABLE CREATE TABLE ALTER TABLE CREATE TABLE ALTER TABLE CREATE SEQUENCE ALTER TABLE ALTER SEQUENCE ALTER TABLE ALTER TABLE ALTER TABLE student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_products.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_products from stdin csv header" COPY 941 student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_inventory.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_inventory from stdin csv header" COPY 263861 student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_stores.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_stores from stdin csv header" COPY 4654 student@instance-1:~$
7. एम्बेडिंग का हिसाब लगाना
डेटा इंपोर्ट करने के बाद, हमें cymbal_products टेबल में प्रॉडक्ट डेटा मिला. साथ ही, cymbal_inventory टेबल में हर स्टोर में उपलब्ध प्रॉडक्ट की संख्या और cymbal_stores टेबल में स्टोर की सूची मिली. हमें अपने प्रॉडक्ट के ब्यौरों के आधार पर वेक्टर डेटा का हिसाब लगाना है. इसके लिए, हम embedding फ़ंक्शन का इस्तेमाल करेंगे. हम इस फ़ंक्शन का इस्तेमाल करके, Vertex AI इंटिग्रेशन का इस्तेमाल करेंगे. इससे, प्रॉडक्ट के ब्यौरे के आधार पर वेक्टर डेटा का हिसाब लगाया जा सकेगा और उसे टेबल में जोड़ा जा सकेगा. इस्तेमाल की गई टेक्नोलॉजी के बारे में ज़्यादा जानने के लिए, दस्तावेज़ पढ़ें.
कुछ लाइनों के लिए इसे जनरेट करना आसान है, लेकिन अगर हमारे पास हज़ारों लाइनें हैं, तो इसे बेहतर तरीके से कैसे जनरेट करें? यहां हम बड़ी टेबल के लिए, एम्बेडिंग जनरेट करने और उन्हें मैनेज करने का तरीका बताएंगे. अलग-अलग विकल्पों और तकनीकों के बारे में ज़्यादा जानने के लिए, गाइड पढ़ें.
तेज़ी से एम्बेड करने की सुविधा जनरेट करने की सुविधा चालू करें
AlloyDB इंस्टेंस के आईपी और postgres पासवर्ड का इस्तेमाल करके, अपनी वीएम से psql का इस्तेमाल करके डेटाबेस से कनेक्ट करें:
psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"
google_ml_integration एक्सटेंशन के वर्शन की पुष्टि करें.
SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
वर्शन 1.5.2 या इसके बाद का होना चाहिए. यहां आउटपुट का उदाहरण दिया गया है:
quickstart_db=> SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.5.2 (1 row)
डिफ़ॉल्ट वर्शन 1.5.2 या उससे बाद का होना चाहिए. हालांकि, अगर आपके इंस्टेंस में पुराना वर्शन दिख रहा है, तो शायद इसे अपडेट करने की ज़रूरत है. देखें कि इंस्टेंस के लिए रखरखाव की सुविधा बंद तो नहीं की गई थी.
इसके बाद, हमें डेटाबेस फ़्लैग की पुष्टि करनी होगी. हमें google_ml_integration.enable_faster_embedding_generation फ़्लैग को चालू करने की ज़रूरत है. उसी psql सेशन में, फ़्लैग की वैल्यू देखें.
show google_ml_integration.enable_faster_embedding_generation;
अगर फ़्लैग सही जगह पर है, तो अनुमानित आउटपुट ऐसा दिखेगा:
quickstart_db=> show google_ml_integration.enable_faster_embedding_generation; google_ml_integration.enable_faster_embedding_generation ---------------------------------------------------------- on (1 row)
हालांकि, अगर यह "बंद है" के तौर पर दिखता है, तो हमें इंस्टेंस को अपडेट करना होगा. इसे वेब कंसोल या gcloud कमांड का इस्तेमाल करके किया जा सकता है. इसके बारे में दस्तावेज़ में बताया गया है. यहां gcloud कमांड का इस्तेमाल करके, ऐसा करने का तरीका बताया गया है:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud beta alloydb instances update $ADBCLUSTER-pr \
--database-flags google_ml_integration.enable_faster_embedding_generation=on \
--region=$REGION \
--cluster=$ADBCLUSTER \
--project=$PROJECT_ID \
--update-mode=FORCE_APPLY
इसमें कुछ मिनट लग सकते हैं. हालांकि, कुछ समय बाद फ़्लैग की वैल्यू "चालू है" पर सेट हो जाएगी. इसके बाद, अगले चरण पर जाएं.
Embedding कॉलम बनाना
psql का इस्तेमाल करके डेटाबेस से कनेक्ट करें. साथ ही, cymbal_products टेबल में एम्बेडिंग फ़ंक्शन का इस्तेमाल करके, वेक्टर डेटा वाला वर्चुअल कॉलम बनाएं. embedding फ़ंक्शन, Vertex AI से वेक्टर डेटा दिखाता है. यह डेटा, product_description कॉलम से मिले डेटा के आधार पर होता है.
psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"
डेटाबेस से कनेक्ट करने के बाद, psql सेशन में यह कमांड चलाएं:
ALTER TABLE cymbal_products ADD COLUMN embedding vector(768);
इस कमांड से वर्चुअल कॉलम बन जाएगा और इसमें वेक्टर डेटा भर जाएगा.
कंसोल का अनुमानित आउटपुट:
quickstart_db=> ALTER TABLE cymbal_products ADD COLUMN embedding vector(768); ALTER TABLE quickstart_db=>
अब हम 50 लाइनों वाले बैच का इस्तेमाल करके एम्बेडिंग जनरेट कर सकते हैं. अलग-अलग बैच साइज़ का इस्तेमाल करके देखें कि क्या इससे एक्ज़ीक्यूशन में लगने वाला समय बदलता है. उसी psql सेशन में यह कमांड चलाएं:
यह मेज़र करने के लिए कि इसमें कितना समय लगेगा, टाइमिंग की सुविधा चालू करें:
\timing
यह निर्देश चलाएं:
CALL ai.initialize_embeddings(
model_id => 'text-embedding-005',
table_name => 'cymbal_products',
content_column => 'product_description',
embedding_column => 'embedding',
batch_size => 50
);
इसके अलावा, एम्बेड जनरेट करने के लिए कंसोल आउटपुट को दो सेकंड से कम समय में दिखाया गया है:
quickstart_db=> CALL ai.initialize_embeddings(
model_id => 'text-embedding-005',
table_name => 'cymbal_products',
content_column => 'product_description',
embedding_column => 'embedding',
batch_size => 50
);
NOTICE: Initialize embedding completed successfully for table cymbal_products
CALL
Time: 1458.704 ms (00:01.459)
quickstart_db=>
अगर प्रॉडक्ट के ब्यौरे [product_description] कॉलम को अपडेट किया जाता है या कोई नई लाइन डाली जाती है, तो डिफ़ॉल्ट रूप से एम्बेड किए गए डेटा को रीफ़्रेश नहीं किया जाएगा. हालांकि, incremental_refresh_mode पैरामीटर को तय करके ऐसा किया जा सकता है. आइए, "product_embeddings" कॉलम बनाएं और इसे अपने-आप अपडेट होने के लिए सेट करें.
ALTER TABLE cymbal_products ADD COLUMN product_embedding vector(768);
CALL ai.initialize_embeddings(
model_id => 'text-embedding-005',
table_name => 'cymbal_products',
content_column => 'product_description',
embedding_column => 'product_embedding',
batch_size => 50,
incremental_refresh_mode => 'transactional'
);
अब अगर हम टेबल में एक नई लाइन जोड़ते हैं.
INSERT INTO "cymbal_products" ("uniq_id", "crawl_timestamp", "product_url", "product_name", "product_description", "list_price", "sale_price", "brand", "item_number", "gtin", "package_size", "category", "postal_code", "available", "product_embedding", "embedding") VALUES ('fd604542e04b470f9e6348e640cff794', NOW(), 'https://example.com/new_product', 'New Cymbal Product', 'This is a new cymbal product description.', 199.99, 149.99, 'Example Brand', 'EB123', '1234567890', 'Single', 'Cymbals', '12345', TRUE, NULL, NULL);
क्वेरी का इस्तेमाल करके, कॉलम के बीच के अंतर की तुलना की जा सकती है:
SELECT uniq_id,embedding, (product_embedding::real[])[1:5] as product_embedding FROM cymbal_products WHERE uniq_id='fd604542e04b470f9e6348e640cff794';
आउटपुट में हम देख सकते हैं कि embedding कॉलम खाली रहता है, जबकि product_embedding कॉलम अपने-आप अपडेट हो जाता है
quickstart_db=> SELECT uniq_id,embedding, (product_embedding::real[])[1:5] as product_embedding FROM cymbal_products WHERE uniq_id='fd604542e04b470f9e6348e640cff794';
uniq_id | embedding | product_embedding
----------------------------------+-----------+---------------------------------------------------------------
fd604542e04b470f9e6348e640cff794 | | {0.015003494,-0.005349732,-0.059790313,-0.0087091,-0.0271452}
(1 row)
Time: 3.295 ms
8. मिलते-जुलते प्रॉडक्ट खोजने की सुविधा का इस्तेमाल करना
अब हम समानता के आधार पर खोज करने की सुविधा का इस्तेमाल करके खोज कर सकते हैं. इसके लिए, हम ब्यौरों के लिए कैलकुलेट की गई वेक्टर वैल्यू और अपने अनुरोध के लिए मिली वेक्टर वैल्यू का इस्तेमाल करते हैं.
SQL क्वेरी को psql कमांड लाइन इंटरफ़ेस से ही एक्ज़ीक्यूट किया जा सकता है. इसके अलावा, AlloyDB Studio से भी इसे एक्ज़ीक्यूट किया जा सकता है. एक से ज़्यादा लाइनों और जटिल आउटपुट को AlloyDB Studio में बेहतर तरीके से देखा जा सकता है.
AlloyDB Studio से कनेक्ट करना
यहां दिए गए अध्यायों में, डेटाबेस से कनेक्ट करने के लिए ज़रूरी सभी SQL कमांड को AlloyDB Studio में भी चलाया जा सकता है. कमांड चलाने के लिए, आपको प्राइमरी इंस्टेंस पर क्लिक करके, अपने AlloyDB क्लस्टर के लिए वेब कंसोल इंटरफ़ेस खोलना होगा.

इसके बाद, बाईं ओर मौजूद AlloyDB Studio पर क्लिक करें:

quickstart_db डेटाबेस और postgres उपयोगकर्ता चुनें. इसके बाद, क्लस्टर बनाते समय नोट किया गया पासवर्ड डालें. इसके बाद, "पुष्टि करें" बटन पर क्लिक करें.

इससे AlloyDB Studio का इंटरफ़ेस खुल जाएगा. डेटाबेस में कमांड चलाने के लिए, दाईं ओर मौजूद "Editor 1" टैब पर क्लिक करें.

इससे एक इंटरफ़ेस खुलता है, जहाँ एसक्यूएल कमांड चलाई जा सकती हैं

अगर आपको कमांड लाइन psql का इस्तेमाल करना है, तो दूसरा तरीका अपनाएं. साथ ही, अपने वीएम एसएसएच सेशन से डेटाबेस से कनेक्ट करें. इसके बारे में पिछले अध्यायों में बताया गया है.
psql से मिलती-जुलती खोज की सुविधा इस्तेमाल करना
अगर आपका डेटाबेस सेशन डिसकनेक्ट हो गया है, तो psql या AlloyDB Studio का इस्तेमाल करके, डेटाबेस से फिर से कनेक्ट करें.
डेटाबेस से कनेक्ट करें:
psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"
क्लाइंट के अनुरोध से मिलते-जुलते उपलब्ध प्रॉडक्ट की सूची पाने के लिए, क्वेरी चलाएं. वेक्टर वैल्यू पाने के लिए, हम Vertex AI को यह अनुरोध भेजेंगे: "यहां किस तरह के फलों के पेड़ अच्छी तरह से उगते हैं?"
यहां दी गई क्वेरी को चलाकर, हमारे अनुरोध के हिसाब से सबसे सही 10 आइटम चुने जा सकते हैं:
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
(cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) as distance
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
distance ASC
LIMIT 10;
यहां अनुमानित आउटपुट दिया गया है:
quickstart_db=> SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
(cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) as distance
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
distance ASC
LIMIT 10;
product_name | description | sale_price | zip_code | distance
-------------------------+----------------------------------------------------------------------------------+------------+----------+---------------------
Cherry Tree | This is a beautiful cherry tree that will produce delicious cherries. It is an d | 75.00 | 93230 | 0.43922018972266397
Meyer Lemon Tree | Meyer Lemon trees are California's favorite lemon tree! Grow your own lemons by | 34 | 93230 | 0.4685112926118228
Toyon | This is a beautiful toyon tree that can grow to be over 20 feet tall. It is an e | 10.00 | 93230 | 0.4835677149651668
California Lilac | This is a beautiful lilac tree that can grow to be over 10 feet tall. It is an d | 5.00 | 93230 | 0.4947204525907498
California Peppertree | This is a beautiful peppertree that can grow to be over 30 feet tall. It is an e | 25.00 | 93230 | 0.5054166905547247
California Black Walnut | This is a beautiful walnut tree that can grow to be over 80 feet tall. It is a d | 100.00 | 93230 | 0.5084219510932597
California Sycamore | This is a beautiful sycamore tree that can grow to be over 100 feet tall. It is | 300.00 | 93230 | 0.5140519790508755
Coast Live Oak | This is a beautiful oak tree that can grow to be over 100 feet tall. It is an ev | 500.00 | 93230 | 0.5143126438081371
Fremont Cottonwood | This is a beautiful cottonwood tree that can grow to be over 100 feet tall. It i | 200.00 | 93230 | 0.5174774727252058
Madrone | This is a beautiful madrona tree that can grow to be over 80 feet tall. It is an | 50.00 | 93230 | 0.5227400803389093
9. जवाब को बेहतर बनाओ
क्लाइंट ऐप्लिकेशन के लिए, क्वेरी के नतीजे का इस्तेमाल करके जवाब को बेहतर बनाया जा सकता है. साथ ही, क्वेरी के नतीजों को प्रॉम्प्ट के तौर पर Vertex AI के जनरेटिव फ़ाउंडेशन लैंग्वेज मॉडल में शामिल करके, काम का आउटपुट तैयार किया जा सकता है.
इसके लिए, हम वेक्टर सर्च से मिले नतीजों के साथ एक JSON जनरेट करने का प्लान कर रहे हैं. इसके बाद, जनरेट किए गए JSON का इस्तेमाल, Vertex AI में टेक्स्ट एलएलएम मॉडल के लिए प्रॉम्प्ट में किया जाएगा, ताकि काम का आउटपुट तैयार किया जा सके. पहले चरण में, हम JSON जनरेट करते हैं. इसके बाद, हम इसे Vertex AI Studio में टेस्ट करते हैं. आखिरी चरण में, हम इसे SQL स्टेटमेंट में शामिल करते हैं, जिसका इस्तेमाल किसी ऐप्लिकेशन में किया जा सकता है.
JSON फ़ॉर्मैट में आउटपुट जनरेट करें
क्वेरी में बदलाव करके, JSON फ़ॉर्मैट में आउटपुट जनरेट करें. साथ ही, Vertex AI को सिर्फ़ एक लाइन भेजें
क्वेरी का उदाहरण यहां दिया गया है:
WITH trees as (
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
cp.uniq_id as product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;
यहां आउटपुट में अनुमानित JSON दिया गया है:
[{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}]
Vertex AI Studio में प्रॉम्प्ट चलाना
हम जनरेट किए गए JSON का इस्तेमाल, Vertex AI Studio में जनरेटिव एआई टेक्स्ट मॉडल को प्रॉम्प्ट के तौर पर देने के लिए कर सकते हैं
Cloud Console में Vertex AI Studio खोलें.

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

यह आपसे अतिरिक्त एपीआई चालू करने के लिए कह सकता है. हालांकि, इस अनुरोध को अनदेखा किया जा सकता है. हमें लैब को पूरा करने के लिए, किसी अन्य एपीआई की ज़रूरत नहीं है.
यहां वह प्रॉम्प्ट दिया गया है जिसका इस्तेमाल हम पेड़ों के बारे में शुरुआती क्वेरी के JSON आउटपुट के साथ करेंगे:
आप एक मददगार सलाहकार हैं. आपको खरीदार की ज़रूरतों के हिसाब से प्रॉडक्ट ढूंढने में मदद करनी है.
क्लाइंट के अनुरोध के आधार पर, हमने खोज से मिलते-जुलते प्रॉडक्ट की सूची लोड की है.
JSON फ़ॉर्मैट में सूची, जिसमें {"product_name":"name","description":"some description","sale_price":10,"zip_code": 10234, "produt_id": "02056727942aeb714dc9a2313654e1b0"} जैसे वैल्यू शामिल हैं
यहां प्रॉडक्ट की सूची दी गई है:
{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}
ग्राहक ने पूछा, "यहां सबसे अच्छी तरह से कौनसे पेड़ उग रहे हैं?"
आपको प्रॉडक्ट, कीमत, और कुछ अन्य जानकारी देनी चाहिए

यहां JSON वैल्यू के साथ प्रॉम्प्ट चलाने और gemini-2.5-flash-light मॉडल का इस्तेमाल करने पर मिला नतीजा दिखाया गया है:

इस उदाहरण में, मॉडल से मिला जवाब यहां दिया गया है. ध्यान दें कि समय के साथ मॉडल और पैरामीटर में बदलाव होने की वजह से, आपके जवाब अलग-अलग हो सकते हैं:
"उपलब्ध प्रॉडक्ट के आधार पर, "चेरी ट्री" के बारे में यह जानकारी दी जा सकती है:
प्रॉडक्ट: चेरी ट्री
कीमत: 7,500 रुपये
जानकारी: यह एक सुंदर चेरी का पेड़ है, जिस पर स्वादिष्ट चेरी लगेंगी.
यह तय करने के लिए कि "यहाँ सबसे अच्छी तरह से कौन सा पेड़ बढ़ रहा है," मुझे ज़्यादा जानकारी चाहिए. क्या आपके पास कोई और पेड़ है जिसकी तुलना की जा सकती है या क्या आपको "सबसे अच्छी तरह से बढ़ने" के किसी खास पहलू के बारे में जानना है? उदाहरण के लिए, सबसे तेज़ी से बढ़ना, सबसे ज़्यादा फल देना, आपके इलाके के मौसम के हिसाब से सबसे ज़्यादा मज़बूत होना?"
PSQL में प्रॉम्प्ट चलाना
हम Vertex AI के साथ AlloyDB AI इंटिग्रेशन का इस्तेमाल करके, जनरेटिव मॉडल से वही जवाब पा सकते हैं. इसके लिए, डेटाबेस में सीधे तौर पर एसक्यूएल का इस्तेमाल करें. हालांकि, gemini-1.5-flash मॉडल का इस्तेमाल करने के लिए, हमें पहले इसे रजिस्टर करना होगा.
google_ml_integration एक्सटेंशन की पुष्टि करें. इसका वर्शन 1.4.2 या इसके बाद का होना चाहिए.
psql से quickstart_db डेटाबेस से कनेक्ट करें. इसे पहले दिखाया जा चुका है. इसके अलावा, AlloyDB Studio का इस्तेमाल भी किया जा सकता है. इसके बाद, यह कमांड चलाएं:
SELECT extversion from pg_extension where extname='google_ml_integration';
google_ml_integration.enable_model_support डेटाबेस फ़्लैग की जांच करें.
show google_ml_integration.enable_model_support;
psql सेशन से मिलने वाला अनुमानित आउटपुट "on" है:
postgres=> show google_ml_integration.enable_model_support; google_ml_integration.enable_model_support -------------------------------------------- on (1 row)
अगर यह "बंद है" के तौर पर सेट है, तो हमें google_ml_integration.enable_model_support डेटाबेस फ़्लैग को "चालू है" पर सेट करना होगा. इसके लिए, AlloyDB के वेब कंसोल इंटरफ़ेस का इस्तेमाल किया जा सकता है. इसके अलावा, यहां दिया गया gcloud कमांड भी चलाया जा सकता है.
PROJECT_ID=$(gcloud config get-value project)
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
gcloud beta alloydb instances update $ADBCLUSTER-pr \
--database-flags google_ml_integration.enable_faster_embedding_generation=on,google_ml_integration.enable_model_support=on \
--region=$REGION \
--cluster=$ADBCLUSTER \
--project=$PROJECT_ID \
--update-mode=FORCE_APPLY
इस कमांड को बैकग्राउंड में पूरा होने में करीब एक से तीन मिनट लगते हैं. इसके बाद, फ़्लैग की पुष्टि फिर से की जा सकती है.
हमें अपनी क्वेरी के लिए दो मॉडल चाहिए. पहला मॉडल, text-embedding-005 है, जिसका इस्तेमाल पहले ही किया जा चुका है. दूसरा मॉडल, Google के सामान्य Gemini मॉडल में से एक है.
हम टेक्स्ट एम्बेडिंग मॉडल से शुरुआत करते हैं. psql या AlloyDB Studio में मॉडल रन को रजिस्टर करने के लिए, यह कोड डालें:
CALL
google_ml.create_model(
model_id => 'text-embedding-005',
model_provider => 'google',
model_qualified_name => 'text-embedding-005',
model_type => 'text_embedding',
model_auth_type => 'alloydb_service_agent_iam',
model_in_transform_fn => 'google_ml.vertexai_text_embedding_input_transform',
model_out_transform_fn => 'google_ml.vertexai_text_embedding_output_transform');
हमें जिस अगले मॉडल को रजिस्टर करना है वह gemini-2.0-flash-001 है. इसका इस्तेमाल, लोगों के काम का आउटपुट जनरेट करने के लिए किया जाएगा.
CALL
google_ml.create_model(
model_id => 'gemini-2.5-flash',
model_request_url => 'publishers/google/models/gemini-2.5-flash:streamGenerateContent',
model_provider => 'google',
model_auth_type => 'alloydb_service_agent_iam');
google_ml.model_info_view से जानकारी चुनकर, रजिस्टर किए गए मॉडल की सूची की पुष्टि कभी भी की जा सकती है.
select model_id,model_type from google_ml.model_info_view;
यहां आउटपुट का सैंपल दिया गया है
quickstart_db=> select model_id,model_type from google_ml.model_info_view;
model_id | model_type
-------------------------+----------------
textembedding-gecko | text_embedding
textembedding-gecko@001 | text_embedding
text-embedding-005 | text_embedding
gemini-2.5-flash | generic
(4 rows)
अब हम सबक्वेरी में जनरेट किए गए JSON का इस्तेमाल कर सकते हैं. इसके लिए, SQL का इस्तेमाल करके, जनरेटिव एआई टेक्स्ट मॉडल को प्रॉम्प्ट के हिस्से के तौर पर JSON उपलब्ध कराएं.
डेटाबेस से psql या AlloyDB Studio सेशन में क्वेरी चलाएं
WITH trees AS (
SELECT
cp.product_name,
cp.product_description AS description,
cp.sale_price,
cs.zip_code,
cp.uniq_id AS product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci ON
ci.uniq_id = cp.uniq_id
JOIN cymbal_stores cs ON
cs.store_id = ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(cp.embedding <=> embedding('text-embedding-005',
'What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1),
prompt AS (
SELECT
'You are a friendly advisor helping to find a product based on the customer''s needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","product_description":"some description","sale_price":10}
Here is the list of products:' || json_agg(trees) || 'The customer asked "What kind of fruit trees grow well here?"
You should give information about the product, price and some supplemental information' AS prompt_text
FROM
trees),
response AS (
SELECT
json_array_elements(google_ml.predict_row( model_id =>'gemini-2.5-flash',
request_body => json_build_object('contents',
json_build_object('role',
'user',
'parts',
json_build_object('text',
prompt_text)))))->'candidates'->0->'content'->'parts'->0->'text' AS resp
FROM
prompt)
SELECT
string_agg(resp::text,
' ')
FROM
response;
यहां अनुमानित आउटपुट दिया गया है. मॉडल के वर्शन और पैरामीटर के आधार पर, आपका आउटपुट अलग हो सकता है.:
"Hello there! I can certainly help you with finding a great fruit tree for your area.\n\nBased on what grows well, we have a wonderful **Cherry Tree** that could be a perfect fit!\n\nThis beautiful cherry tree is an excellent choice for producing delicious cherries right in your garden. It's an deciduous tree that typically" " grows to about 15 feet tall. Beyond its fruit, it offers lovely aesthetics with dark green leaves in the summer that transition to a beautiful red in the fall, making it great for shade and privacy too.\n\nCherry trees generally prefer a cool, moist climate and sandy soil, and they are best suited for USDA Zones" " 4-9. Given the zip code you're inquiring about (93230), which is typically in USDA Zone 9, this Cherry Tree should thrive wonderfully!\n\nYou can get this magnificent tree for just **$75.00**.\n\nLet me know if you have any other questions!" "
10. वेक्टर इंडेक्स बनाना
हमारा डेटासेट काफ़ी छोटा है. जवाब मिलने में लगने वाला समय, मुख्य रूप से एआई मॉडल के साथ इंटरैक्शन पर निर्भर करता है. हालांकि, लाखों वेक्टर होने पर, वेक्टर सर्च में ज़्यादा समय लग सकता है. इससे सिस्टम पर ज़्यादा लोड पड़ता है. इससे हम अपने वेक्टर के आधार पर इंडेक्स बना सकते हैं.
ScaNN इंडेक्स बनाना
SCANN इंडेक्स बनाने के लिए, हमें एक और एक्सटेंशन चालू करना होगा. alloydb_scann एक्सटेंशन, Google ScaNN एल्गोरिदम का इस्तेमाल करके, एएनएन टाइप के वेक्टर इंडेक्स के साथ काम करने के लिए एक इंटरफ़ेस उपलब्ध कराता है.
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
अनुमानित आउटपुट:
quickstart_db=> CREATE EXTENSION IF NOT EXISTS alloydb_scann; CREATE EXTENSION Time: 27.468 ms quickstart_db=>
इंडेक्स को मैन्युअल या ऑटो मोड में बनाया जा सकता है. मैन्युअल मोड डिफ़ॉल्ट रूप से चालू होता है. इसमें किसी भी अन्य इंडेक्स की तरह इंडेक्स बनाया और उसे मैनेज किया जा सकता है. हालांकि, AUTO मोड चालू करने पर, ऐसा इंडेक्स बनाया जा सकता है जिसे आपको मैनेज करने की ज़रूरत नहीं होती. सभी विकल्पों के बारे में ज़्यादा जानकारी के लिए, दस्तावेज़ पढ़ें. यहां हम आपको ऑटो मोड चालू करने और इंडेक्स बनाने का तरीका बताएंगे. हमारे मामले में, ऑटो मोड में इंडेक्स बनाने के लिए हमारे पास ज़रूरत के मुताबिक लाइनें नहीं हैं. इसलिए, हम इसे मैन्युअल तरीके से बनाएंगे.
यहां दिए गए उदाहरण में, मैंने ज़्यादातर पैरामीटर को डिफ़ॉल्ट के तौर पर छोड़ा है. साथ ही, इंडेक्स के लिए सिर्फ़ पार्टीशन की संख्या (num_leaves) दी है:
CREATE INDEX cymbal_products_embeddings_scann ON cymbal_products
USING scann (embedding cosine)
WITH (num_leaves=31, max_num_levels = 2);
दस्तावेज़ में जाकर, इंडेक्स पैरामीटर को ट्यून करने के बारे में पढ़ें.
अनुमानित आउटपुट:
quickstart_db=> CREATE INDEX cymbal_products_embeddings_scann ON cymbal_products USING scann (embedding cosine) WITH (num_leaves=31, max_num_levels = 2); CREATE INDEX quickstart_db=>
जवाब की तुलना करें
अब हम EXPLAIN मोड में वेक्टर सर्च क्वेरी चला सकते हैं. साथ ही, यह पुष्टि कर सकते हैं कि इंडेक्स का इस्तेमाल किया गया है या नहीं.
EXPLAIN (analyze)
WITH trees as (
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
cp.uniq_id as product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;
अनुमानित आउटपुट (ज़्यादा जानकारी के लिए, कुछ हिस्सा छिपा दिया गया है):
... Aggregate (cost=16.59..16.60 rows=1 width=32) (actual time=2.875..2.877 rows=1 loops=1) -> Subquery Scan on trees (cost=8.42..16.59 rows=1 width=142) (actual time=2.860..2.862 rows=1 loops=1) -> Limit (cost=8.42..16.58 rows=1 width=158) (actual time=2.855..2.856 rows=1 loops=1) -> Nested Loop (cost=8.42..6489.19 rows=794 width=158) (actual time=2.854..2.855 rows=1 loops=1) -> Nested Loop (cost=8.13..6466.99 rows=794 width=938) (actual time=2.742..2.743 rows=1 loops=1) -> Index Scan using cymbal_products_embeddings_scann on cymbal_products cp (cost=7.71..111.99 rows=876 width=934) (actual time=2.724..2.724 rows=1 loops=1) Order By: (embedding <=> '[0.008864171,0.03693164,-0.024245683,-0.00355923,0.0055611245,0.015985578,...<redacted>...5685,-0.03914233,-0.018452475,0.00826032,-0.07372604]'::vector) -> Index Scan using walmart_inventory_pkey on cymbal_inventory ci (cost=0.42..7.26 rows=1 width=37) (actual time=0.015..0.015 rows=1 loops=1) Index Cond: ((store_id = 1583) AND (uniq_id = (cp.uniq_id)::text)) ...
आउटपुट से हमें साफ़ तौर पर पता चलता है कि क्वेरी में "cymbal_products पर cymbal_products_embeddings_scann का इस्तेमाल करके इंडेक्स स्कैन किया गया" का इस्तेमाल किया गया था.
अगर हम explain के बिना क्वेरी चलाते हैं, तो हमें यह जवाब मिलता है:
WITH trees as (
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
cp.uniq_id as product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;
अनुमानित आउटपुट:
[{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}]
हम देख सकते हैं कि यह वही चेरी का पेड़ है जो इंडेक्स किए बिना खोज के नतीजों में सबसे ऊपर दिख रहा था. कभी-कभी ऐसा नहीं होता है और जवाब में, एक ही ट्री के बजाय टॉप पर मौजूद कुछ अन्य ट्री दिख सकते हैं. इसलिए, इंडेक्स हमें परफ़ॉर्मेंस दे रहा है, लेकिन अब भी अच्छे नतीजे देने के लिए काफ़ी सटीक है.
वेक्टर के लिए उपलब्ध अलग-अलग इंडेक्स आज़माए जा सकते हैं. साथ ही, LangChain इंटिग्रेशन के साथ उपलब्ध ज़्यादा लैब और उदाहरणों को दस्तावेज़ वाले पेज पर देखा जा सकता है.
11. एनवायरमेंट को साफ़ करना
लैब का काम पूरा हो जाने के बाद, AlloyDB इंस्टेंस और क्लस्टर को मिटा दें.
AlloyDB क्लस्टर और सभी इंस्टेंस मिटाना
अगर आपने AlloyDB का मुफ़्त में आज़माने की सुविधा वाला वर्शन इस्तेमाल किया है. अगर आपको ट्रायल क्लस्टर का इस्तेमाल करके अन्य लैब और संसाधनों को आज़माना है, तो ट्रायल क्लस्टर को न मिटाएं. आपके पास एक ही प्रोजेक्ट में दूसरा ट्रायल क्लस्टर बनाने का विकल्प नहीं होगा.
फ़ोर्स विकल्प का इस्तेमाल करके क्लस्टर को डिस्ट्रॉय किया जाता है. इससे क्लस्टर से जुड़े सभी इंस्टेंस भी मिट जाते हैं.
अगर आपका कनेक्शन बंद हो गया है और पिछली सभी सेटिंग मिट गई हैं, तो क्लाउड शेल में प्रोजेक्ट और एनवायरमेंट वैरिएबल तय करें:
gcloud config set project <your project id>
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export PROJECT_ID=$(gcloud config get-value project)
क्लस्टर मिटाएं:
gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force
कंसोल का अनुमानित आउटपुट:
student@cloudshell:~ (test-project-001-402417)$ gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force All of the cluster data will be lost when the cluster is deleted. Do you want to continue (Y/n)? Y Operation ID: operation-1697820178429-6082890a0b570-4a72f7e4-4c5df36f Deleting cluster...done.
AlloyDB के बैकअप मिटाना
क्लस्टर के सभी AlloyDB बैकअप मिटाने के लिए:
for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done
कंसोल का अनुमानित आउटपुट:
student@cloudshell:~ (test-project-001-402417)$ for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done Operation ID: operation-1697826266108-60829fb7b5258-7f99dc0b-99f3c35f Deleting backup...done.
अब हम अपने वीएम को डिस्ट्रॉय कर सकते हैं
GCE वीएम मिटाएं
Cloud Shell में यह कमांड चलाएं:
export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
--zone=$ZONE \
--quiet
कंसोल का अनुमानित आउटपुट:
student@cloudshell:~ (test-project-001-402417)$ export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
--zone=$ZONE \
--quiet
Deleted
12. बधाई हो
कोडलैब पूरा करने के लिए बधाई.
यह लैब, Google Cloud के साथ प्रोडक्शन-रेडी एआई के लर्निंग पाथ का हिस्सा है.
- प्रोटोटाइप से लेकर प्रोडक्शन तक के सभी चरणों के बारे में जानने के लिए, पूरा पाठ्यक्रम देखें.
- अपनी प्रोग्रेस को
#ProductionReadyAIहैशटैग के साथ शेयर करें.
हमने क्या-क्या बताया
- AlloyDB क्लस्टर और प्राइमरी इंस्टेंस को डिप्लॉय करने का तरीका
- Google Compute Engine वीएम से AlloyDB से कनेक्ट करने का तरीका
- डेटाबेस बनाने और AlloyDB AI को चालू करने का तरीका
- डेटाबेस में डेटा लोड करने का तरीका
- AlloyDB Studio का इस्तेमाल कैसे करें
- AlloyDB में Vertex AI के एम्बेडिंग मॉडल का इस्तेमाल कैसे करें
- Vertex AI Studio का इस्तेमाल कैसे करें
- Vertex AI के जनरेटिव मॉडल का इस्तेमाल करके, खोज के नतीजों को बेहतर बनाने का तरीका
- वेक्टर इंडेक्स का इस्तेमाल करके परफ़ॉर्मेंस को बेहतर बनाने का तरीका
13. सर्वे
आउटपुट: