MySQL-এর জন্য ক্লাউড এসকিউএল-এ ভেক্টর এম্বেডিংয়ের সাথে শুরু করা

MySQL-এর জন্য ক্লাউড এসকিউএল-এ ভেক্টর এম্বেডিংয়ের সাথে শুরু করা

এই কোডল্যাব সম্পর্কে

subjectএপ্রি ২২, ২০২৫-এ শেষবার আপডেট করা হয়েছে
account_circleGleb Otochkin-এর লেখা

1. ভূমিকা

এই কোডল্যাবে আপনি শিখবেন কিভাবে ক্লাউড এসকিউএল ব্যবহার করতে হয় মাইএসকিউএল ভার্টেক্স এআই ইন্টিগ্রেশনের জন্য ভেক্টর সার্চকে ভার্টেক্স এআই এম্বেডিংয়ের সাথে একত্রিত করে।

30b7c4dcdd8bb68f.png

পূর্বশর্ত

  • Google ক্লাউড, কনসোলের একটি প্রাথমিক ধারণা
  • কমান্ড লাইন ইন্টারফেস এবং ক্লাউড শেলের প্রাথমিক দক্ষতা

আপনি কি শিখবেন

  • মাইএসকিউএল উদাহরণের জন্য কীভাবে একটি ক্লাউড এসকিউএল স্থাপন করবেন
  • কীভাবে ডাটাবেস তৈরি করবেন এবং ক্লাউড এসকিউএল এআই ইন্টিগ্রেশন সক্ষম করবেন
  • কিভাবে ডাটাবেসে ডাটা লোড করবেন
  • ক্লাউড এসকিউএল-এ ভার্টেক্স এআই এমবেডিং মডেল কীভাবে ব্যবহার করবেন
  • Vertex AI জেনারেটিভ মডেল ব্যবহার করে ফলাফলকে কিভাবে সমৃদ্ধ করা যায়
  • ভেক্টর সূচক ব্যবহার করে কর্মক্ষমতা কিভাবে উন্নত করা যায়

আপনি কি প্রয়োজন হবে

  • একটি Google ক্লাউড অ্যাকাউন্ট এবং Google ক্লাউড প্রকল্প
  • একটি ওয়েব ব্রাউজার যেমন ক্রোম সমর্থন করে গুগল ক্লাউড কনসোল এবং ক্লাউড শেল

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি সবসময় এটি আপডেট করতে পারেন.
  • প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রকল্প আইডি উল্লেখ করতে হবে (সাধারণত PROJECT_ID হিসাবে চিহ্নিত)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য একটি এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করতে পারেন, এবং এটি উপলব্ধ কিনা দেখতে পারেন। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকে।
  • আপনার তথ্যের জন্য, একটি তৃতীয় মান আছে, একটি প্রকল্প নম্বর , যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ হবে না, যদি কিছু হয়। এই টিউটোরিয়ালের বাইরে বিলিং এড়াতে সংস্থানগুলি বন্ধ করতে, আপনি আপনার তৈরি করা সংস্থানগুলি মুছতে বা প্রকল্প মুছতে পারেন। নতুন Google ক্লাউড ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

ক্লাউড শেল শুরু করুন

যদিও Google ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আপনি Google ক্লাউড শেল ব্যবহার করবেন, একটি কমান্ড লাইন পরিবেশ যা ক্লাউডে চলছে।

Google ক্লাউড কনসোল থেকে, উপরের ডানদিকে টুলবারে ক্লাউড শেল আইকনে ক্লিক করুন:

55efc1aaa7a4d3ad.png

পরিবেশের ব্যবস্থা করতে এবং সংযোগ করতে এটি শুধুমাত্র কয়েক মুহূর্ত নিতে হবে। এটি সমাপ্ত হলে, আপনি এই মত কিছু দেখতে হবে:

7ffe5cbb04455448.png

এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার সমস্ত কাজ একটি ব্রাউজারে করা যেতে পারে। আপনার কিছু ইন্সটল করার দরকার নেই।

3. আপনি শুরু করার আগে

API সক্ষম করুন

ক্লাউড শেলের ভিতরে, নিশ্চিত করুন যে আপনার প্রকল্প আইডি সেটআপ করা আছে:

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. একটি ক্লাউড এসকিউএল উদাহরণ তৈরি করুন

Vertex AI এর সাথে ডাটাবেস ইন্টিগ্রেশন সহ ক্লাউড এসকিউএল ইনস্ট্যান্স তৈরি করুন।

ডাটাবেস পাসওয়ার্ড তৈরি করুন

ডিফল্ট ডাটাবেস ব্যবহারকারীর জন্য পাসওয়ার্ড নির্ধারণ করুন। আপনি আপনার নিজের পাসওয়ার্ড সংজ্ঞায়িত করতে পারেন বা একটি তৈরি করতে একটি র্যান্ডম ফাংশন ব্যবহার করতে পারেন:

export CLOUDSQL_PASSWORD=`openssl rand -hex 12`

পাসওয়ার্ডের জন্য উত্পন্ন মান নোট করুন:

echo $CLOUDSQL_PASSWORD

MySQL উদাহরণের জন্য ক্লাউড এসকিউএল তৈরি করুন

একটি উদাহরণ তৈরি করার সময় Cloudsql_vector পতাকা সক্রিয় করা যেতে পারে। ভেক্টর সমর্থন বর্তমানে MySQL 8.0 R20241208.01_00 বা নতুনের জন্য উপলব্ধ

ক্লাউড শেল সেশনে চালান:

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 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>

Vertex AI ইন্টিগ্রেশন সক্ষম করুন

Vertex AI ইন্টিগ্রেশন ব্যবহার করতে সক্ষম হওয়ার জন্য অভ্যন্তরীণ ক্লাউড sql পরিষেবা অ্যাকাউন্টে প্রয়োজনীয় সুযোগ-সুবিধা প্রদান করুন।

ক্লাউড এসকিউএল অভ্যন্তরীণ পরিষেবা অ্যাকাউন্ট ইমেল খুঁজুন এবং এটি একটি পরিবর্তনশীল হিসাবে রপ্তানি করুন৷

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

ক্লাউড SQL পরিষেবা অ্যাকাউন্টে Vertex AI-তে অ্যাক্সেস মঞ্জুর করুন:

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

এখানে ক্লাউড SQL ডকুমেন্টেশনে উদাহরণ তৈরি এবং কনফিগারেশন সম্পর্কে আরও পড়ুন।

5. ডাটাবেস প্রস্তুত করুন

এখন আমাদের একটি ডাটাবেস তৈরি করতে হবে এবং ভেক্টর সমর্থন সক্ষম করতে হবে।

ডাটাবেস তৈরি করুন

Quickstart_db নামে একটি ডাটাবেস তৈরি করুন। এটি করার জন্য আমাদের কাছে বিভিন্ন বিকল্প রয়েছে যেমন কমান্ড লাইন ডাটাবেস ক্লায়েন্ট যেমন mySQL, SDK বা ক্লাউড SQL স্টুডিওর জন্য mysql। আমরা ডাটাবেস তৈরির জন্য SDK (gcloud) ব্যবহার করব।

ক্লাউড শেল-এ ডাটাবেস তৈরি করতে কমান্ড চালান

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

6. ডেটা লোড করুন

এখন আমাদের ডাটাবেসে অবজেক্ট তৈরি করতে হবে এবং ডেটা লোড করতে হবে। আমরা কাল্পনিক Cymbal স্টোর ডেটা ব্যবহার করতে যাচ্ছি। ডেটা SQL (স্কিমার জন্য) এবং CSV ফর্ম্যাটে (ডেটার জন্য) পাওয়া যায়।

ক্লাউড শেল একটি ডাটাবেসের সাথে সংযোগ করতে, সমস্ত বস্তু তৈরি করতে এবং ডেটা লোড করার জন্য আমাদের প্রধান পরিবেশ হবে।

প্রথমে আমাদের ক্লাউড এসকিউএল উদাহরণের জন্য অনুমোদিত নেটওয়ার্কের তালিকায় আমাদের ক্লাউড শেল পাবলিক আইপি যুক্ত করতে হবে। ক্লাউড শেল কার্যকর করুন:

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

আপনার সেশন হারিয়ে গেলে, রিসেট করলে বা অন্য টুল থেকে কাজ করলে আপনার CLOUDSQL_PASSWORD ভেরিয়েবল আবার এক্সপোর্ট করুন:

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

এখন আমরা আমাদের ডাটাবেসে সমস্ত প্রয়োজনীয় বস্তু তৈরি করতে পারি। এটি করার জন্য আমরা কার্ল ইউটিলিটির সাথে একত্রে MySQL mysql ইউটিলিটি ব্যবহার করতে যাচ্ছি যা পাবলিক সোর্স থেকে ডেটা পায়।

ক্লাউড শেল কার্যকর করুন:

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

আমরা আগের কমান্ড ঠিক কি কি? আমরা আমাদের ডাটাবেসের সাথে সংযুক্ত হয়েছি এবং ডাউনলোড করা এসকিউএল কোডটি কার্যকর করেছি যা টেবিল, সূচী এবং সিকোয়েন্স তৈরি করে।

পরবর্তী ধাপ হল cymbal_products ডেটা লোড করা। আমরা একই কার্ল এবং mysql ইউটিলিটি ব্যবহার করি।

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;"

ক্লাউড কনসোল থেকে উপলব্ধ ক্লাউড SQL আমদানি টুলের সাথে সামঞ্জস্যপূর্ণ আপনার নিজস্ব নমুনা ডেটা এবং আপনার CSV ফাইল থাকলে আপনি উপস্থাপিত পদ্ধতির পরিবর্তে এটি ব্যবহার করতে পারেন।

7. এমবেডিং তৈরি করুন

পরবর্তী ধাপ হল Google Vertex AI থেকে textembedding-005 মডেল ব্যবহার করে আমাদের পণ্যের বিবরণের জন্য এম্বেডিং তৈরি করা এবং সেগুলিকে cymbal_products টেবিলের নতুন কলামে সংরক্ষণ করা।

ভেক্টর ডেটা সংরক্ষণ করতে আমাদের ক্লাউড এসকিউএল ইনস্ট্যান্সে ভেক্টর কার্যকারিতা সক্ষম করতে হবে। ক্লাউড শেল এ চালান:

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

ডাটাবেসের সাথে সংযোগ করুন:

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

এবং এমবেডিং ফাংশন ব্যবহার করে আমাদের cymbal_products টেবিলে একটি ভার্চুয়াল কলাম এমবেডিং তৈরি করুন।

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

2000 সারির জন্য ভেক্টর এম্বেডিং তৈরি করতে সাধারণত 5 মিনিটের কম সময় লাগে, কিন্তু কখনও কখনও কিছুটা বেশি সময় নিতে পারে এবং প্রায়শই অনেক দ্রুত শেষ হয়।

8. সাদৃশ্য অনুসন্ধান চালান

আমরা এখন বর্ণনার জন্য গণনা করা ভেক্টর মান এবং একই এমবেডিং মডেল ব্যবহার করে আমাদের অনুরোধের জন্য আমরা যে ভেক্টর মান তৈরি করি তার উপর ভিত্তি করে সাদৃশ্য অনুসন্ধান ব্যবহার করে আমাদের অনুসন্ধান চালাতে পারি।

SQL ক্যোয়ারী একই কমান্ড লাইন ইন্টারফেস থেকে বা বিকল্প হিসাবে, ক্লাউড SQL স্টুডিও থেকে কার্যকর করা যেতে পারে। ক্লাউড এসকিউএল স্টুডিওতে যেকোনো মাল্টিরো এবং জটিল ক্যোয়ারী ম্যানেজ করা ভালো।

একটি ব্যবহারকারী তৈরি করুন

আমাদের একটি নতুন ব্যবহারকারী দরকার যা ক্লাউড এসকিউএল স্টুডিও ব্যবহার করতে পারে। আমরা রুট ব্যবহারকারীর জন্য যে পাসওয়ার্ড ব্যবহার করেছি সেই পাসওয়ার্ড দিয়ে আমরা একটি বিল্ট-ইন টাইপ ইউজার স্টুডেন্ট তৈরি করতে যাচ্ছি।

ক্লাউড শেল কার্যকর করুন:

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

ক্লাউড এসকিউএল স্টুডিও শুরু করুন

কনসোলে ক্লাউড এসকিউএল ইন্সট্যান্সে ক্লিক করুন যা আমরা আগে তৈরি করেছি।

667b658dbf98eb0b.png

এটি ডান প্যানেলে খোলা হলে আমরা ক্লাউড এসকিউএল স্টুডিও দেখতে পাব। এটিতে ক্লিক করুন।

a879e8ac914a8ce9.png

এটি একটি ডায়ালগ খুলবে যেখানে আপনি ডাটাবেসের নাম এবং আপনার শংসাপত্রগুলি প্রদান করবেন:

  • ডাটাবেস: quickstart_db
  • ব্যবহারকারী: ছাত্র
  • পাসওয়ার্ড: ব্যবহারকারীর জন্য আপনার উল্লেখ করা পাসওয়ার্ড

এবং "প্রমাণিত করুন" বোতামে ক্লিক করুন।

36e6036847333d18.png

এটি পরবর্তী উইন্ডোটি খুলবে যেখানে আপনি SQL এডিটর খুলতে ডানদিকে "সম্পাদক" ট্যাবে ক্লিক করুন।

d803b7b6a798094f.png

এখন আমরা আমাদের প্রশ্ন চালানোর জন্য প্রস্তুত.

কোয়েরি চালান

একটি ক্লায়েন্টের অনুরোধের সাথে সবচেয়ে ঘনিষ্ঠভাবে সম্পর্কিত উপলব্ধ পণ্যগুলির একটি তালিকা পেতে একটি ক্যোয়ারী চালান৷ ভেক্টর মান পেতে আমরা যে অনুরোধটি Vertex AI-তে পাঠাতে যাচ্ছি তা শোনাচ্ছে "এখানে কী ধরনের ফলের গাছ ভাল জন্মে?"

cosine_distance ফাংশন ব্যবহার করে আমাদের অনুরোধের জন্য সবচেয়ে উপযুক্ত প্রথম 5টি আইটেম বেছে নেওয়ার জন্য আপনি এখানে একটি কোয়েরি চালাতে পারেন:

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;

ক্লাউড SQL স্টুডিও এডিটরে ক্যোয়ারীটি কপি করে পেস্ট করুন এবং "RUN" বোতামটি চাপুন বা quickstart_db ডাটাবেসের সাথে সংযোগকারী আপনার কমান্ড লাইন সেশনে পেস্ট করুন।

dffc70835901cf03.png

এবং এখানে প্রশ্নের সাথে মেলে বেছে নেওয়া পণ্যগুলির একটি তালিকা রয়েছে৷

+-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+
| 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)

কোসাইন_ডিসট্যান্স ফাংশনের সাথে কোয়েরি সম্পাদনে 0.13 সেকেন্ড সময় লেগেছে।

এখন আমরা একই ক্যোয়ারী চালাচ্ছি কিন্তু প্রায়_দূরত্ব ফাংশন ব্যবহার করে KNN অনুসন্ধান ব্যবহার করছি। আমাদের এম্বেডিংয়ের জন্য যদি আমাদের একটি ANN সূচক না থাকে তবে এটি স্বয়ংক্রিয়ভাবে পর্দার পিছনে সঠিক অনুসন্ধানে ফিরে আসে:

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 সময় লেগেছে। আমরা cosine_distance ফাংশনের মতো একই ফলাফল পেয়েছি।

9. পুনরুদ্ধার করা ডেটা ব্যবহার করে এলএলএম প্রতিক্রিয়া উন্নত করুন

আমরা কার্যকর করা প্রশ্নের ফলাফল ব্যবহার করে একটি ক্লায়েন্ট অ্যাপ্লিকেশনে Gen AI LLM প্রতিক্রিয়া উন্নত করতে পারি এবং একটি Vertex AI জেনারেটিভ ফাউন্ডেশন ল্যাঙ্গুয়েজ মডেলের প্রম্পটের অংশ হিসাবে সরবরাহকৃত প্রশ্নের ফলাফলগুলি ব্যবহার করে একটি অর্থপূর্ণ আউটপুট প্রস্তুত করতে পারি।

এটি অর্জন করতে আমাদের ভেক্টর অনুসন্ধান থেকে আমাদের ফলাফলের সাথে একটি JSON তৈরি করতে হবে, তারপর একটি অর্থপূর্ণ আউটপুট তৈরি করতে Vertex AI-তে একটি LLM মডেলের জন্য একটি প্রম্পট হিসাবে সেই জেনারেট করা JSON ব্যবহার করুন। প্রথম ধাপে আমরা JSON তৈরি করি, তারপর আমরা এটিকে Vertex AI স্টুডিওতে পরীক্ষা করি এবং শেষ ধাপে আমরা এটিকে একটি SQL স্টেটমেন্টে অন্তর্ভুক্ত করি যা একটি অ্যাপ্লিকেশনে ব্যবহার করা যেতে পারে।

JSON ফর্ম্যাটে আউটপুট তৈরি করুন

JSON ফর্ম্যাটে আউটপুট তৈরি করতে ক্যোয়ারী পরিবর্তন করুন এবং Vertex AI-তে পাস করার জন্য শুধুমাত্র একটি সারি ফেরত দিন

এখানে ANN অনুসন্ধান ব্যবহার করে প্রশ্নের উদাহরণ:

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"}]

ভার্টেক্স এআই স্টুডিওতে প্রম্পট চালান

ভার্টেক্স এআই স্টুডিওতে জেনারেটিভ এআই টেক্সট মডেলের প্রম্পটের অংশ হিসেবে আমরা জেনারেট করা JSON ব্যবহার করতে পারি।

ক্লাউড কনসোলে ভার্টেক্স এআই স্টুডিও প্রম্পট খুলুন।

411ffb9d164ac140.png

এটি আপনাকে অতিরিক্ত API সক্ষম করতে বলতে পারে তবে আপনি অনুরোধটি উপেক্ষা করতে পারেন। আমাদের ল্যাব শেষ করার জন্য আমাদের কোনো অতিরিক্ত API-এর প্রয়োজন নেই।

আমরা যে প্রম্পটটি ব্যবহার করতে যাচ্ছি তা এখানে:

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:
[place your JSON here]
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.

এবং যখন আমরা আমাদের JSON মানগুলির সাথে এবং gemini-2.0-ফ্ল্যাশ মডেল ব্যবহার করে প্রম্পট চালাই তখন ফলাফলটি এখানে রয়েছে:

9839af512686130d.png

এই উদাহরণে মডেল থেকে আমরা যে উত্তর পেয়েছি তা শব্দার্থিক অনুসন্ধানের ফলাফল এবং উল্লেখিত জিপ কোডে উপলব্ধ সেরা মিলিত পণ্য ব্যবহার করে অনুসরণ করে।

PSQL এ প্রম্পট চালান

ডাটাবেসে সরাসরি SQL ব্যবহার করে একটি জেনারেটিভ মডেল থেকে অনুরূপ প্রতিক্রিয়া পেতে আমরা Vertex AI-এর সাথে Cloud SQL AI ইন্টিগ্রেশন ব্যবহার করতে পারি।

এখন আমরা এসকিউএল ব্যবহার করে জেনারেটিভ এআই টেক্সট মডেলের প্রম্পটের অংশ হিসাবে এটি সরবরাহ করতে JSON ফলাফল সহ একটি সাবকোয়েরিতে জেনারেট করা ব্যবহার করতে পারি।

mysql বা ক্লাউড এসকিউএল স্টুডিও সেশনে ডাটাবেসে ক্যোয়ারী চালান

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('publishers/google/models/gemini-2.0-flash-001:generateContent',
        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;

এবং এখানে নমুনা আউটপুট. মডেল সংস্করণ এবং পরামিতিগুলির উপর নির্ভর করে আপনার আউটপুট ভিন্ন হতে পারে।

"Okay, I see you're looking for fruit trees that grow well in your area. Based on the available product, the **Malus Domestica** (Apple Tree) is a great option to consider!\n\n* **Product:** Malus Domestica (Apple Tree)\n* **Description:** This classic apple tree grows to about 30 feet tall and provides beautiful seasonal color with green leaves in summer and fiery colors in the fall. It's known for its strength and provides good shade. Most importantly, it produces delicious apples!\n* **Price:** \\$100.00\n* **Growing Zones:** This particular apple tree is well-suited for USDA zones 4-8. Since your zip code is 93230, you are likely in USDA zone 9a or 9b. While this specific tree is rated for zones 4-8, with proper care and variety selection, apple trees can still thrive in slightly warmer climates. You may need to provide extra care during heat waves.\n\n**Recommendation:** I would recommend investigating varieties of Malus Domestica suited to slightly warmer climates or contacting a local nursery/arborist to verify if it is a good fit for your local climate conditions.\n"

আউটপুট মার্কডাউন বিন্যাসে প্রদান করা হয়.

10. একটি নিকটতম-প্রতিবেশী সূচক তৈরি করুন

আমাদের ডেটাসেট তুলনামূলকভাবে ছোট এবং প্রতিক্রিয়া সময় প্রাথমিকভাবে AI মডেলগুলির সাথে মিথস্ক্রিয়াগুলির উপর নির্ভর করে। কিন্তু যখন আপনার লক্ষ লক্ষ ভেক্টর থাকে তখন ভেক্টর অনুসন্ধান আমাদের প্রতিক্রিয়া সময়ের একটি উল্লেখযোগ্য অংশ নিতে পারে এবং সিস্টেমে একটি উচ্চ লোড দিতে পারে। এটি উন্নত করতে আমরা আমাদের ভেক্টরের উপরে একটি সূচক তৈরি করতে পারি।

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. পরিচ্ছন্ন পরিবেশ

ক্লাউড এসকিউএল ইন্সট্যান্স মুছুন

আপনি ল্যাব দিয়ে সম্পন্ন হলে ক্লাউড SQL দৃষ্টান্ত ধ্বংস করুন

ক্লাউড শেলে প্রকল্প এবং পরিবেশ ভেরিয়েবলগুলি সংজ্ঞায়িত করুন যদি আপনি সংযোগ বিচ্ছিন্ন হয়ে থাকেন এবং সমস্ত পূর্ববর্তী সেটিংস হারিয়ে যায়:

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. অভিনন্দন

কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন।

আমরা কভার করেছি কি

  • মাইএসকিউএল উদাহরণের জন্য কীভাবে একটি ক্লাউড এসকিউএল স্থাপন করবেন
  • কীভাবে ডাটাবেস তৈরি করবেন এবং ক্লাউড এসকিউএল এআই ইন্টিগ্রেশন সক্ষম করবেন
  • কিভাবে ডাটাবেসে ডাটা লোড করবেন
  • ক্লাউড এসকিউএল-এ ভার্টেক্স এআই এমবেডিং মডেল কীভাবে ব্যবহার করবেন
  • Vertex AI জেনারেটিভ মডেল ব্যবহার করে ফলাফলকে কিভাবে সমৃদ্ধ করা যায়
  • ভেক্টর সূচক ব্যবহার করে কর্মক্ষমতা কিভাবে উন্নত করা যায়

AlloyDB-এর জন্য অনুরূপ কোডল্যাব বা পোস্টগ্রেসের জন্য ক্লাউড এসকিউএল-এর জন্য একটি কোডল্যাব চেষ্টা করুন

13. সমীক্ষা

আউটপুট:

আপনি কিভাবে এই টিউটোরিয়াল ব্যবহার করবেন?