Cloud SQL for PostgreSQL-এ ভেক্টর এমবেডিং দিয়ে শুরু করা

১. ভূমিকা

এই কোডল্যাবে আপনি শিখবেন কীভাবে ভেক্টর সার্চের সাথে জেমিনি এন্টারপ্রাইজ এজেন্ট প্ল্যাটফর্ম এমবেডিংস-এর সমন্বয় ঘটিয়ে পোস্টগ্রেসকিউএল এআই ইন্টিগ্রেশনের জন্য ক্লাউড এসকিউএল ব্যবহার করতে হয়।

জেমিনি এন্টারপ্রাইজ এজেন্ট প্ল্যাটফর্মের সাথে ক্লাউড এসকিউএল ইন্টিগ্রেশন দেখানো আর্কিটেকচার ডায়াগ্রাম।

পূর্বশর্ত

  • গুগল ক্লাউড এবং গুগল ক্লাউড কনসোল সম্পর্কে প্রাথমিক ধারণা
  • কমান্ড-লাইন ইন্টারফেস এবং ক্লাউড শেল সম্পর্কে প্রাথমিক অভিজ্ঞতা

আপনি যা করবেন

আপনার যা যা লাগবে

  • একটি গুগল ক্লাউড অ্যাকাউন্ট এবং একটি গুগল ক্লাউড প্রজেক্ট
  • ক্রোমের মতো একটি ওয়েব ব্রাউজার

২. সেটআপ এবং প্রয়োজনীয়তা

প্রজেক্ট সেটআপ

  1. Google Cloud কনসোলে সাইন ইন করুন। যদি আপনার আগে থেকে কোনো Google অ্যাকাউন্ট (Gmail বা Google Workspace) না থাকে, তাহলে আপনাকে অবশ্যই একটি Google অ্যাকাউন্ট তৈরি করতে হবে।

কর্মক্ষেত্র বা শিক্ষা প্রতিষ্ঠানের অ্যাকাউন্টের পরিবর্তে ব্যক্তিগত অ্যাকাউন্ট ব্যবহার করুন।

  1. একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। গুগল ক্লাউড কনসোলে একটি নতুন প্রজেক্ট তৈরি করতে, টুলবারে থাকা ‘Select a project’- এ ক্লিক করুন।

গুগল ক্লাউড কনসোলে একটি প্রজেক্ট নির্বাচন করার ডায়ালগ বক্স

প্রজেক্ট নির্বাচন করুন ডায়ালগ বক্সে, নতুন প্রজেক্ট-এ ক্লিক করুন।

37d264871000675d.png

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

96d86d3d5655cdbe.png

  • প্রজেক্টের নামটি এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শিত নাম। প্রজেক্টের নামটি গুগল এপিআই দ্বারা ব্যবহৃত হয় না এবং এটি যেকোনো সময় পরিবর্তন করা যেতে পারে।
  • প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। গুগল ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য আইডি তৈরি করে, কিন্তু আপনি এটি কাস্টমাইজ করতে পারেন। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন অথবা সেটির প্রাপ্যতা যাচাই করার জন্য আপনার নিজের আইডি দিতে পারেন। বেশিরভাগ কোডল্যাবে, আপনি আপনার প্রজেক্ট আইডি উল্লেখ করেন, যা সাধারণত এর মাধ্যমে চিহ্নিত করা হয়। স্থানধারক।
  • তৃতীয় একটি ভ্যালু, অর্থাৎ প্রজেক্ট নম্বর , কিছু API দ্বারা ব্যবহৃত হয়। এই তিনটি ভ্যালু সম্পর্কে আরও জানতে "প্রজেক্ট তৈরি ও পরিচালনা" ডকুমেন্টেশনটি পড়ুন।

বিলিং সক্ষম করুন

একটি ব্যক্তিগত বিলিং অ্যাকাউন্ট তৈরি করুন

আপনি যদি গুগল ক্লাউড ক্রেডিট ব্যবহার করে বিলিং সেট আপ করেন, তাহলে এই ধাপটি এড়িয়ে যেতে পারেন।

একটি ব্যক্তিগত বিলিং অ্যাকাউন্ট তৈরি করতে, গুগল ক্লাউড বিলিং কনসোলে বিলিং চালু করুন।

নোট:

  • এই ল্যাবটি সম্পন্ন করতে গুগল ক্লাউড রিসোর্সে ৫ মার্কিন ডলারেরও কম খরচ হয়।
  • রিসোর্সগুলো মুছে ফেলতে এবং পরবর্তী চার্জ এড়াতে এই ল্যাবের শেষে দেওয়া ধাপগুলো অনুসরণ করুন।
  • নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়ালের জন্য যোগ্য।

ক্লাউড শেল শুরু করুন

যদিও আপনি আপনার কম্পিউটার থেকে দূরবর্তীভাবে গুগল ক্লাউড পরিচালনা করতে পারেন, এই কোডল্যাবে আপনি গুগল ক্লাউড শেল ব্যবহার করবেন, যা ক্লাউডে চালিত একটি কমান্ড-লাইন পরিবেশ।

Google Cloud Console টুলবারে, Activate Cloud Shell- এ ক্লিক করুন:

ক্লাউড শেল সক্রিয় করুন

বিকল্পভাবে, গুগল ক্লাউড কনসোলের মধ্যে g চেপে তারপর s চাপুন, অথবা ক্লাউড শেল খুলুন।

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

গুগল ক্লাউড শেল টার্মিনালের স্ক্রিনশট, যা দেখাচ্ছে যে পরিবেশটি সংযুক্ত হয়েছে।

এই ভার্চুয়াল মেশিনটিতে আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেন্টিকেশন উন্নত করে। এই কোডল্যাবে আপনার সমস্ত কাজ একটি ব্রাউজারের মধ্যেই করা যাবে।

৩. এপিআই সক্রিয় করুন

Cloud SQL , Compute Engine , Service Networking , এবং Gemini Enterprise Agent Platform ব্যবহার করতে, আপনার Google Cloud প্রজেক্টে এগুলোর নিজ নিজ API সক্রিয় করুন।

ক্লাউড শেল টার্মিনালে, আপনার প্রজেক্ট আইডি সেট করা আছে কিনা তা নিশ্চিত করুন:

gcloud config set project <PROJECT_ID>

PROJECT_ID এনভায়রনমেন্ট ভেরিয়েবল সেট করুন:

PROJECT_ID=$(gcloud config get-value project)

সকল প্রয়োজনীয় পরিষেবা সক্রিয় করুন:

gcloud services enable sqladmin.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       aiplatform.googleapis.com

প্রত্যাশিত আউটপুট:

student@cloudshell:~ (test-project-001-402417)$ gcloud config set project test-project-001-402417
Updated property [core/project].
student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-14650]
student@cloudshell:~ (test-project-001-402417)$ 
student@cloudshell:~ (test-project-001-402417)$ gcloud services enable sqladmin.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       aiplatform.googleapis.com
Operation "operations/acat.p2-4470404856-1f44ebd8-894e-4356-bea7-b84165a57442" finished successfully.

আপনি ডকুমেন্টেশনে প্রতিটি সক্রিয় API সম্পর্কে পড়তে পারেন।

৪. একটি ক্লাউড এসকিউএল ইনস্ট্যান্স তৈরি করুন

জেমিনি এন্টারপ্রাইজ এজেন্ট প্ল্যাটফর্ম ডাটাবেস ইন্টিগ্রেশন সহ একটি ক্লাউড এসকিউএল ইনস্ট্যান্স তৈরি করুন।

ডাটাবেস পাসওয়ার্ড তৈরি করুন

ডিফল্ট ডাটাবেস ব্যবহারকারীর জন্য একটি পাসওয়ার্ড নির্ধারণ করুন। আপনি নিজের পাসওয়ার্ড তৈরি করতে পারেন অথবা একটি র‍্যান্ডম ফাংশন ব্যবহার করে তা তৈরি করতে পারেন:

export CLOUDSQL_PASSWORD=$(openssl rand -hex 16)

তৈরি হওয়া পাসওয়ার্ডের মান প্রদর্শন করুন:

echo $CLOUDSQL_PASSWORD

পরবর্তীতে ব্যবহারের জন্য তৈরি হওয়া পাসওয়ার্ডটি লিখে রাখুন।

একটি ক্লাউড এসকিউএল ফর পোস্টগ্রেসকিউএল ইনস্ট্যান্স তৈরি করুন

গুগল ক্লাউড কনসোল, টেরাফর্ম, বা গুগল ক্লাউড সিএলআই ( gcloud ) সহ বিভিন্ন পদ্ধতি ব্যবহার করে ক্লাউড এসকিউএল ইনস্ট্যান্স তৈরি করা যায়। এই কোডল্যাবে, আপনি gcloud ব্যবহার করবেন। অন্যান্য টুল দিয়ে কীভাবে ইনস্ট্যান্স তৈরি করতে হয় তা জানতে, 'ইনস্ট্যান্স তৈরি করুন ' ডকুমেন্টেশনটি দেখুন।

ক্লাউড শেলে ইনস্ট্যান্সটি তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:

gcloud sql instances create my-cloudsql-instance \
--database-version=POSTGRES_18 \
--tier=db-custom-1-3840 \
--region=us-central1 \
--edition=ENTERPRISE \
--enable-google-ml-integration \
--database-flags cloudsql.enable_google_ml_integration=on

ইনস্ট্যান্সটি তৈরি করার পরে, ডিফল্ট ব্যবহারকারীর ( postgres ) জন্য একটি পাসওয়ার্ড সেট করুন এবং আপনি সংযোগ করতে পারছেন কিনা তা যাচাই করুন:

gcloud sql users set-password postgres \
    --instance=my-cloudsql-instance \
    --password=$CLOUDSQL_PASSWORD

gcloud sql connect ব্যবহার করে ইনস্ট্যান্সটিতে সংযোগ করুন। অনুরোধ করা হলে, পাসওয়ার্ডটি লিখুন:

gcloud sql connect my-cloudsql-instance --user=postgres

Ctrl+D চেপে অথবা exit লিখে psql সেশন থেকে বেরিয়ে যান।

exit

জেমিনি এন্টারপ্রাইজ এজেন্ট প্ল্যাটফর্ম ইন্টিগ্রেশন সক্ষম করুন

Gemini Enterprise Agent Platform ইন্টিগ্রেশন সক্ষম করতে ক্লাউড SQL সার্ভিস অ্যাকাউন্টকে প্রয়োজনীয় IAM রোলটি প্রদান করুন।

ক্লাউড SQL পরিষেবা অ্যাকাউন্টের ইমেলটি সংগ্রহ করুন এবং এটিকে একটি এনভায়রনমেন্ট ভেরিয়েবল হিসেবে এক্সপোর্ট করুন:

SERVICE_ACCOUNT_EMAIL=$(gcloud sql instances describe my-cloudsql-instance --format="value(serviceAccountEmailAddress)")
echo $SERVICE_ACCOUNT_EMAIL

ক্লাউড SQL পরিষেবা অ্যাকাউন্টকে roles/aiplatform.user রোলটি প্রদান করুন:

PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \
  --role="roles/aiplatform.user"

ইনস্ট্যান্স তৈরি এবং কনফিগারেশন সম্পর্কে আরও তথ্যের জন্য, “Integrate Cloud SQL with Gemini Enterprise Agent Platform” দেখুন।

৫. ডাটাবেস প্রস্তুত করুন।

একটি ডাটাবেস তৈরি করুন এবং ভেক্টর সাপোর্ট সক্রিয় করুন।

একটি ডাটাবেস তৈরি করুন

quickstart_db নামে একটি ডেটাবেস তৈরি করুন। আপনি ডেটাবেস ক্লায়েন্ট (যেমন psql ), Google Cloud CLI, বা Cloud SQL Studio ব্যবহার করে ডেটাবেস তৈরি করতে পারেন। এই ধাপে, gcloud ব্যবহার করুন।

ক্লাউড শেলে ডাটাবেস তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:

gcloud sql databases create quickstart_db --instance=my-cloudsql-instance

এক্সটেনশনগুলি সক্ষম করুন

Gemini Enterprise Agent Platform এবং vectors-এর সাথে কাজ করার জন্য, quickstart_db ডেটাবেসে google_ml_integration এবং vector এই দুটি এক্সটেনশন সক্রিয় করুন।

ক্লাউড শেলে ডাটাবেসের সাথে সংযোগ করুন:

gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres

অনুরোধ করা হলে আপনার ডাটাবেস পাসওয়ার্ডটি দিন।

SQL সেশনে নিম্নলিখিত কমান্ডগুলো চালান:

CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector CASCADE;

SQL সেশন থেকে প্রস্থান করুন:

exit;

৬. ডেটা লোড করুন

পাবলিক ক্লাউড স্টোরেজ বাকেটে CSV ফরম্যাটে সংরক্ষিত কাল্পনিক সিম্বাল স্টোর ডেটাসেট ফাইল ব্যবহার করে ডাটাবেসে টেবিল তৈরি করুন এবং ডেটা লোড করুন।

প্রথমে, প্রয়োজনীয় স্কিমা অবজেক্টগুলো তৈরি করুন। স্কিমাটি ডাউনলোড ও ইম্পোর্ট করার জন্য gcloud sql connect এবং gcloud storage চালান:

ক্লাউড শেলে, নিম্নলিখিত কমান্ডটি চালান (প্রয়োজন হলে, ইনস্ট্যান্সটির জন্য তৈরি করা পাসওয়ার্ডটি লিখুন):

gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql | gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres

এই কমান্ডটি ডাটাবেসের সাথে সংযোগ স্থাপন করে এবং টেবিল, ইনডেক্স ও সিকোয়েন্স তৈরি করার জন্য ডাউনলোড করা SQL কোডটি কার্যকর করে।

এরপর, ক্লাউড স্টোরেজ থেকে CSV ডেটা ফাইলগুলো ডাউনলোড করুন:

gcloud storage cp gs://cloud-training/gcc/gcc-tech-004/cymbal_products.csv .
gcloud storage cp gs://cloud-training/gcc/gcc-tech-004/cymbal_inventory.csv .
gcloud storage cp gs://cloud-training/gcc/gcc-tech-004/cymbal_stores.csv .

ডাটাবেসে সংযোগ করুন:

gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres

CSV ফাইলগুলো থেকে ডেটা ইম্পোর্ট করুন:

\copy cymbal_products from 'cymbal_products.csv' csv header
\copy cymbal_inventory from 'cymbal_inventory.csv' csv header
\copy cymbal_stores from 'cymbal_stores.csv' csv header

যদি আপনি আপনার নিজের ডেটা ব্যবহার করেন এবং CSV ফাইলগুলো গুগল ক্লাউড কনসোলের ক্লাউড SQL ইম্পোর্ট টুলের সাথে সামঞ্জস্যপূর্ণ হয়, তাহলে আপনি কমান্ড লাইনের পরিবর্তে কনসোল ব্যবহার করতে পারেন।

৭. এমবেডিং তৈরি করুন

জেমিনি এন্টারপ্রাইজ এজেন্ট প্ল্যাটফর্মের text-embedding-005 মডেল ব্যবহার করে পণ্যের বিবরণগুলির জন্য এম্বেডিং তৈরি করুন এবং সেগুলিকে ভেক্টর ডেটা হিসাবে সংরক্ষণ করুন।

আপনার সেশন সংযোগ বিচ্ছিন্ন হয়ে গেলে, ডাটাবেসে পুনরায় সংযোগ করুন:

gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres

embedding ফাংশনটি ব্যবহার করে cymbal_products টেবিলে embedding নামে একটি জেনারেটেড কলাম তৈরি করুন। এই কমান্ডটি একটি স্টোরড জেনারেটেড কলাম তৈরি করে, যা টেবিলের সমস্ত সারির জন্য product_description কলাম থেকে জেনারেট করা ভেক্টর এমবেডিং ধারণ করে। মডেলটিকে প্রথম প্যারামিটার হিসেবে এবং সোর্স টেক্সট কলামটিকে দ্বিতীয় প্যারামিটার হিসেবে নির্দিষ্ট করা হয়:

ALTER TABLE cymbal_products ADD COLUMN embedding vector(768) GENERATED ALWAYS AS (google_ml.embedding('text-embedding-005', product_description)) STORED;

৯০০ থেকে ১০০০ সারির জন্য এই প্রক্রিয়াটিতে সাধারণত ১ থেকে ৫ মিনিট সময় লাগে।

যখন আপনি টেবিলে একটি নতুন সারি যোগ করেন বা বিদ্যমান কোনো সারিতে product_description আপডেট করেন, তখন embedding কলামটি স্বয়ংক্রিয়ভাবে আপডেট হয়ে যায়।

৮. সাদৃশ্য অনুসন্ধান চালান

পণ্যের বিবরণের জন্য গণনা করা ভেক্টর এমবেডিংগুলোকে একটি সার্চ কোয়েরির এমবেডিংয়ের সাথে তুলনা করে একটি সাদৃশ্য অনুসন্ধান চালান।

আপনি gcloud sql connect ব্যবহার করে কমান্ড লাইন থেকে অথবা ক্লাউড এসকিউএল স্টুডিও থেকে SQL কোয়েরি চালাতে পারেন। ক্লাউড এসকিউএল স্টুডিও আউটপুটে একাধিক সারি সহ দীর্ঘ SQL স্টেটমেন্ট সম্পাদনা এবং কার্যকর করার আরও সুবিধাজনক উপায় প্রদান করে।

ক্লাউড এসকিউএল স্টুডিও শুরু করুন

  1. গুগল ক্লাউড কনসোলে, Cloud SQL instances- এ যান এবং my-cloudsql-instance ক্লিক করুন।

গুগল ক্লাউড কনসোলে ক্লাউড SQL ইনস্ট্যান্সের তালিকা

  1. নেভিগেশন মেনুতে, ক্লাউড এসকিউএল স্টুডিও-তে ক্লিক করুন।

ক্লাউড এসকিউএল স্টুডিও মেনু আইটেম

  1. প্রমাণীকরণ ডায়ালগে, ডেটাবেসের নাম এবং ক্রেডেনশিয়াল প্রবেশ করান:
    • ডাটাবেস : quickstart_db
    • ব্যবহারকারী : postgres
    • পাসওয়ার্ড :
  2. প্রমাণীকরণ-এ ক্লিক করুন।

ক্লাউড এসকিউএল স্টুডিও প্রমাণীকরণ ডায়ালগ

  1. SQL এডিটর খোলার জন্য এডিটর ট্যাবে ক্লিক করুন।

ক্লাউড এসকিউএল স্টুডিও এসকিউএল এডিটর ট্যাব

কোয়েরি চালান

গ্রাহকের জিজ্ঞাসা "এখানে কোন ধরনের ফলের গাছ ভালো জন্মায়?"- এর সাথে সবচেয়ে প্রাসঙ্গিক শীর্ষ ১০টি পণ্য খুঁজে বের করতে একটি কোয়েরি চালান।

SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        (cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) as distance
FROM
        cymbal_products cp
JOIN cymbal_inventory ci on
        ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
        cs.store_id=ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        distance ASC
LIMIT 10;

Cloud SQL Studio-তে, কোয়েরিটি লিখুন এবং Run-এ ক্লিক করুন (অথবা আপনার psql সেশনে কোয়েরিটি চালান):

ক্লাউড এসকিউএল স্টুডিওতে এসকিউএল কোয়েরি চালানো

কোয়েরিটি কোসাইন দূরত্ব অনুসারে সাজানো মিলে যাওয়া পণ্যগুলো ফেরত দেয়:

product_name       |                                   description                                    | sale_price | zip_code |      distance       
-------------------------+----------------------------------------------------------------------------------+------------+----------+---------------------
 Cherry Tree             | This is a beautiful cherry tree that will produce delicious cherries. It is an d |      75.00 |    93230 | 0.43922018972266397
 Meyer Lemon Tree        | Meyer Lemon trees are California's favorite lemon tree! Grow your own lemons by  |         34 |    93230 |  0.4685112926118228
 Toyon                   | This is a beautiful toyon tree that can grow to be over 20 feet tall. It is an e |      10.00 |    93230 |  0.4835677149651668
 California Lilac        | This is a beautiful lilac tree that can grow to be over 10 feet tall. It is an d |       5.00 |    93230 |  0.4947204525907498
 California Peppertree   | This is a beautiful peppertree that can grow to be over 30 feet tall. It is an e |      25.00 |    93230 |  0.5054166905547247
 California Black Walnut | This is a beautiful walnut tree that can grow to be over 80 feet tall. It is a d |     100.00 |    93230 |  0.5084219510932597
 California Sycamore     | This is a beautiful sycamore tree that can grow to be over 100 feet tall. It is  |     300.00 |    93230 |  0.5140519790508755
 Coast Live Oak          | This is a beautiful oak tree that can grow to be over 100 feet tall. It is an ev |     500.00 |    93230 |  0.5143126438081371
 Fremont Cottonwood      | This is a beautiful cottonwood tree that can grow to be over 100 feet tall. It i |     200.00 |    93230 |  0.5174774727252058
 Madrone                 | This is a beautiful madrona tree that can grow to be over 80 feet tall. It is an |      50.00 |    93230 |  0.5227400803389093
(10 rows)

৯. সংগৃহীত ডেটা ব্যবহার করে এলএলএম প্রতিক্রিয়া উন্নত করুন

জেমিনি এন্টারপ্রাইজ এজেন্ট প্ল্যাটফর্মের ফাউন্ডেশন ল্যাঙ্গুয়েজ মডেলে একটি প্রম্পটে গ্রাউন্ডেড কনটেক্সট হিসেবে কোয়েরির ফলাফল পাস করার মাধ্যমে ক্লায়েন্ট অ্যাপ্লিকেশনের জেনারেটিভ এআই প্রতিক্রিয়া উন্নত করুন।

এটি সম্পন্ন করতে:

  1. ক্লাউড এসকিউএল-এ ভেক্টর সার্চের ফলাফল থেকে একটি JSON পেলোড তৈরি করুন।
  2. এজেন্ট প্ল্যাটফর্ম স্টুডিওতে প্রম্পটটি পরীক্ষা করুন।
  3. google_ml ইন্টিগ্রেশন ব্যবহার করে সরাসরি SQL থেকে এন্ড-টু-এন্ড প্রম্পটটি চালান।

আউটপুট JSON ফরম্যাটে তৈরি করুন

ফলাফলকে JSON ফরম্যাটে সাজিয়ে একটি সারি ফেরত দেওয়ার জন্য কোয়েরিটি পরিবর্তন করুন:

WITH trees as (
SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        cp.uniq_id as product_id
FROM
        cymbal_products cp
JOIN cymbal_inventory ci on
        ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
        cs.store_id=ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        (cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;

প্রত্যাশিত JSON আউটপুট:

[{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}]

এজেন্ট প্ল্যাটফর্ম স্টুডিওতে প্রম্পটটি চালান।

এজেন্ট প্ল্যাটফর্ম স্টুডিও-তে একটি জেনারেটিভ মডেলের প্রম্পটে জেনারেট করা JSON-টি কনটেক্সট হিসেবে সরবরাহ করুন।

  1. গুগল ক্লাউড কনসোলে, এজেন্ট প্ল্যাটফর্ম স্টুডিও খুলুন।

এজেন্ট প্ল্যাটফর্ম স্টুডিও নেভিগেশন

  1. এজেন্ট প্ল্যাটফর্ম স্টুডিওতে নিম্নলিখিত প্রম্পটটি প্রবেশ করান:

এজেন্ট প্ল্যাটফর্ম স্টুডিওতে প্রম্পট প্রবেশ করানো

You are a friendly advisor helping to find a product based on the customer's needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","description":"some description","sale_price":10,"zip_code": 10234, "product_id": "02056727942aeb714dc9a2313654e1b0"}
Here is the list of products:
<JSON_OUTPUT>
The customer asked "What tree is growing the best here?"
You should give information about the product, price and some supplemental information.
Do not ask any additional questions and assume location based on the zip code provided in the list of products.

প্রতিস্থাপন করুন আপনার কোয়েরি থেকে প্রাপ্ত JSON প্রতিক্রিয়া সহ:

You are a friendly advisor helping to find a product based on the customer's needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","description":"some description","sale_price":10,"zip_code": 10234, "product_id": "02056727942aeb714dc9a2313654e1b0"}
Here is the list of products:
[{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}]
The customer asked "What tree is growing the best here?"
You should give information about the product, price and some supplemental information.
Do not ask any additional questions and assume location based on the zip code provided in the list of products.

এজেন্ট প্ল্যাটফর্ম স্টুডিও-তে প্রম্পট

  1. প্রম্পটটি চালান।

এজেন্ট প্ল্যাটফর্ম স্টুডিওতে দ্রুত ফলাফল

উত্তরটিতে দাম, বিবরণ এবং সম্পূরক তথ্য অন্তর্ভুক্ত থাকে, যা মডেলটি গাছ ও অবস্থান সম্পর্কিত তথ্যের ভিত্তিতে বাহ্যিক উৎস থেকে সংগ্রহ করে।

psql-এ প্রম্পটটি চালান

আপনি Gemini Enterprise Agent Platform-এর সাথে Cloud SQL AI ইন্টিগ্রেশন ব্যবহার করে সরাসরি SQL-এর মধ্যেই একটি জেনারেটিভ মডেল থেকে প্রতিক্রিয়া পেতে পারেন। প্রথমে, মডেলটি রেজিস্টার করুন।

  1. প্রয়োজনে এক্সটেনশনটি সংস্করণ ১.৪.৩ বা উচ্চতর সংস্করণে আপগ্রেড করুন। quickstart_db এর সাথে সংযোগ করুন এবং চালান:
SELECT extversion from pg_extension where extname='google_ml_integration';

যদি ফেরত আসা সংস্করণটি 1.4.3 এর চেয়ে কম হয়, তাহলে চালান:

ALTER EXTENSION google_ml_integration UPDATE TO '1.4.3';
  1. google_ml_integration.enable_model_support ডাটাবেস ফ্ল্যাগটি পরীক্ষা করুন:
SHOW google_ml_integration.enable_model_support;

ফ্ল্যাগটি off থাকলে, ক্লাউড শেলে ডাটাবেস ফ্ল্যাগটি আপডেট করুন:

gcloud sql instances patch my-cloudsql-instance \
--database-flags google_ml_integration.enable_model_support=on,cloudsql.enable_google_ml_integration=on

এই কাজটি করতে ১ থেকে ৩ মিনিট সময় লাগে। সেটিংটি পুনরায় যাচাই করুন:

SHOW google_ml_integration.enable_model_support;
  1. প্রতিক্রিয়া তৈরির জন্য gemini-3.5-flash মডেলটি নিবন্ধন করুন (প্রতিস্থাপন করুন) আপনার প্রজেক্ট আইডি সহ):
CALL
  google_ml.create_model(
    model_id => 'gemini-3.5-flash',
    model_request_url => 'https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-3.6-flash:generateContent',
    model_provider => 'google',
    model_auth_type => 'cloudsql_service_agent_iam');

নিবন্ধিত মডেলগুলি যাচাই করুন:

SELECT model_id, model_type FROM google_ml.model_info_view WHERE model_id='gemini-3.5-flash';
  1. ভেক্টর অনুসন্ধানের ফলাফল পুনরুদ্ধার করতে এবং সরাসরি gemini-3.5-flash এ পাঠাতে সম্পূর্ণ SQL কোয়েরিটি চালান:
WITH trees AS (
SELECT
        cp.product_name,
        cp.product_description AS description,
        cp.sale_price,
        cs.zip_code,
        cp.uniq_id AS product_id
FROM
        cymbal_products cp
JOIN cymbal_inventory ci ON
        ci.uniq_id = cp.uniq_id
JOIN cymbal_stores cs ON
        cs.store_id = ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        (cp.embedding <=> embedding('text-embedding-005',
        'What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1),
prompt AS (
SELECT
        'You are a friendly advisor helping to find a product based on the customer''s needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","product_description":"some description","sale_price":10}
Here is the list of products:' || json_agg(trees) || 'The customer asked "What kind of fruit trees grow well here?"
You should give information about the product, price and some supplemental information' AS prompt_text
FROM
        trees),
response AS (
SELECT
        google_ml.predict_row( model_id =>'gemini-3.5-flash',
        request_body => json_build_object('contents',
        json_build_object('role',
        'user',
        'parts',
        json_build_object('text',
        prompt_text))))->'candidates'->0->'content'->'parts'->0->'text' AS resp
FROM
        prompt)
SELECT
REPLACE(resp::text, '\n', CHR(10))
FROM
        response;

প্রত্যাশিত আউটপুট:

"Hello there! If you're looking for a wonderful fruit tree to plant, I have a fantastic option for you: ### **Cherry Tree** * **Price:** $75.00 * **Product ID:** `d536e9e823296a2eba198e52dd23e712` --- ### **Why it's a great choice:** * **Fruit & Shade:** Not only will it produce delicious, sweet cherries, but it also grows into a beautiful 15-foot deciduous tree that provides excellent shade and privacy for your yard. * **Seasonal Beauty:** Its leaves are a lovely dark green throughout the summer and transition into a striking red during the fall. * **Ideal Growing Conditions:** Cherry trees thrive best in cool, moist climates with sandy soil and are suitable for **USDA hardiness zones 4–9**. If your local climate matches these conditions, this Cherry Tree would make a beautiful and tasty addition to your garden! Let me know if you'd like more details or help placing an order."

১০. একটি নিকটতম-প্রতিবেশী সূচক তৈরি করুন।

লক্ষ লক্ষ ভেক্টর সমৃদ্ধ বিশাল ডেটাসেটের ক্ষেত্রে, ভেক্টর অনুসন্ধানের জন্য উল্লেখযোগ্য পরিমাণে কম্পিউটিং রিসোর্সের প্রয়োজন হতে পারে। কোয়েরির পারফরম্যান্স উন্নত করতে, ভেক্টর এমবেডিংগুলোর উপর একটি ইনডেক্স তৈরি করুন।

একটি HNSW সূচক তৈরি করুন

হায়ারারকিক্যাল নেভিগেবল স্মল ওয়ার্ল্ড (HNSW) হলো একটি গ্রাফ-ভিত্তিক ভেক্টর সূচক।

embedding কলামের উপর একটি HNSW ইনডেক্স তৈরি করতে, ডিসট্যান্স ফাংশন ( vector_cosine_ops ) এবং mef_construction মতো ঐচ্ছিক প্যারামিটারগুলো নির্দিষ্ট করুন। আরও তথ্যের জন্য, “Work with vector embeddings ” দেখুন।

CREATE INDEX cymbal_products_embeddings_hnsw ON cymbal_products
  USING hnsw (embedding vector_cosine_ops)
  WITH (m = 16, ef_construction = 64);

প্রত্যাশিত আউটপুট:

quickstart_db=> CREATE INDEX cymbal_products_embeddings_hnsw ON cymbal_products
  USING hnsw (embedding vector_cosine_ops)
  WITH (m = 16, ef_construction = 64);
CREATE INDEX
quickstart_db=>

কোয়েরির পারফরম্যান্স তুলনা করুন

কোয়েরি প্ল্যানার ইনডেক্সটি ব্যবহার করছে কিনা তা যাচাই করতে EXPLAIN (ANALYZE) সহ ভেক্টর সার্চ কোয়েরিটি চালান:

EXPLAIN (ANALYZE) 
WITH trees as (
SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        cp.uniq_id as product_id
FROM
        cymbal_products cp
JOIN cymbal_inventory ci on
        ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
        cs.store_id=ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        (cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;

প্রত্যাশিত আউটপুট:

 Aggregate  (cost=779.12..779.13 rows=1 width=32) (actual time=1.066..1.069 rows=1 loops=1)
   ->  Subquery Scan on trees  (cost=769.05..779.12 rows=1 width=142) (actual time=1.038..1.041 rows=1 loops=1)
         ->  Limit  (cost=769.05..779.11 rows=1 width=158) (actual time=1.022..1.024 rows=1 loops=1)
               ->  Nested Loop  (cost=769.05..9339.69 rows=852 width=158) (actual time=1.020..1.021 rows=1 loops=1)
                     ->  Nested Loop  (cost=768.77..9316.48 rows=852 width=945) (actual time=0.858..0.859 rows=1 loops=1)
                           ->  Index Scan using cymbal_products_embeddings_hnsw on cymbal_products cp  (cost=768.34..2572.47 rows=941 width=941) (actual time=0.532..0.539 rows=3 loops=1)
...
 Planning Time: 112.398 ms
 Execution Time: 1.221 ms

এক্সিকিউশন প্ল্যানটি Index Scan using cymbal_products_embeddings_hnsw দেখাচ্ছে।

EXPLAIN ছাড়া কোয়েরিটি চালান:

WITH trees as (
SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        cp.uniq_id as product_id
FROM
        cymbal_products cp
JOIN cymbal_inventory ci on
        ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
        cs.store_id=ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        (cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;

প্রত্যাশিত আউটপুট:

[{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}]

LangChain এবং ভেক্টর ইনডেক্স সম্পর্কিত আরও তথ্য ও উদাহরণের জন্য, Cloud SQL AI ওভারভিউ ডকুমেন্টেশন দেখুন।

১১. সম্পদ পরিষ্কার করুন

কোডল্যাব শেষ করার পর ক্লাউড এসকিউএল ইনস্ট্যান্সটি মুছে ফেলুন।

আপনার সেশন সংযোগ বিচ্ছিন্ন হয়ে গেলে ক্লাউড শেলে প্রজেক্ট এবং এনভায়রনমেন্ট ভেরিয়েবল সেট করুন:

export INSTANCE_NAME=my-cloudsql-instance
export PROJECT_ID=$(gcloud config get-value project)

ইনস্ট্যান্সটি মুছে ফেলুন:

gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID

প্রত্যাশিত আউটপুট:

student@cloudshell:~$ gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID
All of the instance data will be lost when the instance is deleted.

Do you want to continue (Y/n)?  y

Deleting Cloud SQL instance...done.                                                                                                                
Deleted [https://sandbox.googleapis.com/v1beta4/projects/test-project-001-402417/instances/my-cloudsql-instance].

১২. অভিনন্দন

অভিনন্দন! আপনি কোডল্যাবটি সম্পন্ন করেছেন।

এই ল্যাবটি ‘প্রোডাকশন-রেডি এআই উইথ গুগল ক্লাউড’ লার্নিং পাথের একটি অংশ।

সারসংক্ষেপ

আপনি শিখেছেন কীভাবে:

HNSW-এর পরিবর্তে ScaNN ইনডেক্স ব্যবহার করে AlloyDB AI ভেক্টর এমবেডিংস কোডল্যাবটি চেষ্টা করুন।