Cloud SQL for MySQL में वेक्टर एम्बेडिंग का इस्तेमाल शुरू करना

1. परिचय

इस कोडलैब में, आपको एम्बेडिंग का इस्तेमाल करके सिमेंटिक सर्च के लिए, Cloud SQL for MySQL के एआई इंटिग्रेशन का इस्तेमाल करने का तरीका बताया जाएगा. साथ ही, वेक्टर डेटा पर इंडेक्स का इस्तेमाल करके परफ़ॉर्मेंस को बेहतर बनाने का तरीका भी बताया जाएगा.

8aa6ba3bc12a1593.png

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

  • Google Cloud और Google Cloud Console की बुनियादी जानकारी
  • कमांड-लाइन इंटरफ़ेस और Cloud Shell का बुनियादी अनुभव

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

  • MySQL के लिए Cloud SQL इंस्टेंस को डिप्लॉय करने का तरीका
  • डेटाबेस बनाने और Cloud SQL AI इंटिग्रेशन को चालू करने का तरीका
  • डेटाबेस में डेटा लोड करने का तरीका
  • Cloud SQL Studio का इस्तेमाल कैसे करें
  • Cloud SQL में Vertex AI एम्बेडिंग मॉडल का इस्तेमाल कैसे करें
  • Agent Platform Studio का इस्तेमाल कैसे करें
  • Gemini Enterprise के एजेंट प्लैटफ़ॉर्म के मॉडल का इस्तेमाल करके, नतीजे को बेहतर बनाने का तरीका
  • वेक्टर इंडेक्स का इस्तेमाल करके परफ़ॉर्मेंस को कैसे बेहतर बनाया जा सकता है

आपको इन चीज़ों की ज़रूरत होगी

  • Google Cloud खाता और Google Cloud प्रोजेक्ट
  • कोई वेब ब्राउज़र, जैसे कि Chrome

2. सेटअप और ज़रूरी शर्तें

प्रोजेक्ट सेटअप करना

  1. Google Cloud Console में साइन इन करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको Google खाता बनाना होगा.

ऑफ़िस या स्कूल वाले खाते के बजाय, निजी खाते का इस्तेमाल करें.

  1. कोई नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. Google Cloud Console में नया प्रोजेक्ट बनाने के लिए, टूलबार में मौजूद कोई प्रोजेक्ट चुनें पर क्लिक करें.

295004821bab6a87.png

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

37d264871000675d.png

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

96d86d3d5655cdbe.png

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

बिलिंग की सुविधा चालू करना

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

Google Cloud क्रेडिट रिडीम करना (ज़रूरी नहीं है)

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

निजी बिलिंग खाता सेट अप करना

अगर आपने Google Cloud क्रेडिट का इस्तेमाल करके बिलिंग सेट अप की है, तो इस चरण को छोड़ दें.

निजी बिलिंग खाता सेट अप करने के लिए, Google Cloud Billing Console में बिलिंग की सुविधा चालू करें.

ध्यान दें:

Cloud Shell शुरू करें

अपने कंप्यूटर से Google Cloud को रिमोटली ऐक्सेस किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जाता है. यह क्लाउड में चलने वाला कमांड-लाइन एनवायरमेंट है.

Google Cloud Console में, सबसे ऊपर दाएं कोने में मौजूद टूलबार पर, Cloud Shell आइकॉन पर क्लिक करें:

Cloud Shell चालू करें

इसके अलावा, Google Cloud Console में g और फिर s दबाएं या Cloud Shell खोलें.

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

Google Cloud Shell टर्मिनल का स्क्रीनशॉट, जिसमें दिखाया गया है कि एनवायरमेंट कनेक्ट हो गया है

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

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

एपीआई चालू करना

Cloud SQL, Compute Engine, Service Networking, और Gemini Enterprise Agent Platform का इस्तेमाल करने के लिए, अपने Google Cloud प्रोजेक्ट में इनसे जुड़े एपीआई चालू करें.

Cloud Shell टर्मिनल में, पक्का करें कि आपका प्रोजेक्ट आईडी सेट हो:

gcloud config get project

अगर यह खाली स्ट्रिंग दिखाता है, तो इसे इस तरह सेट करें:

gcloud config set project [YOUR-PROJECT-ID]

PROJECT_ID एनवायरमेंट वैरिएबल सेट करें:

PROJECT_ID=$(gcloud config get-value project)

ज़रूरी सभी एपीआई चालू करें:

gcloud services enable sqladmin.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 sqladmin.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.

दस्तावेज़ में, चालू किए गए हर एपीआई के बारे में पढ़ा जा सकता है.

4. Cloud SQL इंस्टेंस बनाना

Gemini Enterprise Agent Platform के डेटाबेस इंटिग्रेशन के साथ एक Cloud SQL इंस्टेंस बनाएं.

डेटाबेस का पासवर्ड बनाना

डिफ़ॉल्ट डेटाबेस उपयोगकर्ता के लिए पासवर्ड तय करें. आपके पास अपना पासवर्ड तय करने या पासवर्ड जनरेट करने के लिए, रैंडम फ़ंक्शन का इस्तेमाल करने का विकल्प होता है:

export CLOUDSQL_PASSWORD=`openssl rand -hex 16`

जनरेट किए गए पासवर्ड की वैल्यू दिखाएं:

echo $CLOUDSQL_PASSWORD

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

Cloud SQL for MySQL इंस्टेंस बनाना

Cloud SQL इंस्टेंस कई तरीकों से बनाए जा सकते हैं. जैसे, Google Cloud Console, Terraform या Google Cloud CLI (gcloud) का इस्तेमाल करके. इस कोडलैब में, gcloud का इस्तेमाल किया जाता है. अन्य टूल की मदद से इंस्टेंस बनाने का तरीका जानने के लिए, इंस्टेंस बनाना दस्तावेज़ देखें.

किसी इंस्टेंस को बनाते समय, cloudsql_vector फ़्लैग को चालू किया जा सकता है. वेक्टर की सुविधा, MySQL 8.0 R20241208.01_00 या इसके बाद के वर्शन के लिए उपलब्ध है

Cloud Shell सेशन में यह कमांड चलाएं:

gcloud sql instances create my-cloudsql-instance \
--database-version=MYSQL_8_4 \
--tier=db-custom-2-8192 \
--region=us-central1 \
--enable-google-ml-integration \
--edition=ENTERPRISE \
--root-password=$CLOUDSQL_PASSWORD

gcloud sql connect का इस्तेमाल करके, इंस्टेंस से कनेक्ट करें. जब कहा जाए, तब पासवर्ड डालें:

gcloud sql connect my-cloudsql-instance --user=root

अनुमानित आउटपुट:

$gcloud sql connect my-cloudsql-instance --user=root
Allowlisting your IP for incoming connection for 5 minutes...done.                                                                                                                           
Connecting to database with SQL user [root].Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 71
Server version: 8.4.4-google (Google)

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Ctrl+D दबाकर या exit डालकर, mysql सेशन से बाहर निकलें:

exit

Gemini Enterprise के एजेंट प्लैटफ़ॉर्म के इंटिग्रेशन को चालू करना

Gemini Enterprise Agent Platform के इंटिग्रेशन को चालू करने के लिए, Cloud SQL सेवा खाते को ज़रूरी IAM भूमिका असाइन करें.

Cloud SQL सेवा खाते का ईमेल पता पाएं और इसे एनवायरमेंट वैरिएबल के तौर पर एक्सपोर्ट करें:

SERVICE_ACCOUNT_EMAIL=$(gcloud sql instances describe my-cloudsql-instance --format="value(serviceAccountEmailAddress)")
echo $SERVICE_ACCOUNT_EMAIL

Cloud SQL सेवा खाते को roles/aiplatform.user की भूमिका असाइन करें:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \
  --role="roles/aiplatform.user"

Cloud SQL के दस्तावेज़ में, इंस्टेंस बनाने और कॉन्फ़िगर करने के बारे में ज़्यादा जानकारी यहां पढ़ें.

5. डेटाबेस तैयार करना

डेटाबेस बनाएं और वेक्टर सपोर्ट चालू करें.

डेटाबेस बनाना

quickstart_db नाम का डेटाबेस बनाएं. डेटाबेस क्लाइंट (जैसे कि mysql), Google Cloud CLI या Cloud SQL Studio का इस्तेमाल करके डेटाबेस बनाए जा सकते हैं. इस चरण में, gcloud का इस्तेमाल करें.

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

gcloud sql databases create quickstart_db --instance=my-cloudsql-instance

6. डेटा लोड करें

डेटाबेस में टेबल बनाएं और CSV फ़ॉर्मैट में, सार्वजनिक Cloud Storage बकेट में सेव की गई काल्पनिक Cymbal Store की डेटासेट फ़ाइलों का इस्तेमाल करके डेटा लोड करें.

Cloud Shell, डेटाबेस से कनेक्ट करने, सभी ऑब्जेक्ट बनाने, और डेटा लोड करने के लिए आपका मुख्य एनवायरमेंट होगा.

हमारे Cloud SQL इंस्टेंस के लिए, अनुमति वाले नेटवर्क की सूची में अपना Cloud Shell सार्वजनिक आईपी पता जोड़ें.

Cloud Shell में यह कमांड चलाएं:

gcloud sql instances patch my-cloudsql-instance --authorized-networks=$(curl ifconfig.me)

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

export CLOUDSQL_PASSWORD=...your password defined for the instance...

ज़रूरी डेटाबेस ऑब्जेक्ट बनाएं. सार्वजनिक सोर्स से स्कीमा डाउनलोड करने और उसे लागू करने के लिए, curl के साथ mysql का इस्तेमाल करें.

Cloud Shell में यह कमांड चलाएं:

export INSTANCE_IP=$(gcloud sql instances describe my-cloudsql-instance --format="value(ipAddresses.ipAddress)")
curl -LJ https://raw.githubusercontent.com/GoogleCloudPlatform/devrel-demos/main/infrastructure/cymbal-store-embeddings/cymbal_mysql_schema.sql | mysql --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db

कमांड का ब्यौरा. पिछले चरण में, आपने अपने डेटाबेस से कनेक्ट किया था. साथ ही, टेबल, इंडेक्स, और सीक्वेंस बनाने के लिए एसक्यूएल स्क्रिप्ट चलाई थी.

इसके बाद, curl और mysql को चलाकर, डेटाबेस में cymbal_products डेटा डालें:

curl -LJ https://raw.githubusercontent.com/GoogleCloudPlatform/devrel-demos/main/infrastructure/cymbal-store-embeddings/cymbal_products.csv | mysql --enable-local-infile --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db -e "LOAD DATA LOCAL INFILE '/dev/stdin'  INTO TABLE cymbal_products FIELDS TERMINATED BY ','  OPTIONALLY ENCLOSED BY '\"'  LINES TERMINATED BY '\n'  IGNORE 1 LINES;"

cymbal_stores के साथ जारी रखें.

curl -LJ https://raw.githubusercontent.com/GoogleCloudPlatform/devrel-demos/main/infrastructure/cymbal-store-embeddings/cymbal_stores.csv | mysql --enable-local-infile --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db -e "LOAD DATA LOCAL INFILE '/dev/stdin'  INTO TABLE cymbal_stores FIELDS TERMINATED BY ','  OPTIONALLY ENCLOSED BY '\"'  LINES TERMINATED BY '\n'  IGNORE 1 LINES;"

साथ ही, cymbal_inventory एट्रिब्यूट की वैल्यू के तौर पर, हर स्टोर में मौजूद हर प्रॉडक्ट की संख्या की जानकारी दें.

curl -LJ https://raw.githubusercontent.com/GoogleCloudPlatform/devrel-demos/main/infrastructure/cymbal-store-embeddings/cymbal_inventory.csv | mysql --enable-local-infile --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db -e "LOAD DATA LOCAL INFILE '/dev/stdin'  INTO TABLE cymbal_inventory FIELDS TERMINATED BY ','  OPTIONALLY ENCLOSED BY '\"'  LINES TERMINATED BY '\n'  IGNORE 1 LINES;"

ज़रूरी नहीं: अगर आपके पास अपना सैंपल डेटासेट है, तो Google Cloud Console में इंपोर्ट टूल का इस्तेमाल करके, उससे जुड़ी CSV फ़ाइलें इंपोर्ट की जा सकती हैं.

7. फ़ोटो एंबेडिंग बनाना

Gemini Enterprise Agent Platform के text-embedding-005 मॉडल का इस्तेमाल करके, प्रॉडक्ट के ब्यौरों के लिए एम्बेडिंग बनाएं और उन्हें वेक्टर डेटा के तौर पर सेव करें.

वेक्टर डेटा को सेव करने के लिए, आपको अपने Cloud SQL इंस्टेंस में वेक्टर फ़ंक्शन चालू करना होगा.

Cloud Shell में यह कमांड चलाएं:

gcloud sql instances patch my-cloudsql-instance \
--database-flags=cloudsql_vector=on

डेटाबेस से कनेक्ट करें:

mysql --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db

embedding फ़ंक्शन का इस्तेमाल करके, cymbal_products टेबल में नया कॉलम embedding बनाएं. इस नए कॉलम में, product_description कॉलम में मौजूद टेक्स्ट के आधार पर वेक्टर एम्बेडिंग शामिल होंगी:

ALTER TABLE cymbal_products ADD COLUMN embedding vector(768) using varbinary;
UPDATE cymbal_products SET embedding = mysql.ml_embedding('text-embedding-005', product_description);

ध्यान दें: आम तौर पर, 2,000 लाइनों के लिए एम्बेडिंग जनरेट होने में पांच मिनट से कम समय लगता है.

mysql सेशन से बाहर निकलने के लिए:

exit

8. मिलते-जुलते कॉन्टेंट को खोजने की सुविधा का इस्तेमाल करना

समानता खोज की सुविधा का इस्तेमाल करें. इसके लिए, प्रॉडक्ट की जानकारी के लिए कैलकुलेट किए गए वेक्टर एम्बेडिंग की तुलना, सर्च क्वेरी के लिए एम्बेड किए गए डेटा से करें.

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

Cloud SQL Studio के लिए MySQL उपयोगकर्ता बनाना

आपको एक नए डेटाबेस उपयोगकर्ता की ज़रूरत होगी, जो Cloud SQL Studio का इस्तेमाल कर सके. बिल्ट-इन टाइप का उपयोगकर्ता student बनाएं. इसके लिए, वही पासवर्ड इस्तेमाल करें जो आपने रूट उपयोगकर्ता के लिए इस्तेमाल किया था.

Cloud Shell में यह कमांड चलाएं:

gcloud sql users create student  --instance=my-cloudsql-instance --password=$CLOUDSQL_PASSWORD --host=%

Cloud SQL Studio शुरू करना

  1. Google Cloud Console में, Cloud SQL इंस्टेंस पर जाएं और my-cloudsql-instance पर क्लिक करें.

Google Cloud Console में Cloud SQL इंस्टेंस की सूची

  1. नेविगेशन मेन्यू में, Cloud SQL Studio पर क्लिक करें.

Cloud SQL Studio मेन्यू आइटम

  1. पुष्टि करने वाले डायलॉग बॉक्स में, डेटाबेस का नाम और क्रेडेंशियल डालें:
    • डेटाबेस: quickstart_db
    • उपयोगकर्ता: student
    • पासवर्ड:
  2. प्रमाणित करें पर क्लिक करें.

Cloud SQL Studio में पुष्टि करने का डायलॉग बॉक्स

  1. एसक्यूएल एडिटर खोलने के लिए, Untitled query टैब पर क्लिक करें.

Cloud SQL Studio में SQL एडिटर टैब

क्वेरी चलाएं

ग्राहक की क्वेरी से मिलते-जुलते सबसे ज़्यादा काम के पांच प्रॉडक्ट पाने के लिए, यह क्वेरी चलाएं: "यहां किस तरह के फलों के पेड़ अच्छी तरह से उगते हैं?"

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

SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        cosine_distance(cp.embedding ,@query_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 5;

Cloud SQL Studio में, क्वेरी डालें और चलाएं पर क्लिक करें. इसके अलावा, sql सेशन में क्वेरी चलाएं:

Cloud SQL Studio में एसक्यूएल क्वेरी चलाना

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

+-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+
| product_name    | description                                                                      | sale_price | zip_code | distance            |
+-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+
| Malus Domestica | Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo |     100.00 |    93230 | 0.37740096545831603 |
| Cerasus         | Cerasus: A beautiful cherry tree that brings delicious fruit and vibrant color t |      75.00 |    93230 |   0.405704177142419 |
| Persica         | Persica: Enjoy homegrown, delicious peaches with this beautiful peach tree. Reac |     150.00 |    93230 | 0.41031799106722877 |
| Meyer Lemon     | Grow your own juicy Meyer Lemons with this semi-dwarf tree, California's favorit |      34.00 |    93230 | 0.42823360959352186 |
| Acer            | Acer, the classic maple. Known for vibrant fall foliage in reds, oranges, and ye |     100.00 |    93230 | 0.42953897057301615 |
+-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+
5 rows in set (0.13 sec)

cosine_distance फ़ंक्शन का इस्तेमाल करने पर, क्वेरी को पूरा होने में करीब 0.13 सेकंड लगते हैं.

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

SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine') 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 5;

यहां क्वेरी के नतीजों में मिले प्रॉडक्ट की सूची दी गई है.

+-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+
| product_name    | description                                                                      | sale_price | zip_code | distance            |
+-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+
| Malus Domestica | Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo |     100.00 |    93230 | 0.37740096545831603 |
| Cerasus         | Cerasus: A beautiful cherry tree that brings delicious fruit and vibrant color t |      75.00 |    93230 |   0.405704177142419 |
| Persica         | Persica: Enjoy homegrown, delicious peaches with this beautiful peach tree. Reac |     150.00 |    93230 | 0.41031799106722877 |
| Meyer Lemon     | Grow your own juicy Meyer Lemons with this semi-dwarf tree, California's favorit |      34.00 |    93230 | 0.42823360959352186 |
| Acer            | Acer, the classic maple. Known for vibrant fall foliage in reds, oranges, and ye |     100.00 |    93230 | 0.42953897057301615 |
+-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+
5 rows in set, 1 warning (0.12 sec)

क्वेरी को पूरा होने में सिर्फ़ 0.12 सेकंड लगे. हमें वही नतीजे मिले जो KNN के exact cosine_distance फ़ंक्शन के लिए मिले थे.

इस फ़ंक्शन के बारे में ज़्यादा जानने के लिए, Cloud SQL for MySQL का दस्तावेज़ पढ़ें

9. फ़ेच किए गए डेटा का इस्तेमाल करके एलएलएम के जवाब को बेहतर बनाना

Gemini Enterprise Agent Platform के बुनियादी लैंग्वेज मॉडल को प्रॉम्प्ट में, क्वेरी के नतीजों को भरोसेमंद स्रोतों से जानकारी पर आधारित कॉन्टेक्स्ट के तौर पर पास करके, क्लाइंट ऐप्लिकेशन के लिए जनरेटिव एआई के जवाब को बेहतर बनाएं.

इसके लिए:

  1. Cloud SQL में वेक्टर सर्च के नतीजे से JSON पेलोड जनरेट करें.
  2. Agent Platform Studio में प्रॉम्प्ट को आज़माएं.
  3. google_ml इंटिग्रेशन का इस्तेमाल करके, एसक्यूएल से सीधे तौर पर एंड-टू-एंड प्रॉम्प्ट को लागू करें.

JSON फ़ॉर्मैट में आउटपुट जनरेट करना

नतीजे को JSON के तौर पर फ़ॉर्मैट करने और एक लाइन में दिखाने के लिए, क्वेरी में बदलाव करें:

SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
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
        (approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine')) ASC
LIMIT 1)
SELECT json_arrayagg(json_object('product_name',product_name,'description',description,'sale_price',sale_price,'zip_code',zip_code,'product_id',product_id)) FROM trees;

अनुमानित JSON आउटपुट:

[{"zip_code": 93230, "product_id": "23e41a71d63d8bbc9bdfa1d118cfddc5", "sale_price": 100.00, "description": "Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo", "product_name": "Malus Domestica"}]

Agent Platform Studio में प्रॉम्प्ट को रन करना

जनरेट किए गए JSON को Agent Platform Studio में जनरेटिव मॉडल के प्रॉम्प्ट में कॉन्टेक्स्ट के तौर पर इस्तेमाल करें.

  1. Google Cloud Console में, Agent Platform Studio खोलें.

Agent Platform Studio में नेविगेट करना

  1. Agent Platform Studio में यह प्रॉम्प्ट डालें:

Agent Platform Studio में प्रॉम्प्ट डालना

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","description":"some description","sale_price":10,"zip_code": 10234, "produt_id": "02056727942aeb714dc9a2313654e1b0"}
Here is the list of products:
<JSON_OUTPUT>
The customer asked "What tree is growing the best here?"
You should give information about the product, price and some supplemental information.
Do not ask any additional questions and assume location based on the zip code provided in the list of products.

को अपनी क्वेरी के JSON रिस्पॉन्स से बदलें:

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","description":"some description","sale_price":10,"zip_code": 10234, "produt_id": "02056727942aeb714dc9a2313654e1b0"}
Here is the list of products:
{"zip_code": 93230, "product_id": "23e41a71d63d8bbc9bdfa1d118cfddc5", "sale_price": 100.00, "description": "Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo", "product_name": "Malus Domestica"}
The customer asked "What tree is growing the best here?"
You should give information about the product, price and some supplemental information.
Do not ask any additional questions and assume location based on the zip code provided in the list of products.

Agent Platform Studio में मौजूद प्रॉम्प्ट

  1. प्रॉम्प्ट सबमिट करें.

Agent Platform Studio में प्रॉम्प्ट का नतीजा

जवाब में पेड़ की कीमत, उसके बारे में जानकारी, और अतिरिक्त जानकारी शामिल होती है. यह जानकारी, मॉडल को बाहरी सोर्स से मिलती है. यह जानकारी, पेड़ और उसकी जगह के बारे में होती है.

एसक्यूएल में प्रॉम्प्ट सबमिट करें

एसक्यूएल में सीधे तौर पर जनरेटिव मॉडल से जवाब पाने के लिए, Gemini Enterprise के एजेंट प्लैटफ़ॉर्म के साथ Cloud SQL AI इंटिग्रेशन का इस्तेमाल भी किया जा सकता है.

सबसे पहले, मॉडल रजिस्टर करें.

  1. जवाब जनरेट करने के लिए, gemini-3.5-flash मॉडल रजिस्टर करें. इसके लिए, की जगह अपना प्रोजेक्ट आईडी डालें:
CALL
  mysql.ml_create_model_registration(
  'gemini-3.5-flash',
  'https://aiplatform.googleapis.com/v1/projects/<PROJECT_ID>/locations/global/publishers/google/models/gemini-3.5-flash:generateContent',
  'google',
  'GENERIC',
  NULL,
  'auth_type_cloudsql_service_agent_iam',
  NULL, NULL, NULL, NULL);

हम Gemini Enterprise Agent Platform के साथ Cloud SQL के एआई इंटिग्रेशन का इस्तेमाल करके भी, जनरेटिव मॉडल से ऐसा ही जवाब पा सकते हैं. इसके लिए, डेटाबेस में सीधे तौर पर एसक्यूएल का इस्तेमाल किया जाता है.

अब हम जनरेट किए गए JSON नतीजों को SQL का इस्तेमाल करके, जनरेटिव एआई टेक्स्ट मॉडल को प्रॉम्प्ट के तौर पर उपलब्ध कराने के लिए, सबक्वेरी में इस्तेमाल कर सकते हैं.

डेटाबेस के लिए mysql या Cloud SQL Studio सेशन में क्वेरी चलाएं

SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
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
         (approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine')) ASC
LIMIT 1),
prompt AS (
SELECT
       CONCAT( '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_arrayagg(json_object('product_name',trees.product_name,'description',trees.description,'sale_price',trees.sale_price,'zip_code',trees.zip_code,'product_id',trees.product_id)) , '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
       mysql.ML_PREDICT_ROW('gemini-3.5-flash',
        json_object('contents',
        json_object('role',
        'user',
        'parts',
        json_array(
        json_object('text',
        prompt_text))))) AS resp
FROM
        prompt)
SELECT
JSON_EXTRACT(resp, '$.candidates[0].content.parts[0].text')
FROM
        response;

यहां सैंपल आउटपुट दिया गया है. मॉडल के वर्शन और पैरामीटर के हिसाब से, आपका आउटपुट अलग-अलग हो सकता है.:

"Hello there! I'd be happy to help you find the perfect fruit tree for your space. \n\nBased on your area, a wonderful option we currently have in stock is the **Malus Domestica** (the classic Apple Tree)!\n\nHere are the key details:\n\n* **Product Name:** Malus Domestica (Classic Apple Tree)\n* **Price:** $100.00\n\n### Why it's a great choice:\n* **Beautiful Seasonal Foliage:** It features vibrant green leaves during the summer that turn into gorgeous shades of red, orange, and yellow in the autumn. \n* **Shade & Size:** It grows to approximately 30 feet tall, making it a strong, durable tree that offers excellent shade for your yard alongside delicious fresh fruit.\n* **Growing Conditions:** It thrives best in cool, moist climates with well-draining, loamy soil and is ideal for USDA Hardiness Zones 4–8.\n\n### Supplemental Care Tips:\n* **Planting Location:** Choose a spot that gets full sunlight (at least 6 hours a day) to ensure maximum fruit production.\n* **Soil:** Make sure the soil is rich and loamy with good drainage so the roots stay healthy.\n* **Cross-Pollination:** Apple trees often produce a higher yield when planted near another compatible apple tree variety, so if you have extra space, adding a companion tree in the future can boost your harvest!\n\nLet me know if you have any questions about planting or care, or if you'd like help adding this to your cart!"

आउटपुट को Markdown फ़ॉर्मैट में दिया जाता है.

10. सबसे नज़दीकी पड़ोसी इंडेक्स बनाना

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

ScaNN इंडेक्स बनाना

हम अपने टेस्ट के लिए, ScaNN इंडेक्स टाइप का इस्तेमाल करेंगे.

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

CREATE VECTOR INDEX cymbal_products_embedding_idx ON cymbal_products(embedding) USING SCANN DISTANCE_MEASURE=COSINE;

जवाब की तुलना करें

वेक्टर सर्च क्वेरी को फिर से चलाएं और नतीजे देखें:

SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine') 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 5;

अनुमानित आउटपुट:

+-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+
| product_name    | description                                                                      | sale_price | zip_code | distance            |
+-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+
| Malus Domestica | Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo |     100.00 |    93230 | 0.37740096545831603 |
| Cerasus         | Cerasus: A beautiful cherry tree that brings delicious fruit and vibrant color t |      75.00 |    93230 |   0.405704177142419 |
| Persica         | Persica: Enjoy homegrown, delicious peaches with this beautiful peach tree. Reac |     150.00 |    93230 | 0.41031799106722877 |
| Meyer Lemon     | Grow your own juicy Meyer Lemons with this semi-dwarf tree, California's favorit |      34.00 |    93230 | 0.42823360959352186 |
| Acer            | Acer, the classic maple. Known for vibrant fall foliage in reds, oranges, and ye |     100.00 |    93230 | 0.42953897057301615 |
+-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+
5 rows in set (0.08 sec)

परफ़ॉर्मेंस में थोड़ा ही अंतर है, लेकिन इतने छोटे डेटासेट के लिए ऐसा होना सामान्य है. यह लाखों वेक्टर वाले बड़े डेटासेट के लिए ज़्यादा ध्यान देने वाली बात होगी.

EXPLAIN कमांड का इस्तेमाल करके, एक्ज़ीक्यूशन प्लान देखें:

SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
EXPLAIN ANALYZE SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine') 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 5;

एक्ज़ीक्यूशन प्लान (उदाहरण):

...
-> Nested loop inner join  (cost=443 rows=5) (actual time=1.14..1.18 rows=5 loops=1)
                                -> Vector index scan on cp  (cost=441 rows=5) (actual time=1.1..1.1 rows=5 loops=1)
                                -> Single-row index lookup on cp using PRIMARY (uniq_id=cp.uniq_id)  (cost=0.25 rows=1) (actual time=0.0152..0.0152 rows=1 loops=5)

...

यह cp टेबल(cymbal_products टेबल का उपनाम) पर वेक्टर इंडेक्स स्कैन दिखाता है.

अपने डेटा के साथ इसे आज़माएं या अलग-अलग खोज क्वेरी की जांच करें. इससे आपको पता चलेगा कि MySQL में सिमैंटिक सर्च कैसे काम करती है.

11. स्टोरेज में जगह बनाएं

Cloud SQL इंस्टेंस मिटाना

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

अगर आपका कनेक्शन बंद हो गया है और पिछली सभी सेटिंग मिट गई हैं, तो Cloud Shell में प्रोजेक्ट और एनवायरमेंट वैरिएबल तय करें:

export INSTANCE_NAME=my-cloudsql-instance
export PROJECT_ID=$(gcloud config get-value project)

इंस्टेंस मिटाएं:

gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID

अनुमानित कंसोल आउटपुट:

student@cloudshell:~$ gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID
All of the instance data will be lost when the instance is deleted.

Do you want to continue (Y/n)?  y

Deleting Cloud SQL instance...done.                                                                                                                
Deleted [https://sandbox.googleapis.com/v1beta4/projects/test-project-001-402417/instances/my-cloudsql-instance].

12. बधाई हो

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

Google Cloud का लर्निंग पाथ

यह लैब, Google Cloud की मदद से प्रोडक्शन के लिए तैयार एआई के लर्निंग पाथ का हिस्सा है.

  • प्रोटोटाइप से लेकर प्रोडक्शन तक के सभी चरणों के बारे में जानने के लिए, पूरा पाठ्यक्रम देखें.
  • अपनी प्रोग्रेस को #ProductionReadyAI हैशटैग के साथ शेयर करें.

आपने क्या-क्या कवर किया है

  • MySQL इंस्टेंस के लिए Cloud SQL को डिप्लॉय करने का तरीका
  • डेटाबेस बनाने और Cloud SQL AI इंटिग्रेशन को चालू करने का तरीका
  • डेटाबेस में डेटा लोड करने का तरीका
  • Cloud SQL Studio का इस्तेमाल कैसे करें
  • Cloud SQL में Vertex AI एम्बेडिंग मॉडल का इस्तेमाल कैसे करें
  • Agent Platform Studio का इस्तेमाल कैसे करें
  • Gemini Enterprise के एजेंट प्लैटफ़ॉर्म के मॉडल का इस्तेमाल करके, नतीजे को बेहतर बनाने का तरीका
  • वेक्टर इंडेक्स का इस्तेमाल करके परफ़ॉर्मेंस को कैसे बेहतर बनाया जा सकता है

AlloyDB के लिए उपलब्ध कोडलैब या Cloud SQL for Postgres के लिए उपलब्ध कोडलैब आज़माएं

सर्वे

आउटपुट:

इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?

सिर्फ़ इसे पढ़ें इसे पढ़ें और एक्सरसाइज़ पूरी करें