1. ভূমিকা
এই কোডল্যাবে আপনি শিখবেন কিভাবে AlloyDB স্থাপন করতে হয় এবং AI ন্যাচারাল ল্যাঙ্গুয়েজ ব্যবহার করে ডেটা ক্যোয়ারী করতে হয় এবং ভবিষ্যদ্বাণীযোগ্য এবং দক্ষ প্রশ্নের জন্য কনফিগারেশন টিউন করতে হয়। এই ল্যাবটি অ্যালোয়ডিবি এআই বৈশিষ্ট্যের জন্য নিবেদিত একটি ল্যাব সংগ্রহের অংশ। আপনি ডকুমেন্টেশনে AlloyDB AI পৃষ্ঠায় আরও পড়তে পারেন।
পূর্বশর্ত
- Google ক্লাউড, কনসোলের একটি প্রাথমিক ধারণা
- কমান্ড লাইন ইন্টারফেস এবং ক্লাউড শেলের প্রাথমিক দক্ষতা
আপনি কি শিখবেন
- পোস্টগ্রেসের জন্য কীভাবে অ্যালয়ডিবি স্থাপন করবেন
- কিভাবে AlloyDB AI প্রাকৃতিক ভাষা সক্ষম করবেন
- এআই প্রাকৃতিক ভাষার জন্য কীভাবে কনফিগারেশন তৈরি এবং টিউন করবেন
- কিভাবে SQL কোয়েরি জেনারেট করবেন এবং প্রাকৃতিক ভাষা ব্যবহার করে ফলাফল পাবেন
আপনি কি প্রয়োজন হবে
- একটি 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 \
discoveryengine.googleapis.com \
secretmanager.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.
4. AlloyDB স্থাপন করুন
AlloyDB ক্লাস্টার এবং প্রাথমিক উদাহরণ তৈরি করুন। Google ক্লাউড SDK ব্যবহার করে কীভাবে একটি 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 ব্যবহার না করে থাকলে:
অঞ্চল এবং 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 \
--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 ক্লাস্টার না হয় তবে একটি স্ট্যান্ডার্ড ক্লাস্টার তৈরির সাথে এগিয়ে যান।
অঞ্চল এবং 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 প্রাথমিক উদাহরণ তৈরি করুন। আপনি সংযোগ বিচ্ছিন্ন হলে আপনাকে আবার অঞ্চল এবং ক্লাস্টার নাম পরিবেশ ভেরিয়েবল সংজ্ঞায়িত করতে হবে।
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 পরিষেবা এজেন্টে 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
AlloyDB স্টুডিওতে সংযোগ করুন
নিম্নলিখিত অধ্যায়গুলিতে ডাটাবেসের সাথে সংযোগের প্রয়োজন এমন সমস্ত SQL কমান্ডগুলি বিকল্পভাবে AlloyDB স্টুডিওতে কার্যকর করা যেতে পারে। কমান্ডটি চালানোর জন্য আপনাকে প্রাথমিক উদাহরণে ক্লিক করে আপনার AlloyDB ক্লাস্টারের জন্য ওয়েব কনসোল ইন্টারফেস খুলতে হবে।
তারপরে বাম দিকে AlloyDB স্টুডিওতে ক্লিক করুন:
পোস্টগ্রেস ডাটাবেস, ব্যবহারকারীর পোস্টগ্রেস চয়ন করুন এবং যখন আমরা ক্লাস্টার তৈরি করি তখন উল্লিখিত পাসওয়ার্ড প্রদান করুন। তারপর "প্রমাণিত করুন" বোতামে ক্লিক করুন।
এটি AlloyDB স্টুডিও ইন্টারফেস খুলবে। ডাটাবেসে কমান্ড চালানোর জন্য আপনি ডানদিকে "Editor 1" ট্যাবে ক্লিক করুন।
এটি ইন্টারফেস খোলে যেখানে আপনি SQL কমান্ড চালাতে পারেন
ডাটাবেস তৈরি করুন
ডাটাবেস কুইকস্টার্ট তৈরি করুন।
AlloyDB স্টুডিও এডিটরে নিম্নলিখিত কমান্ডটি চালান।
ডাটাবেস তৈরি করুন:
CREATE DATABASE quickstart_db
প্রত্যাশিত আউটপুট:
Statement executed successfully
Quickstart_db-এ সংযোগ করুন
ব্যবহারকারী/ডাটাবেস পরিবর্তন করতে বোতামটি ব্যবহার করে স্টুডিওতে পুনরায় সংযোগ করুন।
ড্রপডাউন তালিকা থেকে নতুন quickstart_db ডাটাবেস নিন এবং আগের মতো একই ব্যবহারকারী এবং পাসওয়ার্ড ব্যবহার করুন।
এটি একটি নতুন সংযোগ খুলবে যেখানে আপনি quickstart_db ডাটাবেস থেকে বস্তুর সাথে কাজ করতে পারবেন।
6. নমুনা ডেটা
এখন আমাদের ডাটাবেসে অবজেক্ট তৈরি করতে হবে এবং ডেটা লোড করতে হবে। আমরা অনলাইন স্টোরের জন্য টেবিলের একটি সেট সহ একটি কাল্পনিক "Cymbal ecomm" স্টোর ব্যবহার করতে যাচ্ছি। এটি একটি রিলেশনাল ডাটাবেস স্কিমার অনুরূপ তাদের কী দ্বারা সংযুক্ত বেশ কয়েকটি টেবিল রয়েছে।
ডেটাসেট প্রস্তুত করা হয় এবং একটি SQL ফাইল হিসাবে স্থাপন করা হয় যা আমদানি ইন্টারফেস ব্যবহার করে ডাটাবেসে লোড করা যেতে পারে। ক্লাউড শেলে নিম্নলিখিত কমান্ডগুলি চালান:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters import $ADBCLUSTER --region=$REGION --database=quickstart_db --gcs-uri='gs://sample-data-and-media/ecomm-retail/ecom_generic.sql' --user=postgres --sql
কমান্ডটি AlloyDB SDK ব্যবহার করছে এবং একটি ecomm স্কিমা তৈরি করে এবং তারপর GCS বাকেট থেকে ডাটাবেসে নমুনা ডেটা আমদানি করে যাতে সমস্ত প্রয়োজনীয় বস্তু তৈরি করা হয় এবং ডেটা সন্নিবেশ করা হয়।
আমদানির পরে আমরা AlloyDB স্টুডিওতে টেবিলগুলি পরীক্ষা করতে পারি
এবং টেবিলে সারির সংখ্যা যাচাই করুন।
7. NL SQL কনফিগার করুন
এই অধ্যায়ে আমরা আপনার নমুনা স্কিমার সাথে কাজ করার জন্য NL কনফিগার করব
alloydb_nl_ai এক্সটেনশন ইনস্টল করুন
আমাদের ডাটাবেসে alloydb_ai_nl এক্সটেনশন ইনস্টল করতে হবে। এটি করার আগে আমাদের ডাটাবেস ফ্ল্যাগ alloydb_ai_nl.enabled to চালু করতে হবে।
ক্লাউড শেল সেশনে এক্সিকিউট করুন
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb instances update $ADBCLUSTER-pr \
--cluster=$ADBCLUSTER \
--region=$REGION \
--database-flags=alloydb_ai_nl.enabled=on
এটি ইনস্ট্যান্স আপডেট শুরু করবে। আপনি ওয়েব কনসোলে আপডেট করার উদাহরণের অবস্থা দেখতে পারেন:
যখন উদাহরণ আপডেট করা হয় (উদাহরণ স্থিতি সবুজ হয়) আপনি alloydb_ai_nl এক্সটেনশন সক্ষম করতে পারেন।
AlloyDB স্টুডিওতে এক্সিকিউট করুন
CREATE EXTENSION IF NOT EXISTS google_ml_integration;
CREATE EXTENSION alloydb_ai_nl cascade;
একটি প্রাকৃতিক ভাষা কনফিগারেশন তৈরি করুন
এক্সটেনশন ব্যবহার করার জন্য আমাদের একটি কনফিগারেশন তৈরি করতে হবে। নির্দিষ্ট স্কিমা, ক্যোয়ারী টেমপ্লেট এবং মডেল এন্ডপয়েন্টের সাথে অ্যাপ্লিকেশনগুলিকে সংযুক্ত করার জন্য কনফিগারেশনটি প্রয়োজনীয়। আইডি cymbal_ecomm_config দিয়ে একটি কনফিগারেশন তৈরি করা যাক।
AlloyDB স্টুডিওতে এক্সিকিউট করুন
SELECT
alloydb_ai_nl.g_create_configuration(
'cymbal_ecomm_config'
);
এখন আমরা কনফিগারেশনে আমাদের ইকম স্কিমা নিবন্ধন করতে পারি। আমরা ইকম স্কিমাতে ডেটা আমদানি করেছি, তাই আমরা সেই স্কিমাটিকে আমাদের NL কনফিগারেশনে যুক্ত করতে যাচ্ছি।
SELECT
alloydb_ai_nl.g_manage_configuration(
operation => 'register_schema',
configuration_id_in => 'cymbal_ecomm_config',
schema_names_in => '{ecomm}'
);
8. NL SQL এ প্রসঙ্গ যোগ করুন
সাধারণ প্রসঙ্গ যোগ করুন
আমরা আমাদের নিবন্ধিত স্কিমার জন্য কিছু প্রসঙ্গ যোগ করতে পারি। প্রসঙ্গটি ব্যবহারকারীদের অনুরোধের বিনিময়ে আরও ভাল ফলাফল তৈরি করতে সাহায্য করবে বলে মনে করা হচ্ছে। উদাহরণস্বরূপ আমরা বলতে পারি যে একটি ব্র্যান্ড একটি ব্যবহারকারীর জন্য পছন্দের ব্র্যান্ড যখন এটি স্পষ্টভাবে সংজ্ঞায়িত করা হয় না। আমাদের ডিফল্ট ব্র্যান্ড হিসাবে Clades (কাল্পনিক ব্র্যান্ড) করা যাক।
AlloyDB স্টুডিও এক্সিকিউটে:
SELECT
alloydb_ai_nl.g_manage_configuration(
'add_general_context',
'cymbal_ecomm_config',
general_context_in => '{"If the user doesn''t clearly define preferred brand then use Clades."}'
);
আসুন যাচাই করি কিভাবে সাধারণ প্রসঙ্গ আমাদের জন্য কাজ করে।
AlloyDB স্টুডিও এক্সিকিউটে:
SELECT
alloydb_ai_nl.get_sql(
'cymbal_ecomm_config', -- nl_config
'How many products do we have of our preferred brand?' -- nl question
);
জেনারেট করা ক্যোয়ারীটি সাধারণ প্রসঙ্গে আগে সংজ্ঞায়িত আমাদের ডিফল্ট ব্র্যান্ড ব্যবহার করছে:
{"sql": "SELECT\n COUNT(*)\nFROM \"ecomm\".\"inventory_items\"\nWHERE\n \"product_brand\" = 'Clades';", "method": "default", "prompt": "", "retries": 0, "time(ms)": {"llm": 498.268000, "magic": 885.226000}, "error_msg": "", "nl_question": "How many products do we have of our preferred brand?", "toolbox_used": false}
আমরা এটি পরিষ্কার করতে পারি এবং আউটপুট হিসাবে শুধুমাত্র SQL স্টেটমেন্ট তৈরি করতে পারি।
যেমন:
SELECT
alloydb_ai_nl.get_sql(
'cymbal_ecomm_config', -- nl_config
'How many products do we have of our preferred brand?' -- nl question
) ->> 'sql';
সাফ আউটপুট:
SELECT COUNT(*) FROM "ecomm"."inventory_items" WHERE "product_brand" = 'Clades';
আপনি লক্ষ্য করেছেন যে এটি স্বয়ংক্রিয়ভাবে পণ্যের পরিবর্তে inventory_items টেবিলটি বেছে নিয়েছে এবং কোয়েরি তৈরি করতে এটি ব্যবহার করেছে। এটি কিছু ক্ষেত্রে কাজ করতে পারে কিন্তু আমাদের স্কিমার জন্য নয়। আমাদের ক্ষেত্রে inventory_items টেবিলটি বিক্রয় ট্র্যাক করতে কাজ করে যা আপনার কাছে অভ্যন্তরীণ তথ্য না থাকলে বিভ্রান্তিকর হতে পারে। আমাদের প্রশ্নগুলিকে কীভাবে আরও নির্ভুল করা যায় তা আমরা পরে পরীক্ষা করতে যাচ্ছি৷
স্কিমা প্রসঙ্গ
স্কিমা কনটেক্সট স্কিমা অবজেক্টগুলিকে বর্ণনা করে যেমন টেবিল, ভিউ এবং পৃথক কলামগুলি স্কিমা অবজেক্টে মন্তব্য হিসাবে তথ্য সংরক্ষণ করে।
আমরা নিম্নলিখিত ক্যোয়ারী ব্যবহার করে আমাদের সংজ্ঞায়িত কনফিগারেশনের সমস্ত স্কিমা অবজেক্টের জন্য এটি স্বয়ংক্রিয়ভাবে তৈরি করতে পারি:
SELECT
alloydb_ai_nl.generate_schema_context(
'cymbal_ecomm_config', -- nl_config
TRUE
);
"TRUE" প্যারামিটার আমাদেরকে প্রসঙ্গ পুনরুত্থিত করতে এবং এটিকে ওভাররাইট করতে নির্দেশ করে। ডেটা মডেলের উপর নির্ভর করে কার্যকর করতে কিছু সময় লাগবে। আপনার আরও সম্পর্ক এবং সংযোগ রয়েছে - এটি আরও বেশি সময় নিতে পারে।
প্রসঙ্গ তৈরি করার পরে আমরা ক্যোয়ারী ব্যবহার করে ইনভেন্টরি আইটেম টেবিলের জন্য এটি কী তৈরি করেছে তা পরীক্ষা করতে পারি:
SELECT
object_context
FROM
alloydb_ai_nl.generated_schema_context_view
WHERE
schema_object = 'ecomm.inventory_items';
সাফ আউটপুট:
The `ecomm.inventory_items` table stores information about individual inventory items in an e-commerce system. Each item is uniquely identified by an `id` (primary key). The table tracks the `product_id` (foreign key referencing `ecomm.products`), the timestamp when the item was `created_at`, and the timestamp when it was `sold_at` (which can be null if the item hasn't been sold). The `cost` represents the cost of the item to the business, while `product_retail_price` is the price at which the item is sold. Additional product details include `product_category`, `product_name`, `product_brand`, `product_department`, and `product_sku` (stock keeping unit). The `product_distribution_center_id` (foreign key referencing `ecomm.distribution_centers`) indicates the distribution center where the item is located. The table includes information on both men's and women's apparel across various categories like jeans, tops & tees, activewear, sleep & lounge, intimates, swim, and accessories. The `sold_at` column indicates whether an item has been sold and when.
এমন মনে হচ্ছে যে বিবরণটিতে কিছু মূল অংশ অনুপস্থিত রয়েছে যা inventory_items টেবিল আইটেমগুলির গতিবিধি প্রতিফলিত করে। আমরা ecomm.inventory_items সম্পর্কের প্রসঙ্গে এই মূল তথ্য যোগ করে এটি আপডেট করতে পারি।
SELECT alloydb_ai_nl.update_generated_relation_context(
'ecomm.inventory_items',
'The `ecomm.inventory_items` table stores information about moving and sales of inventory items in an e-commerce system. Each movement is uniquely identified by an `id` (primary key) and used in order_items table as `inventory_item_id`. The table tracks sales and movements for the `product_id` (foreign key referencing `ecomm.products`), the timestamp when the movement for the item was `created_at`, and the timestamp when it was `sold_at` (which can be null if the item hasn''t been sold). The `cost` represents the cost of the item to the business, while `product_retail_price` is the price at which the item is sold. Additional product details include `product_category`, `product_name`, `product_brand`, `product_department`, and `product_sku` (stock keeping unit). The `product_distribution_center_id` (foreign key referencing `ecomm.distribution_centers`) indicates the distribution center where the item is located. The table includes information on both men''s and women''s apparel across various categories like jeans, tops & tees, activewear, sleep & lounge, intimates, swim, and accessories. The `sold_at` column indicates whether an item has been sold and when.'
);
এছাড়াও আমরা আমাদের পণ্য টেবিলের জন্য বর্ণনা সঠিকতা যাচাই করতে পারেন.
SELECT
object_context
FROM
alloydb_ai_nl.generated_schema_context_view
WHERE
schema_object = 'ecomm.products';
আমি পণ্য টেবিলের জন্য স্বয়ংক্রিয়ভাবে উত্পন্ন প্রসঙ্গটি বেশ নির্ভুল এবং কোনো পরিবর্তনের প্রয়োজন নেই বলে খুঁজে পেয়েছি।
আমি উভয় টেবিলের প্রতিটি কলাম সম্পর্কে তথ্য পরীক্ষা করেছি এবং এটিও সঠিক পেয়েছি।
আমাদের কনফিগারেশনে ecomm.inventory_items এবং ecomm.products-এর জন্য তৈরি করা প্রসঙ্গটি প্রয়োগ করা যাক।
SELECT alloydb_ai_nl.apply_generated_relation_context(
'ecomm.inventory_items',
TRUE
);
SELECT alloydb_ai_nl.apply_generated_relation_context(
'ecomm.products',
TRUE
);
'আমাদের পছন্দের ব্র্যান্ডের কয়টি পণ্য আছে?' ? এখন আমরা এটি পুনরাবৃত্তি করতে পারি এবং আউটপুট পরিবর্তন করা হয় কিনা তা দেখতে পারি।
SELECT
alloydb_ai_nl.get_sql(
'cymbal_ecomm_config', -- nl_config
'How many products do we have of our preferred brand?' -- nl question
) ->> 'sql';
এখানে নতুন আউটপুট আছে.
SELECT COUNT(*) FROM "ecomm"."products" WHERE "brand" = 'Clades';
এবং এখন এটি ecomm.products পরীক্ষা করছে যা আরও নির্ভুল এবং ইনভেন্টরি আইটেমগুলির সাথে 5000টির পরিবর্তে প্রায় 300টি পণ্য ফেরত দেয়৷
9. মান সূচক নিয়ে কাজ করা
ভ্যালু লিঙ্কিং প্রাক-নিবন্ধিত ধারণার ধরন এবং কলামের নামগুলির সাথে মান বাক্যাংশগুলিকে সংযুক্ত করে প্রাকৃতিক ভাষার প্রশ্নগুলিকে সমৃদ্ধ করে৷ এটি ফলাফলগুলিকে আরও অনুমানযোগ্য করতে সাহায্য করতে পারে।
মান সূচক কনফিগার করুন
আমরা পণ্য টেবিলে ব্র্যান্ড কলাম ব্যবহার করে আমাদের প্রশ্ন তৈরি করতে পারি এবং ধারণার ধরন সংজ্ঞায়িত করে আরও স্থিতিশীল ব্র্যান্ডের পণ্য অনুসন্ধান করতে পারি এবং এটিকে ecomm.products.brand কলামের সাথে সংযুক্ত করতে পারি।
আসুন ধারণাটি তৈরি করি এবং এটিকে কলামের সাথে সংযুক্ত করি:
SELECT alloydb_ai_nl.add_concept_type(
concept_type_in => 'brand_name',
match_function_in => 'alloydb_ai_nl.get_concept_and_value_generic_entity_name',
additional_info_in => '{
"description": "Concept type for brand name.",
"examples": "SELECT alloydb_ai_nl.get_concept_and_value_generic_entity_name(''Auto Forge'')" }'::jsonb
);
SELECT alloydb_ai_nl.associate_concept_type(
'ecomm.products.brand',
'brand_name',
'cymbal_ecomm_config'
);
আপনি alloydb_ai_nl.list_concept_types() জিজ্ঞাসা করে ধারণাটি যাচাই করতে পারেন
SELECT alloydb_ai_nl.list_concept_types();
তারপরে আমরা আমাদের কনফিগারেশনে সমস্ত তৈরি এবং পূর্বনির্মাণ সমিতিগুলির জন্য সূচক তৈরি করতে পারি:
SELECT alloydb_ai_nl.create_value_index('cymbal_ecomm_config');
মান সূচক ব্যবহার করুন
আপনি যদি ব্র্যান্ডের নাম ব্যবহার করে একটি এসকিউএল তৈরি করার জন্য একটি কোয়েরি চালান কিন্তু এটি একটি ব্র্যান্ডের নাম তা সংজ্ঞায়িত না করে এটি সত্তা এবং কলামটিকে সঠিকভাবে সনাক্ত করতে সহায়তা করে। এখানে ক্যোয়ারী আছে:
SELECT
alloydb_ai_nl.get_sql(
'cymbal_ecomm_config', -- nl_config
'How many Clades do we have?' -- nl question
) ->> 'sql';
এবং আউটপুট একটি ব্র্যান্ড নাম হিসাবে 'Clades' শব্দের সঠিক সনাক্তকরণ দেখায়
SELECT COUNT(*) FROM "ecomm"."products" WHERE "brand" = 'Clades';
10. ক্যোয়ারী টেমপ্লেটের সাথে কাজ করা
ক্যোয়ারী টেমপ্লেটগুলি ব্যবসায়িক সমালোচনামূলক অ্যাপ্লিকেশনগুলির জন্য স্থিতিশীল প্রশ্নগুলিকে সংজ্ঞায়িত করতে সাহায্য করে যা অনিশ্চয়তা হ্রাস করে এবং সঠিকতা উন্নত করে৷
একটি ক্যোয়ারী টেমপ্লেট তৈরি করুন
গত বছর "রিপাবলিক আউটপোস্ট" পণ্য কিনেছেন এমন গ্রাহকদের সম্পর্কে তথ্য পেতে বেশ কয়েকটি টেবিলে যোগ দিয়ে একটি ক্যোয়ারী টেমপ্লেট তৈরি করা যাক। আমরা জানি যে ক্যোয়ারীটি হয় ecomm.products টেবিল ব্যবহার করতে পারে অথবা এটি ecomm.inventory_items টেবিল ব্যবহার করতে পারে কারণ উভয়েরই ব্র্যান্ড সম্পর্কে তথ্য রয়েছে৷ কিন্তু টেবিলের পণ্যগুলিতে যোগদানের জন্য প্রাথমিক কী-তে 15 গুণ কম সারি এবং একটি সূচক রয়েছে। পণ্য টেবিল ব্যবহার করা আরও দক্ষ হতে পারে। সুতরাং, আমরা প্রশ্নের জন্য একটি টেমপ্লেট তৈরি করছি।
SELECT alloydb_ai_nl.add_template(
nl_config_id => 'cymbal_ecomm_config',
intent => 'List the last names and the country of all customers who bought products of `Republic Outpost` in the last year.',
sql => 'SELECT DISTINCT u."last_name", u."country" FROM "ecomm"."users" AS u INNER JOIN "ecomm"."order_items" AS oi ON u.id = oi."user_id" INNER JOIN "ecomm"."products" AS ep ON oi.product_id = ep.id WHERE ep.brand = ''Republic Outpost'' AND oi.created_at >= DATE_TRUNC(''year'', CURRENT_DATE - INTERVAL ''1 year'') AND oi.created_at < DATE_TRUNC(''year'', CURRENT_DATE)',
sql_explanation => 'To answer this question, JOIN `ecomm.users` with `ecom.order_items` on having the same `users.id` and `order_items.user_id`, and JOIN the result with ecom.products on having the same `order_items.product_id` and `products.id`. Then filter rows with products.brand = ''Republic Outpost'' and by `order_items.created_at` for the last year. Return the `last_name` and the `country` of the users with matching records.',
check_intent => TRUE
);
আমরা এখন একটি প্রশ্ন তৈরি করার জন্য অনুরোধ করতে পারি।
SELECT
alloydb_ai_nl.get_sql(
'cymbal_ecomm_config', -- nl_config
'Show me last name and country about customers who bought "Republic Outpost" products last year.
' -- nl question
) ->> 'sql';
এবং এটি পছন্দসই আউটপুট উত্পাদন করে।
SELECT DISTINCT u."last_name", u."country" FROM "ecomm"."users" AS u INNER JOIN "ecomm"."order_items" AS oi ON u.id = oi."user_id" INNER JOIN "ecomm"."products" AS ep ON oi.product_id = ep.id WHERE ep.brand = 'Republic Outpost' AND oi.created_at >= DATE_TRUNC('year', CURRENT_DATE - INTERVAL '1 year') AND oi.created_at < DATE_TRUNC('year', CURRENT_DATE)
অথবা আপনি নিম্নলিখিত ক্যোয়ারী ব্যবহার করে সরাসরি ক্যোয়ারী চালাতে পারেন:
SELECT
alloydb_ai_nl.execute_nl_query(
'Show me last name and country about customers who bought "Republic Outpost" products last year.',
'cymbal_ecomm_config'
);
এটি JSON ফর্ম্যাটে ফলাফল প্রদান করবে যা পার্স করা যেতে পারে।
execute_nl_query -------------------------------------------------------- {"last_name":"Adams","country":"China"} {"last_name":"Adams","country":"Germany"} {"last_name":"Aguilar","country":"China"} {"last_name":"Allen","country":"China"}
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.
12. অভিনন্দন
কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন। আপনি এখন AlloyDB এর NL2SQL বৈশিষ্ট্যগুলি ব্যবহার করে আপনার নিজস্ব সমাধানগুলি বাস্তবায়ন করার চেষ্টা করতে পারেন। আমরা AlloyDB এবং AlloyDB AI সম্পর্কিত অন্যান্য কোডল্যাব ব্যবহার করার পরামর্শ দিই। আপনি এই কোডল্যাবে AlloyDB-তে মাল্টিমোডাল এম্বেডিং কীভাবে কাজ করে তা পরীক্ষা করতে পারেন।
আমরা কভার করেছি কি
- পোস্টগ্রেসের জন্য কীভাবে অ্যালয়ডিবি স্থাপন করবেন
- কিভাবে AlloyDB AI প্রাকৃতিক ভাষা সক্ষম করবেন
- এআই প্রাকৃতিক ভাষার জন্য কীভাবে কনফিগারেশন তৈরি এবং টিউন করবেন
- কিভাবে SQL কোয়েরি জেনারেট করবেন এবং প্রাকৃতিক ভাষা ব্যবহার করে ফলাফল পাবেন
13. সমীক্ষা
আউটপুট: