AlloyDB এবং সার্ভারলেস রানটাইম সহ একটি AI-চালিত পোশাক সুপারিশ অ্যাপ তৈরি করুন, AlloyDB এবং সার্ভারহীন রানটাইমগুলির সাথে একটি AI-চালিত পোশাক সুপারিশ অ্যাপ তৈরি করুন, AlloyDB এবং সার্ভারহীন রানটাইমগুলির সাথে একটি AI-চালিত পোশাক সুপারিশ অ্যাপ তৈরি করুন, একটি AI-চালিত পোশাক সুপারিশ অ্যাপ তৈরি করুন এবং AlloyDB সার্ভারহীন রানটাইম দিয়ে চালান।

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

এমন একটি ফ্যাশন অ্যাপের কথা ভাবুন যা আপনাকে শুধু নিখুঁত পোশাক খুঁজে পেতে সাহায্য করে না, বরং অত্যাধুনিক genAI ইন্টিগ্রেশনের কল্যাণে রিয়েল-টাইম স্টাইলিং পরামর্শও প্রদান করে! এই আলোচনায় আমরা দেখাবো, কীভাবে আমরা AlloyDB-এর ভেক্টর সার্চ ক্ষমতা এবং Google-এর ScaNN ইনডেক্স ব্যবহার করে এমন একটি অ্যাপ তৈরি করেছি, যা মানানসই পোশাকের জন্য অত্যন্ত দ্রুত সার্চ করতে এবং তাৎক্ষণিক ফ্যাশন সুপারিশ প্রদান করতে সক্ষম।

আমরা আরও দেখব কিভাবে AlloyDB-এর ScaNN ইনডেক্স জটিল কোয়েরিগুলোকে অপ্টিমাইজ করে ব্যক্তিগত স্টাইলের পরামর্শ তৈরি করে। আমরা Gemini ও Imagen-এর মতো শক্তিশালী জেনারেটিভ এআই মডেলও ব্যবহার করব, যা সৃজনশীল স্টাইলিংয়ের অনুপ্রেরণা দেবে এবং আপনার ব্যক্তিগত লুকগুলো ভিজ্যুয়ালাইজও করবে। এই সম্পূর্ণ অ্যাপ্লিকেশনটি একটি সার্ভারলেস আর্কিটেকচারের উপর নির্মিত, যা ব্যবহারকারীদের জন্য একটি নির্বিঘ্ন এবং স্কেলেবল অভিজ্ঞতা নিশ্চিত করে।

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

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

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

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

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

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

২. স্থাপত্য

অ্যাপটির উচ্চ-স্তরের স্থাপত্য নিম্নরূপ:

ce32f865dfe59142.png

নিম্নলিখিত বিভাগগুলি টিউটোরিয়ালটির প্রাসঙ্গিক প্রবাহ তুলে ধরে:

গ্রহণ :

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

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

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

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

মিথুন রাশির জন্য সুপারিশ:

টপ ওয়্যারের লিখিত বিবরণের জন্য অনুরোধ এবং বটম-ওয়্যারের সুপারিশসহ ইমেজ বাইট অ্যারেটি ভার্টেক্স এআই এপিআই-এর মাধ্যমে জেমিনি মডেলে পাঠানো হয়।

অ্যালয়ডিবি র‍্যাগ এবং ভেক্টর অনুসন্ধান:

টপওয়্যারের বিবরণটি ডাটাবেস কোয়েরি করতে ব্যবহৃত হয়। কোয়েরিটি সার্চ টেক্সটকে (জেমিনি মডেলের পক্ষ থেকে মানানসই বটমওয়্যারের সুপারিশ) এমবেডিংসে রূপান্তরিত করে এবং ডাটাবেসে সংরক্ষিত এমবেডিংসের উপর একটি ভেক্টর সার্চ সম্পাদন করে নিকটতম প্রতিবেশী (মিলিত ফলাফল) খুঁজে বের করে। অ্যালয়ডিবি ডাটাবেসের ভেক্টর এমবেডিংগুলো উন্নততর রিকলের জন্য স্ক্যান (ScaNN) ইনডেক্স ব্যবহার করে ইনডেক্স করা হয়।

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

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

চিত্র তৈরি:

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

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

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

  1. গুগল ক্লাউড কনসোলের প্রজেক্ট সিলেক্টর পেজে, একটি গুগল ক্লাউড প্রজেক্ট নির্বাচন করুন বা তৈরি করুন।
  2. আপনার ক্লাউড প্রোজেক্টের জন্য বিলিং চালু আছে কিনা তা নিশ্চিত করুন। কোনো প্রোজেক্টে বিলিং চালু আছে কিনা তা কীভাবে পরীক্ষা করবেন, তা জেনে নিন।
  3. আপনি ক্লাউড শেল ব্যবহার করবেন, যা গুগল ক্লাউডে চালিত একটি কমান্ড-লাইন পরিবেশ এবং এটি bq-এর সাথে আগে থেকেই লোড করা থাকে। অ্যাক্টিভেট ক্লাউড শেল-এ ক্লিক করুন ( f2ae85166a716c5c.png গুগল ক্লাউড কনসোলের শীর্ষে।
  4. ক্লাউড শেলে সংযুক্ত হওয়ার পর, নিম্নলিখিত কমান্ডটি ব্যবহার করে যাচাই করুন যে আপনি ইতিমধ্যেই প্রমাণীকৃত এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে:
gcloud auth list
  1. ভবিষ্যতের gcloud কমান্ডগুলো আপনার প্রজেক্টকে সঠিকভাবে শনাক্ত করতে পারবে কিনা, তা নিশ্চিত করতে নিম্নলিখিত কমান্ডটি চালান।
gcloud config list project
  1. আপনার প্রজেক্টটি সেট করা না থাকলে, এটি স্পষ্টভাবে সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud config set project <YOUR_PROJECT_ID>
  1. প্রয়োজনীয় এপিআইগুলো সক্রিয় করুন।

এপিআইগুলো সক্রিয় করতে লিঙ্কটি অনুসরণ করুন।

যদি আপনি কোনো 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

ডিফল্ট নেটওয়ার্ক তৈরি সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করুন।

  1. আপনার প্রাথমিক ইনস্ট্যান্স কনফিগার করার সময়, ইনস্ট্যান্স আইডি হিসেবে " shopping-instance" সেট করুন।

2bddecf6b7c7407b.png

  1. নিম্নরূপভাবে ক্লাস্টার সেটআপ সম্পন্ন করতে CREATE CLUSTER-এ ক্লিক করুন:

24eec29fa5cfdb3e.png

৫. ডেটা গ্রহণ

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

AlloyDB ডেটাবেসে প্রমাণীকরণ করুন

  1. গুগল ক্লাউড কনসোলে, AlloyDB- তে যান। প্রাইমারি ক্লাস্টারটি নির্বাচন করুন, এবং তারপর বাম দিকের নেভিগেশনে AlloyDB Studio- তে ক্লিক করুন:

847e35f1bf8a8bd8.png

  1. AlloyDB ডেটাবেসে প্রমাণীকরণের জন্য নিম্নলিখিত বিবরণগুলি প্রবেশ করান:
  • ব্যবহারকারীর নাম : " postgres "
  • ডাটাবেস : " postgres "
  • পাসওয়ার্ড : " alloydb "

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

91a86d9469d499c4.png

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

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

এই অ্যাপটি তৈরি করার জন্য আমরা ' pgvector" এবং ' google_ml_integration" এক্সটেনশনগুলো ব্যবহার করব।

  • pgvector এক্সটেনশন আপনাকে ভেক্টর এমবেডিং সংরক্ষণ ও অনুসন্ধান করার সুযোগ দেয়।
  • google_ml_integration এক্সটেনশনটি এমন সব ফাংশন সরবরাহ করে, যা ব্যবহার করে আপনি Vertex AI প্রেডিকশন এন্ডপয়েন্টগুলো অ্যাক্সেস করে SQL-এ প্রেডিকশন পেতে পারেন।
  1. নিম্নলিখিত DDL গুলি চালিয়ে এই এক্সটেনশনগুলি সক্রিয় করুন :
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;
  1. এই SQL কমান্ডটি চালিয়ে এক্সটেনশনগুলি ইনস্টল করা হয়েছে কিনা তা যাচাই করুন:
select extname, extversion from pg_extension;

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

  1. নিম্নলিখিত 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 রয়েছে। অন্যান্য ফিল্ডগুলো ল্যাবের পরবর্তী পর্যায়ে পূরণ করা হবে।

  1. AlloyDB Studio-এর একটি নতুন এডিটর ট্যাবে SQL ফাইল থেকে ২০টি লাইন/ইনসার্ট স্টেটমেন্ট কপি করুন এবং RUN-এ ক্লিক করুন।
  1. এক্সপ্লোরার সেকশনটি প্রসারিত করুন যতক্ষণ না আপনি apparels নামের টেবিলটি দেখতে পান।
  2. মেনু আইকন [ ]-এ ক্লিক করুন এবং Query-তে ক্লিক করুন। একটি নতুন Editor ট্যাবে একটি SELECT স্টেটমেন্ট খুলে যাবে।

b31ece70e670ab89.png

  1. সারিগুলো সন্নিবেশিত হয়েছে কিনা তা যাচাই করতে রান-এ ক্লিক করুন।

ব্যবহারকারীকে অনুমতি দিন

আমরা postgres ব্যবহারকারীকে `AlloyDB`-এর ভেতর থেকে এমবেডিং তৈরি করার অনুমতি দেব . `AlloyDB Studio`-তে, postgres ব্যবহারকারীকে embedding ফাংশনের উপর এক্সিকিউট রাইটস দেওয়ার জন্য নিম্নলিখিত স্টেটমেন্টটি চালান:

GRANT EXECUTE ON FUNCTION embedding TO postgres;

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

আমরা AlloyDB সার্ভিস অ্যাকাউন্টের জন্য Vertex AI ইউজার ROLE-এর অধীনে এমবেডিং তৈরি করতে Vertex AI-এর টেক্সট এমবেডিং মডেলগুলো ব্যবহার করব।

Google Cloud Console-এ, Cloud Shell টার্মিনালে ক্লিক করুন [ f2ae85166a716c5c.png ] আইকন এবং নিম্নলিখিত কমান্ডটি চালান:

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"

৬. প্রেক্ষাপট তৈরি করুন

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

আমাদের ক্ষেত্রে, আমরা প্রতিটি পণ্য সম্পর্কিত সমস্ত তথ্য ব্যবহার করব, কিন্তু আপনি যখন আপনার নিজের ডেটা নিয়ে এটি করবেন, তখন আপনার ব্যবসার জন্য অর্থপূর্ণ মনে হয় এমনভাবে ডেটা সাজিয়ে নিতে পারেন।

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

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

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

সমুদ্রতীরবর্তী কোনো স্থানের বর্ণনা দেওয়ার কথা ভাবুন। একে বলা হতে পারে "on the water ", " beachfront ", " walk from your room to the ocean ", " sur la mer ", " на берегу океана " ইত্যাদি। এই শব্দগুলো শুনতে ভিন্ন হলেও, এদের অর্থগত তাৎপর্য বা মেশিন লার্নিং-এর পরিভাষায়, এদের এমবেডিংগুলো একে অপরের খুব কাছাকাছি হওয়া উচিত।

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

  1. AlloyDB Studio-তে, এমবেডিং তৈরি করতে নিম্নলিখিত কমান্ডটি চালান, এবং এতে সংরক্ষিত ডেটার এমবেডিং দিয়ে pdt_desc কলামটি আপডেট করুন:
UPDATE
 apparels
SET
 embedding = embedding( 'text-embedding-005',
   pdt_desc)
WHERE
 TRUE;
  1. নিম্নলিখিত কমান্ডটি চালিয়ে এমবেডিংগুলো তৈরি হয়েছে কিনা তা যাচাই করুন:
SELECT
 id,
 category,
 sub_category,
 content,
 embedding
FROM
 Apparels
LIMIT 5;

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

c69c08d085389f74.png

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

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

ধরে নিন যে ব্যবহারকারীর অনুসন্ধানের লেখাটি হলো " pink color, casual, pure cotton tops for women "।

এই কোয়েরির জন্য মিল খুঁজে পেতে, নিম্নলিখিত SQL কোয়েরিটি চালান:

SELECT
id,
category,
sub_category,
content,
pdt_desc AS description
FROM
apparels
ORDER BY
embedding <=> embedding('text-embedding-005',
  'pink color, casual, pure cotton tops for women')::vector
LIMIT
5;

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

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

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

নিচে এই SQL কোয়েরিটির একটি উদাহরণমূলক প্রতিক্রিয়া দেখানো হলো:

4193a68737400535.png

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

কোয়েরি পারফরম্যান্সের জন্য AlloyDB ScanN ইনডেক্স

এখন ধরা যাক, আমরা ScaNN ইনডেক্স ব্যবহার করে এই ভেক্টর সার্চ ফলাফলের পারফরম্যান্স (কোয়েরি টাইম), এফিশিয়েন্সি এবং রিকল বাড়াতে চাই।

আপনি যদি ScanN ইনডেক্স ব্যবহার করতে চান, তাহলে নিচের ধাপগুলো অনুসরণ করুন:

  1. যেহেতু আমাদের ক্লাস্টার, ইনস্ট্যান্স, কনটেক্সট এবং এমবেডিং ইতিমধ্যেই তৈরি করা আছে, তাই আমাদের শুধু নিম্নলিখিত স্টেটমেন্টটি ব্যবহার করে ScaNN এক্সটেনশনটি ইনস্টল করতে হবে:
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
  1. ScanN সূচক তৈরি করুন:
CREATE INDEX apparel_index ON apparels
USING scann (embedding cosine)
WITH (num_leaves=54);

উপরের DDL-এ:

  • apparel_index হলো ইনডেক্সটির নাম।
  • apparels হলো টেবিলের নাম।
  • scann হলো সূচক পদ্ধতি।
  • embedding হলো টেবিলের সেই কলামটি, যেটিকে আপনি ইনডেক্স করতে চান।
  • cosine হলো সেই দূরত্ব পদ্ধতি যা আপনি ইনডেক্সের সাথে ব্যবহার করতে চান।
  • এই ইনডেক্সে প্রয়োগ করার জন্য পার্টিশনের সংখ্যা হলো 54 এর মান ১ থেকে ১০৪৮৫৭৬-এর মধ্যে যেকোনো একটিতে সেট করুন। এই মানটি কীভাবে নির্ধারণ করতে হয় সে সম্পর্কে আরও তথ্যের জন্য, ‘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

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

  1. ইনডেক্স সহ এবং ইনডেক্স ছাড়া একটি সাধারণ সার্চ কোয়েরি দিয়ে পরীক্ষা করুন। ইনডেক্স ছাড়া পরীক্ষা করার জন্য, আপনাকে অবশ্যই ইনডেক্সটি ড্রপ করতে হবে:

white tops for girls without any print

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

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

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

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

  1. আপনার ক্লাস্টার এবং ইনস্ট্যান্সের জন্য google_ml_integration আগে থেকেই সক্রিয় করা আছে কিনা তা যাচাই করুন। 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 স্টেটমেন্টটি চালাতে পারেন। কমান্ডটি চালানোর আগে আপনাকে সিনট্যাক্স ত্রুটির বিষয়ে সতর্ক করা হতে পারে, কিন্তু এটি ঠিকঠাকভাবে চলার কথা।

  1. গুগল ক্লাউড কনসোলে, AlloyDB- তে যান। প্রাইমারি ক্লাস্টারটি নির্বাচন করুন, এবং তারপর বাম দিকের নেভিগেশনে AlloyDB Studio- তে ক্লিক করুন।
  2. আমরা gemini-1.5-pro:generateContent ব্যবহার করব, যা google_ml_integration এক্সটেনশনটির সাথে ডিফল্টভাবে উপলব্ধ থাকে। cdb5af753a625777.png
  3. AlloyDB Studio-তে নিম্নলিখিত কমান্ডের মাধ্যমে আপনি অ্যাক্সেসের জন্য কনফিগার করা মডেলগুলি পরীক্ষা করতে পারেন:
select model_id,model_type from google_ml.model_info_view;        
  1. নিম্নলিখিত কমান্ডটি চালিয়ে ডাটাবেস ব্যবহারকারীদের গুগল ভার্টেক্স এআই মডেল ব্যবহার করে প্রেডিকশন চালানোর জন্য ml_predict_row ফাংশনটি এক্সিকিউট করার অনুমতি দিন:
GRANT EXECUTE ON FUNCTION ml_predict_row to postgres;

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

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

আমরা সেই স্বতন্ত্র অংশগুলো দেখব যেগুলো একত্রিত হয়ে অবশেষে আমরা যে বৃহত্তর কোয়েরিটি ব্যবহার করি তা তৈরি করে।

  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-005',
   '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-005',
             'I want womens tops, pink casual only pure cotton.')::vector
         LIMIT
           5 ) AS xyz ) AS X;

বৃহত্তর কোয়েরিটি হলো পূর্ববর্তী ধাপগুলোতে চালানো আমাদের সমস্ত কোয়েরিগুলোর একটি সমন্বয়। ফলাফলগুলো থেকে জানা যায় যে কোনো মিল আছে কি না, মিলের শতাংশ কত এবং রেটিংটির একটি ব্যাখ্যাও দেওয়া থাকে।

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

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

আমরা এখন এই অ্যাপ্লিকেশনটি হোস্ট করব যাতে এটি ইন্টারনেট থেকে ব্যবহার করা যায়।

ক্লাউড রান ফাংশন তৈরি করুন

  1. গুগল ক্লাউড কনসোলে, নিম্নলিখিত লিঙ্কটি ব্যবহার করে ক্লাউড রান ফাংশন-এ যান:

https://console.cloud.google.com/run/create?deploymentType=function

  1. কনফিগার-এ, ফাংশন নেম হিসেবে " retail-engine " সেট করুন এবং অঞ্চল হিসেবে " us-central1 " নির্বাচন করুন।
  2. এন্ডপয়েন্ট ইউআরএল-এ রানটাইম হিসেবে জাভা ১৭ নির্বাচন করুন।
  3. প্রমাণীকরণে, ‘অননুমোদিত আহ্বানের অনুমতি দিন’ নির্বাচন করুন।
  4. কন্টেইনার(সমূহ), ভলিউম, নেটওয়ার্কিং, সিকিউরিটি প্রসারিত করুন এবং নেটওয়ার্কিং ট্যাবে ক্লিক করুন।
  5. আউটবাউন্ড ট্র্যাফিকের জন্য ‘Connect to a VPC’ নির্বাচন করুন, এবং তারপরে ‘Use Serverless VPC Access connectors’-এ ক্লিক করুন।
  6. নেটওয়ার্ক-এ, 'Add New VPC Connector'-এ ক্লিক করুন। ' Serverless VPC Access API' সক্রিয় করুন, যদি আগে থেকে সক্রিয় করা না থাকে।
  7. কানেক্টর তৈরি করার সময়, নাম হিসেবে alloydb-test-conn সেট করুন।
  8. অঞ্চলটি us-central এ সেট করুন।
  9. নেটওয়ার্ক ভ্যালুটি ডিফল্ট হিসেবে রাখুন এবং সাবনেট হিসেবে কাস্টম আইপি রেঞ্জ সেট করুন, যেখানে আইপি রেঞ্জটি হবে 10.8.0.0 অথবা এর মতো সহজলভ্য কোনো আইপি।
  10. ‘Show scaling settings’ প্রসারিত করুন এবং Minimum instances ২ ও Maximum instances ৩-এ সেট করুন।
  11. ইনস্ট্যান্স টাইপ হিসেবে f1-micro নির্বাচন করুন। নিচে কানেক্টর তৈরি করার অপশনগুলো দেখানো হলো:

bed4b2af6795a8ba.png

  1. কানেক্টরটি তৈরি করতে Create-এ ক্লিক করুন।
  2. ট্র্যাফিক রাউটিং-এ, সমস্ত ট্র্যাফিক VPC-তে রাউট করুন বিকল্পটি নির্বাচন করুন।
  3. ফাংশনটি তৈরি করতে Create-এ ক্লিক করুন।

অ্যাপ্লিকেশনটি স্থাপন করুন

ফাংশনটি তৈরি করার পর, সোর্স আপডেট করুন এবং অ্যাপ্লিকেশনটি পুনরায় ডিপ্লয় করুন।

  1. Cloud Run- এ, Services ট্যাবে ক্লিক করুন এবং retail-engine ফাংশনটিতে ক্লিক করুন।
  2. সোর্স ট্যাবে ক্লিক করুন। ডিফল্ট ফাংশন এন্ট্রি পয়েন্ট " gcfv2.HelloHttpFunction "-এ সেট করা রাখুন।
  3. HelloHttpFunction.java ফাইলের বিষয়বস্তু এই জাভা ফাইলের বিষয়বস্তু দিয়ে প্রতিস্থাপন করুন।
  4. আপনার AlloyDB ইনস্ট্যান্স এবং ক্লাস্টারের বিবরণ অনুযায়ী ফাইলটিতে AlloyDbJdbcConnector-এর তথ্য আপডেট করুন। $PROJECT_ID এর জায়গায় আপনার AlloyDB ক্লাস্টার এবং ইনস্ট্যান্সের প্রজেক্ট আইডি বসান।

a89dc5af3580fbcf.png

  1. pom.xml ফাইলের বিষয়বস্তু এই XML ফাইলের বিষয়বস্তু দিয়ে প্রতিস্থাপন করুন।
  2. ফাংশনটি ডিপ্লয় করতে সেভ এবং রিডিপ্লয়-এ ক্লিক করুন।

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

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

https://retail-engine-PROJECT_NUMBER.us-central1.run.app

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

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://retail-engine-$PROJECT_NUMBER.us-central1.run.app \
  -H 'Content-Type: application/json' \
  -d '{"search":"I want some kids clothes themed on Disney"}' \
  | jq .

এবং ফলাফল:

88bc1ddfb5644a28.png

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

১২. পোশাক সুপারিশের কার্যপ্রবাহ বুঝুন

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

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

পোশাক সুপারিশ অ্যাপটি তৈরি করা শুরু করতে, এই ধাপগুলো অনুসরণ করুন:

  1. Cloud Run- এ, retail-engine অ্যাপটি খুলুন এবং আপনার অ্যাপ্লিকেশনের URL-টি নোট করুন। এটিই সেই এমবেডিংস রিপোজিটরি যা আমরা অনুরূপ সাজেশন তৈরি করতে ব্যবহার করব।
  2. আপনার IDE-তে https://github.com/AbiramiSukumaran/outfit-recommender/ রিপোজিটরিটি ক্লোন করুন। এই অনুশীলনের জন্য, দেখানো ধাপগুলো ভিজ্যুয়াল স্টুডিও কোড IDE-তে সম্পন্ন করা হয়েছে।
git clone https://github.com/AbiramiSukumaran/outfit-recommender/

অ্যাপটির ডিরেক্টরিতে নিম্নলিখিত ফাইলগুলো গুরুত্বপূর্ণ:

  • src/main : উৎস ডিরেক্টরি যেখানে অ্যাপ্লিকেশন ফাইল এবং HTML থাকে:
  • HelloWorldApplication.java : স্প্রিং বুট অ্যাপ্লিকেশনের প্রধান প্রবেশ বিন্দু।
  • HelloWorldController.java : এটি একটি Spring Boot REST কন্ট্রোলার যা একটি পোশাক সুপারিশকারী অ্যাপ্লিকেশনের সাথে সম্পর্কিত HTTP অনুরোধগুলি পরিচালনা করে। এই ফাইলটি GET এবং POST অনুরোধগুলি গ্রহণ করে, ব্যবহারকারীর নির্দেশাবলী প্রক্রিয়াকরণ করে, ছবি বিশ্লেষণ করে, AlloyDB এমবেডিংগুলির সাথে কাজ করে এবং UI-তে চূড়ান্ত প্রতিক্রিয়া ফেরত পাঠায়। এই কন্ট্রোলারটি GenerateImageSample ক্লাসকে কল করে।
  • GenerateImageSample.java : এতে ইমেজ জেনারেশন ক্লাস রয়েছে যা Vertex AI-এর সাথে সংযোগ স্থাপন করে, ব্যবহারকারীর প্রম্পট ফরম্যাট করে, Imagen মডেলে API কল করে এবং পূর্বাভাসিত ছবিটি কন্ট্রোলার ক্লাসে ফেরত পাঠায়।
  • Resources : এই ডিরেক্টরিতে অ্যাপ্লিকেশন UI তৈরি করার জন্য প্রয়োজনীয় ছবি এবং HTML ফাইল রয়েছে।
  • Pom.xml : প্রোজেক্টের নির্ভরতা ও কনফিগারেশন নির্ধারণ করে।
  1. ভিজ্যুয়াল স্টুডিও কোডে, HelloWorldController.java ফাইলটি খুলুন এবং আপনার AlloyDB ইনস্ট্যান্সটি যেখানে তৈরি করা হয়েছে, সেই অনুযায়ী প্রজেক্ট আইডি এবং লোকেশন আপডেট করুন।

9fff8f5cbb62567.png

  1. endpoint আপনার পূর্বে হোস্ট করা রিটেল-ইঞ্জিন অ্যাপের ইউআরএল-এ আপডেট করুন।

ae6227e88eec5485.png

  1. GenerateImageSample.java ফাইলটি খুলুন এবং আপনার AlloyDB ইনস্ট্যান্সটি যেখানে তৈরি করা হয়েছে, সেই অনুযায়ী প্রজেক্ট আইডি ও লোকেশন আপডেট করুন।

db1f81a6f51d80de.png

  1. সমস্ত ফাইল সংরক্ষণ করুন।

আমরা এখন এই অ্যাপ্লিকেশনটি ক্লাউড রান সার্ভারলেস রানটাইমে ডেপ্লয় করব।

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

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

অ্যাপ্লিকেশনটি ডেপ্লয় করার জন্য আমরা ভিজ্যুয়াল কোড স্টুডিও টার্মিনালে gcloud run deploy কমান্ডটি ব্যবহার করব। ভিজ্যুয়াল স্টুডিও কোডের জন্য, আপনি gcloud CLI ব্যবহার শুরু করতে গুগল ক্লাউড কোড এক্সটেনশনটি ইনস্টল করতে পারেন।

অ্যাপ্লিকেশনটি স্থাপন করতে, এই ধাপগুলো অনুসরণ করুন:

  1. আপনার IDE-তে, ক্লোন করা ডিরেক্টরিটি খুলুন এবং টার্মিনাল চালু করুন। ভিজ্যুয়াল কোড স্টুডিও-এর জন্য, টার্মিনাল > নতুন টার্মিনাল-এ ক্লিক করুন।
  2. gcloud CLI ইনস্টল করার জন্য এই ডকুমেন্টের নির্দেশাবলী অনুসরণ করুন।
  3. আপনি যদি ভিজ্যুয়াল কোড স্টুডিও ব্যবহার করেন, তাহলে এক্সটেনশন-এ ক্লিক করুন, গুগল ক্লাউড কোড অনুসন্ধান করুন এবং এক্সটেনশনটি ইনস্টল করুন।
  4. আপনার IDE টার্মিনালে, নিম্নলিখিত কমান্ডটি চালিয়ে আপনার Google অ্যাকাউন্টটি প্রমাণীকরণ করুন:
gcloud auth application-default login
  1. আপনার প্রজেক্ট আইডিটি সেই প্রজেক্টে সেট করুন যেখানে আপনার AlloyDB ইনস্ট্যান্সটি অবস্থিত।
gcloud config set project PROJECT_ID
  1. ডিপ্লয় প্রক্রিয়াটি শুরু করুন।
gcloud run deploy
  1. Source code location এ, ক্লোন করা গিটহাব ডিরেক্টরিটি নির্বাচন করতে এন্টার চাপুন।
  2. Service name অংশে, পরিষেবাটির জন্য একটি নাম লিখুন, যেমন outfit-recommender, এবং এন্টার চাপুন।
  3. Please specify a region অংশে, আপনার AlloyDB ইনস্ট্যান্স এবং retail-engine অ্যাপ্লিকেশনটি যেখানে হোস্ট করা আছে সেই অবস্থানটি লিখুন, যেমন us-central1-এর জন্য 32, এবং এন্টার চাপুন।

12c0de4248660d4d.png

  1. Allow unauthenticated invocations to [..] -এ, Y টাইপ করুন এবং Enter চাপুন।

নিচের ছবিটি আপনার অ্যাপ্লিকেশনটির ডেপ্লয়মেন্টের অগ্রগতি দেখাচ্ছে:

1babbb82faa31fce.png

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

অ্যাপ্লিকেশনটি ক্লাউড রান-এ সফলভাবে ডেপ্লয় করার পর, আপনি গুগল ক্লাউড কনসোলে সার্ভিসটি নিম্নরূপে দেখতে পাবেন:

  1. গুগল ক্লাউড কনসোলে, ক্লাউড রান- এ যান।
  2. সার্ভিসেস-এ, আপনার ডিপ্লয় করা আউটফিট রিকমেন্ডার সার্ভিসটিতে ক্লিক করুন। আপনি নিম্নরূপভাবে রিটেল-ইঞ্জিন এবং আউটফিট-রিকমেন্ডার সার্ভিস দুটি দেখতে পাবেন:

24dd0aebe224059e.png

  1. সুপারিশকারী অ্যাপের UI খোলার জন্য অ্যাপ্লিকেশন URL-টিতে ক্লিক করুন।

cdc9c1625b1648d2.png

    The following is a sample URL that you will use:

https://outfit-recommender-22905290964.us-central1.run.app/style

স্থাপন করা অ্যাপ্লিকেশনটি নিম্নরূপ দেখা যেতে পারে:

76245d1a6152d313.png

অ্যাপ্লিকেশনটি ব্যবহার করে

অ্যাপ্লিকেশনটি ব্যবহার শুরু করতে, এই ধাপগুলো অনুসরণ করুন:

  1. আপলোড-এ ক্লিক করুন এবং পোশাকের একটি ছবি আপলোড করুন।
  2. ছবিটি আপলোড করার পর, 'Style'-এ ক্লিক করুন। অ্যাপ্লিকেশনটি ছবিটিকে একটি নির্দেশক হিসেবে ব্যবহার করে এবং রিটেল-ইঞ্জিন অ্যাপের নির্দেশনার উপর ভিত্তি করে বটম অপশন তৈরি করে, যেটিতে রিটেল ডেটাসেটের এমবেডিং অন্তর্ভুক্ত থাকে।

অ্যাপটি ছবির উপর ভিত্তি করে স্টাইলিং পরামর্শসহ ছবির সাজেশন তৈরি করে। উদাহরণস্বরূপ, A white semi-sheer button up blouse with pink floral patterns on it, with balloon sleeves.

  1. আপনি এই স্বয়ংক্রিয়ভাবে তৈরি স্টাইল সুপারিশে অতিরিক্ত নির্দেশনা যোগ করতে পারেন। উদাহরণস্বরূপ, STYLE RECOMMENDATION: Cute brown skirt on a curly updo. Make it photo realistic. Accessorize with cherry earrings and burgundy plastic case sling bag.
  2. চূড়ান্ত স্টাইলিং দেখতে 'দেখাও'-তে ক্লিক করুন।

38d6d08e9a0a44c0.png

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

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

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

১৬. অভিনন্দন

অভিনন্দন! আপনি সফলভাবে AlloyDB, pgvector এবং Vector search ব্যবহার করে একটি সাদৃশ্য অনুসন্ধান সম্পন্ন করেছেন এবং সেই অনুসন্ধানের ফলাফলকে শক্তিশালী Imagen মডেলের সাথে ব্যবহার করে স্টাইলিং সুপারিশ তৈরি করেছেন।