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

পূর্বশর্ত
- গুগল ক্লাউড, কনসোল সম্পর্কে প্রাথমিক ধারণা
- কমান্ড লাইন ইন্টারফেস এবং ক্লাউড শেলের মৌলিক দক্ষতা।
তুমি কি শিখবে
- PostgreSQL ইনস্ট্যান্সের জন্য ক্লাউড SQL কীভাবে স্থাপন করবেন
- কিভাবে ডাটাবেস তৈরি করবেন এবং ক্লাউড SQL AI ইন্টিগ্রেশন সক্ষম করবেন
- ডাটাবেসে ডেটা কীভাবে লোড করবেন
- ক্লাউড এসকিউএল স্টুডিও কীভাবে ব্যবহার করবেন
- ক্লাউড এসকিউএল-এ ভার্টেক্স এআই এমবেডিং মডেল কীভাবে ব্যবহার করবেন
- ভার্টেক্স এআই স্টুডিও কীভাবে ব্যবহার করবেন
- ভার্টেক্স এআই জেনারেটিভ মডেল ব্যবহার করে ফলাফল কীভাবে সমৃদ্ধ করা যায়
- ভেক্টর সূচক ব্যবহার করে কর্মক্ষমতা কীভাবে উন্নত করা যায়
তোমার যা লাগবে
- একটি গুগল ক্লাউড অ্যাকাউন্ট এবং গুগল ক্লাউড প্রকল্প
- ক্রোমের মতো একটি ওয়েব ব্রাউজার যা গুগল ক্লাউড কনসোল এবং ক্লাউড শেল সমর্থন করে
2. সেটআপ এবং প্রয়োজনীয়তা
প্রকল্প সেটআপ
- গুগল ক্লাউড কনসোলে সাইন-ইন করুন। যদি আপনার ইতিমধ্যেই একটি জিমেইল বা গুগল ওয়ার্কস্পেস অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।
কর্মক্ষেত্র বা স্কুল অ্যাকাউন্টের পরিবর্তে ব্যক্তিগত অ্যাকাউন্ট ব্যবহার করুন।
- একটি নতুন প্রকল্প তৈরি করুন অথবা বিদ্যমান একটি পুনরায় ব্যবহার করুন। গুগল ক্লাউড কনসোলে একটি নতুন প্রকল্প তৈরি করতে, হেডারে, একটি প্রকল্প নির্বাচন করুন বোতামে ক্লিক করুন যা একটি পপআপ উইন্ডো খুলবে।

"একটি প্রকল্প নির্বাচন করুন" উইন্ডোতে "নতুন প্রকল্প" বোতামটি টিপুন যা নতুন প্রকল্পের জন্য একটি ডায়ালগ বক্স খুলবে।

ডায়ালগ বক্সে আপনার পছন্দের প্রকল্পের নাম লিখুন এবং অবস্থানটি নির্বাচন করুন।

- এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রজেক্টের নামটি প্রদর্শন করা হবে। প্রোজেক্টের নামটি গুগল এপিআই দ্বারা ব্যবহৃত হয় না এবং এটি যেকোনো সময় পরিবর্তন করা যেতে পারে।
- সমস্ত Google ক্লাউড প্রোজেক্টে প্রোজেক্ট আইডি অনন্য এবং অপরিবর্তনীয় (সেট করার পরে এটি পরিবর্তন করা যাবে না)। Google ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য আইডি তৈরি করে, তবে আপনি এটি কাস্টমাইজ করতে পারেন। যদি আপনি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য একটি র্যান্ডম আইডি তৈরি করতে পারেন অথবা এর উপলব্ধতা পরীক্ষা করার জন্য আপনার নিজস্ব আইডি প্রদান করতে পারেন। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রোজেক্ট আইডি উল্লেখ করতে হবে, যা সাধারণত প্লেসহোল্ডার PROJECT_ID দিয়ে চিহ্নিত করা হয়।
- আপনার তথ্যের জন্য, তৃতীয় একটি মান আছে, একটি Project Number , যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
বিলিং সক্ষম করুন
বিলিং সক্ষম করার জন্য, আপনার কাছে দুটি বিকল্প আছে। আপনি হয় আপনার ব্যক্তিগত বিলিং অ্যাকাউন্ট ব্যবহার করতে পারেন অথবা নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করে ক্রেডিট রিডিম করতে পারেন।
$৫ গুগল ক্লাউড ক্রেডিট রিডিম করুন (ঐচ্ছিক)
এই কর্মশালাটি পরিচালনা করার জন্য, আপনার কিছু ক্রেডিট সহ একটি বিলিং অ্যাকাউন্ট প্রয়োজন। আপনি যদি নিজের বিলিং ব্যবহার করার পরিকল্পনা করেন, তাহলে আপনি এই ধাপটি এড়িয়ে যেতে পারেন।
- এই লিঙ্কে ক্লিক করুন এবং একটি ব্যক্তিগত গুগল অ্যাকাউন্ট দিয়ে সাইন ইন করুন।
- তুমি এরকম কিছু দেখতে পাবে:

- আপনার ক্রেডিট অ্যাক্সেস করতে এখানে ক্লিক করুন বোতামটি ক্লিক করুন। এটি আপনাকে আপনার বিলিং প্রোফাইল সেট আপ করার জন্য একটি পৃষ্ঠায় নিয়ে যাবে। যদি আপনাকে একটি বিনামূল্যে ট্রায়াল সাইন আপ স্ক্রিন দেখানো হয়, তাহলে বাতিল করুন ক্লিক করুন এবং বিলিং লিঙ্ক করতে থাকুন।

- আপনি এখন একটি Google Cloud Platform ট্রায়াল বিলিং অ্যাকাউন্টের সাথে সংযুক্ত আছেন কিনা তা নিশ্চিত করুন-এ ক্লিক করুন।

একটি ব্যক্তিগত বিলিং অ্যাকাউন্ট সেট আপ করুন
আপনি যদি গুগল ক্লাউড ক্রেডিট ব্যবহার করে বিলিং সেট আপ করেন, তাহলে আপনি এই ধাপটি এড়িয়ে যেতে পারেন।
একটি ব্যক্তিগত বিলিং অ্যাকাউন্ট সেট আপ করতে, ক্লাউড কনসোলে বিলিং সক্ষম করতে এখানে যান ।
কিছু নোট:
- এই ল্যাবটি সম্পূর্ণ করতে ক্লাউড রিসোর্সে $3 USD এর কম খরচ হবে।
- আরও চার্জ এড়াতে আপনি এই ল্যাবের শেষে রিসোর্স মুছে ফেলার ধাপগুলি অনুসরণ করতে পারেন।
- নতুন ব্যবহারকারীরা $300 USD বিনামূল্যে ট্রায়ালের জন্য যোগ্য।
ক্লাউড শেল শুরু করুন
যদিও গুগল ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আপনি গুগল ক্লাউড শেল ব্যবহার করবেন, যা ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।
গুগল ক্লাউড কনসোল থেকে, উপরের ডানদিকের টুলবারে ক্লাউড শেল আইকনে ক্লিক করুন:

অথবা আপনি G তারপর S টিপতে পারেন। আপনি যদি Google Cloud Console-এর মধ্যে থাকেন অথবা এই লিঙ্কটি ব্যবহার করেন তবে এই ক্রমটি Cloud Shell সক্রিয় করবে।
পরিবেশের সাথে সংযোগ স্থাপন এবং সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে। এটি সম্পন্ন হলে, আপনি এরকম কিছু দেখতে পাবেন:

এই ভার্চুয়াল মেশিনটিতে আপনার প্রয়োজনীয় সকল ডেভেলপমেন্ট টুল রয়েছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি অফার করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার সমস্ত কাজ একটি ব্রাউজারেই করা যেতে পারে। আপনাকে কিছু ইনস্টল করার প্রয়োজন নেই।
৩. শুরু করার আগে
API সক্ষম করুন
আউটপুট:
ক্লাউড এসকিউএল , কম্পিউট ইঞ্জিন , নেটওয়ার্কিং পরিষেবা এবং ভার্টেক্স এআই ব্যবহার করার জন্য, আপনাকে আপনার গুগল ক্লাউড প্রকল্পে তাদের নিজ নিজ 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.
API গুলির সাথে পরিচয় করিয়ে দেওয়া হচ্ছে
- ক্লাউড এসকিউএল অ্যাডমিন এপিআই (
sqladmin.googleapis.com) আপনাকে প্রোগ্রাম্যাটিকভাবে ক্লাউড এসকিউএল ইনস্ট্যান্স তৈরি, কনফিগার এবং পরিচালনা করতে দেয়। এটি গুগলের সম্পূর্ণরূপে পরিচালিত রিলেশনাল ডাটাবেস পরিষেবা (MySQL, PostgreSQL এবং SQL সার্ভার সমর্থন করে) এর জন্য নিয়ন্ত্রণ সমতল প্রদান করে, প্রভিশনিং, ব্যাকআপ, উচ্চ প্রাপ্যতা এবং স্কেলিং এর মতো কাজগুলি পরিচালনা করে। - কম্পিউট ইঞ্জিন API (
compute.googleapis.com) আপনাকে ভার্চুয়াল মেশিন (VM), স্থায়ী ডিস্ক এবং নেটওয়ার্ক সেটিংস তৈরি এবং পরিচালনা করতে দেয়। এটি আপনার কাজের চাপ চালানোর জন্য এবং অনেক পরিচালিত পরিষেবার জন্য অন্তর্নিহিত অবকাঠামো হোস্ট করার জন্য প্রয়োজনীয় মূল অবকাঠামো-অ্যাজ-এ-সার্ভিস (IaaS) ভিত্তি প্রদান করে। - ক্লাউড রিসোর্স ম্যানেজার API (
cloudresourcemanager.googleapis.com) আপনাকে আপনার গুগল ক্লাউড প্রকল্পের মেটাডেটা এবং কনফিগারেশন প্রোগ্রাম্যাটিকভাবে পরিচালনা করতে দেয়। এটি আপনাকে সংস্থানগুলি সংগঠিত করতে, পরিচয় এবং অ্যাক্সেস ম্যানেজমেন্ট (IAM) নীতিগুলি পরিচালনা করতে এবং প্রকল্পের শ্রেণিবিন্যাস জুড়ে অনুমতিগুলি যাচাই করতে সক্ষম করে। - সার্ভিস নেটওয়ার্কিং API (
servicenetworking.googleapis.com) আপনাকে আপনার ভার্চুয়াল প্রাইভেট ক্লাউড (VPC) নেটওয়ার্ক এবং গুগলের পরিচালিত পরিষেবাগুলির মধ্যে ব্যক্তিগত সংযোগের সেটআপ স্বয়ংক্রিয় করতে দেয়। AlloyDB এর মতো পরিষেবাগুলির জন্য ব্যক্তিগত IP অ্যাক্সেস স্থাপন করা বিশেষভাবে প্রয়োজন যাতে তারা আপনার অন্যান্য সংস্থানগুলির সাথে নিরাপদে যোগাযোগ করতে পারে। - Vertex AI API (
aiplatform.googleapis.com) আপনার অ্যাপ্লিকেশনগুলিকে মেশিন লার্নিং মডেল তৈরি, স্থাপন এবং স্কেল করতে সক্ষম করে। এটি Google ক্লাউডের সমস্ত AI পরিষেবার জন্য একীভূত ইন্টারফেস প্রদান করে, যার মধ্যে রয়েছে জেনারেটিভ AI মডেলগুলিতে অ্যাক্সেস (যেমন জেমিনি) এবং কাস্টম মডেল প্রশিক্ষণ।
৪. একটি ক্লাউড SQL ইনস্ট্যান্স তৈরি করুন
ভার্টেক্স এআই-এর সাথে ডাটাবেস ইন্টিগ্রেশনের মাধ্যমে ক্লাউড এসকিউএল ইনস্ট্যান্স তৈরি করুন।
ডাটাবেস পাসওয়ার্ড তৈরি করুন
ডিফল্ট ডাটাবেস ব্যবহারকারীর জন্য পাসওয়ার্ড নির্ধারণ করুন। আপনি নিজের পাসওয়ার্ড নির্ধারণ করতে পারেন অথবা একটি র্যান্ডম ফাংশন ব্যবহার করে একটি তৈরি করতে পারেন:
export CLOUDSQL_PASSWORD=`openssl rand -hex 12`
পাসওয়ার্ডের জন্য তৈরি মানটি লক্ষ্য করুন:
echo $CLOUDSQL_PASSWORD
PostgreSQL ইনস্ট্যান্সের জন্য ক্লাউড SQL তৈরি করুন
ক্লাউড এসকিউএল ইনস্ট্যান্স বিভিন্ন উপায়ে তৈরি করা যেতে পারে যেমন গুগল ক্লাউড কনসোল, টেরাফর্মের মতো অটোমেশন টুল বা গুগল ক্লাউড এসডিকে। ল্যাবে আমরা মূলত গুগল ক্লাউড এসডিকে জিক্লাউড টুল ব্যবহার করব। অন্যান্য টুল ব্যবহার করে কীভাবে একটি ইনস্ট্যান্স তৈরি করবেন তা আপনি ডকুমেন্টেশনে পড়তে পারেন।
ক্লাউড শেল সেশনে এক্সিকিউট করুন:
gcloud sql instances create my-cloudsql-instance \
--database-version=POSTGRES_17 \
--tier=db-custom-1-3840 \
--region=us-central1 \
--edition=ENTERPRISE \
--enable-google-ml-integration \
--database-flags cloudsql.enable_google_ml_integration=on
ইনস্ট্যান্স তৈরি করার পর, আমাদের ইনস্ট্যান্সের ডিফল্ট ব্যবহারকারীর জন্য একটি পাসওয়ার্ড সেট করতে হবে এবং যাচাই করতে হবে যে আমরা পাসওয়ার্ড দিয়ে সংযোগ করতে পারি কিনা।
gcloud sql users set-password postgres \
--instance=my-cloudsql-instance \
--password=$CLOUDSQL_PASSWORD
" gcloud sql connect" কমান্ডটি বক্সে দেখানো হয়েছে এবং সংযোগের জন্য প্রস্তুত হলে প্রম্পটে আপনার পাসওয়ার্ডটি লিখুন।
gcloud sql connect my-cloudsql-instance --user=postgres
আপাতত ctrl+d কীবোর্ড শর্টকাট ব্যবহার করে অথবা exit কমান্ড ব্যবহার করে psql সেশন থেকে বেরিয়ে আসুন।
exit
ভার্টেক্স এআই ইন্টিগ্রেশন সক্ষম করুন
ভার্টেক্স এআই ইন্টিগ্রেশন ব্যবহার করতে সক্ষম হওয়ার জন্য অভ্যন্তরীণ ক্লাউড এসকিউএল পরিষেবা অ্যাকাউন্টে প্রয়োজনীয় সুযোগ-সুবিধা প্রদান করুন।
ক্লাউড SQL ইন্টার্নাল সার্ভিস অ্যাকাউন্টের ইমেল খুঁজে বের করুন এবং এটি একটি ভেরিয়েবল হিসেবে এক্সপোর্ট করুন।
SERVICE_ACCOUNT_EMAIL=$(gcloud sql instances describe my-cloudsql-instance --format="value(serviceAccountEmailAddress)")
echo $SERVICE_ACCOUNT_EMAIL
ক্লাউড SQL পরিষেবা অ্যাকাউন্টে Vertex AI-এর অ্যাক্সেস দিন:
PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \
--role="roles/aiplatform.user"
ক্লাউড SQL ডকুমেন্টেশনে ইনস্ট্যান্স তৈরি এবং কনফিগারেশন সম্পর্কে আরও পড়ুন এখানে ।
৫. ডাটাবেস প্রস্তুত করুন
এখন আমাদের একটি ডাটাবেস তৈরি করতে হবে এবং ভেক্টর সাপোর্ট সক্রিয় করতে হবে।
ডাটাবেস তৈরি করুন
quickstart_db নামে একটি ডাটাবেস তৈরি করুন। এটি করার জন্য আমাদের কাছে বিভিন্ন বিকল্প রয়েছে যেমন কমান্ড লাইন ডাটাবেস ক্লায়েন্ট যেমন PostgreSQL, SDK বা Cloud SQL Studio এর জন্য psql। আমরা ডাটাবেস তৈরি এবং ইনস্ট্যান্সের সাথে সংযোগ স্থাপনের জন্য SDK (gcloud) ব্যবহার করব।
ক্লাউড শেলে ডাটাবেস তৈরির জন্য কমান্ডটি কার্যকর করুন
gcloud sql databases create quickstart_db --instance=my-cloudsql-instance
এক্সটেনশনগুলি সক্ষম করুন
ভার্টেক্স এআই এবং ভেক্টরগুলির সাথে কাজ করতে সক্ষম হওয়ার জন্য আমাদের তৈরি ডাটাবেসে দুটি এক্সটেনশন সক্ষম করতে হবে।
ক্লাউড শেলে তৈরি ডাটাবেসের সাথে সংযোগ স্থাপনের জন্য কমান্ডটি চালান (আপনাকে আপনার পাসওয়ার্ড প্রদান করতে হবে)
gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres
তারপর, সফল সংযোগের পরে, sql সেশনে আপনাকে দুটি কমান্ড চালাতে হবে:
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector CASCADE;
SQL সেশন থেকে প্রস্থান করুন:
exit;
6. ডেটা লোড করুন
এখন আমাদের ডাটাবেসে অবজেক্ট তৈরি করতে হবে এবং ডেটা লোড করতে হবে। আমরা কাল্পনিক সিম্বাল স্টোর ডেটা ব্যবহার করতে যাচ্ছি। ডেটাগুলি পাবলিক গুগল স্টোরেজ বাকেটে CSV ফর্ম্যাটে পাওয়া যাবে।
প্রথমে আমাদের ডাটাবেসে প্রয়োজনীয় সকল অবজেক্ট তৈরি করতে হবে। এটি করার জন্য আমরা ইতিমধ্যেই পরিচিত gcloud sql connect এবং gcloud storage কমান্ড ব্যবহার করে স্কিমা অবজেক্টগুলি ডাউনলোড এবং আমাদের ডাটাবেসে আমদানি করব।
ক্লাউড শেলে, ইনস্ট্যান্স তৈরি করার সময় উল্লেখিত পাসওয়ার্ডটি এক্সিকিউট করুন এবং প্রদান করুন:
gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql |gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres
পূর্ববর্তী কমান্ডে আমরা ঠিক কী করেছি? আমরা আমাদের ডাটাবেসের সাথে সংযোগ স্থাপন করেছি এবং ডাউনলোড করা SQL কোডটি কার্যকর করেছি যা টেবিল, সূচী এবং ক্রম তৈরি করেছে।
পরবর্তী ধাপ হল ডেটা লোড করা এবং এটি করার জন্য আমাদের গুগল ক্লাউড স্টোরেজ থেকে CSV ফাইলগুলি ডাউনলোড করতে হবে।
gcloud storage cp gs://cloud-training/gcc/gcc-tech-004/cymbal_products.csv .
gcloud storage cp gs://cloud-training/gcc/gcc-tech-004/cymbal_inventory.csv .
gcloud storage cp gs://cloud-training/gcc/gcc-tech-004/cymbal_stores.csv .
তারপর আমাদের ডাটাবেসের সাথে সংযোগ স্থাপন করতে হবে।
gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres
এবং আমাদের CSV ফাইল থেকে ডেটা আমদানি করুন।
\copy cymbal_products from 'cymbal_products.csv' csv header
\copy cymbal_inventory from 'cymbal_inventory.csv' csv header
\copy cymbal_stores from 'cymbal_stores.csv' csv header
যদি আপনার নিজস্ব ডেটা থাকে এবং আপনার CSV ফাইলগুলি ক্লাউড কনসোল থেকে উপলব্ধ ক্লাউড SQL আমদানি সরঞ্জামের সাথে সামঞ্জস্যপূর্ণ হয়, তাহলে আপনি কমান্ড লাইন পদ্ধতির পরিবর্তে এটি ব্যবহার করতে পারেন।
৭. এম্বেডিং তৈরি করুন
পরবর্তী ধাপ হল Google Vertex AI থেকে textembedding-004 মডেল ব্যবহার করে আমাদের পণ্যের বর্ণনার জন্য এম্বেডিং তৈরি করা এবং সেগুলিকে ভেক্টর ডেটা হিসেবে সংরক্ষণ করা।
ডাটাবেসের সাথে সংযোগ স্থাপন করুন (যদি আপনি প্রস্থান করে থাকেন অথবা আপনার পূর্ববর্তী সেশনটি সংযোগ বিচ্ছিন্ন হয়ে থাকে):
gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres
এবং আমাদের cymbal_products টেবিলে embedding ফাংশন ব্যবহার করে একটি ভার্চুয়াল কলাম embedding তৈরি করুন। কমান্ডটি একটি ভার্চুয়াল কলাম " embedding " তৈরি করে যা " product_description " কলামের উপর ভিত্তি করে তৈরি হওয়া এম্বেডিং সহ আমাদের ভেক্টরগুলিকে সংরক্ষণ করবে। এছাড়াও এটি টেবিলের সমস্ত বিদ্যমান সারির জন্য এম্বেডিং তৈরি করে। মডেলটিকে এম্বেডিং ফাংশনের জন্য প্রথম প্যারামিটার এবং সোর্স ডেটাকে দ্বিতীয় প্যারামিটার হিসাবে সংজ্ঞায়িত করা হয়েছে।
ALTER TABLE cymbal_products ADD COLUMN embedding vector(768) GENERATED ALWAYS AS (embedding('text-embedding-005',product_description)) STORED;
এতে কিছুটা সময় লাগতে পারে কিন্তু ৯০০-১০০০ সারির জন্য ৫ মিনিটের বেশি সময় নেওয়া উচিত নয় এবং সাধারণত এটি অনেক দ্রুত হয়।
যখন আমরা টেবিলে একটি নতুন সারি সন্নিবেশ করি অথবা বিদ্যমান যেকোনো সারির জন্য product_description আপডেট করি, তখন " product_description " এর উপর ভিত্তি করে " embeding " কলামের ভার্চুয়াল কলামের ডেটা আবার জেনারেট করা হবে।
৮. সাদৃশ্য অনুসন্ধান চালান
আমরা এখন বর্ণনার জন্য গণনা করা ভেক্টর মানের উপর ভিত্তি করে এবং আমাদের অনুরোধের জন্য প্রাপ্ত ভেক্টর মানের উপর ভিত্তি করে সাদৃশ্য অনুসন্ধান ব্যবহার করে আমাদের অনুসন্ধান চালাতে পারি।
SQL কোয়েরিটি gcloud sql connect ব্যবহার করে একই কমান্ড লাইন ইন্টারফেস থেকে অথবা বিকল্প হিসেবে, Cloud SQL Studio থেকে কার্যকর করা যেতে পারে। যেকোনো মাল্টি-রো এবং জটিল কোয়েরি ক্লাউড SQL স্টুডিওতে পরিচালনা করা ভালো।
ক্লাউড এসকিউএল স্টুডিও শুরু করুন
কনসোলে আমরা আগে তৈরি করা ক্লাউড SQL ইনস্ট্যান্সে ক্লিক করুন।

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

এটি একটি ডায়ালগ খুলবে যেখানে আপনি ডাটাবেসের নাম এবং আপনার শংসাপত্রগুলি প্রদান করবেন:
- ডাটাবেস: কুইকস্টার্ট_ডিবি
- ব্যবহারকারী: পোস্টগ্রেস
- পাসওয়ার্ড: প্রধান ডাটাবেস ব্যবহারকারীর জন্য আপনার উল্লেখিত পাসওয়ার্ড
এবং "AUTHENTICATE" বোতামে ক্লিক করুন।

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

এখন আমরা আমাদের প্রশ্নগুলি চালানোর জন্য প্রস্তুত।
কোয়েরি চালান
ক্লায়েন্টের অনুরোধের সাথে সবচেয়ে ঘনিষ্ঠভাবে সম্পর্কিত উপলব্ধ পণ্যগুলির একটি তালিকা পেতে একটি কোয়েরি চালান। ভেক্টর মান পেতে আমরা Vertex AI-কে যে অনুরোধটি পাঠাতে যাচ্ছি তা "এখানে কোন ধরণের ফলের গাছ ভালো জন্মে?" এর মতো শোনাচ্ছে।
আমাদের অনুরোধের জন্য সবচেয়ে উপযুক্ত প্রথম ১০টি আইটেম বেছে নেওয়ার জন্য আপনি এখানে একটি কোয়েরি চালাতে পারেন:
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;
কোয়েরিটি কপি করে ক্লাউড SQL স্টুডিও এডিটরে পেস্ট করুন এবং "RUN" বোতাম টিপুন অথবা quickstart_db ডাটাবেসের সাথে সংযোগকারী আপনার কমান্ড লাইন সেশনে পেস্ট করুন।

এবং এখানে প্রশ্নের সাথে মিলে যাওয়া পণ্যগুলির একটি তালিকা রয়েছে।
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 (10 rows)
৯. পুনরুদ্ধারকৃত ডেটা ব্যবহার করে এলএলএম প্রতিক্রিয়া উন্নত করুন
আমরা সম্পাদিত কোয়েরির ফলাফল ব্যবহার করে একটি ক্লায়েন্ট অ্যাপ্লিকেশনের Gen AI LLM প্রতিক্রিয়া উন্নত করতে পারি এবং Vertex AI জেনারেটিভ ফাউন্ডেশন ল্যাঙ্গুয়েজ মডেলের প্রম্পটের অংশ হিসাবে সরবরাহিত কোয়েরি ফলাফল ব্যবহার করে একটি অর্থপূর্ণ আউটপুট প্রস্তুত করতে পারি।
এটি অর্জনের জন্য আমাদের ভেক্টর অনুসন্ধান থেকে আমাদের ফলাফলগুলি সহ একটি JSON তৈরি করতে হবে, তারপর একটি অর্থপূর্ণ আউটপুট তৈরি করতে Vertex AI-তে একটি LLM মডেলের জন্য একটি প্রম্পট যোগ করার জন্য সেই জেনারেট করা JSON ব্যবহার করতে হবে। প্রথম ধাপে আমরা JSON তৈরি করি, তারপর আমরা Vertex AI স্টুডিওতে এটি পরীক্ষা করি এবং শেষ ধাপে আমরা এটি একটি SQL স্টেটমেন্টে অন্তর্ভুক্ত করি যা একটি অ্যাপ্লিকেশনে ব্যবহার করা যেতে পারে।
JSON ফর্ম্যাটে আউটপুট তৈরি করুন
JSON ফর্ম্যাটে আউটপুট তৈরি করতে কোয়েরিটি পরিবর্তন করুন এবং Vertex AI তে পাস করার জন্য শুধুমাত্র একটি সারি ফেরত দিন।
PostgreSQL এর জন্য ক্লাউড SQL
এখানে কোয়েরির উদাহরণ দেওয়া হল:
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 স্টুডিওতে জেনারেটিভ AI টেক্সট মডেলের প্রম্পটের অংশ হিসেবে জেনারেটেড JSON ব্যবহার করতে পারি।
ক্লাউড কনসোলে Vertex AI Studio Studio খুলুন।

এটি আপনাকে অতিরিক্ত 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:
[{"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"}]
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 মান সহ প্রম্পটটি চালাই তখন ফলাফলটি এখানে দেখা যায়:

এই উদাহরণে মডেল থেকে আমরা যে উত্তরটি পেয়েছি তা নিম্নরূপ। মনে রাখবেন যে সময়ের সাথে সাথে মডেল এবং প্যারামিটারের পরিবর্তনের কারণে আপনার উত্তর ভিন্ন হতে পারে:
"আমাদের পণ্য তালিকায় (৯৩২৩০) দেওয়া জিপ কোডের উপর ভিত্তি করে, মনে হচ্ছে আপনি হ্যানফোর্ড, ক্যালিফোর্নিয়া অঞ্চলে অবস্থিত। ১৩৪৬ সান জোয়াকুইন উপত্যকায় অবস্থিত এই অঞ্চলটি আসলে পাথরের ফল চাষের জন্য দেশের অন্যতম প্রধান স্থান।
আপনার প্রশ্নের উত্তরে বলতে গেলে, আমাদের সংগ্রহ থেকে আপনার এলাকায় সবচেয়ে ভালো গাছ হল চেরি গাছ।
আপনার জন্য বিস্তারিত এখানে দেওয়া হল:
পণ্য: চেরি গাছ
মূল্য: $৭৫.০০
বর্ণনা: এটি একটি সুন্দর চেরি গাছ যা সুস্বাদু চেরি উৎপাদন করবে।2
কেন এটি এখানে সবচেয়ে ভালো জন্মে: সান জোয়াকুইন ভ্যালির জলবায়ু চেরি গাছের বিকাশের জন্য প্রয়োজনীয় নির্দিষ্ট পরিস্থিতি প্রদান করে: ফলের বিকাশের জন্য দীর্ঘ, উষ্ণ গ্রীষ্মের দিন এবং শীতল রাত। 5 যেহেতু হ্যানফোর্ড একটি প্রধান কৃষি কেন্দ্রে অবস্থিত যা তার পাথরের ফল উৎপাদনের জন্য পরিচিত, আপনি আশা করতে পারেন যে এই গাছটি আপনার স্থানীয় মাটিতে খুব উৎপাদনশীল হবে। সেরা ফসল পেতে কেবল পূর্ণ রোদ এবং ভাল জল নিষ্কাশনযুক্ত মাটি সহ এমন জায়গায় এটি রোপণ করতে ভুলবেন না।"
PSQL-এ প্রম্পট চালান
আমরা সরাসরি ডাটাবেসে SQL ব্যবহার করে জেনারেটিভ মডেল থেকে একই রকম প্রতিক্রিয়া পেতে Vertex AI এর সাথে Cloud SQL AI ইন্টিগ্রেশন ব্যবহার করতে পারি। কিন্তু gemini-2.0-flash-exp মডেলটি ব্যবহার করার জন্য আমাদের প্রথমে এটি নিবন্ধন করতে হবে।
PostgreSQL এর জন্য ক্লাউড SQL চালান
এক্সটেনশনটি ১.৪.২ বা তার বেশি ভার্সনে আপগ্রেড করুন (যদি বর্তমান ভার্সনটি কম হয়)। gcloud sql connect থেকে quickstart_db ডাটাবেসের সাথে সংযোগ করুন যেমনটি আগে দেখানো হয়েছে (অথবা Cloud SQL Studio ব্যবহার করুন) এবং কার্যকর করুন:
SELECT extversion from pg_extension where extname='google_ml_integration';
যদি ফেরত দেওয়া মান ১.৪.৩ এর কম হয় তাহলে এক্সিকিউট করুন:
ALTER EXTENSION google_ml_integration UPDATE TO '1.4.3';
তারপর আমাদের google_ml_integration.enable_model_support ডাটাবেস ফ্ল্যাগ "on" এ সেট করতে হবে। বর্তমান সেটিংস কার্যকর হয়েছে কিনা তা যাচাই করতে।
show google_ml_integration.enable_model_support;
পিএসকিউএল সেশন থেকে প্রত্যাশিত আউটপুট "চালু":
quickstart_db => show google_ml_integration.enable_model_support; google_ml_integration.enable_model_support -------------------------------------------- on (1 row)
যদি এটি "বন্ধ" দেখায় তাহলে আমাদের ডাটাবেস ফ্ল্যাগ আপডেট করতে হবে। এটি করার জন্য আপনি ওয়েব কনসোল ইন্টারফেস ব্যবহার করতে পারেন অথবা নিম্নলিখিত gcloud কমান্ডটি চালাতে পারেন।
gcloud sql instances patch my-cloudsql-instance \
--database-flags google_ml_integration.enable_model_support=on,cloudsql.enable_google_ml_integration=on
কমান্ডটি ব্যাকগ্রাউন্ডে কার্যকর হতে প্রায় ১-৩ মিনিট সময় নেয়। তারপর আপনি psql সেশনে অথবা ক্লাউড SQL স্টুডিও ব্যবহার করে quickstart_db ডাটাবেসের সাথে সংযোগ স্থাপন করে নতুন ফ্ল্যাগটি যাচাই করতে পারেন।
show google_ml_integration.enable_model_support;
পিএসকিউএল সেশন থেকে প্রত্যাশিত আউটপুট "চালু":
quickstart_db => show google_ml_integration.enable_model_support; google_ml_integration.enable_model_support -------------------------------------------- on (1 row)
তারপর আমাদের দুটি মডেল নিবন্ধন করতে হবে। প্রথমটি হল ইতিমধ্যে ব্যবহৃত text-embedding-005 মডেল। আমরা মডেল নিবন্ধন ক্ষমতা সক্রিয় করেছি বলে এটি নিবন্ধন করা প্রয়োজন।
psql অথবা Cloud SQL 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 => 'cloudsql_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 => 'https://us-central1-aiplatform.googleapis.com/v1/projects/$PROJECT_ID/locations/us-central1/publishers/google/models/gemini-2.5-flash:streamGenerateContent',
model_provider => 'google',
model_auth_type => 'cloudsql_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
gemini-1.5-pro:streamGenerateContent | generic
gemini-1.5-pro:generateContent | generic
gemini-1.0-pro:generateContent | generic
text-embedding-005 | text_embedding
gemini-2.5-flash | generic
এখন আমরা SQL ব্যবহার করে জেনারেটিভ AI টেক্সট মডেলের প্রম্পটের অংশ হিসেবে একটি সাবকোয়েরিতে জেনারেট করা JSON ব্যবহার করতে পারি।
পিএসকিউএল অথবা ক্লাউড এসকিউএল স্টুডিও সেশনে ডাটাবেসে কোয়েরিটি চালান
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 <=> google_ml.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;
এবং এখানে প্রত্যাশিত আউটপুট। মডেল সংস্করণ এবং প্যারামিটারের উপর নির্ভর করে আপনার আউটপুট ভিন্ন হতে পারে।:
"That's a great question! It sounds like you're looking to add some delicious fruit to your garden.\n\nBased on the products we have that are closely related to your search, I can tell you about a fantastic option:\n\n**Cherry Tree**" "\n* **Description:** This beautiful deciduous tree will produce delicious cherries. It grows to be about 15 feet tall, with dark green leaves in summer that turn a beautiful red in the fall. Cherry trees are known for their beauty, shade, and privacy. They prefer a cool, moist climate and sandy soil." "\n* **Price:** $75.00\n* **Grows well in:** USDA Zones 4-9.\n\nTo confirm if this Cherry Tree will thrive in your specific location, you might want to check which USDA Hardiness Zone your area falls into. If you're in zones 4-9, this" " could be a wonderful addition to your yard!"
১০. একটি নিকটতম-প্রতিবেশী সূচক তৈরি করুন
আমাদের ডেটাসেটটি বেশ ছোট এবং প্রতিক্রিয়া সময় মূলত AI মডেলগুলির সাথে মিথস্ক্রিয়ার উপর নির্ভর করে। কিন্তু যখন আপনার লক্ষ লক্ষ ভেক্টর থাকে তখন ভেক্টর অনুসন্ধান আমাদের প্রতিক্রিয়া সময়ের একটি উল্লেখযোগ্য অংশ নিতে পারে এবং সিস্টেমের উপর একটি উচ্চ লোড চাপিয়ে দিতে পারে। এটি উন্নত করার জন্য আমরা আমাদের ভেক্টরগুলির উপরে একটি সূচক তৈরি করতে পারি।
HNSW সূচক তৈরি করুন
আমরা আমাদের পরীক্ষার জন্য HNSW সূচক প্রকারটি চেষ্টা করতে যাচ্ছি। HNSW হল হায়ারার্কিকাল নেভিগেবল স্মল ওয়ার্ল্ড এবং এটি একটি বহুস্তরীয় গ্রাফ সূচককে প্রতিনিধিত্ব করে।
আমাদের এম্বেডিং কলামের জন্য সূচক তৈরি করতে আমাদের এম্বেডিং কলাম, দূরত্ব ফাংশন এবং ঐচ্ছিকভাবে m অথবা ef_constructions এর মতো প্যারামিটারগুলি সংজ্ঞায়িত করতে হবে। আপনি ডকুমেন্টেশনে প্যারামিটারগুলি সম্পর্কে বিস্তারিতভাবে পড়তে পারেন।
CREATE INDEX cymbal_products_embeddings_hnsw ON cymbal_products
USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 64);
প্রত্যাশিত আউটপুট:
quickstart_db=> CREATE INDEX cymbal_products_embeddings_hnsw ON cymbal_products USING hnsw (embedding vector_cosine_ops) WITH (m = 16, ef_construction = 64); 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=779.12..779.13 rows=1 width=32) (actual time=1.066..1.069 rows=1 loops=1)
-> Subquery Scan on trees (cost=769.05..779.12 rows=1 width=142) (actual time=1.038..1.041 rows=1 loops=1)
-> Limit (cost=769.05..779.11 rows=1 width=158) (actual time=1.022..1.024 rows=1 loops=1)
-> Nested Loop (cost=769.05..9339.69 rows=852 width=158) (actual time=1.020..1.021 rows=1 loops=1)
-> Nested Loop (cost=768.77..9316.48 rows=852 width=945) (actual time=0.858..0.859 rows=1 loops=1)
-> Index Scan using cymbal_products_embeddings_hnsw on cymbal_products cp (cost=768.34..2572.47 rows=941 width=941) (actual time=0.532..0.539 rows=3 loops=1)
Order By: (embedding <=> '[0.008864171,0.03693164,-0.024245683,...
<redacted>
...,0.017593635,-0.040275685,-0.03914233,-0.018452475,0.00826032,-0.07372604
]'::vector)
-> Index Scan using product_inventory_pkey on cymbal_inventory ci (cost=0.42..7.17 rows=1 width=37) (actual time=0.104..0.104 rows=0 loops=3)
Index Cond: ((store_id = 1583) AND (uniq_id = (cp.uniq_id)::text))
Filter: (inventory > 0)
Rows Removed by Filter: 1
-> Materialize (cost=0.28..8.31 rows=1 width=8) (actual time=0.133..0.134 rows=1 loops=1)
-> Index Scan using product_stores_pkey on cymbal_stores cs (cost=0.28..8.30 rows=1 width=8) (actual time=0.129..0.129 rows=1 loops=1)
Index Cond: (store_id = 1583)
Planning Time: 112.398 ms
Execution Time: 1.221 ms
আউটপুট থেকে আমরা স্পষ্ট দেখতে পাচ্ছি যে কোয়েরিটি "cymbal_products_embeddings_hnsw ব্যবহার করে Index Scan" ব্যবহার করছে।
এবং যদি আমরা ব্যাখ্যা ছাড়াই কোয়েরিটি চালাই:
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"}]
আমরা দেখতে পাচ্ছি যে ফলাফলটি একই এবং একই চেরি ট্রি ফেরত দিচ্ছে যা আমাদের অনুসন্ধানে সূচক ছাড়াই শীর্ষে ছিল। প্যারামিটার এবং সূচকের ধরণের উপর নির্ভর করে ফলাফলটি কিছুটা আলাদা হতে পারে এবং গাছের জন্য একটি ভিন্ন শীর্ষ রেকর্ড ফেরত দিতে পারে। আমার পরীক্ষার সময় সূচীকৃত কোয়েরিটি 131.301 ms বনাম 167.631 ms কোনও সূচক ছাড়াই ফলাফল ফেরত দিয়েছে কিন্তু আমরা একটি খুব ছোট ডেটাসেট নিয়ে কাজ করছিলাম এবং বড় ডেটাতে পার্থক্যটি আরও উল্লেখযোগ্য হবে।
ডকুমেন্টেশনে উপলব্ধ ল্যাংচেইন ইন্টিগ্রেশন সহ ভেক্টরগুলির জন্য উপলব্ধ বিভিন্ন সূচক এবং আরও ল্যাব এবং উদাহরণ চেষ্টা করে দেখতে পারেন।
১১. পরিবেশ পরিষ্কার করুন
ক্লাউড SQL ইনস্ট্যান্স মুছে ফেলুন
ল্যাবের কাজ শেষ হলে ক্লাউড 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].
১২. অভিনন্দন
কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন।
এই ল্যাবটি গুগল ক্লাউড লার্নিং পাথ সহ প্রোডাকশন-রেডি এআই-এর অংশ।
- প্রোটোটাইপ থেকে উৎপাদন পর্যন্ত ব্যবধান পূরণ করতে সম্পূর্ণ পাঠ্যক্রমটি অন্বেষণ করুন ।
-
#ProductionReadyAIহ্যাশট্যাগ ব্যবহার করে আপনার অগ্রগতি শেয়ার করুন।
আমরা যা কভার করেছি
- PostgreSQL ইনস্ট্যান্সের জন্য ক্লাউড SQL কীভাবে স্থাপন করবেন
- কিভাবে ডাটাবেস তৈরি করবেন এবং ক্লাউড SQL AI ইন্টিগ্রেশন সক্ষম করবেন
- ডাটাবেসে ডেটা কীভাবে লোড করবেন
- ক্লাউড এসকিউএল স্টুডিও কীভাবে ব্যবহার করবেন
- ক্লাউড এসকিউএল-এ ভার্টেক্স এআই এমবেডিং মডেল কীভাবে ব্যবহার করবেন
- ভার্টেক্স এআই স্টুডিও কীভাবে ব্যবহার করবেন
- ভার্টেক্স এআই জেনারেটিভ মডেল ব্যবহার করে ফলাফল কীভাবে সমৃদ্ধ করা যায়
- ভেক্টর সূচক ব্যবহার করে কর্মক্ষমতা কীভাবে উন্নত করা যায়
HNSW এর পরিবর্তে ScaNN সূচক সহ AlloyDB এর জন্য অনুরূপ কোডল্যাব চেষ্টা করুন
১৩. জরিপ
আউটপুট: