১. ভূমিকা

এই কোডল্যাবে আপনি শিখবেন কীভাবে AlloyDB ডেপ্লয় করতে হয় এবং AI ন্যাচারাল ল্যাঙ্গুয়েজ ব্যবহার করে ডেটা কোয়েরি করতে হয়, সেইসাথে অনুমানযোগ্য ও কার্যকর কোয়েরির জন্য কনফিগারেশন টিউন করতে হয়। এই ল্যাবটি AlloyDB AI ফিচারগুলোর উপর নিবেদিত একটি ল্যাব সংগ্রহের অংশ। আপনি ডকুমেন্টেশনের AlloyDB AI পেজে এ বিষয়ে আরও পড়তে পারেন।
পূর্বশর্ত
- গুগল ক্লাউড, কনসোল সম্পর্কে প্রাথমিক ধারণা
- কমান্ড লাইন ইন্টারফেস এবং ক্লাউড শেলে প্রাথমিক দক্ষতা
আপনি যা শিখবেন
- কীভাবে AlloyDB for Postgres স্থাপন করবেন
- AlloyDB AI প্রাকৃতিক ভাষা কীভাবে সক্রিয় করবেন
- এআই ন্যাচারাল ল্যাঙ্গুয়েজের জন্য কনফিগারেশন কীভাবে তৈরি এবং টিউন করবেন
- স্বাভাবিক ভাষা ব্যবহার করে কীভাবে SQL কোয়েরি তৈরি করতে হয় এবং ফলাফল পেতে হয়
আপনার যা যা লাগবে
- একটি গুগল ক্লাউড অ্যাকাউন্ট এবং গুগল ক্লাউড প্রজেক্ট
- ক্রোমের মতো একটি ওয়েব ব্রাউজার যা গুগল ক্লাউড কনসোল এবং ক্লাউড শেল সমর্থন করে।
২. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিতে পরিবেশ সেটআপ
- Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।



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

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

এই ভার্চুয়াল মেশিনটিতে আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার সমস্ত কাজ একটি ব্রাউজারের মধ্যেই করা যাবে। আপনাকে কিছুই ইনস্টল করতে হবে না।
৩. শুরু করার আগে
এপিআই সক্ষম করুন
ক্লাউড শেলের ভিতরে, নিশ্চিত করুন যে আপনার প্রজেক্ট আইডি সেটআপ করা আছে:
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.
৪. AlloyDB স্থাপন করুন
AlloyDB ক্লাস্টার এবং প্রাইমারি ইনস্ট্যান্স তৈরি করুন। নিম্নলিখিত পদ্ধতিতে Google Cloud SDK ব্যবহার করে একটি 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 12`
প্রত্যাশিত কনসোল আউটপুট:
student@cloudshell:~ (test-project-402417)$ export PGPASSWORD=`openssl rand -hex 12`
ভবিষ্যতে ব্যবহারের জন্য PostgreSQL পাসওয়ার্ডটি লিখে রাখুন।
echo $PGPASSWORD
ভবিষ্যতে postgres ব্যবহারকারী হিসেবে ইনস্ট্যান্সটিতে সংযোগ করতে আপনার ওই পাসওয়ার্ডটি লাগবে। আমি পরামর্শ দেবো এটি লিখে রাখতে বা কোথাও কপি করে রাখতে, যাতে পরে ব্যবহার করতে পারেন।
প্রত্যাশিত কনসোল আউটপুট:
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.
৫. ডাটাবেস প্রস্তুত করুন
আমাদের একটি ডাটাবেস তৈরি করতে হবে, ভার্টেক্স এআই ইন্টিগ্রেশন সক্রিয় করতে হবে, ডাটাবেস অবজেক্ট তৈরি করতে হবে এবং ডেটা ইম্পোর্ট করতে হবে।
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' কমান্ডটি চালিয়ে ট্যাবটি বন্ধ করুন:
exit
AlloyDB Studio-এর সাথে সংযোগ করুন
পরবর্তী অধ্যায়গুলিতে, ডাটাবেসের সাথে সংযোগের প্রয়োজন হয় এমন সমস্ত SQL কমান্ড বিকল্পভাবে AlloyDB Studio-তে চালানো যেতে পারে। কমান্ডটি চালানোর জন্য, আপনাকে প্রাইমারি ইনস্ট্যান্সটিতে ক্লিক করে আপনার AlloyDB ক্লাস্টারের ওয়েব কনসোল ইন্টারফেসটি খুলতে হবে।

তারপর বাম দিকে AlloyDB Studio-তে ক্লিক করুন:

postgres ডাটাবেস ও postgres ইউজার নির্বাচন করুন এবং ক্লাস্টার তৈরির সময় লিখে রাখা পাসওয়ার্ডটি দিন। এরপর "Authenticate" বাটনে ক্লিক করুন।

এটি AlloyDB Studio ইন্টারফেসটি খুলবে। ডাটাবেসে কমান্ডগুলো চালানোর জন্য ডানদিকের "Editor 1" ট্যাবে ক্লিক করুন।

এটি এমন একটি ইন্টারফেস খোলে যেখানে আপনি SQL কমান্ড চালাতে পারেন।

ডাটাবেস তৈরি করুন
ডাটাবেস কুইকস্টার্ট তৈরি করুন।
AlloyDB Studio Editor-এ নিম্নলিখিত কমান্ডটি চালান।
ডাটাবেস তৈরি করুন:
CREATE DATABASE quickstart_db
প্রত্যাশিত আউটপুট:
Statement executed successfully
quickstart_db-এর সাথে সংযোগ করুন
ব্যবহারকারী/ডাটাবেস পরিবর্তন করার বাটনটি ব্যবহার করে স্টুডিওতে পুনরায় সংযোগ করুন।

ড্রপডাউন তালিকা থেকে নতুন quickstart_db ডাটাবেসটি বেছে নিন এবং আগের মতোই ইউজার ও পাসওয়ার্ড ব্যবহার করুন।

এটি একটি নতুন সংযোগ খুলবে যেখানে আপনি quickstart_db ডাটাবেসের অবজেক্টগুলো নিয়ে কাজ করতে পারবেন।
৬. নমুনা তথ্য
এখন আমাদের ডাটাবেসে অবজেক্ট তৈরি করতে হবে এবং ডেটা লোড করতে হবে। আমরা অনলাইন স্টোরের জন্য একগুচ্ছ টেবিলসহ একটি কাল্পনিক "সিম্বল ই-কমার্স" স্টোর ব্যবহার করতে যাচ্ছি। এতে একটি রিলেশনাল ডাটাবেস স্কিমার মতো করে কী (key) দ্বারা সংযুক্ত বেশ কয়েকটি টেবিল রয়েছে।
ডেটা সেটটি একটি 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 Studio-তে টেবিলগুলো চেক করতে পারি।

এবং টেবিলের সারি সংখ্যা যাচাই করুন।

৭. এনএল এসকিউএল কনফিগার করুন
এই অধ্যায়ে আমরা আপনার নমুনা স্কিমার সাথে কাজ করার জন্য এনএল (NL) কনফিগার করব।
alloydb_nl_ai এক্সটেনশনটি ইনস্টল করুন
আমাদের ডাটাবেসে alloydb_ai_nl এক্সটেনশনটি ইনস্টল করতে হবে। এটি করার আগে, আমাদের ডাটাবেস ফ্ল্যাগ alloydb_ai_nl.enabled-কে 'on' করতে হবে।
ক্লাউড শেল সেশনে কার্যকর করুন
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 Studio-তে চালান
CREATE EXTENSION IF NOT EXISTS google_ml_integration;
CREATE EXTENSION alloydb_ai_nl cascade;
একটি স্বাভাবিক ভাষা কনফিগারেশন তৈরি করুন
এক্সটেনশন ব্যবহার করার জন্য আমাদের একটি কনফিগারেশন তৈরি করতে হবে। অ্যাপ্লিকেশনগুলোকে নির্দিষ্ট স্কিমা, কোয়েরি টেমপ্লেট এবং মডেল এন্ডপয়েন্টের সাথে যুক্ত করার জন্য এই কনফিগারেশনটি প্রয়োজনীয়। চলুন, cymbal_ecomm_config আইডি দিয়ে একটি কনফিগারেশন তৈরি করা যাক।
AlloyDB Studio-তে চালান
SELECT
alloydb_ai_nl.g_create_configuration(
configuration_id => 'cymbal_ecomm_config'
);
এখন আমরা কনফিগারেশনে আমাদের ই-কমার্স স্কিমাটি রেজিস্টার করতে পারি। আমরা ই-কমার্স স্কিমাতে ডেটা ইম্পোর্ট করেছি, তাই আমরা সেই স্কিমাটি আমাদের এনএল কনফিগারেশনে যুক্ত করতে যাচ্ছি।
SELECT
alloydb_ai_nl.g_manage_configuration(
operation => 'register_schema',
configuration_id_in => 'cymbal_ecomm_config',
schema_names_in => '{ecomm}'
);
৮. এনএল এসকিউএল-এ কনটেক্সট যোগ করুন
সাধারণ প্রেক্ষাপট যোগ করুন
আমরা আমাদের নিবন্ধিত স্কিমার জন্য কিছু প্রাসঙ্গিক তথ্য যোগ করতে পারি। এই প্রাসঙ্গিক তথ্য ব্যবহারকারীদের অনুরোধের জবাবে আরও ভালো ফলাফল তৈরি করতে সাহায্য করে। উদাহরণস্বরূপ, যখন কোনো ব্র্যান্ড স্পষ্টভাবে সংজ্ঞায়িত করা থাকে না, তখন আমরা বলতে পারি যে সেটিই ব্যবহারকারীর পছন্দের ব্র্যান্ড। চলুন, ক্লেডস (একটি কাল্পনিক ব্র্যান্ড)-কে আমাদের ডিফল্ট ব্র্যান্ড হিসেবে সেট করি।
AlloyDB Studio-তে নিম্নলিখিতটি চালান:
SELECT
alloydb_ai_nl.g_manage_configuration(
operation => 'add_general_context',
configuration_id_in => 'cymbal_ecomm_config',
general_context_in => '{"If the user doesn''t clearly define preferred brand then use Clades."}'
);
চলুন যাচাই করে দেখি সাধারণ প্রেক্ষাপটটি আমাদের ক্ষেত্রে কীভাবে কাজ করে।
AlloyDB Studio-তে নিম্নলিখিতটি চালান:
SELECT
alloydb_ai_nl.get_sql(
nl_config_id => 'cymbal_ecomm_config',
nl_question => 'How many products do we have of our preferred brand?'
);
তৈরি করা কোয়েরিটি সাধারণ প্রেক্ষাপটে পূর্বে সংজ্ঞায়িত আমাদের ডিফল্ট ব্র্যান্ডটি ব্যবহার করছে:
{"sql": "SELECT count(*) FROM \"ecomm\".\"products\" WHERE \"brand\" = 'Clades'", "method": "default", "prompt": "", "retries": 0, "time(ms)": {"llm": 505.628000, "magic": 424.019000}, "error_msg": "", "nl_question": "How many products do we have of our preferred brand?", "toolbox_used": false}
আমরা এটিকে পরিমার্জন করে আউটপুট হিসেবে শুধু SQL স্টেটমেন্টটি তৈরি করতে পারি।
উদাহরণস্বরূপ:
SELECT
alloydb_ai_nl.get_sql(
nl_config_id => 'cymbal_ecomm_config',
nl_question => 'How many products do we have of our preferred brand?'
) ->> 'sql';
পরিষ্কার আউটপুট:
SELECT count(*) FROM "ecomm"."products" WHERE "brand" = 'Clades'
আপনি লক্ষ্য করেছেন যে এটি স্বয়ংক্রিয়ভাবে 'products' টেবিলের পরিবর্তে 'inventory_items' টেবিলটি বেছে নিয়েছে এবং কোয়েরিটি তৈরি করতে সেটি ব্যবহার করেছে। এটি কিছু ক্ষেত্রে কাজ করতে পারে, কিন্তু আমাদের স্কিমার জন্য নয়। আমাদের ক্ষেত্রে, 'inventory_items' টেবিলটি বিক্রয় ট্র্যাক করার জন্য ব্যবহৃত হয়, যা আপনার কাছে অভ্যন্তরীণ তথ্য না থাকলে বিভ্রান্তিকর হতে পারে। আমাদের কোয়েরিগুলোকে কীভাবে আরও নির্ভুল করা যায়, তা আমরা পরে দেখব।
স্কিমা প্রসঙ্গ
স্কিমা কনটেক্সট টেবিল, ভিউ-এর মতো স্কিমা অবজেক্ট এবং স্কিমা অবজেক্টের মধ্যে মন্তব্য হিসেবে তথ্য সংরক্ষণকারী স্বতন্ত্র কলামগুলোর বর্ণনা দেয়।
নিম্নলিখিত কোয়েরিটি ব্যবহার করে আমরা আমাদের সংজ্ঞায়িত কনফিগারেশনের সমস্ত স্কিমা অবজেক্টের জন্য এটি স্বয়ংক্রিয়ভাবে তৈরি করতে পারি:
SELECT
alloydb_ai_nl.generate_schema_context(
nl_config_id => 'cymbal_ecomm_config',
overwrite_if_exist => 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(
relation_name => 'ecomm.inventory_items',
relation_context => '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(
relation_name => 'ecomm.inventory_items',
overwrite_if_exist => TRUE
);
SELECT alloydb_ai_nl.apply_generated_relation_context(
relation_name => 'ecomm.products',
overwrite_if_exist => TRUE
);
'আমাদের পছন্দের ব্র্যান্ডের কতগুলো পণ্য আছে?'—এই প্রশ্নের জন্য SQL তৈরি করতে আমরা যে কোয়েরিটি ব্যবহার করেছিলাম, তা কি আপনার মনে আছে? এখন আমরা এটি আবার করে দেখতে পারি যে আউটপুট পরিবর্তিত হয় কি না।
SELECT
alloydb_ai_nl.get_sql(
nl_config_id => 'cymbal_ecomm_config',
nl_question => 'How many products do we have of our preferred brand?'
) ->> 'sql';
এই হলো নতুন আউটপুট।
SELECT COUNT(*) FROM "ecomm"."products" WHERE "brand" = 'Clades';
এবং এখন এটি ই-কমার্স পণ্যগুলো যাচাই করছে, যা আরও নির্ভুল এবং ইনভেন্টরি আইটেমসহ ৫০০০ অপারেশনের পরিবর্তে প্রায় ৩০০টি পণ্য ফেরত দিচ্ছে।
৯. মান সূচক নিয়ে কাজ করা
ভ্যালু লিঙ্কিং ভ্যালু ফ্রেজগুলোকে পূর্ব-নিবন্ধিত কনসেপ্ট টাইপ এবং কলাম নামের সাথে সংযুক্ত করার মাধ্যমে স্বাভাবিক ভাষার কোয়েরিকে সমৃদ্ধ করে। এটি ফলাফলকে আরও অনুমানযোগ্য করতে সাহায্য করতে পারে।
মান সূচক কনফিগার করুন
আমরা প্রোডাক্টস টেবিলের ব্র্যান্ড কলাম ব্যবহার করে আমাদের কোয়েরি তৈরি করতে পারি এবং কনসেপ্ট টাইপ নির্ধারণ করে ও সেটিকে 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(
column_names_in => 'ecomm.products.brand',
concept_type_in => 'brand_name',
nl_config_id_in => 'cymbal_ecomm_config'
);
আপনি alloydb_ai_nl.list_concept_types() কোয়েরি করে ধারণাটি যাচাই করতে পারেন।
SELECT alloydb_ai_nl.list_concept_types();
তারপর আমরা আমাদের কনফিগারেশনে সমস্ত তৈরি করা এবং আগে থেকে তৈরি করা অ্যাসোসিয়েশনগুলির জন্য ইনডেক্স তৈরি করতে পারি:
SELECT alloydb_ai_nl.create_value_index(
nl_config_id_in => 'cymbal_ecomm_config'
);
মান সূচক ব্যবহার করুন
ব্র্যান্ডের নাম ব্যবহার করে SQL তৈরি করার জন্য যদি আপনি কোনো কোয়েরি চালান, কিন্তু সেটিকে ব্র্যান্ডের নাম হিসেবে নির্দিষ্ট না করেন, তাহলে এটি এনটিটি এবং কলামটিকে সঠিকভাবে শনাক্ত করতে সাহায্য করে। কোয়েরিটি নিচে দেওয়া হলো:
SELECT
alloydb_ai_nl.get_sql(
nl_config_id => 'cymbal_ecomm_config',
nl_question => 'How many Clades do we have?'
) ->> 'sql';
এবং আউটপুটে 'Clades' শব্দটিকে একটি ব্র্যান্ড নাম হিসেবে সঠিকভাবে শনাক্ত করা হয়েছে।
SELECT COUNT(*) FROM "ecomm"."products" WHERE "brand" = 'Clades';
১০. কোয়েরি টেমপ্লেট নিয়ে কাজ করা
কোয়েরি টেমপ্লেটগুলি ব্যবসায়িক গুরুত্বপূর্ণ অ্যাপ্লিকেশনগুলির জন্য স্থিতিশীল কোয়েরি নির্ধারণ করতে সাহায্য করে, যা অনিশ্চয়তা হ্রাস করে এবং নির্ভুলতা উন্নত করে।
একটি কোয়েরি টেমপ্লেট তৈরি করুন
চলুন, গত বছর "রিপাবলিক আউটপোস্ট" পণ্য কিনেছেন এমন গ্রাহকদের তথ্য পেতে কয়েকটি টেবিল জয়েন করে একটি কোয়েরি টেমপ্লেট তৈরি করি। আমরা জানি যে কোয়েরিটি ecomm.products টেবিল অথবা ecomm.inventory_items টেবিল ব্যবহার করতে পারে, কারণ উভয় টেবিলেই ব্র্যান্ড সম্পর্কিত তথ্য রয়েছে। কিন্তু products টেবিলে ১৫ গুণ কম সারি রয়েছে এবং জয়েনের জন্য প্রাইমারি কী-এর উপর একটি ইনডেক্সও আছে। তাই products টেবিলটি ব্যবহার করা আরও বেশি কার্যকর হতে পারে। সুতরাং, আমরা কোয়েরিটির জন্য একটি টেমপ্লেট তৈরি করছি।
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(
nl_config_id => 'cymbal_ecomm_config',
nl_question => 'Show me last name and country about customers who bought "Republic Outpost" products 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)
অথবা আপনি নিম্নলিখিত কোয়েরিটি ব্যবহার করে সরাসরি কোয়েরিটি চালাতে পারেন:
SELECT
alloydb_ai_nl.execute_nl_query(
nl_config_id => 'cymbal_ecomm_config',
nl_question => 'Show me last name and country about customers who bought "Republic Outpost" products last year.'
);
এটি JSON ফরম্যাটে ফলাফল প্রদান করবে যা পার্স করা যাবে।
execute_nl_query
--------------------------------------------------------
{"last_name":"Adams","country":"China"}
{"last_name":"Adams","country":"Germany"}
{"last_name":"Aguilar","country":"China"}
{"last_name":"Allen","country":"China"}
১১. পরিবেশ পরিষ্কার করা
ল্যাবের কাজ শেষ হলে AlloyDB ইনস্ট্যান্স এবং ক্লাস্টারটি ধ্বংস করে দিন।
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.
১২. অভিনন্দন
কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন। আপনি এখন AlloyDB-এর NL2SQL ফিচারগুলো ব্যবহার করে আপনার নিজস্ব সমাধান বাস্তবায়নের চেষ্টা করতে পারেন। আমরা আপনাকে AlloyDB এবং AlloyDB AI সম্পর্কিত অন্যান্য কোডল্যাবগুলো করার পরামর্শ দিচ্ছি। এই কোডল্যাবে আপনি দেখতে পারেন AlloyDB-তে মাল্টিমোডাল এমবেডিং কীভাবে কাজ করে।
আমরা যা আলোচনা করেছি
- কীভাবে AlloyDB for Postgres স্থাপন করবেন
- AlloyDB AI প্রাকৃতিক ভাষা কীভাবে সক্রিয় করবেন
- এআই ন্যাচারাল ল্যাঙ্গুয়েজের জন্য কনফিগারেশন কীভাবে তৈরি এবং টিউন করবেন
- স্বাভাবিক ভাষা ব্যবহার করে কীভাবে SQL কোয়েরি তৈরি করতে হয় এবং ফলাফল পেতে হয়
১৩. জরিপ
আউটপুট: