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

1. ওভারভিউ

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

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

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

আপনি কি নির্মাণ করবেন

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

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

ল্যাবের দ্বিতীয় অংশটি এজেন্ট বিল্ডারের পদক্ষেপগুলিকে কভার করবে।

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

2. স্থাপত্য

ডেটা ফ্লো: আসুন আমাদের সিস্টেমের মাধ্যমে কীভাবে ডেটা চলে যায় তা ঘনিষ্ঠভাবে দেখে নেওয়া যাক:

ইনজেশন :

আমাদের প্রথম ধাপ হল খুচরা ডেটা (ইনভেন্টরি, পণ্যের বিবরণ, গ্রাহকের মিথস্ক্রিয়া) AlloyDB-তে প্রবেশ করানো।

বিশ্লেষণ ইঞ্জিন:

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

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

মিথুন যাচাই:

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

রেসপন্স জেনারেশন:

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

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

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

3. আপনি শুরু করার আগে

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

  1. Google ক্লাউড কনসোলে , প্রকল্প নির্বাচক পৃষ্ঠায়, একটি Google ক্লাউড প্রকল্প নির্বাচন করুন বা তৈরি করুন।
  2. নিশ্চিত করুন যে আপনার ক্লাউড প্রকল্পের জন্য বিলিং সক্ষম করা আছে৷ একটি প্রকল্পে বিলিং সক্ষম কিনা তা পরীক্ষা করতে শিখুন।
  3. আপনি ক্লাউড শেল ব্যবহার করবেন, Google ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ যা bq এর সাথে প্রিলোড করা হয়। গুগল ক্লাউড কনসোলের শীর্ষে সক্রিয় ক্লাউড শেল ক্লিক করুন।

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

  1. একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি পরীক্ষা করে দেখুন যে আপনি ইতিমধ্যেই প্রমাণীকৃত হয়েছেন এবং নিম্নলিখিত কমান্ডটি ব্যবহার করে প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে:
gcloud auth list
  1. gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান।
gcloud config list project
  1. যদি আপনার প্রজেক্ট সেট করা না থাকে, তাহলে এটি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud config set project <YOUR_PROJECT_ID>
  1. প্রয়োজনীয় API সক্রিয় করুন।
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 মিস হয়, আপনি সর্বদা বাস্তবায়নের সময় এটি সক্রিয় করতে পারেন।

জিক্লাউড কমান্ড এবং ব্যবহারের জন্য ডকুমেন্টেশন পড়ুন।

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

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

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

একটি ক্লাস্টার এবং উদাহরণ তৈরি করুন

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

f76ff480c8c889aa.png

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

538dba58908162fb.png

  1. আপনি যখন ডিফল্ট নেটওয়ার্ক নির্বাচন করেন, আপনি নীচের মত একটি স্ক্রীন দেখতে পাবেন। সংযোগ সেট আপ নির্বাচন করুন.
    7939bbb6802a91bf.png
  2. সেখান থেকে, "স্বয়ংক্রিয়ভাবে বরাদ্দকৃত আইপি পরিসর ব্যবহার করুন" নির্বাচন করুন এবং চালিয়ে যান। তথ্য পর্যালোচনা করার পরে, সংযোগ তৈরি করুন নির্বাচন করুন। 768ff5210e79676f.png
  3. আপনার নেটওয়ার্ক সেট আপ হয়ে গেলে, আপনি আপনার ক্লাস্টার তৈরি করা চালিয়ে যেতে পারেন। নীচে দেখানো হিসাবে ক্লাস্টার সেট আপ সম্পূর্ণ করতে CREATE CLUSTER এ ক্লিক করুন:

e06623e55195e16e.png

ইনস্ট্যান্স আইডিকে " shopping-instance" এ পরিবর্তন করতে ভুলবেন না।

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

24eec29fa5cfdb3e.png

5. ডেটা ইনজেশন

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

847e35f1bf8a8bd8.png

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

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

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

91a86d9469d499c4.png

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

এক্সটেনশন সক্রিয় করুন

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

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

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

select extname, extversion from pg_extension;

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

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

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 ফাইলে প্রায় 200টি রেকর্ডের টেস্ট ডেটা আছে। এতে id, category, sub_category, uri, image এবং content রয়েছে। অন্যান্য ক্ষেত্রগুলি পরে ল্যাবে পূরণ করা হবে।

সেখান থেকে 20টি লাইন/বিবৃতি সন্নিবেশ করুন এবং তারপরে একটি ফাঁকা সম্পাদক ট্যাবে সেই লাইনগুলি পেস্ট করুন এবং RUN নির্বাচন করুন।

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

b31ece70e670ab89.png

অনুমতি দিন

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

GRANT EXECUTE ON FUNCTION embedding TO postgres;

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"

6. প্রসঙ্গ

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

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

আপনার নতুন তৈরি উদাহরণের AlloyDB স্টুডিও থেকে নিম্নলিখিত বিবৃতিটি চালান। এটি প্রসঙ্গ ডেটা সহ 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 টেবিলে উপলব্ধ সমস্ত ক্ষেত্র এবং অন্যান্য নির্ভরতা (যদি আপনার ব্যবহারের ক্ষেত্রে থাকে) থেকে তথ্য ব্যবহার করে একটি সাধারণ প্রসঙ্গ সারাংশ তৈরি করে। তথ্যের আরও সুনির্দিষ্ট ভাণ্ডার এবং প্রসঙ্গ তৈরির জন্য, আপনার ব্যবসার জন্য অর্থবহ মনে হয় এমন যেকোনো উপায়ে ডেটা ইঞ্জিনিয়ার করতে নির্দ্বিধায়৷

7. প্রসঙ্গের জন্য এম্বেডিং তৈরি করুন

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

একটি সমুদ্রতীরবর্তী অবস্থান বর্ণনা বিবেচনা করুন. একে বলা যেতে পারে "জলের উপর", "সৈকতের সামনে", "আপনার ঘর থেকে সমুদ্রে হাঁটা", "সুর লা মের", "на берегу океана" ইত্যাদি। পরিভাষা শেখার, তাদের এম্বেডিং একে অপরের খুব কাছাকাছি হওয়া উচিত।

এখন যেহেতু ডেটা এবং প্রসঙ্গ প্রস্তুত, আমরা embedding ক্ষেত্রের টেবিলে পণ্যের বিবরণের এমবেডিং যোগ করতে SQL চালাব। আপনি ব্যবহার করতে পারেন এমবেডিং মডেল বিভিন্ন আছে. আমরা Vertex AI থেকে text-embedding-004 ব্যবহার করছি। পুরো প্রকল্প জুড়ে একই এমবেডিং মডেল ব্যবহার করতে ভুলবেন না!

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

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

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

8. ভেক্টর অনুসন্ধান করুন

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

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

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

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

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. আমরা মডেলটি ব্যবহার করে embedding() পদ্ধতিতে এমবেডিং এ রূপান্তর করছি: text-embedding-004 । এই ধাপটি শেষ ধাপের পরে পরিচিত দেখা উচিত, যেখানে আমরা টেবিলের সমস্ত আইটেমে এমবেডিং ফাংশন প্রয়োগ করেছি।
  3. " <=> " COSINE SIMILARITY দূরত্ব পদ্ধতির ব্যবহার প্রতিনিধিত্ব করে৷ আপনি pgvector এর ডকুমেন্টেশনে উপলব্ধ সমস্ত সাদৃশ্য পরিমাপ খুঁজে পেতে পারেন।
  4. ডাটাবেসে সংরক্ষিত ভেক্টরের সাথে সামঞ্জস্যপূর্ণ করতে আমরা এম্বেডিং পদ্ধতির ফলাফলকে ভেক্টর টাইপে রূপান্তর করছি।
  5. LIMIT 5 প্রতিনিধিত্ব করে যে আমরা অনুসন্ধান পাঠ্যের জন্য 5টি নিকটতম প্রতিবেশী বের করতে চাই।

ফলাফল এই মত দেখায়:

4193a68737400535.png

আপনি আপনার ফলাফলগুলিতে লক্ষ্য করতে পারেন, মিলগুলি অনুসন্ধান পাঠ্যের বেশ কাছাকাছি। ফলাফল কিভাবে পরিবর্তিত হয় তা দেখতে রঙ পরিবর্তন করার চেষ্টা করুন।

9. LLM এর সাথে বৈধতা মিলান

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

মিথুনের জন্য দৃষ্টান্ত সেট আপ করা হয়েছে তা নিশ্চিত করা

আপনার ক্লাস্টার এবং ইনস্ট্যান্সের জন্য Google ML ইন্টিগ্রেশন ইতিমধ্যেই সক্ষম হয়েছে কিনা তা প্রথমে পরীক্ষা করুন৷ AlloyDB স্টুডিওতে, নিম্নলিখিত কমান্ড দিন:

show google_ml_integration.enable_model_support;

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

  1. আপনার AlloyDB ক্লাস্টারের প্রাথমিক উদাহরণে যান এবং প্রাথমিক উদাহরণ সম্পাদনা করুন ক্লিক করুন

456ffdf292d3c0e0.png

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

6a59351fcd2a9d35.png

যদি এটি "চালু" তে সেট করা না থাকে তবে এটিকে "চালু" এ সেট করুন এবং তারপরে আপডেট INSTANCE বোতামে ক্লিক করুন৷ এই ধাপে কয়েক মিনিট সময় লাগবে।

AlloyDB এবং Vertex AI মডেল ইন্টিগ্রেশন

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

প্রথমত, আমরা নীচে দেখানো হিসাবে জেমিনি 1.5 মডেল সংযোগ তৈরি করি। নিচের কমান্ডে $PROJECT_ID আপনার Google ক্লাউড প্রকল্প আইডি দিয়ে প্রতিস্থাপন করতে ভুলবেন না।

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 স্টুডিওতে নিম্নলিখিত কমান্ডের মাধ্যমে অ্যাক্সেসের জন্য কনফিগার করা মডেলগুলি পরীক্ষা করতে পারেন:

select model_id,model_type from google_ml.model_info_view;        

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

GRANT EXECUTE ON FUNCTION ml_predict_row to postgres;

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

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

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

  1. প্রথমে আমরা ডাটাবেসে একটি অনুরোধ পাঠাব যাতে ব্যবহারকারীর প্রশ্নের 5টি সবচেয়ে কাছের মিল পাওয়া যায়। আমরা এটিকে সহজ রাখার জন্য ক্যোয়ারীটিকে হার্ডকোড করছি, কিন্তু চিন্তা করবেন না, আমরা এটিকে পরে ক্যোয়ারীতে ইন্টারপোলেট করব৷ আমরা 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;

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

  • 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 ফর্ম্যাটে তার ফলাফল প্রদান করে। কোড " -> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'" সেই JSON থেকে প্রকৃত পাঠ্য বের করতে ব্যবহৃত হয়। ফিরে আসা প্রকৃত JSON দেখতে, আপনি এই কোডটি সরাতে পারেন।
  2. অবশেষে, এলএলএম ক্ষেত্র পেতে, আপনাকে কেবল x টেবিল থেকে এটি বের করতে হবে:
SELECT 
LLM_RESPONSE 
FROM 
        x;
  1. এটি নিম্নরূপ একটি একক পরবর্তী প্রশ্নের সাথে মিলিত হতে পারে।

এটি চালানোর আগে আপনাকে অ্যালোয়ডিবি ডাটাবেস থেকে 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

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

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

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

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

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

আপনি একবার স্থাপনার জন্য সেট করা হলে, আপনি Google ক্লাউড রান ফাংশন কনসোলে ফাংশনগুলি দেখতে সক্ষম হবেন। নতুন তৈরি ফাংশন ( retail-engine ) অনুসন্ধান করুন, এটিতে ক্লিক করুন, তারপরে সম্পাদনা ক্লিক করুন এবং নিম্নলিখিতগুলি পরিবর্তন করুন:

  1. রানটাইম, বিল্ড, সংযোগ এবং নিরাপত্তা সেটিংসে যান
  2. সময়সীমা 180 সেকেন্ডে বাড়ান
  3. সংযোগ ট্যাবে যান:

4e83ec8a339cda08.png

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

8126ec78c343f199.png

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

7baf980463a86a5c.png

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

11. আবেদন পরীক্ষা করুন

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

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 ডেটাতে এমবেডিং মডেল ব্যবহার করে সাদৃশ্য ভেক্টর অনুসন্ধান করা সহজ।

কথোপকথন এজেন্ট নির্মাণ!

এজেন্ট এই ল্যাবের অংশ 2 এ নির্মিত হয়.

12. পরিষ্কার করুন

আপনি যদি এই ল্যাবের অংশ 2 সম্পূর্ণ করার পরিকল্পনা করেন তবে এই পদক্ষেপটি এড়িয়ে যান কারণ এটি বর্তমান প্রকল্পটি মুছে ফেলবে৷

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

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

13. অভিনন্দন

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

,

1. ওভারভিউ

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

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

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

আপনি কি নির্মাণ করবেন

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

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

ল্যাবের দ্বিতীয় অংশটি এজেন্ট বিল্ডারের পদক্ষেপগুলিকে কভার করবে।

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

2. স্থাপত্য

ডেটা ফ্লো: আসুন আমাদের সিস্টেমের মাধ্যমে কীভাবে ডেটা চলে যায় তা ঘনিষ্ঠভাবে দেখে নেওয়া যাক:

ইনজেশন :

আমাদের প্রথম ধাপ হল খুচরা ডেটা (ইনভেন্টরি, পণ্যের বিবরণ, গ্রাহকের মিথস্ক্রিয়া) AlloyDB-তে প্রবেশ করানো।

বিশ্লেষণ ইঞ্জিন:

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

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

মিথুন যাচাই:

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

রেসপন্স জেনারেশন:

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

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

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

3. আপনি শুরু করার আগে

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

  1. Google ক্লাউড কনসোলে , প্রকল্প নির্বাচক পৃষ্ঠায়, একটি Google ক্লাউড প্রকল্প নির্বাচন করুন বা তৈরি করুন।
  2. নিশ্চিত করুন যে আপনার ক্লাউড প্রকল্পের জন্য বিলিং সক্ষম করা আছে৷ একটি প্রকল্পে বিলিং সক্ষম কিনা তা পরীক্ষা করতে শিখুন।
  3. আপনি ক্লাউড শেল ব্যবহার করবেন, Google ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ যা bq এর সাথে প্রিলোড করা হয়। গুগল ক্লাউড কনসোলের শীর্ষে সক্রিয় ক্লাউড শেল ক্লিক করুন।

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

  1. একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি পরীক্ষা করে দেখুন যে আপনি ইতিমধ্যেই প্রমাণীকৃত হয়েছেন এবং নিম্নলিখিত কমান্ডটি ব্যবহার করে প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে:
gcloud auth list
  1. gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান।
gcloud config list project
  1. যদি আপনার প্রজেক্ট সেট করা না থাকে, তাহলে এটি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud config set project <YOUR_PROJECT_ID>
  1. প্রয়োজনীয় API সক্রিয় করুন।
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 মিস হয়, আপনি সর্বদা বাস্তবায়নের সময় এটি সক্রিয় করতে পারেন।

জিক্লাউড কমান্ড এবং ব্যবহারের জন্য ডকুমেন্টেশন পড়ুন।

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

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

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

একটি ক্লাস্টার এবং উদাহরণ তৈরি করুন

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

f76ff480c8c889aa.png

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

538dba58908162fb.png

  1. আপনি যখন ডিফল্ট নেটওয়ার্ক নির্বাচন করেন, আপনি নীচের মত একটি স্ক্রীন দেখতে পাবেন। সংযোগ সেট আপ নির্বাচন করুন.
    7939bbb6802a91bf.png
  2. সেখান থেকে, "স্বয়ংক্রিয়ভাবে বরাদ্দকৃত আইপি পরিসর ব্যবহার করুন" নির্বাচন করুন এবং চালিয়ে যান। তথ্য পর্যালোচনা করার পরে, সংযোগ তৈরি করুন নির্বাচন করুন। 768ff5210e79676f.png
  3. আপনার নেটওয়ার্ক সেট আপ হয়ে গেলে, আপনি আপনার ক্লাস্টার তৈরি করা চালিয়ে যেতে পারেন। নীচে দেখানো হিসাবে ক্লাস্টার সেট আপ সম্পূর্ণ করতে CREATE CLUSTER এ ক্লিক করুন:

e06623e55195e16e.png

ইনস্ট্যান্স আইডিকে " shopping-instance" এ পরিবর্তন করতে ভুলবেন না।

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

24eec29fa5cfdb3e.png

5. ডেটা ইনজেশন

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

847e35f1bf8a8bd8.png

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

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

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

91a86d9469d499c4.png

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

এক্সটেনশন সক্রিয় করুন

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

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

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

select extname, extversion from pg_extension;

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

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

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 ফাইলে প্রায় 200টি রেকর্ডের টেস্ট ডেটা আছে। এতে id, category, sub_category, uri, image এবং content রয়েছে। অন্যান্য ক্ষেত্রগুলি পরে ল্যাবে পূরণ করা হবে।

সেখান থেকে 20টি লাইন/বিবৃতি সন্নিবেশ করুন এবং তারপরে একটি ফাঁকা সম্পাদক ট্যাবে সেই লাইনগুলি পেস্ট করুন এবং RUN নির্বাচন করুন।

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

b31ece70e670ab89.png

অনুমতি দিন

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

GRANT EXECUTE ON FUNCTION embedding TO postgres;

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"

6. প্রসঙ্গ

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

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

আপনার নতুন তৈরি উদাহরণের AlloyDB স্টুডিও থেকে নিম্নলিখিত বিবৃতিটি চালান। এটি প্রসঙ্গ ডেটা সহ 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 টেবিলে উপলব্ধ সমস্ত ক্ষেত্র এবং অন্যান্য নির্ভরতা (যদি আপনার ব্যবহারের ক্ষেত্রে থাকে) থেকে তথ্য ব্যবহার করে একটি সাধারণ প্রসঙ্গ সারাংশ তৈরি করে। তথ্যের আরও সুনির্দিষ্ট ভাণ্ডার এবং প্রসঙ্গ তৈরির জন্য, আপনার ব্যবসার জন্য অর্থবহ মনে হয় এমন যেকোনো উপায়ে ডেটা ইঞ্জিনিয়ার করতে নির্দ্বিধায়৷

7. প্রসঙ্গের জন্য এম্বেডিং তৈরি করুন

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

একটি সমুদ্রতীরবর্তী অবস্থান বর্ণনা বিবেচনা করুন. একে বলা যেতে পারে "জলের উপর", "সৈকতের সামনে", "আপনার ঘর থেকে সমুদ্রে হাঁটা", "সুর লা মের", "на берегу океана" ইত্যাদি। পরিভাষা শেখার, তাদের এম্বেডিং একে অপরের খুব কাছাকাছি হওয়া উচিত।

এখন যেহেতু ডেটা এবং প্রসঙ্গ প্রস্তুত, আমরা embedding ক্ষেত্রের টেবিলে পণ্যের বিবরণের এমবেডিং যোগ করতে SQL চালাব। আপনি ব্যবহার করতে পারেন এমবেডিং মডেল বিভিন্ন আছে. আমরা Vertex AI থেকে text-embedding-004 ব্যবহার করছি। পুরো প্রকল্প জুড়ে একই এমবেডিং মডেল ব্যবহার করতে ভুলবেন না!

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

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

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

8. ভেক্টর অনুসন্ধান করুন

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

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

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

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

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. আমরা মডেলটি ব্যবহার করে embedding() পদ্ধতিতে এমবেডিং এ রূপান্তর করছি: text-embedding-004 । এই ধাপটি শেষ ধাপের পরে পরিচিত দেখা উচিত, যেখানে আমরা টেবিলের সমস্ত আইটেমে এমবেডিং ফাংশন প্রয়োগ করেছি।
  3. " <=> " COSINE SIMILARITY দূরত্ব পদ্ধতির ব্যবহার প্রতিনিধিত্ব করে৷ আপনি pgvector এর ডকুমেন্টেশনে উপলব্ধ সমস্ত সাদৃশ্য পরিমাপ খুঁজে পেতে পারেন।
  4. ডাটাবেসে সংরক্ষিত ভেক্টরের সাথে সামঞ্জস্যপূর্ণ করতে আমরা এম্বেডিং পদ্ধতির ফলাফলকে ভেক্টর টাইপে রূপান্তর করছি।
  5. LIMIT 5 প্রতিনিধিত্ব করে যে আমরা অনুসন্ধান পাঠ্যের জন্য 5টি নিকটতম প্রতিবেশী বের করতে চাই।

ফলাফল এই মত দেখায়:

4193a68737400535.png

আপনি আপনার ফলাফলগুলিতে লক্ষ্য করতে পারেন, মিলগুলি অনুসন্ধান পাঠ্যের বেশ কাছাকাছি। ফলাফল কিভাবে পরিবর্তিত হয় তা দেখতে রঙ পরিবর্তন করার চেষ্টা করুন।

9. LLM এর সাথে বৈধতা মিলান

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

মিথুনের জন্য দৃষ্টান্ত সেট আপ করা হয়েছে তা নিশ্চিত করা

আপনার ক্লাস্টার এবং ইনস্ট্যান্সের জন্য Google ML ইন্টিগ্রেশন ইতিমধ্যেই সক্ষম হয়েছে কিনা তা প্রথমে পরীক্ষা করুন৷ AlloyDB স্টুডিওতে, নিম্নলিখিত কমান্ড দিন:

show google_ml_integration.enable_model_support;

যদি মানটি "অন" হিসাবে দেখানো হয় তবে আপনি পরবর্তী 2 টি পদক্ষেপ এড়িয়ে যেতে পারেন এবং সরাসরি অ্যালোয়েডবি এবং ভার্টেক্স এআই মডেল ইন্টিগ্রেশন সেট আপ করতে যেতে পারেন।

  1. আপনার অ্যালোয়েডবি ক্লাস্টারের প্রাথমিক উদাহরণে যান এবং প্রাথমিক উদাহরণ সম্পাদনা ক্লিক করুন

456FFDF292D3C0E0E0.PNG

  1. উন্নত কনফিগারেশন বিকল্পগুলিতে পতাকা বিভাগে নেভিগেট করুন। এবং নিশ্চিত করুন যে google_ml_integration.enable_model_support flag নীচে প্রদর্শিত হিসাবে " on " এ সেট করা আছে:

6A59351FCD2A9D35.PNG

যদি এটি "চালু" তে সেট না করা থাকে তবে এটি "চালু" এ সেট করুন এবং তারপরে আপডেট উদাহরণ বোতামটি ক্লিক করুন। এই ধাপে কয়েক মিনিট সময় লাগবে।

অ্যালোয়েডবি এবং ভার্টেক্স এআই মডেল ইন্টিগ্রেশন

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

প্রথমত, আমরা নীচে দেখানো হিসাবে জেমিনি 1.5 মডেল সংযোগ তৈরি করি। আপনার গুগল ক্লাউড প্রজেক্ট আইডি দিয়ে নীচের কমান্ডে $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');

আপনি অ্যালোয়েডবি স্টুডিওতে নিম্নলিখিত কমান্ডের মাধ্যমে অ্যাক্সেসের জন্য কনফিগার করা মডেলগুলি পরীক্ষা করতে পারেন:

select model_id,model_type from google_ml.model_info_view;        

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

GRANT EXECUTE ON FUNCTION ml_predict_row to postgres;

দ্রষ্টব্য: আপনি যদি কোনও বিদ্যমান গুগল ক্লাউড প্রকল্প এবং অ্যালোয়েডবের একটি বিদ্যমান ক্লাস্টার/উদাহরণ তৈরি করে থাকেন তবে আপনাকে জেমিনি -১.৫ মডেলের পুরানো রেফারেন্সগুলি ফেলে দিতে হবে এবং উপরের কল স্টেটমেন্টের সাথে আবার তৈরি করতে হবে এবং গ্রান্ট এক্সিকিউট চালান ML_PREDICT_ROW ফাংশনে আবার আপনি যদি জেমিনি -১.৫ এর আসন্ন আমন্ত্রণে সমস্যার মুখোমুখি হন।

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

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

  1. প্রথমে আমরা কোনও ব্যবহারকারীর ক্যোয়ারিতে 5 টি নিকটতম ম্যাচ পেতে ডাটাবেসে একটি অনুরোধ প্রেরণ করব। আমরা এই সহজ রাখার জন্য ক্যোয়ারীটি হার্ডকোডিং করছি, তবে চিন্তা করবেন না, আমরা এটি পরে ক্যোয়ারিতে বিভক্ত করব। আমরা 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;

এই ক্যোয়ারির আউটপুটটি ব্যবহারকারীদের ক্যোয়ারির সাথে সম্পর্কিত 5 টির মতো সারি হবে। নতুন টেবিল এক্সওয়াইজেডে 5 টি সারি থাকবে যেখানে প্রতিটি সারিতে নিম্নলিখিত কলামগুলি থাকবে:

  • 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 ফর্ম্যাটে দেয়। " -> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'" কোডটি সেই JSON থেকে প্রকৃত পাঠ্যটি বের করতে ব্যবহৃত হয়। ফিরে আসা আসল JSON দেখতে, আপনি এই কোডটি সরিয়ে ফেলতে পারেন।
  2. অবশেষে, এলএলএম ক্ষেত্রটি পেতে, আপনাকে কেবল এক্স টেবিল থেকে এটি বের করতে হবে:
SELECT 
LLM_RESPONSE 
FROM 
        x;
  1. এটি নিম্নলিখিত হিসাবে একটি একক পরবর্তী ক্যোয়ারিতে একত্রিত করা যেতে পারে।

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

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

10। ওয়েবে আবেদনটি নিন

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

  1. একটি নতুন ক্লাউড রান ফাংশন তৈরি করতে বা লিঙ্কটি ব্যবহার করতে গুগল ক্লাউড কনসোলে ক্লাউড রান ফাংশনে যান: https://console.cloud.google.com/functions/add
  2. " ক্লাউড রান ফাংশন " হিসাবে পরিবেশটি নির্বাচন করুন। ফাংশন নাম " খুচরা-ইঞ্জিন " সরবরাহ করুন এবং অঞ্চলটি "ইউএস-সেন্ট্রাল 1" হিসাবে চয়ন করুন। "অমানবিক আমন্ত্রণগুলির অনুমতি দিন" এ প্রমাণীকরণ সেট করুন এবং পরবর্তী ক্লিক করুন। উত্স কোডের জন্য জাভা 17 রানটাইম এবং ইনলাইন সম্পাদক হিসাবে চয়ন করুন।
  3. ডিফল্টরূপে এটি " gcfv2.HelloHttpFunction " এ এন্ট্রি পয়েন্টটি সেট করবে। যথাক্রমে জাভা ফাইল এবং এক্সএমএল থেকে কোড সহ আপনার ক্লাউড রান ফাংশনটির HelloHttpFunction.java এবং pom.xml -এ স্থানধারক কোডটি প্রতিস্থাপন করুন।
  4. জাভা ফাইলে আপনার মানগুলির সাথে $ প্রজেক্ট_আইডি প্লেসহোল্ডার এবং অ্যালোয়েডবি সংযোগের শংসাপত্রগুলি পরিবর্তন করতে ভুলবেন না। অ্যালোয়েডবি শংসাপত্রগুলি হ'ল আমরা এই কোডেল্যাবের শুরুতে ব্যবহার করেছি। আপনি যদি বিভিন্ন মান ব্যবহার করে থাকেন তবে দয়া করে জাভা ফাইলে একই পরিবর্তন করুন।
  5. মোতায়েন ক্লিক করুন।

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

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

একবার আপনি মোতায়েনের উদ্দেশ্যে যাত্রা করার পরে, আপনি গুগল ক্লাউড রান ফাংশন কনসোলে ফাংশনগুলি দেখতে সক্ষম হবেন। সদ্য নির্মিত ফাংশন ( retail-engine ) অনুসন্ধান করুন, এটিতে ক্লিক করুন, তারপরে সম্পাদনা ক্লিক করুন এবং নিম্নলিখিত পরিবর্তন করুন:

  1. রানটাইম, বিল্ড, সংযোগ এবং সুরক্ষা সেটিংসে যান
  2. সময়সীমা 180 সেকেন্ডে বাড়ান
  3. সংযোগ ট্যাবে যান:

4E83EC8A339CDA08.png

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

8126EC78C343F199.png

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

7BAF980463A86A5C.PNG

  1. তৈরি ক্লিক করুন এবং এই সংযোগকারীটি এখনই এড্রেস সেটিংসে তালিকাভুক্ত করা উচিত।
  2. সদ্য নির্মিত সংযোজকটি নির্বাচন করুন
  3. এই ভিপিসি সংযোজকের মাধ্যমে সমস্ত ট্র্যাফিককে রাউন্ড করার জন্য বেছে নিন।
  4. পরবর্তী ক্লিক করুন এবং তারপরে মোতায়েন করুন

11। আবেদন পরীক্ষা করুন

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

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

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

কথোপকথন এজেন্ট বিল্ডিং!

এজেন্ট এই ল্যাবটির অংশ 2 এ নির্মিত।

12। পরিষ্কার করুন

আপনি যদি এই ল্যাবটির অংশ 2 সম্পূর্ণ করার পরিকল্পনা করেন তবে এই পদক্ষেপটি এড়িয়ে যান যেহেতু এটি বর্তমান প্রকল্পটি মুছবে।

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

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

13। অভিনন্দন

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