1. ভূমিকা
এই কোডল্যাবে আপনি শিখবেন কিভাবে ভেক্টর সার্চের সাথে Vertex AI এম্বেডিংয়ের সমন্বয়ে AlloyDB AI ব্যবহার করতে হয়।
পূর্বশর্ত
- Google ক্লাউড, কনসোলের একটি প্রাথমিক ধারণা
- কমান্ড লাইন ইন্টারফেস এবং গুগল শেলের প্রাথমিক দক্ষতা
আপনি কি শিখবেন
- কিভাবে AlloyDB ক্লাস্টার এবং প্রাথমিক উদাহরণ স্থাপন করবেন
- কিভাবে Google Compute Engine VM থেকে AlloyDB এর সাথে সংযোগ করবেন
- কিভাবে ডাটাবেস তৈরি করবেন এবং AlloyDB AI সক্ষম করবেন
- কিভাবে ডাটাবেসে ডাটা লোড করবেন
- AlloyDB-তে ভার্টেক্স এআই এমবেডিং মডেল কীভাবে ব্যবহার করবেন
- Vertex AI জেনারেটিভ মডেল ব্যবহার করে ফলাফলকে কিভাবে সমৃদ্ধ করা যায়
- ভেক্টর সূচক ব্যবহার করে কর্মক্ষমতা কিভাবে উন্নত করা যায়
আপনি কি প্রয়োজন হবে
- একটি Google ক্লাউড অ্যাকাউন্ট এবং Google ক্লাউড প্রকল্প
- একটি ওয়েব ব্রাউজার যেমন ক্রোম
2. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিসম্পন্ন পরিবেশ সেটআপ
- Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।
- প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি সবসময় এটি আপডেট করতে পারেন.
- প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রকল্প আইডি উল্লেখ করতে হবে (সাধারণত
PROJECT_ID
হিসাবে চিহ্নিত)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য একটি এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করতে পারেন, এবং এটি উপলব্ধ কিনা দেখতে পারেন। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকে। - আপনার তথ্যের জন্য, একটি তৃতীয় মান আছে, একটি প্রকল্প নম্বর , যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
- এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ হবে না, যদি কিছু হয়। এই টিউটোরিয়ালের বাইরে বিলিং এড়াতে সংস্থানগুলি বন্ধ করতে, আপনি আপনার তৈরি করা সংস্থানগুলি মুছতে বা প্রকল্প মুছতে পারেন। নতুন Google ক্লাউড ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷
ক্লাউড শেল শুরু করুন
যদিও Google ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আপনি Google ক্লাউড শেল ব্যবহার করবেন, একটি কমান্ড লাইন পরিবেশ যা ক্লাউডে চলছে।
Google ক্লাউড কনসোল থেকে, উপরের ডানদিকে টুলবারে ক্লাউড শেল আইকনে ক্লিক করুন:
পরিবেশের ব্যবস্থা করতে এবং সংযোগ করতে এটি শুধুমাত্র কয়েক মুহূর্ত নিতে হবে। এটি সমাপ্ত হলে, আপনি এই মত কিছু দেখতে হবে:
এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার সমস্ত কাজ একটি ব্রাউজারে করা যেতে পারে। আপনার কিছু ইন্সটল করার দরকার নেই।
3. আপনি শুরু করার আগে
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.
Vertex AI এম্বেডিং মডেল ব্যবহার করতে আপনার ডিফল্ট অঞ্চল কনফিগার করুন। Vertex AI এর জন্য উপলব্ধ অবস্থান সম্পর্কে আরও পড়ুন। উদাহরণে আমরা us-central1 অঞ্চল ব্যবহার করছি।
gcloud config set compute/region us-central1
4. AlloyDB স্থাপন করুন
একটি AlloyDB ক্লাস্টার তৈরি করার আগে আমাদের VPC-তে একটি উপলব্ধ প্রাইভেট আইপি পরিসর প্রয়োজন যাতে ভবিষ্যতে AlloyDB দৃষ্টান্ত ব্যবহার করা যায়। যদি আমাদের কাছে এটি না থাকে তবে আমাদের এটি তৈরি করতে হবে, এটিকে অভ্যন্তরীণ Google পরিষেবাগুলির দ্বারা ব্যবহার করার জন্য বরাদ্দ করতে হবে এবং তারপরে আমরা ক্লাস্টার এবং উদাহরণ তৈরি করতে সক্ষম হব।
ব্যক্তিগত আইপি পরিসীমা তৈরি করুন
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 ক্লাস্টার তৈরি করুন।
পোস্টগ্রেস ব্যবহারকারীর জন্য পাসওয়ার্ড নির্ধারণ করুন। আপনি আপনার নিজের পাসওয়ার্ড সংজ্ঞায়িত করতে পারেন বা একটি তৈরি করতে একটি র্যান্ডম ফাংশন ব্যবহার করতে পারেন
export PGPASSWORD=`openssl rand -hex 12`
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-402417)$ export PGPASSWORD=`openssl rand -hex 12`
ভবিষ্যতে ব্যবহারের জন্য PostgreSQL পাসওয়ার্ড নোট করুন:
echo $PGPASSWORD
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-402417)$ echo $PGPASSWORD bbefbfde7601985b0dee5723
অঞ্চল এবং AlloyDB ক্লাস্টার নাম সংজ্ঞায়িত করুন। আমরা একটি ক্লাস্টার নাম হিসাবে us-central1 অঞ্চল এবং alloydb-aip-01 ব্যবহার করতে যাচ্ছি:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
ক্লাস্টার তৈরি করতে কমান্ড চালান:
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION
প্রত্যাশিত কনসোল আউটপুট:
export REGION=us-central1 export ADBCLUSTER=alloydb-aip-01 gcloud alloydb clusters create $ADBCLUSTER \ --password=$PGPASSWORD \ --network=default \ --region=$REGION Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4 Creating cluster...done.
AlloyDB প্রাথমিক উদাহরণ তৈরি করুন
একই ক্লাউড শেল সেশনে আমাদের ক্লাস্টারের জন্য একটি AlloyDB প্রাথমিক উদাহরণ তৈরি করুন। আপনি সংযোগ বিচ্ছিন্ন হলে আপনাকে আবার অঞ্চল এবং ক্লাস্টার নাম পরিবেশ ভেরিয়েবল সংজ্ঞায়িত করতে হবে।
gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=2 \
--region=$REGION \
--cluster=$ADBCLUSTER
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \ --instance-type=PRIMARY \ --cpu-count=2 \ --region=$REGION \ --availability-type ZONAL \ --cluster=$ADBCLUSTER Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721 Creating instance...done.
5. AlloyDB এর সাথে সংযোগ করুন
AlloyDB একটি ব্যক্তিগত-শুধু সংযোগ ব্যবহার করে স্থাপন করা হয়েছে, তাই ডাটাবেসের সাথে কাজ করার জন্য আমাদের PostgreSQL ক্লায়েন্ট ইনস্টল সহ একটি VM প্রয়োজন।
GCE VM স্থাপন করুন
একই অঞ্চলে একটি GCE VM তৈরি করুন এবং AlloyDB ক্লাস্টার হিসাবে VPC তৈরি করুন৷
ক্লাউড শেল চালান:
export ZONE=us-central1-a
gcloud compute instances create instance-1 \
--zone=$ZONE \
--create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" --format="value(name)") \
--scopes=https://www.googleapis.com/auth/cloud-platform
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-402417)$ export ZONE=us-central1-a student@cloudshell:~ (test-project-402417)$ export ZONE=us-central1-a gcloud compute instances create instance-1 \ --zone=$ZONE \ --create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" --format="value(name)") \ --scopes=https://www.googleapis.com/auth/cloud-platform Created [https://www.googleapis.com/compute/v1/projects/test-project-402417/zones/us-central1-a/instances/instance-1]. NAME: instance-1 ZONE: us-central1-a MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.0.2 EXTERNAL_IP: 34.71.192.233 STATUS: RUNNING
পোস্টগ্রেস ক্লায়েন্ট ইনস্টল করুন
স্থাপন করা VM-এ PostgreSQL ক্লায়েন্ট সফ্টওয়্যার ইনস্টল করুন
VM এর সাথে সংযোগ করুন:
gcloud compute ssh instance-1 --zone=us-central1-a
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-402417)$ gcloud compute ssh instance-1 --zone=us-central1-a Updating project ssh metadata...working..Updated [https://www.googleapis.com/compute/v1/projects/test-project-402417]. Updating project ssh metadata...done. Waiting for SSH key to propagate. Warning: Permanently added 'compute.5110295539541121102' (ECDSA) to the list of known hosts. Linux instance-1.us-central1-a.c.gleb-test-short-001-418811.internal 6.1.0-18-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.76-1 (2024-02-01) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. student@instance-1:~$
VM এর ভিতরে সফ্টওয়্যার চলমান কমান্ড ইনস্টল করুন:
sudo apt-get update
sudo apt-get install --yes postgresql-client
প্রত্যাশিত কনসোল আউটপুট:
student@instance-1:~$ sudo apt-get update sudo apt-get install --yes postgresql-client Get:1 https://packages.cloud.google.com/apt google-compute-engine-bullseye-stable InRelease [5146 B] Get:2 https://packages.cloud.google.com/apt cloud-sdk-bullseye InRelease [6406 B] Hit:3 https://deb.debian.org/debian bullseye InRelease Get:4 https://deb.debian.org/debian-security bullseye-security InRelease [48.4 kB] Get:5 https://packages.cloud.google.com/apt google-compute-engine-bullseye-stable/main amd64 Packages [1930 B] Get:6 https://deb.debian.org/debian bullseye-updates InRelease [44.1 kB] Get:7 https://deb.debian.org/debian bullseye-backports InRelease [49.0 kB] ...redacted... update-alternatives: using /usr/share/postgresql/13/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode Setting up postgresql-client (13+225) ... Processing triggers for man-db (2.9.4-2) ... Processing triggers for libc-bin (2.31-13+deb11u7) ...
ইনস্ট্যান্সের সাথে সংযোগ করুন
psql ব্যবহার করে 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:~$ ADBCLUSTER=alloydb-aip-01 student@instance-1:~$ REGION=us-central1 student@instance-1:~$ INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)") gleb@instance-1:~$ psql "host=$INSTANCE_IP user=postgres sslmode=require" psql (15.6 (Debian 15.6-0+deb12u1), server 15.5) SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off) Type "help" for help. postgres=>
psql অধিবেশন বন্ধ করুন:
exit
6. ডাটাবেস প্রস্তুত করুন
আমাদের একটি ডাটাবেস তৈরি করতে হবে, ভার্টেক্স এআই ইন্টিগ্রেশন সক্ষম করতে হবে, ডাটাবেস অবজেক্ট তৈরি করতে হবে এবং ডেটা আমদানি করতে হবে।
AlloyDB কে প্রয়োজনীয় অনুমতি দিন
AlloyDB পরিষেবা এজেন্টে Vertex AI অনুমতি যোগ করুন।
উপরের "+" চিহ্নটি ব্যবহার করে আরেকটি ক্লাউড শেল ট্যাব খুলুন।
নতুন ক্লাউড শেল ট্যাবে কার্যকর করুন:
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
ডাটাবেস তৈরি করুন
ডাটাবেস কুইকস্টার্ট তৈরি করুন।
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 এক্সিকিউটে:
gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"
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"
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"
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"
প্রত্যাশিত কনসোল আউটপুট:
student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" SET SET SET SET SET set_config ------------ (1 row) SET SET SET SET SET SET CREATE TABLE ALTER TABLE CREATE TABLE ALTER TABLE CREATE TABLE ALTER TABLE CREATE TABLE ALTER TABLE CREATE SEQUENCE ALTER TABLE ALTER SEQUENCE ALTER TABLE ALTER TABLE ALTER TABLE student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_products.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_products from stdin csv header" COPY 941 student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_inventory.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_inventory from stdin csv header" COPY 263861 student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_stores.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_stores from stdin csv header" COPY 4654 student@instance-1:~$
7. এম্বেডিং গণনা করুন
ডাটা ইম্পোর্ট করার পর আমরা cymbal_products টেবিলে আমাদের পণ্যের ডেটা পেয়েছি, cymbal_inventory টেবিলে প্রতিটি দোকানে উপলব্ধ পণ্যের সংখ্যা এবং cymbal_stores টেবিলে স্টোরের তালিকা দেখানো জায়। আমাদের পণ্যের বর্ণনার উপর ভিত্তি করে ভেক্টর ডেটা গণনা করতে হবে এবং আমরা এর জন্য ফাংশন এমবেডিং ব্যবহার করতে যাচ্ছি। ফাংশনটি ব্যবহার করে আমরা আমাদের পণ্যের বিবরণের উপর ভিত্তি করে ভেক্টর ডেটা গণনা করতে এবং টেবিলে যোগ করতে Vertex AI ইন্টিগ্রেশন ব্যবহার করতে যাচ্ছি। আপনি ডকুমেন্টেশনে ব্যবহৃত প্রযুক্তি সম্পর্কে আরও পড়তে পারেন।
এম্বেডিং কলাম তৈরি করুন
psql ব্যবহার করে ডাটাবেসের সাথে সংযোগ করুন এবং cymbal_products টেবিলে এমবেডিং ফাংশন ব্যবহার করে ভেক্টর ডেটা সহ একটি ভার্চুয়াল কলাম তৈরি করুন। প্রোডাক্ট_ডেসক্রিপশন কলাম থেকে সরবরাহ করা ডেটার উপর ভিত্তি করে এম্বেডিং ফাংশন Vertex AI থেকে ভেক্টর ডেটা প্রদান করে।
psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"
ডাটাবেস এক্সিকিউটের সাথে সংযোগ করার পরে psql সেশনে:
ALTER TABLE cymbal_products ADD COLUMN embedding vector(768) GENERATED ALWAYS AS (embedding('text-embedding-004',product_description)) STORED;
কমান্ডটি ভার্চুয়াল কলাম তৈরি করবে এবং এটি ভেক্টর ডেটা দিয়ে পূরণ করবে।
প্রত্যাশিত কনসোল আউটপুট:
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" psql (13.11 (Debian 13.11-0+deb11u1), server 14.7) WARNING: psql major version 13, server major version 14. Some psql features might not work. SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off) Type "help" for help. quickstart_db=> ALTER TABLE cymbal_products ADD COLUMN embedding vector(768) GENERATED ALWAYS AS (embedding('text-embedding-004',product_description)) STORED; ALTER TABLE quickstart_db=>
8. সাদৃশ্য অনুসন্ধান চালান
আমরা এখন বর্ণনার জন্য গণনা করা ভেক্টর মান এবং আমাদের অনুরোধের জন্য আমরা যে ভেক্টর মান পাই তার উপর ভিত্তি করে সাদৃশ্য অনুসন্ধান ব্যবহার করে আমাদের অনুসন্ধান চালাতে পারি।
SQL ক্যোয়ারী একই psql কমান্ড লাইন ইন্টারফেস থেকে বা, বিকল্প হিসাবে, AlloyDB স্টুডিও থেকে কার্যকর করা যেতে পারে। যেকোন মাল্টিরো এবং জটিল আউটপুট AlloyDB স্টুডিওতে আরও ভাল দেখাতে পারে।
AlloyDB স্টুডিওতে সংযোগ করুন
নিম্নলিখিত অধ্যায়গুলিতে ডাটাবেসের সাথে সংযোগের প্রয়োজন এমন সমস্ত SQL কমান্ডগুলি বিকল্পভাবে AlloyDB স্টুডিওতে কার্যকর করা যেতে পারে। কমান্ডটি চালানোর জন্য আপনাকে প্রাথমিক উদাহরণে ক্লিক করে আপনার AlloyDB ক্লাস্টারের জন্য ওয়েব কনসোল ইন্টারফেস খুলতে হবে।
তারপরে বাম দিকে AlloyDB স্টুডিওতে ক্লিক করুন:
Quickstart_db ডাটাবেস, ব্যবহারকারীর পোস্টগ্রেস চয়ন করুন এবং যখন আমরা ক্লাস্টার তৈরি করি তখন উল্লিখিত পাসওয়ার্ড প্রদান করুন। তারপর "প্রমাণিত করুন" বোতামে ক্লিক করুন।
এটি AlloyDB স্টুডিও ইন্টারফেস খুলবে। ডাটাবেসে কমান্ড চালানোর জন্য আপনি ডানদিকে "Editor 1" ট্যাবে ক্লিক করুন।
এটি ইন্টারফেস খোলে যেখানে আপনি SQL কমান্ড চালাতে পারেন
আপনি যদি কমান্ড লাইন psql ব্যবহার করতে পছন্দ করেন তাহলে বিকল্প রুট অনুসরণ করুন এবং আপনার VM SSH সেশন থেকে ডাটাবেসের সাথে সংযোগ করুন যেমনটি পূর্ববর্তী অধ্যায়ে বর্ণনা করা হয়েছে।
psql থেকে সাদৃশ্য অনুসন্ধান চালান
যদি আপনার ডাটাবেস সেশন সংযোগ বিচ্ছিন্ন হয়ে থাকে তাহলে psql বা AlloyDB স্টুডিও ব্যবহার করে আবার ডাটাবেসের সাথে সংযোগ করুন।
ডাটাবেসের সাথে সংযোগ করুন:
psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"
একটি ক্লায়েন্টের অনুরোধের সাথে সবচেয়ে ঘনিষ্ঠভাবে সম্পর্কিত উপলব্ধ পণ্যগুলির একটি তালিকা পেতে একটি ক্যোয়ারী চালান৷ ভেক্টর মান পেতে আমরা যে অনুরোধটি Vertex AI-তে পাঠাতে যাচ্ছি তা শোনাচ্ছে "এখানে কী ধরনের ফলের গাছ ভাল জন্মে?"
আমাদের অনুরোধের জন্য সবচেয়ে উপযুক্ত প্রথম 10টি আইটেম বেছে নেওয়ার জন্য আপনি যে প্রশ্নটি চালাতে পারেন তা এখানে রয়েছে:
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
(cp.embedding <=> embedding('text-embedding-004','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-004','What kind of fruit trees grow well here?')::vector) as distance FROM cymbal_products cp JOIN cymbal_inventory ci on ci.uniq_id=cp.uniq_id JOIN cymbal_stores cs on cs.store_id=ci.store_id AND ci.inventory>0 AND cs.store_id = 1583 ORDER BY distance ASC LIMIT 10; product_name | description | sale_price | zip_code | distance -------------------------+----------------------------------------------------------------------------------+------------+----------+--------------------- Cherry Tree | This is a beautiful cherry tree that will produce delicious cherries. It is an d | 75.00 | 93230 | 0.43922018972266397 Meyer Lemon Tree | Meyer Lemon trees are California's favorite lemon tree! Grow your own lemons by | 34 | 93230 | 0.4685112926118228 Toyon | This is a beautiful toyon tree that can grow to be over 20 feet tall. It is an e | 10.00 | 93230 | 0.4835677149651668 California Lilac | This is a beautiful lilac tree that can grow to be over 10 feet tall. It is an d | 5.00 | 93230 | 0.4947204525907498 California Peppertree | This is a beautiful peppertree that can grow to be over 30 feet tall. It is an e | 25.00 | 93230 | 0.5054166905547247 California Black Walnut | This is a beautiful walnut tree that can grow to be over 80 feet tall. It is a d | 100.00 | 93230 | 0.5084219510932597 California Sycamore | This is a beautiful sycamore tree that can grow to be over 100 feet tall. It is | 300.00 | 93230 | 0.5140519790508755 Coast Live Oak | This is a beautiful oak tree that can grow to be over 100 feet tall. It is an ev | 500.00 | 93230 | 0.5143126438081371 Fremont Cottonwood | This is a beautiful cottonwood tree that can grow to be over 100 feet tall. It i | 200.00 | 93230 | 0.5174774727252058 Madrone | This is a beautiful madrona tree that can grow to be over 80 feet tall. It is an | 50.00 | 93230 | 0.5227400803389093
9. প্রতিক্রিয়া উন্নত করুন
আপনি কোয়েরির ফলাফল ব্যবহার করে একটি ক্লায়েন্ট অ্যাপ্লিকেশনের প্রতিক্রিয়া উন্নত করতে পারেন এবং ভার্টেক্স এআই জেনারেটিভ ফাউন্ডেশন ল্যাঙ্গুয়েজ মডেলের প্রম্পটের অংশ হিসাবে সরবরাহকৃত ক্যোয়ারী ফলাফল ব্যবহার করে একটি অর্থপূর্ণ আউটপুট প্রস্তুত করতে পারেন।
এটি অর্জন করতে আমরা ভেক্টর অনুসন্ধান থেকে আমাদের ফলাফলের সাথে একটি JSON তৈরি করার পরিকল্পনা করি, তারপর একটি অর্থপূর্ণ আউটপুট তৈরি করতে Vertex AI-তে একটি পাঠ্য LLM মডেলের জন্য একটি প্রম্পট হিসাবে জেনারেট করা JSON ব্যবহার করুন৷ প্রথম ধাপে আমরা JSON তৈরি করি, তারপর আমরা এটিকে Vertex AI স্টুডিওতে পরীক্ষা করি এবং শেষ ধাপে আমরা এটিকে একটি SQL স্টেটমেন্টে অন্তর্ভুক্ত করি যা একটি অ্যাপ্লিকেশনে ব্যবহার করা যেতে পারে।
JSON ফর্ম্যাটে আউটপুট তৈরি করুন
JSON ফর্ম্যাটে আউটপুট তৈরি করতে ক্যোয়ারী পরিবর্তন করুন এবং Vertex AI-তে পাস করার জন্য শুধুমাত্র একটি সারি ফেরত দিন
এখানে প্রশ্নের উদাহরণ হল:
WITH trees as (
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
cp.uniq_id as product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(cp.embedding <=> embedding('text-embedding-004','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"}]
ভার্টেক্স এআই স্টুডিওতে প্রম্পট চালান
ভার্টেক্স এআই স্টুডিওতে জেনারেটিভ এআই টেক্সট মডেলের প্রম্পটের অংশ হিসেবে আমরা জেনারেট করা JSON ব্যবহার করতে পারি।
ক্লাউড কনসোলে ভার্টেক্স এআই স্টুডিও খুলুন।
এটি আপনাকে অতিরিক্ত API সক্ষম করতে বলতে পারে তবে আপনি অনুরোধটি উপেক্ষা করতে পারেন। আমাদের ল্যাব শেষ করার জন্য আমাদের কোনো অতিরিক্ত API-এর প্রয়োজন নেই।
আমরা যে প্রম্পটটি ব্যবহার করতে যাচ্ছি তা এখানে:
আপনি একজন বন্ধুত্বপূর্ণ উপদেষ্টা যিনি গ্রাহকের চাহিদার উপর ভিত্তি করে একটি পণ্য খুঁজে পেতে সাহায্য করেন।
ক্লায়েন্টের অনুরোধের ভিত্তিতে আমরা অনুসন্ধানের সাথে ঘনিষ্ঠভাবে সম্পর্কিত পণ্যগুলির একটি তালিকা লোড করেছি।
{"product_name":"name","description":"some description","sale_price":10,"zip_code": 10234, "produt_id": "02056727942aeb714dc9a23130654e" এর মতো মানগুলির তালিকা সহ JSON ফর্ম্যাটে তালিকা
এখানে পণ্য তালিকা:
[আমাদের JSON এর জন্য জায়গা]
গ্রাহক জিজ্ঞাসা করলেন, "এখানে কোন গাছ সবচেয়ে ভালো বাড়ছে?"
আপনাকে পণ্য, মূল্য এবং কিছু সম্পূরক তথ্য সম্বন্ধে প্রম্পট হিসাবে তথ্য দিতে হবে
এবং যখন আমরা আমাদের JSON মানগুলির সাথে এবং জেমিনি-1.5-ফ্ল্যাশ মডেল ব্যবহার করে প্রম্পট চালাই তখন ফলাফলটি এখানে রয়েছে:
এই উদাহরণে মডেল থেকে আমরা যে উত্তর পেয়েছি তা নিম্নরূপ। মনে রাখবেন যে সময়ের সাথে মডেল এবং পরামিতি পরিবর্তনের কারণে আপনার উত্তর ভিন্ন হতে পারে:
"আমি দেখতে পাচ্ছি আপনি এমন একটি গাছ খুঁজছেন যা আপনার এলাকায় বৃদ্ধি পায়। আপনার জিপ কোড, 93230 এর উপর ভিত্তি করে, চেরি গাছটি একটি দুর্দান্ত বিকল্প বলে মনে হচ্ছে!
এটি একটি সুন্দর গাছ হিসাবে বর্ণনা করা হয়েছে যা সুস্বাদু চেরি উত্পাদন করে। এটি বর্তমানে $75.00 এর জন্য বিক্রি হচ্ছে।
যদিও আপনার এলাকায় এর বৃদ্ধির হার সম্পর্কে আমার কাছে নির্দিষ্ট বিবরণ নেই, আমি আপনাকে বলতে পারি যে চেরি গাছগুলি সাধারণত ভাল-নিষ্কাশিত মাটি এবং পূর্ণ সূর্য পছন্দ করে।
সর্বোত্তম ফলাফল নিশ্চিত করতে, আমি একজন স্থানীয় নার্সারি বা বাগান বিশেষজ্ঞের সাথে পরামর্শ করার পরামর্শ দিই যিনি আপনার নির্দিষ্ট অবস্থান এবং মাটির অবস্থার জন্য আরও উপযোগী পরামর্শ প্রদান করতে পারেন। তারা আপনাকে আপনার প্রয়োজনের জন্য সর্বোত্তম বৈচিত্র্য চয়ন করতে এবং রোপণ এবং যত্নের পরামর্শ দিতে সহায়তা করতে পারে।"
PSQL এ প্রম্পট চালান
ডাটাবেসে সরাসরি SQL ব্যবহার করে একটি জেনারেটিভ মডেল থেকে একই প্রতিক্রিয়া পেতে আমরা Vertex AI-এর সাথে AlloyDB AI ইন্টিগ্রেশন ব্যবহার করতে পারি। কিন্তু জেমিনি-1.5-ফ্ল্যাশ মডেল ব্যবহার করতে আমাদের প্রথমে এটি নিবন্ধন করতে হবে।
1.4.1 সংস্করণে এক্সটেনশন আপগ্রেড করুন (যদি বর্তমান সংস্করণ কম হয়)। psql থেকে quickstart_db ডাটাবেসের সাথে সংযোগ করুন যেমন এটি আগে দেখানো হয়েছে (বা AlloyDB স্টুডিও ব্যবহার করুন) এবং চালান:
SELECT extversion from pg_extension where extname='google_ml_integration';
যদি প্রত্যাবর্তিত মানটি 1.4.1 এর কম হয় তবে চালান:
ALTER EXTENSION google_ml_integration UPDATE TO '1.4.1';
তারপরে আমাদের google_ml_integration.enable_model_support ডাটাবেস পতাকা "চালু" সেট করতে হবে। এটি সম্পাদন করতে আপনি AlloyDB ওয়েব কনসোল ইন্টারফেস ব্যবহার করতে পারেন বা নিম্নলিখিত gcloud কমান্ডটি চালাতে পারেন।
PROJECT_ID=$(gcloud config get-value project)
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
gcloud beta alloydb instances update $ADBCLUSTER-pr \
--database-flags google_ml_integration.enable_model_support=on \
--region=$REGION \
--cluster=$ADBCLUSTER \
--project=$PROJECT_ID \
--update-mode=FORCE_APPLY
কমান্ডটি ব্যাকগ্রাউন্ডে কার্যকর হতে প্রায় 3-5 মিনিট সময় নেয়। তারপর আপনি psql সেশনে বা quickstart_db ডাটাবেসের সাথে সংযুক্ত AlloyDB Studio ব্যবহার করে নতুন পতাকা যাচাই করতে পারেন।
show google_ml_integration.enable_model_support;
psql সেশন থেকে প্রত্যাশিত আউটপুট "চালু":
postgres=> show google_ml_integration.enable_model_support; google_ml_integration.enable_model_support -------------------------------------------- on (1 row)
তারপর আমাদের দুটি মডেল নিবন্ধন করতে হবে। প্রথমটি ইতিমধ্যে ব্যবহৃত টেক্সট-এমবেডিং-004 মডেল। যেহেতু আমরা মডেল নিবন্ধন ক্ষমতা সক্ষম করেছি তাই এটি নিবন্ধিত করা প্রয়োজন৷
মডেলটি psql বা AlloyDB স্টুডিওতে চালানোর জন্য নিম্নলিখিত কোডটি নিবন্ধন করুন:
CALL
google_ml.create_model(
model_id => 'text-embedding-004',
model_provider => 'google',
model_qualified_name => 'text-embedding-004',
model_type => 'text_embedding',
model_auth_type => 'alloydb_service_agent_iam',
model_in_transform_fn => 'google_ml.vertexai_text_embedding_input_transform',
model_out_transform_fn => 'google_ml.vertexai_text_embedding_output_transform');
এবং পরবর্তী মডেলটি আমাদের নিবন্ধন করতে হবে তা হল gemini-1.5-flash-002 যা ব্যবহারকারী-বান্ধব আউটপুট তৈরি করতে ব্যবহার করা হবে।
CALL
google_ml.create_model(
model_id => 'gemini-1.5-flash-002',
model_request_url => 'https://$REGION-aiplatform.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/publishers/google/models/gemini-1.5-flash-002:streamGenerateContent',
model_provider => 'google',
model_auth_type => 'alloydb_service_agent_iam');
আপনি সর্বদা google_ml.model_info_view থেকে তথ্য নির্বাচন করে নিবন্ধিত মডেলের তালিকা যাচাই করতে পারেন।
select model_id,model_type from google_ml.model_info_view;
এখানে নমুনা আউটপুট আছে
quickstart_db=> select model_id,model_type from google_ml.model_info_view; model_id | model_type -------------------------+---------------- textembedding-gecko | text_embedding textembedding-gecko@001 | text_embedding text-embedding-004 | text_embedding gemini-1.5-flash-001 | generic (4 rows)
এখন আমরা এসকিউএল ব্যবহার করে জেনারেটিভ এআই টেক্সট মডেলের প্রম্পটের অংশ হিসাবে এটি সরবরাহ করতে একটি সাবকোয়েরি JSON-এ জেনারেট করা ব্যবহার করতে পারি।
psql বা AlloyDB স্টুডিও সেশনে ডাটাবেসে ক্যোয়ারী চালান
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-004',
'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-1.5-flash-002',
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! Based on your location (assuming you're" " in zip code 93230), I have a suggestion for a" " fruit tree that should thrive.\n\nWe have the **Cherry Tree** available.\n\n**Product Name:** Cherry Tree\n\n**Description:** This is a beautiful cherry" " tree that will produce delicious cherries. It's a deciduous tree (meaning it loses its leaves in the fall) growing to about 15 feet tall." " The leaves are dark green in summer, turning a beautiful red in the fall. Cherry trees are known for their beauty, shade, and privacy.\n\n**Sale Price:** $75.00\n\n**Important Considerations for Growing" " Cherry Trees:**\n\n* **Climate:** Cherry trees prefer a cool, moist climate, and 93230 falls within a suitable range (USDA zones 4-9). However, it's always a good idea to" " check the specific microclimate of your property (sun exposure, drainage etc.).\n* **Soil:** They do best in sandy soil. If your soil is different, you may need to amend it to improve drainage.\n* **Pollination:** Many cherry varieties require a second, compatible cherry tree for proper pollination" ". Check the specific pollination needs of this variety before purchase if you want a significant cherry yield.\n\nThis cherry tree is a beautiful addition to any yard and will provide you with delicious cherries if you can meet its needs. Would you like to know more about its pollination requirements, or perhaps see if we have any other" " fruit trees suitable for your area?\n" ""
10. ভেক্টর সূচক তৈরি করুন
আমাদের ডেটাসেট বেশ ছোট এবং প্রতিক্রিয়া সময় প্রাথমিকভাবে AI মডেলগুলির সাথে মিথস্ক্রিয়া উপর নির্ভর করে। কিন্তু যখন আপনার লক্ষ লক্ষ ভেক্টর থাকে তখন ভেক্টর অনুসন্ধান অংশটি আমাদের প্রতিক্রিয়া সময়ের একটি উল্লেখযোগ্য অংশ নিতে পারে এবং সিস্টেমে একটি উচ্চ লোড দিতে পারে। এটি উন্নত করতে আমরা আমাদের ভেক্টরের উপরে একটি সূচক তৈরি করতে পারি।
ScaNN সূচক তৈরি করুন
SCANN সূচক তৈরি করতে আমাদের আরও একটি এক্সটেনশন সক্রিয় করতে হবে। এক্সটেনশন alloydb_scann আমাদেরকে Google ScaNN অ্যালগরিদম ব্যবহার করে ANN প্রকার ভেক্টর সূচকের সাথে কাজ করার জন্য ইন্টারফেস প্রদান করে।
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
প্রত্যাশিত আউটপুট:
quickstart_db=> CREATE EXTENSION IF NOT EXISTS alloydb_scann; CREATE EXTENSION Time: 27.468 ms quickstart_db=>
এখন আমরা সূচক তৈরি করতে পারি। নিম্নলিখিত উদাহরণে আমি ডিফল্ট হিসাবে বেশিরভাগ প্যারামিটার রেখে যাচ্ছি এবং সূচকের জন্য শুধুমাত্র কয়েকটি পার্টিশন (num_leaves) প্রদান করছি:
CREATE INDEX cymbal_products_embeddings_scann ON cymbal_products
USING scann (embedding cosine)
WITH (num_leaves=31, max_num_levels = 2);
আপনি ডকুমেন্টেশনে সূচী পরামিতি টিউনিং সম্পর্কে পড়তে পারেন।
প্রত্যাশিত আউটপুট:
quickstart_db=> CREATE INDEX cymbal_products_embeddings_scann ON cymbal_products USING scann (embedding cosine) WITH (num_leaves=31, max_num_levels = 2); CREATE INDEX quickstart_db=>
প্রতিক্রিয়া তুলনা
এখন আমরা EXPLAIN মোডে ভেক্টর অনুসন্ধান ক্যোয়ারী চালাতে পারি এবং সূচকটি ব্যবহার করা হয়েছে কিনা তা যাচাই করতে পারি।
EXPLAIN (analyze)
WITH trees as (
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
cp.uniq_id as product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(cp.embedding <=> embedding('text-embedding-004','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;
প্রত্যাশিত আউটপুট:
Aggregate (cost=16.59..16.60 rows=1 width=32) (actual time=2.875..2.877 rows=1 loops=1) -> Subquery Scan on trees (cost=8.42..16.59 rows=1 width=142) (actual time=2.860..2.862 rows=1 loops=1) -> Limit (cost=8.42..16.58 rows=1 width=158) (actual time=2.855..2.856 rows=1 loops=1) -> Nested Loop (cost=8.42..6489.19 rows=794 width=158) (actual time=2.854..2.855 rows=1 loops=1) -> Nested Loop (cost=8.13..6466.99 rows=794 width=938) (actual time=2.742..2.743 rows=1 loops=1) -> Index Scan using cymbal_products_embeddings_scann on cymbal_products cp (cost=7.71..111.99 rows=876 width=934) (actual time=2.724..2.724 rows=1 loops=1) Order By: (embedding <=> '[0.008864171,0.03693164,-0.024245683,-0.00355923,0.0055611245,0.015985578,...<redacted>...5685,-0.03914233,-0.018452475,0.00826032,-0.07372604]'::vector) -> Index Scan using walmart_inventory_pkey on cymbal_inventory ci (cost=0.42..7.26 rows=1 width=37) (actual time=0.015..0.015 rows=1 loops=1) Index Cond: ((store_id = 1583) AND (uniq_id = (cp.uniq_id)::text))
আউটপুট থেকে আমরা স্পষ্টভাবে দেখতে পাচ্ছি যে কোয়েরিটি "cymbal_products_embeddings_scann on cymbal_products ব্যবহার করে 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-004','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;
প্রত্যাশিত আউটপুট:
[{"product_name":"Meyer Lemon Tree","description":"Meyer Lemon trees are California's favorite lemon tree! Grow your own lemons by ","sale_price":34,"zip_code":93230,"product_id":"02056727942aeb714dc9a2313654e1b0"}]
আমরা দেখতে পাচ্ছি যে ফলাফলটি কিছুটা ভিন্ন এবং চেরি গাছটি নয় যা সূচক ছাড়াই আমাদের অনুসন্ধানে শীর্ষে ছিল তবে দ্বিতীয় পছন্দ মেয়ার লেমন গাছটি। তাই সূচক আমাদের পারফরম্যান্স দিচ্ছে কিন্তু এখনও ভাল ফলাফল দেওয়ার জন্য যথেষ্ট সঠিক।
আপনি ভেক্টরের জন্য উপলব্ধ বিভিন্ন সূচী এবং ডকুমেন্টেশন পৃষ্ঠায় উপলব্ধ ল্যাংচেইন ইন্টিগ্রেশন সহ আরও ল্যাব এবং উদাহরণ চেষ্টা করতে পারেন।
11. পরিবেশ পরিষ্কার করুন
আপনি ল্যাব দিয়ে সম্পন্ন হলে AlloyDB দৃষ্টান্ত এবং ক্লাস্টার ধ্বংস করুন
AlloyDB ক্লাস্টার এবং সমস্ত দৃষ্টান্ত মুছুন
ক্লাস্টারটি অপশন ফোর্স দিয়ে ধ্বংস করা হয় যা ক্লাস্টারের সাথে সম্পর্কিত সমস্ত দৃষ্টান্ত মুছে দেয়।
ক্লাউড শেলে প্রকল্প এবং পরিবেশ ভেরিয়েবলগুলি সংজ্ঞায়িত করুন যদি আপনি সংযোগ বিচ্ছিন্ন হয়ে থাকেন এবং সমস্ত পূর্ববর্তী সেটিংস হারিয়ে যায়:
gcloud config set project <your project id>
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export PROJECT_ID=$(gcloud config get-value project)
ক্লাস্টার মুছুন:
gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-001-402417)$ gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force All of the cluster data will be lost when the cluster is deleted. Do you want to continue (Y/n)? Y Operation ID: operation-1697820178429-6082890a0b570-4a72f7e4-4c5df36f Deleting cluster...done.
AlloyDB ব্যাকআপ মুছুন
ক্লাস্টারের জন্য সমস্ত AlloyDB ব্যাকআপ মুছুন:
for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-001-402417)$ for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done Operation ID: operation-1697826266108-60829fb7b5258-7f99dc0b-99f3c35f Deleting backup...done.
এখন আমরা আমাদের VM ধ্বংস করতে পারি
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
12. অভিনন্দন
কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন।
আমরা কভার করেছি কি
- কিভাবে AlloyDB ক্লাস্টার এবং প্রাথমিক উদাহরণ স্থাপন করবেন
- কিভাবে Google Compute Engine VM থেকে AlloyDB এর সাথে সংযোগ করবেন
- কিভাবে ডাটাবেস তৈরি করবেন এবং AlloyDB AI সক্ষম করবেন
- কিভাবে ডাটাবেসে ডাটা লোড করবেন
- AlloyDB-তে ভার্টেক্স এআই এমবেডিং মডেল কীভাবে ব্যবহার করবেন
- Vertex AI জেনারেটিভ মডেল ব্যবহার করে ফলাফলকে কিভাবে সমৃদ্ধ করা যায়
- ভেক্টর সূচক ব্যবহার করে কর্মক্ষমতা কিভাবে উন্নত করা যায়
13. সমীক্ষা
আউটপুট: