AlloyDB এবং Vertex AI এজেন্ট বিল্ডারের সাথে একটি স্মার্ট শপিং সহকারী তৈরি করুন - পার্ট 1

১. সংক্ষিপ্ত বিবরণ

আজকের দ্রুত পরিবর্তনশীল রিটেইল জগতে, ব্যক্তিগতকৃত কেনাকাটার অভিজ্ঞতা প্রদানের পাশাপাশি ব্যতিক্রমী গ্রাহক পরিষেবা দেওয়া অত্যন্ত গুরুত্বপূর্ণ। আমরা আপনাকে একটি জ্ঞান-ভিত্তিক চ্যাট অ্যাপ্লিকেশন তৈরির প্রযুক্তিগত যাত্রায় নিয়ে যাব, যা গ্রাহকদের প্রশ্নের উত্তর দিতে, পণ্য খুঁজে পেতে সহায়তা করতে এবং অনুসন্ধানের ফলাফলকে প্রয়োজন অনুযায়ী সাজিয়ে তুলতে ডিজাইন করা হয়েছে। এই উদ্ভাবনী সমাধানটি ডেটা সংরক্ষণের জন্য AlloyDB, প্রাসঙ্গিক বিষয় বোঝার জন্য নিজস্ব অ্যানালিটিক্স ইঞ্জিন, প্রাসঙ্গিকতা যাচাইয়ের জন্য Gemini (Large Language Model) এবং দ্রুত একটি বুদ্ধিমান কথোপকথনমূলক সহকারী চালু করার জন্য Google-এর Agent Builder-এর শক্তিকে একত্রিত করে।

চ্যালেঞ্জ: আধুনিক খুচরা গ্রাহকরা তাৎক্ষণিক উত্তর এবং তাদের স্বতন্ত্র পছন্দের সাথে সামঞ্জস্যপূর্ণ পণ্যের সুপারিশ প্রত্যাশা করেন। প্রচলিত অনুসন্ধান পদ্ধতিগুলো প্রায়শই এই স্তরের ব্যক্তিগতকরণ প্রদানে ব্যর্থ হয়।

সমাধান: আমাদের জ্ঞান-চালিত চ্যাট অ্যাপ্লিকেশন সরাসরি এই চ্যালেঞ্জ মোকাবেলা করে। এটি আপনার রিটেইল ডেটা থেকে প্রাপ্ত একটি সমৃদ্ধ নলেজ বেস ব্যবহার করে গ্রাহকের উদ্দেশ্য বুঝতে, বুদ্ধিমত্তার সাথে প্রতিক্রিয়া জানাতে এবং অত্যন্ত প্রাসঙ্গিক ফলাফল প্রদান করতে সক্ষম।

আপনি যা তৈরি করবেন

এই ল্যাবের (পর্ব ১) অংশ হিসেবে, আপনি যা করবেন:

  1. একটি AlloyDB ইনস্ট্যান্স তৈরি করুন এবং ইকমার্স ডেটাসেট লোড করুন
  2. AlloyDB-তে pgvector এবং জেনারেটিভ এআই মডেল এক্সটেনশনগুলি সক্রিয় করুন।
  3. পণ্যের বিবরণ থেকে এমবেডিং তৈরি করুন
  4. ব্যবহারকারীর সার্চ টেক্সটের জন্য রিয়েল টাইমে কোসাইন সিমিলারিটি সার্চ সম্পাদন করুন।
  5. সার্ভারলেস ক্লাউড রান ফাংশনগুলিতে সমাধানটি স্থাপন করুন

ল্যাবের দ্বিতীয় অংশে এজেন্ট বিল্ডার-এর ধাপগুলো আলোচনা করা হবে।

প্রয়োজনীয়তা

২. স্থাপত্য

ডেটা প্রবাহ: চলুন, আমাদের সিস্টেমের মধ্যে দিয়ে ডেটা কীভাবে চলাচল করে তা আরও ভালোভাবে দেখে নেওয়া যাক:

গ্রহণ :

আমাদের প্রথম পদক্ষেপ হলো রিটেইল ডেটা (ইনভেন্টরি, পণ্যের বিবরণ, গ্রাহকের কার্যকলাপ) AlloyDB-তে অন্তর্ভুক্ত করা।

অ্যানালিটিক্স ইঞ্জিন:

আমরা নিম্নলিখিত কাজগুলো সম্পাদন করার জন্য অ্যানালিটিক্স ইঞ্জিন হিসেবে AlloyDB ব্যবহার করব:

  1. প্রসঙ্গ নিষ্কাশন: ইঞ্জিনটি AlloyDB-তে সংরক্ষিত ডেটা বিশ্লেষণ করে প্রযোজ্য ক্ষেত্রে পণ্য, বিভাগ, গ্রাহকের আচরণ ইত্যাদির মধ্যে সম্পর্ক বুঝতে পারে।
  2. এমবেডিং তৈরি: ব্যবহারকারীর কোয়েরি এবং AlloyDB-তে সংরক্ষিত তথ্য উভয়ের জন্যই এমবেডিং (টেক্সটের গাণিতিক উপস্থাপনা) তৈরি করা হয়।
  3. ভেক্টর সার্চ: ইঞ্জিনটি কোয়েরি এমবেডিং-কে পণ্যের বিবরণ, রিভিউ এবং অন্যান্য প্রাসঙ্গিক ডেটার এমবেডিং-এর সাথে তুলনা করে একটি সাদৃশ্য অনুসন্ধান চালায়। এর মাধ্যমে ২৫টি সবচেয়ে প্রাসঙ্গিক 'নিকটতম প্রতিবেশী' শনাক্ত করা হয়।

মিথুন রাশির স্বীকৃতি:

এই সম্ভাব্য উত্তরগুলো মূল্যায়নের জন্য জেমিনির কাছে পাঠানো হয়। জেমিনি নির্ধারণ করে যে সেগুলো ব্যবহারকারীর সাথে ভাগ করে নেওয়ার জন্য সত্যিই প্রাসঙ্গিক ও নিরাপদ কিনা।

প্রতিক্রিয়া তৈরি:

যাচাইকৃত প্রতিক্রিয়াগুলিকে একটি JSON অ্যারেতে সাজানো হয় এবং সম্পূর্ণ ইঞ্জিনটিকে একটি সার্ভারবিহীন ক্লাউড রান ফাংশনে প্যাকেজ করা হয়, যা এজেন্ট বিল্ডার থেকে আহ্বান করা হয়।

কথোপকথনমূলক মিথস্ক্রিয়া:

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

৩. শুরু করার আগে

একটি প্রকল্প তৈরি করুন

  1. গুগল ক্লাউড কনসোলের প্রজেক্ট সিলেক্টর পেজে, একটি গুগল ক্লাউড প্রজেক্ট নির্বাচন করুন বা তৈরি করুন।
  2. আপনার ক্লাউড প্রোজেক্টের জন্য বিলিং চালু আছে কিনা তা নিশ্চিত করুন। কোনো প্রোজেক্টে বিলিং চালু আছে কিনা তা কীভাবে পরীক্ষা করবেন, তা জেনে নিন।
  3. আপনি ক্লাউড শেল ব্যবহার করবেন, যা গুগল ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ এবং এটি bq-এর সাথে আগে থেকেই লোড করা থাকে। গুগল ক্লাউড কনসোলের শীর্ষে থাকা ‘Activate Cloud Shell’-এ ক্লিক করুন।

ক্লাউড শেল সক্রিয় করুন বোতামের ছবি

  1. ক্লাউড শেলে সংযুক্ত হওয়ার পর, আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করে যাচাই করে নিন যে আপনি ইতিমধ্যেই প্রমাণীকৃত এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে:
gcloud auth list
  1. gcloud কমান্ডটি আপনার প্রজেক্ট সম্পর্কে অবগত আছে কিনা, তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান।
gcloud config list project
  1. আপনার প্রজেক্টটি সেট করা না থাকলে, এটি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud config set project <YOUR_PROJECT_ID>
  1. প্রয়োজনীয় এপিআইগুলো সক্রিয় করুন।
gcloud services enable alloydb.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       run.googleapis.com \
                       cloudbuild.googleapis.com \
                       cloudfunctions.googleapis.com \
                       aiplatform.googleapis.com

gcloud কমান্ডের বিকল্প হলো কনসোলের মাধ্যমে প্রতিটি পণ্য অনুসন্ধান করা অথবা এই লিঙ্কটি ব্যবহার করা।

যদি কোনো API বাদ পড়ে যায়, তাহলে আপনি বাস্তবায়ন চলাকালীন সময়েই তা সক্রিয় করে নিতে পারেন।

gcloud কমান্ড এবং এর ব্যবহার সম্পর্কে জানতে ডকুমেন্টেশন দেখুন।

৪. ডাটাবেস সেটআপ

এই ল্যাবে আমরা রিটেইল ডেটা সংরক্ষণের জন্য ডাটাবেস হিসেবে AlloyDB ব্যবহার করব। এটি ডাটাবেস এবং লগের মতো সমস্ত রিসোর্স ধারণ করার জন্য ক্লাস্টার ব্যবহার করে। প্রতিটি ক্লাস্টারে একটি প্রাইমারি ইনস্ট্যান্স থাকে যা ডেটাতে অ্যাক্সেস পয়েন্ট সরবরাহ করে। টেবিলগুলোতে প্রকৃত ডেটা থাকবে।

চলুন একটি AlloyDB ক্লাস্টার, ইনস্ট্যান্স এবং টেবিল তৈরি করি যেখানে ইকমার্স ডেটাসেটটি লোড করা হবে।

একটি ক্লাস্টার এবং ইনস্ট্যান্স তৈরি করুন

  1. ক্লাউড কনসোলে AlloyDB পেজটিতে যান। ক্লাউড কনসোলের বেশিরভাগ পেজ খুঁজে পাওয়ার একটি সহজ উপায় হলো কনসোলের সার্চ বার ব্যবহার করে সেগুলোর জন্য অনুসন্ধান করা।
  2. সেই পৃষ্ঠা থেকে CREATE CLUSTER নির্বাচন করুন:

f76ff480c8c889aa.png

  1. আপনি নীচেরটির মতো একটি স্ক্রিন দেখতে পাবেন। নিম্নলিখিত মানগুলি দিয়ে একটি ক্লাস্টার এবং ইনস্ট্যান্স তৈরি করুন:
  • ক্লাস্টার আইডি: " shopping-cluster "
  • পাসওয়ার্ড: " alloydb "
  • PostgreSQL 15 সামঞ্জস্যপূর্ণ
  • অঞ্চল: " us-central1 "
  • নেটওয়ার্কিং: " default "

538dba58908162fb.png

  1. আপনি যখন ডিফল্ট নেটওয়ার্ক নির্বাচন করবেন, তখন নিচের ছবির মতো একটি স্ক্রিন দেখতে পাবেন। 'সেট আপ কানেকশন' (SET UP CONNECTION) নির্বাচন করুন।
    7939bbb6802a91bf.png
  2. সেখান থেকে, "Use an automatically allocated IP range" নির্বাচন করুন এবং Continue-তে যান। তথ্যগুলো পর্যালোচনা করার পর, CREATE CONNECTION নির্বাচন করুন। 768ff5210e79676f.png
  3. আপনার নেটওয়ার্ক সেট আপ হয়ে গেলে, আপনি আপনার ক্লাস্টার তৈরি করা চালিয়ে যেতে পারেন। নিচে দেখানো অনুযায়ী ক্লাস্টার সেট আপ সম্পন্ন করতে CREATE CLUSTER-এ ক্লিক করুন:

e06623e55195e16e.png

ইনস্ট্যান্স আইডিটি অবশ্যই ' shopping-instance" এ পরিবর্তন করুন।

মনে রাখবেন, ক্লাস্টার তৈরি হতে প্রায় ১০ মিনিট সময় লাগবে। এটি সফল হলে, আপনি এই স্ক্রিনের মতো একটি স্ক্রিন দেখতে পাবেন:

24eec29fa5cfdb3e.png

৫. ডেটা গ্রহণ

এখন স্টোর সম্পর্কিত ডেটা সহ একটি টেবিল যোগ করার সময় এসেছে। AlloyDB-তে যান, প্রাইমারি ক্লাস্টার নির্বাচন করুন এবং তারপর AlloyDB Studio-তে যান:

847e35f1bf8a8bd8.png

আপনার ইনস্ট্যান্সটি তৈরি হওয়া শেষ না হওয়া পর্যন্ত আপনাকে অপেক্ষা করতে হতে পারে। এটি তৈরি হয়ে গেলে, ক্লাস্টার তৈরির সময় আপনি যে ক্রেডেনশিয়ালগুলো তৈরি করেছিলেন, সেগুলো ব্যবহার করে AlloyDB-তে সাইন ইন করুন। PostgreSQL-এ প্রমাণীকরণের জন্য নিম্নলিখিত ডেটা ব্যবহার করুন:

  • ব্যবহারকারীর নাম : " postgres "
  • ডাটাবেস : " postgres "
  • পাসওয়ার্ড : " alloydb "

AlloyDB Studio-তে সফলভাবে প্রমাণীকরণের পর, এডিটর-এ SQL কমান্ডগুলো প্রবেশ করানো হয়। শেষ উইন্ডোটির ডানদিকে থাকা প্লাস চিহ্নটি ব্যবহার করে আপনি একাধিক এডিটর উইন্ডো যোগ করতে পারেন।

91a86d9469d499c4.png

আপনি এডিটর উইন্ডোতে AlloyDB-এর জন্য কমান্ড লিখবেন এবং প্রয়োজন অনুযায়ী Run, Format ও Clear অপশনগুলো ব্যবহার করবেন।

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

এই অ্যাপটি তৈরি করার জন্য, আমরা pgvector এবং google_ml_integration এক্সটেনশনগুলো ব্যবহার করব। pgvector এক্সটেনশনটি আপনাকে ভেক্টর এমবেডিং সংরক্ষণ এবং অনুসন্ধান করার সুযোগ দেয়। google_ml_integration এক্সটেনশনটি এমন সব ফাংশন সরবরাহ করে যা ব্যবহার করে আপনি Vertex AI প্রেডিকশন এন্ডপয়েন্টগুলো অ্যাক্সেস করে SQL-এ প্রেডিকশন পেতে পারেন। নিম্নলিখিত DDL-গুলো রান করে এই এক্সটেনশনগুলো সক্রিয় করুন :

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

আপনার ডাটাবেসে কোন এক্সটেনশনগুলো সক্রিয় করা হয়েছে তা পরীক্ষা করতে চাইলে, এই SQL কমান্ডটি চালান:

select extname, extversion from pg_extension;

একটি টেবিল তৈরি করুন

নিচের DDL স্টেটমেন্টটি ব্যবহার করে একটি টেবিল তৈরি করুন:

CREATE TABLE
 apparels ( id BIGINT,
   category VARCHAR(100),
   sub_category VARCHAR(50),
   uri VARCHAR(200),
   image VARCHAR(100),
   content VARCHAR(2000),
   pdt_desc VARCHAR(5000),
   embedding vector(768) );

উপরের কমান্ডটি সফলভাবে কার্যকর হলে, আপনি ডাটাবেসে টেবিলটি দেখতে পাবেন। নিচে একটি নমুনা স্ক্রিনশট দেখানো হলো:

908e33bbff58a6d.png

ডেটা গ্রহণ করুন

এই ল্যাবের জন্য, এই SQL ফাইলটিতে প্রায় ২০০টি রেকর্ডের টেস্ট ডেটা রয়েছে। এতে id, category, sub_category, uri, image এবং content রয়েছে। অন্যান্য ফিল্ডগুলো ল্যাবের পরবর্তী পর্যায়ে পূরণ করা হবে।

সেখান থেকে ২০টি লাইন/ইনসার্ট স্টেটমেন্ট কপি করুন এবং তারপর সেই লাইনগুলো একটি খালি এডিটর ট্যাবে পেস্ট করে RUN নির্বাচন করুন।

টেবিলের বিষয়বস্তু দেখতে, এক্সপ্লোরার সেকশনটি প্রসারিত করুন যতক্ষণ না আপনি apparels নামের টেবিলটি দেখতে পান। টেবিলটি কোয়েরি করার অপশনটি দেখতে ট্রাইকোলন (⋮) নির্বাচন করুন। একটি নতুন এডিটর ট্যাবে একটি SELECT স্টেটমেন্ট খুলে যাবে।

b31ece70e670ab89.png

অনুমতি প্রদান করুন

postgres ব্যবহারকারীকে embedding ফাংশনের উপর এক্সিকিউট করার অধিকার দিতে নিচের স্টেটমেন্টটি চালান:

GRANT EXECUTE ON FUNCTION embedding TO postgres;

AlloyDB পরিষেবা অ্যাকাউন্টে Vertex AI ব্যবহারকারীর ROLE প্রদান করুন।

ক্লাউড শেল টার্মিনালে গিয়ে নিম্নলিখিত কমান্ডটি দিন:

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"

৬. প্রেক্ষাপট

AlloyDB ইনস্ট্যান্স পৃষ্ঠায় ফিরে যান।

একটি এমবেডিং তৈরি করতে, আমাদের একটি context প্রয়োজন হবে, অর্থাৎ সেই সমস্ত তথ্য যা আমরা একটিমাত্র ফিল্ডে অন্তর্ভুক্ত করতে চাই। আমরা একটি প্রোডাক্ট ডেসক্রিপশন (যার নাম দেব pdt_desc ) তৈরি করার মাধ্যমে এটি করব। আমাদের ক্ষেত্রে, আমরা প্রতিটি প্রোডাক্টের সমস্ত তথ্য ব্যবহার করব, কিন্তু আপনি যখন আপনার নিজের ডেটা দিয়ে এটি করবেন, তখন আপনার ব্যবসার জন্য অর্থপূর্ণ মনে হয় এমনভাবে ডেটা সাজিয়ে নিতে পারেন।

আপনার নতুন তৈরি করা ইনস্ট্যান্স থেকে AlloyDB studio-তে নিম্নলিখিত স্টেটমেন্টটি চালান। এটি কনটেক্সট ডেটা দিয়ে pdt_desc ফিল্ডটি আপডেট করবে:

UPDATE
 apparels
SET
 pdt_desc = CONCAT('This product category is: ', category, ' and sub_category is: ', sub_category, '. The description of the product is as follows: ', content, '. The product image is stored at: ', uri)
WHERE
 id IS NOT NULL;

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

৭. কনটেক্সটের জন্য এমবেডিং তৈরি করুন

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

সমুদ্রতীরবর্তী কোনো স্থানের বর্ণনা দেওয়ার কথা ভাবুন। একে বলা হতে পারে "জলের উপর", "সৈকতের সামনে", "ঘর থেকে হেঁটে সমুদ্রে যাওয়া", "সুর লা মের", "না বেরেগু ওশিয়ানা" ইত্যাদি। এই শব্দগুলো শুনতে ভিন্ন হলেও, এদের অর্থগত তাৎপর্য বা মেশিন লার্নিং-এর পরিভাষায়, এদের এমবেডিংগুলো একে অপরের খুব কাছাকাছি হওয়া উচিত।

এখন যেহেতু ডেটা এবং কনটেক্সট প্রস্তুত, আমরা প্রোডাক্ট ডেসক্রিপশনের এমবেডিংগুলো টেবিলের ' embedding ফিল্ডে যোগ করার জন্য SQL রান করব। আপনি বিভিন্ন ধরনের এমবেডিং মডেল ব্যবহার করতে পারেন। আমরা Vertex AI-এর text-embedding-004 ব্যবহার করছি। পুরো প্রোজেক্ট জুড়ে একই এমবেডিং মডেল ব্যবহার করতে ভুলবেন না!

দ্রষ্টব্য: আপনি যদি কিছুকাল আগে তৈরি করা কোনো বিদ্যমান গুগল ক্লাউড প্রজেক্ট ব্যবহার করেন, তাহলে আপনাকে টেক্সট-এম্বেডিং-গেকোর মতো টেক্সট-এম্বেডিং মডেলের পুরোনো সংস্করণগুলো ব্যবহার করা চালিয়ে যেতে হতে পারে।

UPDATE
 apparels
SET
 embedding = embedding( 'text-embedding-004',
   pdt_desc)
WHERE
 TRUE;

কিছু এমবেডিং দেখতে আবার apparels টেবিলটি দেখুন। পরিবর্তনগুলো দেখতে SELECT স্টেটমেন্টটি পুনরায় রান করতে ভুলবেন না।

SELECT
 id,
 category,
 sub_category,
 content,
 embedding
FROM
 apparels;

এটি কোয়েরিতে থাকা নমুনা টেক্সটের জন্য এমবেডিংস ভেক্টরটি রিটার্ন করবে, যা নিচে দেখানো অনুযায়ী ফ্লোট সংখ্যার একটি অ্যারের মতো দেখতে হবে:

c69c08d085389f74.png

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

৮. ভেক্টর অনুসন্ধান সম্পাদন করুন

এখন যেহেতু টেবিল, ডেটা এবং এমবেডিং সবই প্রস্তুত, চলুন ব্যবহারকারীর সার্চ টেক্সটটির জন্য রিয়েল টাইম ভেক্টর সার্চটি সম্পাদন করা যাক।

ধরুন ব্যবহারকারী জিজ্ঞাসা করেন:

আমি মহিলাদের জন্য গোলাপী রঙের, ক্যাজুয়াল, খাঁটি সুতির টপস চাই।

নিচের কোয়েরিটি চালিয়ে আপনি এর সাথে মিল খুঁজে পেতে পারেন:

SELECT
id,
category,
sub_category,
content,
pdt_desc AS description
FROM
apparels
ORDER BY
embedding <=> embedding('text-embedding-004',
  'I want womens tops, pink casual only pure cotton.')::vector
LIMIT
5;

চলুন এই কোয়েরিটি বিস্তারিতভাবে দেখি:

এই কোয়েরিতে,

  1. ব্যবহারকারীর অনুসন্ধানের লেখাটি হলো: "আমি মহিলাদের টপস চাই, গোলাপী রঙের ক্যাজুয়াল, শুধুমাত্র খাঁটি সুতির।"
  2. আমরা text-embedding-004 মডেলটি ব্যবহার করে ` embedding() মেথডে এটিকে এমবেডিং-এ রূপান্তর করছি। গত ধাপের পর এই ধাপটি আপনার কাছে পরিচিত মনে হওয়া উচিত, যেখানে আমরা টেবিলের সমস্ত আইটেমে এমবেডিং ফাংশনটি প্রয়োগ করেছিলাম।
  3. " <=> " চিহ্নটি কোসাইন সিমিলারিটি ডিসট্যান্স পদ্ধতির ব্যবহার নির্দেশ করে। pgvector-এর ডকুমেন্টেশনে উপলব্ধ সমস্ত সিমিলারিটি মেজার সম্পর্কে জানতে পারবেন।
  4. ডাটাবেসে সংরক্ষিত ভেক্টরগুলোর সাথে সামঞ্জস্যপূর্ণ করার জন্য আমরা এমবেডিং মেথডের ফলাফলকে ভেক্টর টাইপে রূপান্তর করছি।
  5. LIMIT 5 এর অর্থ হলো, আমরা সার্চ টেক্সটটির জন্য ৫টি নিকটতম প্রতিবেশী ডেটা বের করতে চাই।

ফলাফলটি দেখতে এইরকম:

4193a68737400535.png

আপনি আপনার ফলাফলে দেখতে পাচ্ছেন, মিলগুলো সার্চ টেক্সটের বেশ কাছাকাছি। ফলাফলে কী পরিবর্তন আসে তা দেখতে রং পরিবর্তন করে দেখুন।

গুরুত্বপূর্ণ দ্রষ্টব্য:

এখন ধরা যাক, আমরা ScaNN ইনডেক্স ব্যবহার করে এই ভেক্টর সার্চ ফলাফলের পারফরম্যান্স (কোয়েরি টাইম), দক্ষতা এবং রিকল বাড়াতে চাই। ইনডেক্স সহ এবং ইনডেক্স ছাড়া ফলাফলের পার্থক্য তুলনা করার জন্য অনুগ্রহ করে এই ব্লগের ধাপগুলো পড়ুন। সুবিধার জন্য এখানে শুধু ইনডেক্স তৈরির ধাপগুলো তালিকাভুক্ত করা হলো:

  1. যেহেতু আমাদের ক্লাস্টার, ইনস্ট্যান্স, কনটেক্সট এবং এমবেডিং ইতিমধ্যেই তৈরি করা আছে, তাই আমাদের শুধু নিম্নলিখিত স্টেটমেন্টটি ব্যবহার করে ScaNN এক্সটেনশনটি ইনস্টল করতে হবে:

যদি EXISTS alloydb_scann; CREATE EXTENSION IF NOT

  1. এরপরে আমরা ইনডেক্স (ScaNN) তৈরি করব:

CREATE INDEX apparel_index ON apparels

USING scann (embedding cosine)

WITH (num_leaves=54);

উপরের DDL-এ, apparel_index হলো ইনডেক্সটির নাম।

"পোশাক" হল আমার টেবিল

'স্ক্যান' হলো সূচক পদ্ধতি

'embedding' হলো টেবিলের সেই কলামটি যা আমি ইনডেক্স করতে চাই।

আমি ইনডেক্সের সাথে দূরত্ব পরিমাপের জন্য 'কোসাইন' পদ্ধতিটি ব্যবহার করতে চাই।

"৫৪" হলো এই ইনডেক্সে প্রয়োগ করার জন্য পার্টিশনের সংখ্যা। এর মান ১ থেকে ১০৪৮৫৭৬-এর মধ্যে যেকোনো একটিতে সেট করুন। এই মানটি কীভাবে নির্ধারণ করতে হয় সে সম্পর্কে আরও তথ্যের জন্য, "Tune a ScaNN index" দেখুন।

ScaNN রিপোতে সুপারিশ অনুযায়ী আমি ডেটা পয়েন্ট সংখ্যার বর্গমূল ব্যবহার করেছি (পার্টিশন করার সময়, num_leaves-এর মান ডেটাপয়েন্ট সংখ্যার বর্গমূলের প্রায় সমান হওয়া উচিত)।

  1. কোয়েরি ব্যবহার করে ইনডেক্সটি তৈরি হয়েছে কিনা তা পরীক্ষা করুন:

SELECT * FROM pg_stat_ann_indexes;

  1. ইনডেক্স ছাড়া আমরা যে কোয়েরিটি ব্যবহার করেছিলাম, সেটি ব্যবহার করেই ভেক্টর সার্চ সম্পাদন করুন:

select * from apparels

ORDER BY embedding <=> CAST(embedding('textembedding-gecko', 'white tops for girls without any print') as vector(768))

LIMIT 20

উপরের কোয়েরিটি সেই একই কোয়েরি যা আমরা ল্যাবের ৮ নম্বর ধাপে ব্যবহার করেছিলাম। তবে এখন আমরা ফিল্ডটিকে ইনডেক্স করেছি।

  1. ইনডেক্স সহ এবং ইনডেক্স ছাড়া (ইনডেক্স ড্রপ করে) একটি সাধারণ সার্চ কোয়েরি দিয়ে পরীক্ষা করুন:

মেয়েদের জন্য without any print white tops for girls

ইনডেক্স করা এমবেডিং ডেটার উপর ভেক্টর সার্চ কোয়েরিতে উপরের সার্চ টেক্সটটি ব্যবহার করলে উন্নত মানের সার্চ রেজাল্ট এবং কার্যকারিতা পাওয়া যায়। ইনডেক্স ব্যবহারের ফলে কার্যকারিতা ব্যাপকভাবে উন্নত হয়েছে (এক্সিকিউশনের সময়ের নিরিখে: ScaNN ছাড়া ১০.৩৭ মিলিসেকেন্ড এবং ScaNN সহ ০.৮৭ মিলিসেকেন্ড)। এই বিষয়ে আরও তথ্যের জন্য, অনুগ্রহ করে এই ব্লগটি দেখুন।

৯. এলএলএম-এর সাথে মিল যাচাইকরণ

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

জেমিনির জন্য ইনস্ট্যান্সটি সেট আপ করা নিশ্চিত করা

প্রথমে যাচাই করুন আপনার ক্লাস্টার এবং ইনস্ট্যান্সের জন্য গুগল এমএল ইন্টিগ্রেশন আগে থেকেই সক্রিয় করা আছে কিনা। AlloyDB Studio-তে নিম্নলিখিত কমান্ডটি দিন:

show google_ml_integration.enable_model_support;

যদি মানটি "on" হিসাবে দেখানো হয়, তাহলে আপনি পরবর্তী ২টি ধাপ এড়িয়ে সরাসরি AlloyDB এবং Vertex AI মডেল ইন্টিগ্রেশন সেট আপ করার ধাপে যেতে পারেন।

  1. আপনার AlloyDB ক্লাস্টারের প্রাইমারি ইনস্ট্যান্সে যান এবং EDIT PRIMARY INSTANCE-এ ক্লিক করুন।

456ffdf292d3c0e0.png

  1. অ্যাডভান্সড কনফিগারেশন অপশন-এর ফ্ল্যাগস সেকশনে যান এবং নিশ্চিত করুন যে google_ml_integration.enable_model_support flag নিচে দেখানো অনুযায়ী " on " এ সেট করা আছে:

6a59351fcd2a9d35.png

যদি এটি 'on' করা না থাকে, তবে এটিকে 'on' করুন এবং তারপর 'UPDATE INSTANCE' বোতামে ক্লিক করুন। এই ধাপে কয়েক মিনিট সময় লাগবে।

AlloyDB এবং Vertex AI মডেলের একীকরণ

এখন আপনি AlloyDB Studio-তে সংযোগ করে, নির্দেশিত স্থানে আপনার প্রজেক্ট আইডি ব্যবহার করে, AlloyDB থেকে Gemini মডেল অ্যাক্সেস সেট আপ করার জন্য নিম্নলিখিত DML স্টেটমেন্টটি চালাতে পারেন। কমান্ডটি চালানোর আগে আপনাকে সিনট্যাক্স ত্রুটির বিষয়ে সতর্ক করা হতে পারে, কিন্তু এটি ঠিকঠাকভাবে চলার কথা।

প্রথমে, নিচে দেখানো পদ্ধতি অনুযায়ী জেমিনি ১.৫ মডেলের কানেকশনটি তৈরি করুন। মনে রাখবেন, নিচের কমান্ডে $PROJECT_ID জায়গায় আপনার গুগল ক্লাউড প্রজেক্ট আইডি বসাতে হবে।

CALL
 google_ml.create_model( model_id => 'gemini-1.5',
   model_request_url => 'https://us-central1-aiplatform.googleapis.com/v1/projects/$PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.5-pro:streamGenerateContent',
   model_provider => 'google',
   model_auth_type => 'alloydb_service_agent_iam');

AlloyDB Studio-তে নিম্নলিখিত কমান্ডের মাধ্যমে আপনি অ্যাক্সেসের জন্য কনফিগার করা মডেলগুলি পরীক্ষা করতে পারেন:

select model_id,model_type from google_ml.model_info_view;        

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

GRANT EXECUTE ON FUNCTION ml_predict_row to postgres;

দ্রষ্টব্য: আপনি যদি একটি বিদ্যমান গুগল ক্লাউড প্রজেক্ট এবং কিছুকাল আগে তৈরি করা অ্যালয়ডিবি-র (AlloyDB) একটি বিদ্যমান ক্লাস্টার/ইনস্ট্যান্স ব্যবহার করেন, এবং পরবর্তীতে gemini-1.5 চালানোর সময় কোনো সমস্যার সম্মুখীন হন, তাহলে আপনাকে gemini-1.5 মডেলের পুরোনো রেফারেন্সগুলো ড্রপ করে উপরের CALL স্টেটমেন্টটি দিয়ে আবার তৈরি করতে হতে পারে এবং ml_predict_row ফাংশনটিতে আবার grant execute চালাতে হতে পারে।

প্রতিক্রিয়া মূল্যায়ন করা

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

  1. প্রথমে আমরা ব্যবহারকারীর কোয়েরির সবচেয়ে কাছাকাছি ৫টি ম্যাচ খুঁজে বের করার জন্য ডাটাবেসে একটি অনুরোধ পাঠাব। বিষয়টিকে সহজ রাখার জন্য আমরা কোয়েরিটি হার্ডকোড করছি, কিন্তু চিন্তা করবেন না, আমরা পরে এটিকে কোয়েরির মধ্যে ইন্টারপোলেট করে নেব। আমরা apparels টেবিল থেকে পণ্যের বিবরণ অন্তর্ভুক্ত করছি এবং দুটি নতুন ফিল্ড যোগ করছি—একটি বিবরণের সাথে ইনডেক্সকে এবং অন্যটি মূল অনুরোধটিকে একত্রিত করবে। এই সবকিছু xyz নামের একটি টেবিলে সংরক্ষণ করা হচ্ছে (এটি শুধু একটি অস্থায়ী টেবিলের নাম)।
CREATE TABLE
 xyz AS
SELECT
 id || ' - ' || pdt_desc AS literature,
 pdt_desc AS content,
 'I want womens tops, pink casual only pure cotton.' AS  user_text
FROM
 apparels
ORDER BY
 embedding <=> embedding('text-embedding-004',
   'I want womens tops, pink casual only pure cotton.')::vector
LIMIT
 5;

এই কোয়েরির আউটপুট হবে ব্যবহারকারীর কোয়েরি সম্পর্কিত ৫টি সর্বাধিক সাদৃশ্যপূর্ণ সারি। নতুন টেবিল xyz-এ ৫টি সারি থাকবে, যেখানে প্রতিটি সারিতে নিম্নলিখিত কলামগুলো থাকবে:

  • literature
  • content
  • user_text
  1. প্রতিক্রিয়াগুলো কতটা বৈধ তা নির্ধারণ করতে, আমরা একটি জটিল কোয়েরি ব্যবহার করব যেখানে আমরা প্রতিক্রিয়াগুলো কীভাবে মূল্যায়ন করতে হয় তা ব্যাখ্যা করব। এই কোয়েরির অংশ হিসেবে xyz টেবিলের user_text এবং content ব্যবহৃত হয়।
"Read this user search text: ', user_text, 
' Compare it against the product inventory data set: ', content, 
' Return a response with 3 values: 1) MATCH: if the 2 contexts are at least 85% matching or not: YES or NO 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear short easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match."
  1. এরপর সেই কোয়েরিটি ব্যবহার করে আমরা xyz টেবিলের রেসপন্সগুলোর মান পর্যালোচনা করব।
CREATE TABLE
  x AS
SELECT
  json_array_elements( google_ml.predict_row( model_id => 'gemini-1.5',
      request_body => CONCAT('{
 "contents": [ 
        { "role": "user", 
          "parts": 
             [ { "text": "Read this user search text: ', user_text, ' Compare it against the product inventory data set: ', content, ' Return a response with 3 values: 1) MATCH: if the 2 contexts are at least 85% matching or not: YES or NO 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear short easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match." 
             } ]
         } 
] }'
)::json))-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'
AS LLM_RESPONSE
FROM
    xyz;
  1. predict_row তার ফলাফল JSON ফরম্যাটে ফেরত দেয়। সেই JSON থেকে আসল টেক্সট বের করার জন্য " -> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'" কোডটি ব্যবহার করা হয়। ফেরত আসা আসল JSON দেখতে চাইলে আপনি এই কোডটি মুছে ফেলতে পারেন।
  2. অবশেষে, LLM ফিল্ডটি পেতে হলে, আপনাকে শুধু x টেবিল থেকে এটি এক্সট্র্যাক্ট করতে হবে:
SELECT 
LLM_RESPONSE 
FROM 
        x;
  1. এগুলোকে নিম্নোক্তভাবে একটিমাত্র পরবর্তী কোয়েরিতে একত্রিত করা যেতে পারে।

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

SELECT
 LLM_RESPONSE
FROM (
 SELECT
 json_array_elements( google_ml.predict_row( model_id => 'gemini-1.5',
     request_body => CONCAT('{
     "contents": [
       { "role": "user",
         "parts":
            [ { "text": "Read this user search text: ', user_text, ' Compare it against the product inventory data set: ', content, ' Return a response with 3 values: 1) MATCH: if the 2 contexts are at least 85% matching or not: YES or NO 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear short easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match."
            } ]
        }
] }'
)::json))-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'
AS LLM_RESPONSE
   FROM (
         SELECT
           id || ' - ' || pdt_desc AS literature,
           pdt_desc AS content,
         'I want womens tops, pink casual only pure cotton.' user_text
         FROM
           apparels
         ORDER BY
             embedding <=> embedding('text-embedding-004',
             'I want womens tops, pink casual only pure cotton.')::vector
         LIMIT
           5 ) AS xyz ) AS X;

যদিও বিষয়টি এখনও বেশ কঠিন মনে হতে পারে, আশা করি আপনি এখন এটি কিছুটা বুঝতে পারবেন। ফলাফলে বলা থাকে যে ম্যাচটি হয়েছে কি না, ম্যাচের শতাংশ কত এবং রেটিংটির একটি ব্যাখ্যাও দেওয়া থাকে।

লক্ষ্য করুন যে জেমিনি মডেলে স্ট্রিমিং ডিফল্টরূপে চালু থাকে, তাই প্রকৃত প্রতিক্রিয়া একাধিক লাইনে বিভক্ত থাকে: 14e74d71293b7b9.png

১০. অ্যাপ্লিকেশনটি ওয়েবে নিয়ে যান

এই অ্যাপটিকে ওয়েবে নিয়ে যাওয়ার জন্য প্রস্তুত? ক্লাউড রান ফাংশন ব্যবহার করে এই নলেজ ইঞ্জিনটিকে সার্ভারলেস করতে নিচের ধাপগুলো অনুসরণ করুন:

  1. একটি নতুন ক্লাউড রান ফাংশন তৈরি করতে গুগল ক্লাউড কনসোলের ক্লাউড রান ফাংশনস-এ যান অথবা এই লিঙ্কটি ব্যবহার করুন: https://console.cloud.google.com/functions/add
  2. এনভায়রনমেন্ট হিসেবে " ক্লাউড রান ফাংশন " নির্বাচন করুন। ফাংশনের নাম " retail-engine " দিন এবং অঞ্চল হিসেবে "us-central1" বেছে নিন। অথেনটিকেশন "Allow unauthenticated invocations"-এ সেট করুন এবং NEXT-এ ক্লিক করুন। রানটাইম হিসেবে জাভা ১৭ এবং সোর্স কোডের জন্য ইনলাইন এডিটর বেছে নিন।
  3. ডিফল্টরূপে এটি এন্ট্রি পয়েন্টকে " gcfv2.HelloHttpFunction "-এ সেট করে দেবে। আপনার ক্লাউড রান ফাংশনের HelloHttpFunction.java এবং pom.xml এ থাকা প্লেসহোল্ডার কোডটি যথাক্রমে জাভা ফাইল এবং XML থেকে পাওয়া কোড দিয়ে প্রতিস্থাপন করুন।
  4. জাভা ফাইলে $PROJECT_ID প্লেসহোল্ডার এবং AlloyDB কানেকশন ক্রেডেনশিয়ালগুলো আপনার নিজের মান দিয়ে পরিবর্তন করতে মনে রাখবেন। এই কোডল্যাবের শুরুতে আমরা যে AlloyDB ক্রেডেনশিয়ালগুলো ব্যবহার করেছিলাম, সেগুলোই এখানেও ব্যবহার করতে হবে। আপনি যদি ভিন্ন কোনো মান ব্যবহার করে থাকেন, তবে অনুগ্রহ করে জাভা ফাইলে তা পরিবর্তন করে নিন।
  5. Deploy- এ ক্লিক করুন।

একবার স্থাপন করা হয়ে গেলে, ক্লাউড ফাংশনকে আমাদের AlloyDB ডাটাবেস ইনস্ট্যান্স অ্যাক্সেস করার অনুমতি দেওয়ার জন্য, আমরা VPC কানেক্টর তৈরি করব।

গুরুত্বপূর্ণ পদক্ষেপ:

একবার ডেপ্লয়মেন্ট শুরু করলে, আপনি Google Cloud Run Functions কনসোলে ফাংশনগুলো দেখতে পাবেন। নতুন তৈরি করা ফাংশনটি ( retail-engine ) খুঁজুন, সেটির উপর ক্লিক করুন, তারপর EDIT-এ ক্লিক করে নিম্নলিখিত পরিবর্তনগুলো করুন:

  1. রানটাইম, বিল্ড, সংযোগ এবং নিরাপত্তা সেটিংসে যান
  2. টাইমআউট বাড়িয়ে ১৮০ সেকেন্ড করুন।
  3. CONNECTIONS ট্যাবে যান:

4e83ec8a339cda08.png

  1. ইনগ্রেস সেটিংসের অধীনে, "সমস্ত ট্র্যাফিকের অনুমতি দিন" বিকল্পটি নির্বাচিত আছে কিনা তা নিশ্চিত করুন।
  2. ইগ্রেস সেটিংস-এর অধীনে, নেটওয়ার্ক ড্রপডাউনে ক্লিক করুন এবং "অ্যাড নিউ ভিপিসি কানেক্টর" অপশনটি নির্বাচন করুন এবং পপ-আপ হওয়া ডায়ালগ বক্সে প্রদর্শিত নির্দেশাবলী অনুসরণ করুন:

8126ec78c343f199.png

  1. VPC কানেক্টরের জন্য একটি নাম দিন এবং নিশ্চিত করুন যে এর অঞ্চলটি আপনার ইনস্ট্যান্সের মতোই। নেটওয়ার্ক ভ্যালুটি ডিফল্ট রাখুন এবং সাবনেট হিসেবে কাস্টম আইপি রেঞ্জ সেট করুন, যেখানে আইপি রেঞ্জ হবে 10.8.0.0 অথবা এর মতো সহজলভ্য কোনো আইপি।
  2. ‘শো স্কেলিং সেটিংস’ প্রসারিত করুন এবং নিশ্চিত করুন যে আপনার কনফিগারেশনটি হুবহু নিম্নলিখিতভাবে সেট করা আছে:

7baf980463a86a5c.png

  1. CREATE-এ ক্লিক করুন এবং এই কানেক্টরটি এখন বহির্গমন সেটিংসে তালিকাভুক্ত হওয়া উচিত।
  2. নতুন তৈরি করা সংযোগকারী নির্বাচন করুন
  3. সমস্ত ট্র্যাফিক এই VPC কানেক্টরের মাধ্যমে রাউট করার বিকল্পটি বেছে নিন।
  4. NEXT- এ ক্লিক করুন এবং তারপর DEPLOY-তে ক্লিক করুন।

১১. অ্যাপ্লিকেশনটি পরীক্ষা করুন

আপডেট করা ক্লাউড ফাংশনটি ডেপ্লয় করা হয়ে গেলে, আপনি এন্ডপয়েন্টটি নিম্নলিখিত ফরম্যাটে দেখতে পাবেন:

https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/retail-engine

আপনি ক্লাউড শেল টার্মিনাল থেকে নিম্নলিখিত কমান্ডটি চালিয়ে এটি পরীক্ষা করতে পারেন:

gcloud functions call retail-engine --region=us-central1 --gen2 --data '{"search": "I want some kids clothes themed on Disney"}'

বিকল্পভাবে, আপনি নিম্নলিখিত উপায়ে ক্লাউড রান ফাংশনটি পরীক্ষা করতে পারেন:

PROJECT_ID=$(gcloud config get-value project)

curl -X POST https://us-central1-$PROJECT_ID.cloudfunctions.net/retail-engine \
  -H 'Content-Type: application/json' \
  -d '{"search":"I want some kids clothes themed on Disney"}' \
  | jq .

এবং ফলাফল:

88bc1ddfb5644a28.png

ব্যাস! AlloyDB ডেটার উপর এমবেডিংস মডেল ব্যবহার করে সিমিলারিটি ভেক্টর সার্চ করা এতটাই সহজ।

কথোপকথনমূলক এজেন্ট তৈরি করা!

এই ল্যাবের দ্বিতীয় অংশে এজেন্টটি তৈরি করা হয়েছে।

১২. পরিষ্কার করুন

আপনি যদি এই ল্যাবের পার্ট ২ সম্পন্ন করার পরিকল্পনা করেন, তাহলে এই ধাপটি এড়িয়ে যান, কারণ এটি করলে বর্তমান প্রজেক্টটি মুছে যাবে।

এই পোস্টে ব্যবহৃত রিসোর্সগুলোর জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে, এই ধাপগুলো অনুসরণ করুন:

  1. গুগল ক্লাউড কনসোলে, রিসোর্স পরিচালনা (Manage resources) পৃষ্ঠায় যান।
  2. প্রজেক্ট তালিকা থেকে, আপনি যে প্রজেক্টটি মুছতে চান সেটি নির্বাচন করুন এবং তারপর ডিলিট বোতামে ক্লিক করুন।
  3. ডায়ালগ বক্সে প্রজেক্ট আইডি টাইপ করুন এবং তারপর প্রজেক্টটি মুছে ফেলার জন্য 'শাট ডাউন'-এ ক্লিক করুন।

১৩. অভিনন্দন

অভিনন্দন! আপনি AlloyDB, pgvector এবং Vector search ব্যবহার করে সফলভাবে একটি সাদৃশ্য অনুসন্ধান সম্পন্ন করেছেন। AlloyDB , Vertex AI এবং Vector Search- এর সক্ষমতাগুলোকে একত্রিত করার মাধ্যমে, আমরা প্রাসঙ্গিক এবং ভেক্টর অনুসন্ধানগুলোকে সহজলভ্য, কার্যকর এবং সত্যিকারের অর্থ-নির্ভর করে তোলার ক্ষেত্রে এক বিশাল অগ্রগতি সাধন করেছি। এই ল্যাবের পরবর্তী অংশে এজেন্ট তৈরির ধাপগুলো আলোচনা করা হবে।