১. ভূমিকা
এই কোডল্যাবে আপনি ভেক্টর সার্চের সাথে ভার্টেক্স এআই এমবেডিংস একত্রিত করে অ্যালয়ডিবি এআই ব্যবহার করতে শিখবেন। এই ল্যাবটি অ্যালয়ডিবি এআই-এর বৈশিষ্ট্যগুলির জন্য নিবেদিত একটি ল্যাব সংগ্রহের অংশ। আপনি ডকুমেন্টেশনের অ্যালয়ডিবি এআই পৃষ্ঠায় আরও পড়তে পারেন।

পূর্বশর্ত
- গুগল ক্লাউড, কনসোল সম্পর্কে প্রাথমিক ধারণা
- কমান্ড-লাইন ইন্টারফেস এবং ক্লাউড শেল ব্যবহারে প্রাথমিক দক্ষতা
আপনি যা শিখবেন
- AlloyDB ক্লাস্টার এবং প্রাইমারি ইনস্ট্যান্স কীভাবে স্থাপন করবেন
- গুগল কম্পিউট ইঞ্জিন ভিএম থেকে অ্যালয়ডিবি-তে কীভাবে সংযোগ করবেন
- কীভাবে ডাটাবেস তৈরি করবেন এবং AlloyDB AI সক্রিয় করবেন
- ডাটাবেসে ডেটা লোড করার পদ্ধতি
- AlloyDB Studio কীভাবে ব্যবহার করবেন
- AlloyDB-তে Gemini Enterprise Agent Platform এম্বেডিং মডেল কীভাবে ব্যবহার করবেন
- জেমিনি এন্টারপ্রাইজ এজেন্ট প্ল্যাটফর্ম স্টুডিও কীভাবে ব্যবহার করবেন
- জেমিনি এন্টারপ্রাইজ এজেন্ট প্ল্যাটফর্ম জেনারেটিভ মডেল ব্যবহার করে ফলাফলকে কীভাবে আরও সমৃদ্ধ করা যায়
- ভেক্টর ইনডেক্স ব্যবহার করে কীভাবে পারফরম্যান্স উন্নত করা যায়
আপনার যা যা লাগবে
- একটি গুগল ক্লাউড অ্যাকাউন্ট এবং গুগল ক্লাউড প্রজেক্ট
- ক্রোমের মতো একটি ওয়েব ব্রাউজার
২. সেটআপ এবং প্রয়োজনীয়তা
প্রজেক্ট সেটআপ
- Google Cloud Console- এ সাইন-ইন করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে একটি তৈরি করতে হবে।
কর্মক্ষেত্র বা শিক্ষা প্রতিষ্ঠানের অ্যাকাউন্টের পরিবর্তে ব্যক্তিগত অ্যাকাউন্ট ব্যবহার করুন।
- একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। গুগল ক্লাউড কনসোলে একটি নতুন প্রজেক্ট তৈরি করতে, হেডারে থাকা 'Select a project' বোতামটিতে ক্লিক করুন, যা একটি পপ-আপ উইন্ডো খুলবে।

'Select a project' উইন্ডোতে 'New Project' বোতামটি চাপুন, যা নতুন প্রজেক্টের জন্য একটি ডায়ালগ বক্স খুলবে।

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

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

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

এই ভার্চুয়াল মেশিনটিতে আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার সমস্ত কাজ একটি ব্রাউজারের মধ্যেই করা যাবে। আপনাকে কিছুই ইনস্টল করতে হবে না।
৩. শুরু করার আগে
এপিআই সক্ষম করুন
আউটপুট:
AlloyDB , Compute Engine , Networking services , এবং Gemini Enterprise Agent Platform ব্যবহার করার জন্য, আপনাকে আপনার Google Cloud প্রজেক্টে এগুলোর নিজ নিজ API সক্রিয় করতে হবে।
এপিআইগুলি সক্রিয় করা
টার্মিনালে ক্লাউড শেল-এর ভিতরে, নিশ্চিত করুন যে আপনার প্রজেক্ট আইডি সেটআপ করা আছে:
gcloud config set project [YOUR-PROJECT-ID]
PROJECT_ID এনভায়রনমেন্ট ভেরিয়েবল সেট করুন:
PROJECT_ID=$(gcloud config get-value project)
সকল প্রয়োজনীয় এপিআই সক্রিয় করুন:
gcloud services enable alloydb.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
aiplatform.googleapis.com
প্রত্যাশিত আউটপুট
student@cloudshell:~ (test-project-001-402417)$ gcloud config set project test-project-001-402417
Updated property [core/project].
student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-14650]
student@cloudshell:~ (test-project-001-402417)$
student@cloudshell:~ (test-project-001-402417)$ gcloud services enable alloydb.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
aiplatform.googleapis.com
Operation "operations/acat.p2-4470404856-1f44ebd8-894e-4356-bea7-b84165a57442" finished successfully.
আপনি ডকুমেন্টেশনে প্রতিটি সক্রিয় API সম্পর্কে পড়তে পারেন।
৪. AlloyDB স্থাপন করুন
AlloyDB ক্লাস্টার তৈরি করার আগে, আপনার VPC-তে ভবিষ্যতের AlloyDB ইনস্ট্যান্সের ব্যবহারের জন্য একটি উপলব্ধ প্রাইভেট আইপি রেঞ্জ বরাদ্দ করুন। যদি আপনার কাছে এটি না থাকে, তবে আপনাকে এটি তৈরি করতে হবে, অভ্যন্তরীণ গুগল পরিষেবাগুলির ব্যবহারের জন্য এটি বরাদ্দ করতে হবে এবং এর পরেই আপনি ক্লাস্টার ও ইনস্ট্যান্স তৈরি করতে পারবেন।
ব্যক্তিগত আইপি রেঞ্জ তৈরি করুন
AlloyDB-এর জন্য আপনাকে আমাদের VPC-তে প্রাইভেট সার্ভিস অ্যাক্সেস কনফিগারেশন সেট করতে হবে। এখানে ধরে নেওয়া হচ্ছে যে, আপনার প্রজেক্টে 'ডিফল্ট' VPC নেটওয়ার্কটি রয়েছে এবং সমস্ত কাজের জন্য এটিই ব্যবহৃত হবে।
ব্যক্তিগত আইপি রেঞ্জ তৈরি করুন:
gcloud compute addresses create psa-range \
--global \
--purpose=VPC_PEERING \
--prefix-length=24 \
--description="VPC private service access" \
--network=default
বরাদ্দকৃত আইপি রেঞ্জ ব্যবহার করে ব্যক্তিগত সংযোগ তৈরি করুন:
gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=psa-range \
--network=default
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-402417)$ gcloud compute addresses create psa-range \
--global \
--purpose=VPC_PEERING \
--prefix-length=24 \
--description="VPC private service access" \
--network=default
Created [https://www.googleapis.com/compute/v1/projects/test-project-402417/global/addresses/psa-range].
student@cloudshell:~ (test-project-402417)$ gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=psa-range \
--network=default
Operation "operations/pssn.p24-4470404856-595e209f-19b7-4669-8a71-cbd45de8ba66" finished successfully.
student@cloudshell:~ (test-project-402417)$
AlloyDB ক্লাস্টার তৈরি করুন
us-central1 অঞ্চলে একটি AlloyDB ক্লাস্টার তৈরি করুন
postgres ব্যবহারকারীর জন্য পাসওয়ার্ড নির্ধারণ করুন। আপনি নিজের পাসওয়ার্ড তৈরি করতে পারেন অথবা একটি র্যান্ডম ফাংশন ব্যবহার করে তা তৈরি করতে পারেন।
export PGPASSWORD=`openssl rand -hex 16`
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-402417)$ export PGPASSWORD=`openssl rand -hex 12`
ভবিষ্যতে ব্যবহারের জন্য PostgreSQL পাসওয়ার্ডটি লিখে রাখুন:
echo $PGPASSWORD
ভবিষ্যতে postgres ব্যবহারকারী হিসেবে ইনস্ট্যান্সটিতে সংযোগ করতে আপনার এই পাসওয়ার্ডটির প্রয়োজন হবে। পরবর্তী ধাপগুলোতে ব্যবহারের জন্য এই পাসওয়ার্ডটি সংরক্ষণ করুন।
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-402417)$ echo $PGPASSWORD bbefbfde7601985b0dee5723 (Note: Yours will be different!)
একটি বিনামূল্যে ট্রায়াল ক্লাস্টার তৈরি করুন
আপনি যদি আগে AlloyDB ব্যবহার না করে থাকেন, তাহলে একটি বিনামূল্যের ট্রায়াল ক্লাস্টার তৈরি করতে পারেন:
অঞ্চল এবং ক্লাস্টারের নামের জন্য পরিবেশ ভেরিয়েবল সেট করুন:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
ক্লাস্টার তৈরি করতে কমান্ডটি চালান:
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION \
--subscription-type=TRIAL
প্রত্যাশিত কনসোল আউটপুট:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION \
--subscription-type=TRIAL
Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4
Creating cluster...done.
একই ক্লাউড শেল সেশনে আপনার ক্লাস্টারের জন্য একটি AlloyDB প্রাইমারি ইনস্ট্যান্স তৈরি করুন। সংযোগ বিচ্ছিন্ন হয়ে গেলে আপনাকে আবার রিজিয়ন এবং ক্লাস্টারের নামের এনভায়রনমেন্ট ভেরিয়েবলগুলো নির্ধারণ করতে হবে।
gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=8 \
--region=$REGION \
--cluster=$ADBCLUSTER
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=8 \
--region=$REGION \
--availability-type ZONAL \
--cluster=$ADBCLUSTER
Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721
Creating instance...done.
AlloyDB স্ট্যান্ডার্ড ক্লাস্টার তৈরি করুন
প্রকল্পে এটি আপনার প্রথম AlloyDB ক্লাস্টার না হলে, একটি স্ট্যান্ডার্ড ক্লাস্টার তৈরির প্রক্রিয়া শুরু করুন। আপনি যদি ইতিমধ্যেই একটি ফ্রি ট্রায়াল ক্লাস্টার তৈরি করে থাকেন, তবে এই ধাপটি এড়িয়ে যান।
অঞ্চল এবং ক্লাস্টারের নামের জন্য পরিবেশ ভেরিয়েবল সেট করুন:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
ক্লাস্টার তৈরি করতে কমান্ডটি চালান:
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION
প্রত্যাশিত কনসোল আউটপুট:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION
Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4
Creating cluster...done.
একই ক্লাউড শেল সেশনে আপনার ক্লাস্টারের জন্য একটি AlloyDB প্রাইমারি ইনস্ট্যান্স তৈরি করুন। সংযোগ বিচ্ছিন্ন হয়ে গেলে আপনাকে আবার রিজিয়ন এবং ক্লাস্টারের নামের এনভায়রনমেন্ট ভেরিয়েবলগুলো নির্ধারণ করতে হবে।
gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=2 \
--region=$REGION \
--cluster=$ADBCLUSTER
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=2 \
--region=$REGION \
--availability-type ZONAL \
--cluster=$ADBCLUSTER
Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721
Creating instance...done.
৫. AlloyDB-এর সাথে সংযোগ করুন
AlloyDB একটি প্রাইভেট-অনলি কানেকশন ব্যবহার করে ডেপ্লয় করা হয়, তাই ডাটাবেসটির সাথে কাজ করার জন্য আপনার PostgreSQL ক্লায়েন্ট ইনস্টল করা একটি Compute Engine VM প্রয়োজন।
GCE VM স্থাপন করুন
AlloyDB ক্লাস্টারের মতো একই অঞ্চল এবং VPC-তে একটি GCE VM তৈরি করুন।
ক্লাউড শেলে চালান:
export ZONE=us-central1-a
gcloud compute instances create instance-1 \
--zone=$ZONE \
--create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-13 AND family!=debian-13-arm64" --format="value(name)") \
--scopes=https://www.googleapis.com/auth/cloud-platform
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-402417)$ export ZONE=us-central1-a
gcloud compute instances create instance-1 \
--zone=$ZONE \
--create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-13 AND family!=debian-13-arm64" --format="value(name)") \
--scopes=https://www.googleapis.com/auth/cloud-platform
Created [https://www.googleapis.com/compute/v1/projects/test-project-402417/zones/us-central1-a/instances/instance-1].
NAME: instance-1
ZONE: us-central1-a
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.0.2
EXTERNAL_IP: 34.71.192.233
STATUS: RUNNING
পোস্টগ্রেস ক্লায়েন্ট ইনস্টল করুন
ডেপ্লয় করা ভিএম-এ PostgreSQL ক্লায়েন্ট সফটওয়্যারটি ইনস্টল করুন।
ভিএম-এ সংযোগ করুন:
gcloud compute ssh instance-1 --zone=us-central1-a
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-402417)$ gcloud compute ssh instance-1 --zone=us-central1-a Updating project ssh metadata...working..Updated [https://www.googleapis.com/compute/v1/projects/test-project-402417]. Updating project ssh metadata...done. Waiting for SSH key to propagate. Warning: Permanently added 'compute.5110295539541121102' (ECDSA) to the list of known hosts. Linux instance-1 6.12.101+deb13-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.101-1 (2026-08-05) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. student@instance-1:~$
ভিএম-এর ভিতরে কমান্ডটি চালিয়ে সফ্টওয়্যারটি ইনস্টল করুন:
sudo apt-get update
sudo apt-get install --yes postgresql-client
প্রত্যাশিত কনসোল আউটপুট:
student@instance-1:~$ sudo apt-get update sudo apt-get install --yes postgresql-client Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B] Get:2 file:/etc/apt/mirrors/debian-security.list Mirrorlist [39 B] Hit:3 https://deb.debian.org/debian trixie InRelease Get:4 https://deb.debian.org/debian trixie-updates InRelease [47.3 kB] Get:5 https://deb.debian.org/debian trixie-backports InRelease [54.0 kB] Get:6 https://deb.debian.org/debian-security trixie-security InRelease [43.4 kB] Hit:10 https://packages.cloud.google.com/apt google-compute-engine-trixie-stable InRelease ...redacted... update-alternatives: using /usr/share/postgresql/17/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode Setting up postgresql-client (17+278) ... Processing triggers for man-db (2.13.1-1) ... Processing triggers for libc-bin (2.41-12+deb13u3) ...
ইনস্ট্যান্সের সাথে সংযোগ করুন
psql ব্যবহার করে VM থেকে প্রাইমারি ইনস্ট্যান্সে সংযোগ করুন।
আপনার ইনস্ট্যান্স-১ ভিএম-এর জন্য খোলা SSH সেশন সহ একই ক্লাউড শেল ট্যাবে।
GCE VM থেকে AlloyDB-তে সংযোগ করতে উল্লিখিত AlloyDB পাসওয়ার্ড (PGPASSWORD) এবং AlloyDB ক্লাস্টার আইডি ব্যবহার করুন:
export PGPASSWORD=<Noted password>
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres sslmode=require"
প্রত্যাশিত কনসোল আউটপুট:
student@instance-1:~$ export PGPASSWORD=CQhOi5OygD4ps6ty student@instance-1:~$ export PROJECT_ID=$(gcloud config get-value project) export REGION=us-central1 export ADBCLUSTER=alloydb-aip-01 export INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)") psql "host=$INSTANCE_IP user=postgres sslmode=require" psql (17.10 (Debian 17.10-0+deb13u1), server 17.9) SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off, ALPN: postgresql) Type "help" for help. postgres=>
psql সেশনটি বন্ধ করুন:
exit
৬. ডাটাবেস প্রস্তুত করুন
একটি ডাটাবেস তৈরি করুন, এজেন্ট প্ল্যাটফর্ম এআই ইন্টিগ্রেশন সক্রিয় করুন, ডাটাবেস অবজেক্ট তৈরি করুন এবং ডেটা ইম্পোর্ট করুন।
AlloyDB-কে প্রয়োজনীয় অনুমতি প্রদান করুন
AlloyDB সার্ভিস এজেন্টে Gemini Enterprise Agent Platform-এর অনুমতি যোগ করুন।
উপরে থাকা "+" চিহ্নটি ব্যবহার করে আরেকটি ক্লাউড শেল ট্যাব খুলুন।

নতুন ক্লাউড শেল ট্যাবে নিম্নলিখিতটি চালান:
PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project) Your active configuration is: [cloudshell-11039] student@cloudshell:~ (test-project-001-402417)$ gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \ --role="roles/aiplatform.user" Updated IAM policy for project [test-project-001-402417]. bindings: - members: - serviceAccount:service-4470404856@gcp-sa-alloydb.iam.gserviceaccount.com role: roles/aiplatform.user - members: ... etag: BwYIEbe_Z3U= version: 1
ট্যাবের মধ্যে থাকা 'exit' কমান্ডটি চালিয়ে ট্যাবটি বন্ধ করুন:
exit
ডাটাবেস তৈরি করুন
ডাটাবেস কুইকস্টার্ট তৈরি করুন।
GCE VM সেশনে নিম্নলিখিতটি সম্পাদন করুন:
ডাটাবেস তৈরি করুন:
psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE quickstart_db"
প্রত্যাশিত কনসোল আউটপুট:
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE quickstart_db" CREATE DATABASE student@instance-1:~$
ভার্টেক্স এআই ইন্টিগ্রেশন সক্ষম করুন
ডাটাবেসে Vertex AI ইন্টিগ্রেশন এবং pgvector এক্সটেনশনগুলো সক্রিয় করুন।
GCE VM-এ নিম্নলিখিতটি চালান:
psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE"
psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "CREATE EXTENSION IF NOT EXISTS vector"
প্রত্যাশিত কনসোল আউটপুট:
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE" psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "CREATE EXTENSION IF NOT EXISTS vector" CREATE EXTENSION CREATE EXTENSION student@instance-1:~$
ডেটা আমদানি করুন
প্রস্তুতকৃত ডেটা ডাউনলোড করে নতুন ডেটাবেসে ইম্পোর্ট করুন।
GCE VM-এ নিম্নলিখিতটি চালান:
gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"
gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_products.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_products from stdin csv header"
gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_inventory.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_inventory from stdin csv header"
gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_stores.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_stores from stdin csv header"
প্রত্যাশিত কনসোল আউটপুট:
student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" SET SET SET SET SET set_config ------------ (1 row) SET SET SET SET SET SET CREATE TABLE ALTER TABLE CREATE TABLE ALTER TABLE CREATE TABLE ALTER TABLE CREATE TABLE ALTER TABLE CREATE SEQUENCE ALTER TABLE ALTER SEQUENCE ALTER TABLE ALTER TABLE ALTER TABLE student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_products.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_products from stdin csv header" COPY 941 student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_inventory.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_inventory from stdin csv header" COPY 263861 student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_stores.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_stores from stdin csv header" COPY 4654 student@instance-1:~$
৭. এমবেডিং গণনা করুন
ডেটা ইম্পোর্ট করার পর আপনি cymbal_products টেবিলে পণ্যের ডেটা, cymbal_inventory টেবিলে প্রতিটি দোকানে উপলব্ধ পণ্যের সংখ্যাসহ ইনভেন্টরি এবং cymbal_stores টেবিলে দোকানগুলোর তালিকা পাবেন। আপনাকে পণ্যগুলোর বিবরণের উপর ভিত্তি করে ভেক্টর ডেটা গণনা করতে হবে এবং এর জন্য আপনি google_ml.embedding এর মতো ফাংশন ব্যবহার করতে পারেন। ব্যবহৃত প্রযুক্তি সম্পর্কে আরও জানতে ডকুমেন্টেশন পড়ুন।
কয়েকটি সারির জন্য এমবেডিং তৈরি করা সহজ, কিন্তু হাজার হাজার সারি থাকলে কীভাবে এটিকে কার্যকর করা যায়? এই বিভাগে বড় টেবিলের জন্য এমবেডিং তৈরি এবং পরিচালনা করার পদ্ধতি ব্যাখ্যা করা হয়েছে। গাইডটিতে বিভিন্ন বিকল্প এবং কৌশল সম্পর্কে আরও পড়ুন।
দ্রুত এমবেডিং জেনারেশন সক্ষম করুন
আপনার ভিএম থেকে AlloyDB ইনস্ট্যান্সের আইপি এবং postgres পাসওয়ার্ড ব্যবহার করে psql-এর মাধ্যমে ডাটাবেসে সংযোগ করুন:
psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"
google_ml_integration এক্সটেনশনটির সংস্করণ যাচাই করুন।
SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
সংস্করণটি ১.৫.২ বা তার চেয়ে উচ্চতর হতে হবে। আউটপুটের একটি উদাহরণ নিচে দেওয়া হলো:
quickstart_db=> SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.6 (1 row)
ডিফল্ট ভার্সন ১.৬ বা তার বেশি হওয়া উচিত, কিন্তু আপনার ইনস্ট্যান্সে যদি পুরোনো কোনো ভার্সন দেখা যায়, তবে সম্ভবত এটি আপডেট করা প্রয়োজন। ইনস্ট্যান্সটির জন্য রক্ষণাবেক্ষণ নিষ্ক্রিয় করা হয়েছে কিনা তা পরীক্ষা করুন।
যাচাই করুন যে google_ml_integration.enable_faster_embedding_generation ডাটাবেস ফ্ল্যাগটি 'on' এ সেট করা আছে। একই psql সেশনে ফ্ল্যাগটির মান পরীক্ষা করুন:
show google_ml_integration.enable_faster_embedding_generation;
ফ্ল্যাগটি সঠিক অবস্থানে থাকলে প্রত্যাশিত আউটপুটটি দেখতে এইরকম হবে:
quickstart_db=> show google_ml_integration.enable_faster_embedding_generation; google_ml_integration.enable_faster_embedding_generation ---------------------------------------------------------- on (1 row)
যদি ফ্ল্যাগের মান " off " দেখায়, তাহলে আপনাকে ইনস্ট্যান্সটি আপডেট করতে হবে। ডকুমেন্টেশনে বর্ণিত পদ্ধতি অনুযায়ী ওয়েব কনসোল অথবা gcloud কমান্ড ব্যবহার করে এটি করুন।
psql সেশন থেকে প্রস্থান করুন:
exit;
gcloud ব্যবহার করে ফ্ল্যাগটি আপডেট করতে, চালান:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud beta alloydb instances update $ADBCLUSTER-pr \
--database-flags google_ml_integration.enable_faster_embedding_generation=on \
--region=$REGION \
--cluster=$ADBCLUSTER \
--project=$PROJECT_ID \
--update-mode=FORCE_APPLY
এতে কয়েক মিনিট সময় লাগতে পারে, কিন্তু অবশেষে ফ্ল্যাগের মান 'অন' হয়ে যাবে। এরপর আপনি পরবর্তী ধাপগুলো অনুসরণ করতে পারেন।
এমবেডিং কলাম তৈরি করুন
psql ব্যবহার করে ডাটাবেসে সংযোগ করুন এবং cymbal_products টেবিলে এমবেডিং ফাংশন দ্বারা ব্যবহারের জন্য ভেক্টর ডেটা টাইপের একটি ভার্চুয়াল কলাম তৈরি করুন।
psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"
ডাটাবেসে সংযোগ করার পর psql সেশনে নিম্নলিখিতটি চালান:
ALTER TABLE cymbal_products ADD COLUMN embedding vector(768);
এই কমান্ডটি ভবিষ্যতের এমবেডিংয়ের জন্য একটি ভার্চুয়াল কলাম তৈরি করে।
প্রত্যাশিত কনসোল আউটপুট:
quickstart_db=> ALTER TABLE cymbal_products ADD COLUMN embedding vector(768); ALTER TABLE quickstart_db=>
৫০টি সারির ব্যাচে এমবেডিং তৈরি করুন। একই psql সেশনে নিম্নলিখিত কমান্ডটি চালান:
কত সময় লাগবে তা পরিমাপ করতে টাইমিং সক্ষম করুন:
\timing
কমান্ডটি চালান:
CALL ai.initialize_embeddings(
model_id => 'text-embedding-005',
table_name => 'cymbal_products',
content_column => 'product_description',
embedding_column => 'embedding',
batch_size => 50
);
এবং কনসোল আউটপুটে দেখা যায় যে এমবেডিং তৈরি হতে ২ সেকেন্ডেরও কম সময় লেগেছে:
quickstart_db=> CALL ai.initialize_embeddings(
model_id => 'text-embedding-005',
table_name => 'cymbal_products',
content_column => 'product_description',
embedding_column => 'embedding',
batch_size => 50
);
NOTICE: Initialize embedding completed successfully for table cymbal_products
CALL
Time: 1458.704 ms (00:01.459)
quickstart_db=>
আপনি বিভিন্ন ব্যাচ সাইজ নিয়ে পরীক্ষা করে দেখতে পারেন যে এতে এক্সিকিউশনের সময়ে কোনো পরিবর্তন আসে কিনা।
ডিফল্টরূপে, সংশ্লিষ্ট product_description কলামটি আপডেট হলে বা সম্পূর্ণ নতুন একটি সারি যোগ করা হলে এমবেডিংগুলো রিফ্রেশ হয় না। কিন্তু আপনি incremental_refresh_mode প্যারামিটারটি সেট করে এটি করতে পারেন।
" product_embeddings " নামে একটি কলাম তৈরি করুন এবং এটিকে স্বয়ংক্রিয়ভাবে আপডেটযোগ্য করুন:
ALTER TABLE cymbal_products ADD COLUMN product_embedding vector(768);
CALL ai.initialize_embeddings(
model_id => 'text-embedding-005',
table_name => 'cymbal_products',
content_column => 'product_description',
embedding_column => 'product_embedding',
batch_size => 50,
incremental_refresh_mode => 'transactional'
);
টেবিলে একটি নতুন সারি যোগ করুন।
INSERT INTO "cymbal_products" ("uniq_id", "crawl_timestamp", "product_url", "product_name", "product_description", "list_price", "sale_price", "brand", "item_number", "gtin", "package_size", "category", "postal_code", "available", "product_embedding", "embedding") VALUES ('fd604542e04b470f9e6348e640cff794', NOW(), 'https://example.com/new_product', 'New Cymbal Product', 'This is a new cymbal product description.', 199.99, 149.99, 'Example Brand', 'EB123', '1234567890', 'Single', 'Cymbals', '12345', TRUE, NULL, NULL);
দুটি এমবেডিং কলাম তুলনা করতে টেবিলটি কোয়েরি করুন:
SELECT uniq_id,embedding, (product_embedding::real[])[1:5] as product_embedding FROM cymbal_products WHERE uniq_id='fd604542e04b470f9e6348e640cff794';
আউটপুটে দেখা যাচ্ছে যে product_embedding স্বয়ংক্রিয়ভাবে পূরণ হয়ে যাচ্ছে, অথচ embedding খালি থাকছে:
quickstart_db=> SELECT uniq_id,embedding, (product_embedding::real[])[1:5] as product_embedding FROM cymbal_products WHERE uniq_id='fd604542e04b470f9e6348e640cff794';
uniq_id | embedding | product_embedding
----------------------------------+-----------+---------------------------------------------------------------
fd604542e04b470f9e6348e640cff794 | | {0.015003494,-0.005349732,-0.059790313,-0.0087091,-0.0271452}
(1 row)
Time: 3.295 ms
৮. সাদৃশ্য অনুসন্ধান চালান
AlloyDB AI ব্যবহার করে তৈরি করা ভেক্টর এমবেডিংগুলোর উপর ভিত্তি করে একটি সাদৃশ্য অনুসন্ধান চালান।
SQL কোয়েরিটি একই psql কমান্ড লাইন ইন্টারফেস থেকে অথবা বিকল্প হিসেবে AlloyDB Studio থেকে চালানো যেতে পারে। যেকোনো একাধিক সারি এবং জটিল আউটপুট AlloyDB Studio-তে ভালোভাবে কাজ করে।
AlloyDB Studio-এর সাথে সংযোগ করুন
AlloyDB Studio খোলার জন্য, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- Google Cloud কনসোলে, AlloyDB for PostgreSQL-এর ক্লাস্টার পৃষ্ঠায় যান।
- এর ওয়েব ইন্টারফেসটি খুলতে আপনার প্রাথমিক ইনস্ট্যান্সটি নির্বাচন করুন।
৩. এরপর বামদিকে AlloyDB Studio-তে ক্লিক করুন:

-
quickstart_dbডাটাবেসটি নির্বাচন করুন, postgres ব্যবহারকারীকে যুক্ত করুন, উল্লিখিত পাসওয়ার্ডটি দিন এবং Authenticate-এ ক্লিক করুন।

এই কাজটি AlloyDB Studio ইন্টারফেসটি খোলে।
- SQL এডিটর খোলার জন্য Untitled Query ট্যাবটি নির্বাচন করুন।

এটি একটি এডিটর খোলে যেখানে আপনি SQL কমান্ড চালাতে পারবেন, যেমনটি নিচের ছবিতে দেখানো হয়েছে:

যদি আপনি কমান্ড লাইন psql ব্যবহার করতে পছন্দ করেন, তাহলে পূর্ববর্তী অধ্যায়গুলিতে বর্ণিত বিকল্প পদ্ধতি অনুসরণ করুন এবং আপনার VM SSH সেশন থেকে ডাটাবেসে সংযোগ করুন।
সাদৃশ্য অনুসন্ধান চালান
ক্লায়েন্টের অনুরোধের সাথে সবচেয়ে ঘনিষ্ঠভাবে সম্পর্কিত উপলব্ধ পণ্যগুলির একটি তালিকা পেতে একটি কোয়েরি চালান। "এখানে কোন ধরনের ফলের গাছ ভালো জন্মায়?"-এর ভেক্টর মান পেতে, জেমিনি এন্টারপ্রাইজ এজেন্ট প্ল্যাটফর্মের (যেটি আমরা আমাদের পণ্যগুলির জন্য এমবেডিং তৈরি করতে ব্যবহার করেছি) এমবেডিং মডেলে সার্চ ফ্রেজটি পাঠানো হয়।
কোয়েরিটি চালান:
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
(cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) as distance
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
distance ASC
LIMIT 10;
এবং এখানে প্রত্যাশিত আউটপুটটি দেওয়া হলো:
quickstart_db=> SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
(cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) as distance
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
distance ASC
LIMIT 10;
product_name | description | sale_price | zip_code | distance
-------------------------+----------------------------------------------------------------------------------+------------+----------+---------------------
Cherry Tree | This is a beautiful cherry tree that will produce delicious cherries. It is an d | 75.00 | 93230 | 0.43922018972266397
Meyer Lemon Tree | Meyer Lemon trees are California's favorite lemon tree! Grow your own lemons by | 34 | 93230 | 0.4685112926118228
Toyon | This is a beautiful toyon tree that can grow to be over 20 feet tall. It is an e | 10.00 | 93230 | 0.4835677149651668
California Lilac | This is a beautiful lilac tree that can grow to be over 10 feet tall. It is an d | 5.00 | 93230 | 0.4947204525907498
California Peppertree | This is a beautiful peppertree that can grow to be over 30 feet tall. It is an e | 25.00 | 93230 | 0.5054166905547247
California Black Walnut | This is a beautiful walnut tree that can grow to be over 80 feet tall. It is a d | 100.00 | 93230 | 0.5084219510932597
California Sycamore | This is a beautiful sycamore tree that can grow to be over 100 feet tall. It is | 300.00 | 93230 | 0.5140519790508755
Coast Live Oak | This is a beautiful oak tree that can grow to be over 100 feet tall. It is an ev | 500.00 | 93230 | 0.5143126438081371
Fremont Cottonwood | This is a beautiful cottonwood tree that can grow to be over 100 feet tall. It i | 200.00 | 93230 | 0.5174774727252058
Madrone | This is a beautiful madrona tree that can grow to be over 80 feet tall. It is an | 50.00 | 93230 | 0.5227400803389093
আপনি সার্চ ফ্রেজের সাথে অর্থগতভাবে কাছাকাছি বিবরণসহ ১০টি পণ্য পাবেন, যা দূরত্বের ক্রমানুসারে সাজানো থাকবে এবং সবচেয়ে সাদৃশ্যপূর্ণটি শীর্ষে থাকবে।
৯. প্রতিক্রিয়া উন্নত করুন
আপনি কোয়েরির ফলাফল ব্যবহার করে একটি ক্লায়েন্ট অ্যাপ্লিকেশনের প্রতিক্রিয়া উন্নত করতে পারেন এবং একটি ফাউন্ডেশন জেনারেটিভ ল্যাঙ্গুয়েজ মডেলের প্রম্পটের অংশ হিসেবে সরবরাহকৃত কোয়েরির ফলাফল ব্যবহার করে একটি অর্থপূর্ণ আউটপুট প্রস্তুত করতে পারেন।
এটি অর্জন করতে, আপনি ভেক্টর সার্চের শীর্ষ ফলাফলগুলো দিয়ে একটি JSON তৈরি করেন, তারপর একটি অর্থপূর্ণ আউটপুট তৈরি করার জন্য এজেন্ট প্ল্যাটফর্মে একটি Gen AI মডেলের প্রম্পটের সাথে সেই তৈরি করা JSON-টি ব্যবহার করেন। প্রথম ধাপে JSON তৈরি করা হয়, তারপর এটি এজেন্ট প্ল্যাটফর্ম স্টুডিওতে পরীক্ষা করা হয় এবং শেষ ধাপে সবকিছুকে একটি SQL স্টেটমেন্টে অন্তর্ভুক্ত করা হয় যা একটি অ্যাপ্লিকেশনে ব্যবহার করা যেতে পারে।
আউটপুট JSON ফরম্যাটে তৈরি করুন
আউটপুট JSON ফরম্যাটে তৈরি করতে এবং এজেন্ট প্ল্যাটফর্মে পাঠানোর জন্য শুধুমাত্র একটি সারি ফেরত দিতে কোয়েরিটি পরিবর্তন করুন।
কোয়েরিটি চালান:
WITH trees as (
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
cp.uniq_id as product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;
আউটপুটে থাকা JSON:
[{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}]
Vertex AI Studio-তে প্রম্পটটি চালান।
Vertex AI Studio-তে জেনারেটিভ এআই মডেলের প্রম্পটের অংশ হিসেবে জেনারেট করা 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

এবং প্রম্পটটি চালালে এই ফলাফলটি পাওয়া যায়:

উত্তরটিতে দাম, বিবরণ এবং সম্পূরক তথ্য অন্তর্ভুক্ত থাকে, যা মডেলটি গাছ ও অবস্থান সম্পর্কিত তথ্যের ভিত্তিতে বাহ্যিক উৎস থেকে সংগ্রহ করে।
PSQL-এ প্রম্পটটি চালান
ডেটাবেসে সরাসরি SQL ব্যবহার করে একটি জেনারেটিভ মডেল থেকে একই প্রতিক্রিয়া পেতে, Gemini Enterprise Agent Platform-এর সাথে AlloyDB AI ইন্টিগ্রেশন ব্যবহার করে একই ফলাফল অর্জন করা যেতে পারে। gemini-3.6-flash মডেলটি ব্যবহার করার আগে, আপনাকে অবশ্যই এটি রেজিস্টার করতে হবে।
gemini-3.6-flash মডেলটি নিবন্ধন করুন:
AlloyDB Studio-তে চালান:
CALL google_ml.create_model(
model_id => 'gemini-3.6-flash',
model_request_url => 'https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-3.6-flash:generateContent',
model_provider => 'google',
model_type => 'llm'
);
আপনি google_ml.model_info_view থেকে তথ্য নির্বাচন করে নিবন্ধিত মডেলগুলির তালিকা সর্বদা যাচাই করতে পারেন।
SELECT model_id,model_type FROM google_ml.model_info_view WHERE model_id ILIKE '%flash%';
এখানে নমুনা আউটপুট দেওয়া হল
quickstart_db=> SELECT model_id,model_type FROM google_ml.model_info_view WHERE model_id ILIKE '%flash%';
model_id | model_type
-----------------------+------------
gemini-3.6-flash | llm
gemini-2.0-flash | llm
gemini-2.5-flash | llm
gemini-2.0-flash-lite | llm
gemini-2.5-flash-lite | llm
(5 rows)
এখন আপনি SQL ব্যবহার করে gemini-3.6-flash মডেলের প্রম্পটের অংশ হিসেবে সাবকোয়েরিতে তৈরি করা JSON ব্যবহার করতে পারবেন।
আপনার psql অথবা AlloyDB Studio সেশনে, নিম্নলিখিত কোয়েরিটি চালান:
WITH trees AS (
SELECT
cp.product_name,
cp.product_description AS description,
cp.sale_price,
cs.zip_code,
cp.uniq_id AS product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci ON
ci.uniq_id = cp.uniq_id
JOIN cymbal_stores cs ON
cs.store_id = ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(cp.embedding <=> embedding('text-embedding-005',
'What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1),
prompt AS (
SELECT
'You are a friendly advisor helping to find a product based on the customer''s needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","product_description":"some description","sale_price":10}
Here is the list of products:' || json_agg(trees) || 'The customer asked "What kind of fruit trees grow well here?"
You should give information about the product, price and some supplemental information' AS prompt_text
FROM
trees),
response AS (
SELECT
google_ml.predict_row( model_id =>'gemini-3.6-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
REPLACE(resp::text, '\n', CHR(10))
FROM
response;
এবং এই হলো প্রত্যাশিত আউটপুট। জেনারেটিভ এআই মডেলের অনির্দিষ্ট প্রকৃতির কারণে আউটপুট ভিন্ন হতে পারে:
"Hello there! I'd be delighted to help you pick out a wonderful fruit tree for your space. Based on our local selection, a fantastic option that grows very well is the **Cherry Tree**! Here are the details on this beautiful tree: * **Product:** Cherry Tree * **Price:** $75.00 ### Why it's a great choice: * **Delicious Harvest:** It produces tasty, fresh cherries right in your backyard. * **Size & Benefits:** It's a deciduous tree that grows to about 15 feet tall, making it ideal for providing both lovely shade and a bit of privacy. * **Year-Round Beauty:** It features lush, dark green leaves throughout the summer that transform into a stunning red in the autumn. * **Growing Requirements:** Cherry trees thrive best in cool, moist climates with sandy soil, and are perfectly suited for USDA hardiness zones 4 through 9. Please let me know if you have any questions about planting or if you'd like help adding this to your order!"
১০. ভেক্টর সূচক তৈরি করুন
যেহেতু এই ডেটাসেটটি ছোট, তাই রেসপন্স টাইম মূলত জেমিনি এন্টারপ্রাইজ এজেন্ট প্ল্যাটফর্মের মডেলগুলোর সাথে ইন্টারঅ্যাকশনের উপর নির্ভর করে। তবে, যখন আপনি লক্ষ লক্ষ ভেক্টর কোয়েরি করেন, তখন ভেক্টর সার্চ নিজেই রেসপন্স টাইমের একটি উল্লেখযোগ্য অংশ ব্যয় করতে পারে এবং আপনার ডাটাবেসের উপর চাপ বাড়িয়ে দিতে পারে। সার্চ পারফরম্যান্স উন্নত করার জন্য, আপনি একটি ভেক্টর ইনডেক্স তৈরি করতে পারেন।
স্ক্যান সূচক তৈরি করুন
একটি ScaNN ইনডেক্স তৈরি করতে, আপনাকে একটি অতিরিক্ত এক্সটেনশন সক্রিয় করতে হবে। alloydb_scann এক্সটেনশনটি Google ScaNN অ্যালগরিদম ব্যবহার করে অ্যাপ্রক্সিমেট নিয়ারেস্ট নেইবার (ANN) ভেক্টর ইনডেক্স নিয়ে কাজ করার জন্য একটি ইন্টারফেস প্রদান করে।
AlloyDB Studio-তে চালান:
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
ইনডেক্সটি ম্যানুয়াল (MANUAL) অথবা অটো (AUTO) মোডে তৈরি করা যায়। ম্যানুয়াল মোড ডিফল্টভাবে সক্রিয় থাকে এবং আপনি অন্য যেকোনো ইনডেক্সের মতোই এটি তৈরি ও রক্ষণাবেক্ষণ করতে পারেন। কিন্তু আপনি যদি অটো মোড সক্রিয় করেন, তবে আপনি এমন একটি ইনডেক্স তৈরি করতে পারবেন যার জন্য আপনার পক্ষ থেকে কোনো রক্ষণাবেক্ষণের প্রয়োজন হবে না। আপনি ডকুমেন্টেশনে সমস্ত অপশন সম্পর্কে বিস্তারিত পড়তে পারেন। অটো মোডে ইনডেক্সটি তৈরি করার জন্য আমাদের কাছে পর্যাপ্ত সারি (row) নেই - তাই এটি ম্যানুয়াল মোডে তৈরি করা হবে।
AlloyDB Studio-তে চালান:
CREATE INDEX cymbal_products_embeddings_scann ON cymbal_products
USING scann (embedding cosine)
WITH (num_leaves=10, max_num_levels = 1);
আপনি ডকুমেন্টেশনে ইনডেক্স প্যারামিটার টিউনিং সম্পর্কে পড়তে পারেন।
প্রত্যাশিত আউটপুট:
quickstart_db=> CREATE INDEX cymbal_products_embeddings_scann ON cymbal_products USING scann (embedding cosine) WITH (num_leaves=10, max_num_levels = 1); CREATE INDEX quickstart_db=>
প্রতিক্রিয়ার তুলনা করুন
সিমান্টিক সার্চে শীর্ষ মান পেতে আমরা যে কোয়েরিটি ব্যবহার করেছিলাম, সেটি আবার করুন:
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"}]
আউটপুটে সেই একই "চেরি ট্রি"।
সূচকের ব্যবহার যাচাই করুন:
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=27.24..27.25 rows=1 width=32) (actual time=0.964..0.965 rows=1 loops=1)
-> Subquery Scan on trees (cost=18.91..27.23 rows=1 width=142) (actual time=0.953..0.954 rows=1 loops=1)
-> Limit (cost=18.91..27.22 rows=1 width=158) (actual time=0.948..0.949 rows=1 loops=1)
-> Nested Loop (cost=18.91..7126.86 rows=855 width=158) (actual time=0.948..0.948 rows=1 loops=1)
-> Nested Loop (cost=18.63..7103.59 rows=855 width=907) (actual time=0.931..0.931 rows=1 loops=1)
-> Index Scan using cymbal_products_embeddings_scann on cymbal_products cp (cost=18.21..343.15 rows=942 width=903) (actual time=0.906..0.908 rows=2 loops=1)
Order By: (embedding <=> '[-0.106554024,0.035774965,-0.027267234,-0.045653425,-0.03286045,0.02124319...
আউটপুট থেকে আপনি দেখতে পাচ্ছেন যে কোয়েরিটি "Index Scan using cymbal_products_embeddings_scann on cymbal_products" ব্যবহার করছিল।
এই কোয়েরিটি সেই একই চেরি ট্রি ফেরত দেয় যা ইনডেক্স তৈরি করার আগে আপনার সার্চ রেজাল্টের শীর্ষে দেখা যেত। যেহেতু অ্যাপ্রক্সিমেট নিয়ারেস্ট নেইবার (ANN) ইনডেক্সগুলো সার্চের গতির জন্য পরম নির্ভুলতার সাথে আপোস করে, তাই ইনডেক্স-ভিত্তিক কোয়েরিগুলো মাঝে মাঝে একটি ইনডেক্সবিহীন এক্সাক্ট সার্চের চেয়ে কিছুটা ভিন্ন শীর্ষ ফলাফল দেখাতে পারে। তবে, ভেক্টর ইনডেক্স উচ্চ নির্ভুলতা বজায় রেখে পারফরম্যান্সে উল্লেখযোগ্য উন্নতি ঘটায়।
আরও অন্বেষণ করতে, আপনি অন্যান্য ভেক্টর ইনডেক্স টাইপ ব্যবহার করে দেখতে পারেন, অথবা ডকুমেন্টেশন পৃষ্ঠায় LangChain ইন্টিগ্রেশন সহ আরও ল্যাব ও উদাহরণ খুঁজে নিতে পারেন।
১১. পরিবেশ পরিষ্কার করা
ল্যাবের কাজ শেষ হলে AlloyDB ইনস্ট্যান্স এবং ক্লাস্টারটি ধ্বংস করে দিন।
AlloyDB ক্লাস্টার এবং এর সমস্ত ইনস্ট্যান্স মুছে ফেলুন
force অপশনটির মাধ্যমে ক্লাস্টারটি ধ্বংস করা হয়, যা ক্লাস্টারের অন্তর্গত সমস্ত ইনস্ট্যান্সকেও মুছে দেয়।
আপনার টার্মিনাল সংযোগ বিচ্ছিন্ন হয়ে গেলে, আবার সংযোগ করুন এবং ক্লাউড শেলে প্রজেক্ট ও এনভায়রনমেন্ট ভেরিয়েবল নির্ধারণ করুন:
gcloud config set project <YOUR_PROJECT_ID>
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export PROJECT_ID=$(gcloud config get-value project)
ক্লাস্টারটি মুছে ফেলুন:
gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-001-402417)$ gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force All of the cluster data will be lost when the cluster is deleted. Do you want to continue (Y/n)? Y Operation ID: operation-1697820178429-6082890a0b570-4a72f7e4-4c5df36f Deleting cluster...done.
AlloyDB ব্যাকআপগুলি মুছুন
ক্লাস্টারের সমস্ত AlloyDB ব্যাকআপ মুছে ফেলুন:
for i in $(gcloud alloydb backups list \
--filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" \
--format="value(name)" \
--sort-by=~createTime) ; do \
gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-001-402417)$ for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done Operation ID: operation-1697826266108-60829fb7b5258-7f99dc0b-99f3c35f Deleting backup...done.
এখন আমরা আমাদের ভিএম ধ্বংস করতে পারি
GCE VM মুছে ফেলুন
ক্লাউড শেলে চালান:
export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
--zone=$ZONE \
--quiet
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-001-402417)$ export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
--zone=$ZONE \
--quiet
Deleted
১২. অভিনন্দন
কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন।
এই ল্যাবটি ‘প্রোডাকশন-রেডি এআই উইথ গুগল ক্লাউড’ লার্নিং পাথের একটি অংশ।
- প্রোটোটাইপ থেকে উৎপাদনে উত্তরণের ব্যবধান পূরণ করতে সম্পূর্ণ পাঠ্যক্রমটি অন্বেষণ করুন ।
-
#ProductionReadyAIহ্যাশট্যাগটি ব্যবহার করে আপনার অগ্রগতি শেয়ার করুন।
আমরা যা আলোচনা করেছি
- AlloyDB ক্লাস্টার এবং প্রাইমারি ইনস্ট্যান্স কীভাবে স্থাপন করবেন
- গুগল কম্পিউট ইঞ্জিন ভিএম থেকে অ্যালয়ডিবি-তে কীভাবে সংযোগ করবেন
- কীভাবে ডাটাবেস তৈরি করবেন এবং AlloyDB AI সক্রিয় করবেন
- ডাটাবেসে ডেটা লোড করার পদ্ধতি
- AlloyDB Studio কীভাবে ব্যবহার করবেন
- AlloyDB-তে Gemini Enterprise Agent Platform এম্বেডিং মডেল কীভাবে ব্যবহার করবেন
- জেমিনি এন্টারপ্রাইজ এজেন্ট প্ল্যাটফর্ম স্টুডিও কীভাবে ব্যবহার করবেন
- জেমিনি এন্টারপ্রাইজ এজেন্ট প্ল্যাটফর্ম জেনারেটিভ মডেল ব্যবহার করে ফলাফলকে কীভাবে আরও সমৃদ্ধ করা যায়
- ভেক্টর ইনডেক্স ব্যবহার করে কীভাবে পারফরম্যান্স উন্নত করা যায়
১৩. জরিপ
আউটপুট: