1. ওভারভিউ
আজকের প্রতিযোগিতামূলক খুচরো ল্যান্ডস্কেপে, গ্রাহকদের তারা যা খুঁজছেন তা দ্রুত এবং স্বজ্ঞাতভাবে খুঁজে পেতে ক্ষমতায়ন করা সবচেয়ে গুরুত্বপূর্ণ। প্রথাগত কীওয়ার্ড-ভিত্তিক অনুসন্ধান প্রায়শই ছোট হয়, সূক্ষ্ম প্রশ্ন এবং বিস্তৃত পণ্য ক্যাটালগের সাথে লড়াই করে। এই কোডল্যাবটি AlloyDB, AlloyDB AI-তে নির্মিত একটি পরিশীলিত খুচরা অনুসন্ধান অ্যাপ্লিকেশন উন্মোচন করে, যা একটি এন্টারপ্রাইজ স্কেলে একটি গতিশীল, হাইব্রিড অনুসন্ধানের অভিজ্ঞতা প্রদানের জন্য অত্যাধুনিক ভেক্টর অনুসন্ধান, স্ক্যানএনএন ইনডেক্সিং, ফেসেটেড ফিল্টার এবং বুদ্ধিমান অভিযোজিত ফিল্টারিং ব্যবহার করে।
এখন আমরা ইতিমধ্যেই 3টি জিনিসের মৌলিক ধারণা পেয়েছি:
- আপনার এজেন্টের জন্য প্রাসঙ্গিক অনুসন্ধানের অর্থ কী এবং ভেক্টর অনুসন্ধান ব্যবহার করে কীভাবে তা সম্পন্ন করা যায়।
- আমরা আপনার ডেটার পরিধির মধ্যে ভেক্টর অনুসন্ধান অর্জনে গভীরভাবে কাজ করেছি, যা আপনার ডাটাবেসের মধ্যেই রয়েছে (সমস্ত Google ক্লাউড ডেটাবেস এটিকে সমর্থন করে, যদি আপনি ইতিমধ্যে না জানতেন!)
- ScaNN সূচক দ্বারা চালিত AlloyDB ভেক্টর অনুসন্ধান ক্ষমতার সাথে উচ্চ কার্যকারিতা এবং গুণমানের সাথে এই ধরনের একটি হালকা-ওজন ভেক্টর অনুসন্ধান RAG সক্ষমতা কীভাবে সম্পন্ন করা যায় তা জানাতে আমরা বাকি বিশ্বের তুলনায় আরও এক ধাপ এগিয়েছি।
আপনি যদি সেই মৌলিক, মধ্যবর্তী এবং সামান্য উন্নত RAG পরীক্ষাগুলি না দেখে থাকেন, আমি আপনাকে সেই 3টি এখানে , এখানে এবং এখানে তালিকাভুক্ত ক্রমে পড়তে উত্সাহিত করব৷
চ্যালেঞ্জ
ফিল্টার, কীওয়ার্ড এবং প্রাসঙ্গিক মিলের বাইরে যাওয়া: একটি সাধারণ কীওয়ার্ড অনুসন্ধান হাজার হাজার ফলাফল দিতে পারে, অনেকগুলি অপ্রাসঙ্গিক। আদর্শ সমাধানের জন্য ক্যোয়ারীটির পিছনের উদ্দেশ্য বুঝতে হবে, এটিকে সুনির্দিষ্ট ফিল্টার মানদণ্ডের সাথে একত্রিত করতে হবে (যেমন ব্র্যান্ড, উপাদান, বা দাম), এবং মিলিসেকেন্ডে সবচেয়ে প্রাসঙ্গিক আইটেমগুলি উপস্থাপন করতে হবে। এটি একটি শক্তিশালী, নমনীয়, এবং পরিমাপযোগ্য অনুসন্ধান পরিকাঠামো দাবি করে। নিশ্চিতভাবেই আমরা কীওয়ার্ড অনুসন্ধান থেকে প্রাসঙ্গিক মিল এবং মিল অনুসন্ধানে অনেক দূর এগিয়ে এসেছি। কিন্তু কল্পনা করুন একজন গ্রাহক "বসন্তে হাইক করার জন্য একটি আরামদায়ক, আড়ম্বরপূর্ণ, জলরোধী জ্যাকেট" খুঁজছেন। একই সাথে ফিল্টার প্রয়োগ করার সময় এবং আপনার অ্যাপ্লিকেশনটি শুধুমাত্র গুণমানের প্রতিক্রিয়া প্রদান করে না, বরং এটি উচ্চ-কার্যকর এবং এই সবের ক্রমটি আপনার ডাটাবেস দ্বারা গতিশীলভাবে নির্বাচিত হয়।
উদ্দেশ্য
একীভূত করে এটি মোকাবেলা করতে
- প্রাসঙ্গিক অনুসন্ধান (ভেক্টর অনুসন্ধান): প্রশ্ন এবং পণ্যের বিবরণের শব্দার্থিক অর্থ বোঝা
- ফেসটেড ফিল্টারিং: ব্যবহারকারীদেরকে সুনির্দিষ্ট বৈশিষ্ট্যের সাথে ফলাফল পরিমার্জন করতে সক্ষম করে
- হাইব্রিড অ্যাপ্রোচ: কাঠামোগত ফিল্টারিংয়ের সাথে প্রাসঙ্গিক অনুসন্ধানকে নির্বিঘ্নে মিশ্রিত করা
- উন্নত অপ্টিমাইজেশান: গতি এবং প্রাসঙ্গিকতার জন্য বিশেষ সূচক, অভিযোজিত ফিল্টারিং এবং পুনরায় র্যাঙ্কিং ব্যবহার করা
- জেনারেটিভ এআই-চালিত গুণমান নিয়ন্ত্রণ: উচ্চতর ফলাফলের মানের জন্য এলএলএম বৈধতা অন্তর্ভুক্ত করা।
আসুন স্থাপত্য এবং বাস্তবায়ন যাত্রা ভেঙে দেওয়া যাক।
আপনি কি নির্মাণ করবেন
একটি খুচরা অনুসন্ধান অ্যাপ্লিকেশন
এর অংশ হিসাবে, আপনি করবেন:
- ইকমার্স ডেটাসেটের জন্য একটি AlloyDB উদাহরণ এবং টেবিল তৈরি করুন
- এম্বেডিং এবং ভেক্টর অনুসন্ধান সেট আপ করুন
- মেটাডেটা সূচক এবং ScaNN সূচক তৈরি করুন
- ScaNN এর ইনলাইন ফিল্টারিং পদ্ধতি ব্যবহার করে AlloyDB-তে উন্নত ভেক্টর অনুসন্ধান প্রয়োগ করুন
- একটি একক প্রশ্নে মুখী ফিল্টার এবং হাইব্রিড অনুসন্ধান সেট আপ করুন৷
- পুনরায় র্যাঙ্কিং এবং প্রত্যাহার (ঐচ্ছিক) সহ ক্যোয়ারী প্রাসঙ্গিকতা পরিমার্জন করুন
- মিথুন দিয়ে প্রশ্নের উত্তর মূল্যায়ন করুন (ঐচ্ছিক)
- ডাটাবেস এবং অ্যাপ্লিকেশন লেয়ারের জন্য MCP টুলবক্স
- অ্যাপ্লিকেশন ডেভেলপমেন্ট (জাভা) মুখী অনুসন্ধান সহ
প্রয়োজনীয়তা
- একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
- বিলিং সক্ষম সহ একটি Google ক্লাউড প্রকল্প৷
2. আপনি শুরু করার আগে
একটি প্রকল্প তৈরি করুন
- Google ক্লাউড কনসোলে , প্রকল্প নির্বাচক পৃষ্ঠায়, একটি Google ক্লাউড প্রকল্প নির্বাচন করুন বা তৈরি করুন।
- নিশ্চিত করুন যে আপনার ক্লাউড প্রকল্পের জন্য বিলিং সক্ষম করা আছে৷ একটি প্রকল্পে বিলিং সক্ষম কিনা তা পরীক্ষা করতে শিখুন।
Google ক্লাউড ক্রেডিটগুলির জন্য: আপনি যদি শুরু করতে সাহায্য করার জন্য Google ক্লাউড ক্রেডিট পেতে চান, তাহলে ক্রেডিট রিডিম করতে এই লিঙ্কটি ব্যবহার করুন৷ আপনি এটি রিডিম করতে এখানে নির্দেশাবলী অনুসরণ করতে পারেন ।
- আপনি Cloud Shell ব্যবহার করবেন, Google ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ। গুগল ক্লাউড কনসোলের শীর্ষে সক্রিয় ক্লাউড শেল ক্লিক করুন।
- একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি পরীক্ষা করে দেখুন যে আপনি ইতিমধ্যেই প্রমাণীকৃত হয়েছেন এবং নিম্নলিখিত কমান্ডটি ব্যবহার করে প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে:
gcloud auth list
- gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান।
gcloud config list project
- যদি আপনার প্রজেক্ট সেট করা না থাকে, তাহলে এটি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud config set project <YOUR_PROJECT_ID>
- প্রয়োজনীয় API গুলি সক্রিয় করুন: লিঙ্কটি অনুসরণ করুন এবং APIগুলি সক্ষম করুন৷
বিকল্পভাবে আপনি এর জন্য gcloud কমান্ড ব্যবহার করতে পারেন। জিক্লাউড কমান্ড এবং ব্যবহারের জন্য ডকুমেন্টেশন পড়ুন।
3. ডাটাবেস সেটআপ
এই ল্যাবে আমরা ইকমার্স ডেটার ডাটাবেস হিসাবে AlloyDB ব্যবহার করব। এটি ডাটাবেস এবং লগগুলির মতো সমস্ত সংস্থান ধরে রাখতে ক্লাস্টার ব্যবহার করে। প্রতিটি ক্লাস্টারের একটি প্রাথমিক উদাহরণ রয়েছে যা ডেটাতে অ্যাক্সেস পয়েন্ট সরবরাহ করে। টেবিলে প্রকৃত তথ্য থাকবে।
আসুন একটি AlloyDB ক্লাস্টার, উদাহরণ এবং টেবিল তৈরি করি যেখানে ইকমার্স ডেটাসেট লোড করা হবে।
একটি ক্লাস্টার এবং উদাহরণ তৈরি করুন
- ক্লাউড কনসোলে AlloyDB পৃষ্ঠাটি নেভিগেট করুন। ক্লাউড কনসোলে বেশিরভাগ পৃষ্ঠাগুলি খুঁজে পাওয়ার একটি সহজ উপায় হল কনসোলের অনুসন্ধান বার ব্যবহার করে সেগুলি অনুসন্ধান করা৷
- সেই পৃষ্ঠা থেকে ক্লাস্টার তৈরি করুন নির্বাচন করুন:
- আপনি নীচের মত একটি পর্দা দেখতে পাবেন. নিম্নলিখিত মানগুলির সাথে একটি ক্লাস্টার এবং উদাহরণ তৈরি করুন (আপনি রেপো থেকে অ্যাপ্লিকেশন কোড ক্লোন করার ক্ষেত্রে মানগুলি মেলে তা নিশ্চিত করুন):
- ক্লাস্টার আইডি : "
vector-cluster
" - পাসওয়ার্ড : "
alloydb
" - PostgreSQL 15 / সর্বশেষ প্রস্তাবিত
- অঞ্চল : "
us-central1
" - নেটওয়ার্কিং : "
default
"
- আপনি যখন ডিফল্ট নেটওয়ার্ক নির্বাচন করেন, আপনি নীচের মত একটি স্ক্রীন দেখতে পাবেন।
সংযোগ সেট আপ নির্বাচন করুন।
- সেখান থেকে, " একটি স্বয়ংক্রিয়ভাবে বরাদ্দকৃত IP পরিসর ব্যবহার করুন " নির্বাচন করুন এবং চালিয়ে যান। তথ্য পর্যালোচনা করার পরে, সংযোগ তৈরি করুন নির্বাচন করুন।
- আপনার নেটওয়ার্ক সেট আপ হয়ে গেলে, আপনি আপনার ক্লাস্টার তৈরি করা চালিয়ে যেতে পারেন। নীচে দেখানো হিসাবে ক্লাস্টার সেট আপ সম্পূর্ণ করতে CLUSTER তৈরি করুন ক্লিক করুন:
গুরুত্বপূর্ণ নোট:
- ইনস্ট্যান্স আইডি (যা আপনি ক্লাস্টার/ইনস্ট্যান্স কনফিগারেশনের সময় খুঁজে পেতে পারেন) **
vector-instance
** এ পরিবর্তন করতে ভুলবেন না। আপনি যদি এটি পরিবর্তন করতে না পারেন তবে সমস্ত আসন্ন রেফারেন্সে **আপনার ইনস্ট্যান্স আইডি ব্যবহার করতে ভুলবেন না। - মনে রাখবেন ক্লাস্টার তৈরি হতে প্রায় 10 মিনিট সময় লাগবে। একবার এটি সফল হলে, আপনি একটি স্ক্রীন দেখতে পাবেন যা আপনার তৈরি করা ক্লাস্টারটির ওভারভিউ দেখায়।
4. ডেটা ইনজেশন
এখন স্টোর সম্পর্কে ডেটা সহ একটি টেবিল যুক্ত করার সময়। AlloyDB-তে নেভিগেট করুন, প্রাথমিক ক্লাস্টার নির্বাচন করুন এবং তারপর AlloyDB স্টুডিও:
আপনার উদাহরণ তৈরি করা শেষ হওয়ার জন্য আপনাকে অপেক্ষা করতে হতে পারে। এটি হয়ে গেলে, আপনি ক্লাস্টার তৈরি করার সময় আপনার তৈরি শংসাপত্রগুলি ব্যবহার করে AlloyDB-এ সাইন ইন করুন৷ PostgreSQL এ প্রমাণীকরণের জন্য নিম্নলিখিত ডেটা ব্যবহার করুন:
- ব্যবহারকারীর নাম: "
postgres
" - ডাটাবেস : "
postgres
" - পাসওয়ার্ড: "
alloydb
"
একবার আপনি সফলভাবে অ্যালোয়ডিবি স্টুডিওতে প্রমাণীকৃত হয়ে গেলে, এসকিউএল কমান্ড এডিটরে প্রবেশ করানো হয়। আপনি শেষ উইন্ডোর ডানদিকে প্লাস ব্যবহার করে একাধিক সম্পাদক উইন্ডো যোগ করতে পারেন।
আপনি প্রয়োজন অনুসারে রান, ফরম্যাট এবং সাফ বিকল্পগুলি ব্যবহার করে সম্পাদক উইন্ডোতে 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;
একটি টেবিল তৈরি করুন
আপনি AlloyDB স্টুডিওতে নীচের DDL স্টেটমেন্ট ব্যবহার করে একটি টেবিল তৈরি করতে পারেন:
CREATE TABLE apparels (
id BIGINT,
category VARCHAR(100),
sub_category VARCHAR(50),
uri VARCHAR(200),
gsutil_uri VARCHAR(200),
image VARCHAR(100),
content VARCHAR(2000),
pdt_desc VARCHAR(5000),
color VARCHAR(2000),
gender VARCHAR(200),
embedding vector(768),
img_embeddings vector(1408),
additional_specification VARCHAR(100000));
এমবেডিং কলাম পাঠ্যের ভেক্টর মানগুলির জন্য সঞ্চয়স্থানের অনুমতি দেবে।
অনুমতি দিন
"এম্বেডিং" ফাংশনে কার্যকর করার জন্য নীচের বিবৃতিটি চালান:
GRANT EXECUTE ON FUNCTION embedding TO postgres;
AlloyDB পরিষেবা অ্যাকাউন্টে Vertex AI ব্যবহারকারীর ভূমিকা মঞ্জুর করুন
Google ক্লাউড IAM কনসোল থেকে, AlloyDB পরিষেবা অ্যাকাউন্টটি মঞ্জুর করুন (যেটি এইরকম দেখাচ্ছে: service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com) ভূমিকা "Vertex AI ব্যবহারকারী"-তে অ্যাক্সেস করুন৷ PROJECT_NUMBER এ আপনার প্রকল্প নম্বর থাকবে৷
বিকল্পভাবে আপনি ক্লাউড শেল টার্মিনাল থেকে নীচের কমান্ডটি চালাতে পারেন:
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"
ডাটাবেসে ডেটা লোড করুন
- শীটে
insert scripts sql
থেকেinsert
ক্যোয়ারী স্টেটমেন্টগুলি উপরে উল্লিখিত এডিটরের কাছে কপি করুন। আপনি এই ব্যবহারের ক্ষেত্রে একটি দ্রুত ডেমোর জন্য 10-50টি সন্নিবেশ বিবৃতি অনুলিপি করতে পারেন। এই "নির্বাচিত সন্নিবেশ 25-30 সারি" ট্যাবে এখানে সন্নিবেশগুলির একটি নির্বাচিত তালিকা রয়েছে৷
এই গিথুব রেপো ফাইলে ডেটার লিঙ্ক পাওয়া যাবে ।
- রান এ ক্লিক করুন। আপনার প্রশ্নের ফলাফল ফলাফল সারণীতে প্রদর্শিত হবে।
গুরুত্বপূর্ণ নোট:
ঢোকানোর জন্য শুধুমাত্র 25-50টি রেকর্ড কপি করতে ভুলবেন না এবং নিশ্চিত করুন যে এটি একটি বিভাগ, উপ_বিভাগ, রঙ, লিঙ্গের ধরন থেকে এসেছে।
5. ডেটার জন্য এমবেডিং তৈরি করুন
আধুনিক অনুসন্ধানে প্রকৃত উদ্ভাবন অর্থ বোঝার মধ্যে নিহিত, শুধু কীওয়ার্ড নয়। এখানেই এমবেডিং এবং ভেক্টর অনুসন্ধান খেলায় আসে।
আমরা প্রাক-প্রশিক্ষিত ভাষা মডেল ব্যবহার করে পণ্যের বিবরণ এবং ব্যবহারকারীর প্রশ্নগুলিকে "এম্বেডিং" নামে উচ্চ-মাত্রিক সংখ্যাসূচক উপস্থাপনায় রূপান্তরিত করেছি। এই এমবেডিংগুলি শব্দার্থগত অর্থ ক্যাপচার করে, যা আমাদেরকে শুধুমাত্র মিলিত শব্দ ধারণ করার পরিবর্তে "অর্থে একই রকম" পণ্যগুলি খুঁজে পেতে দেয়। প্রাথমিকভাবে, আমরা একটি বেসলাইন স্থাপন করতে এই এমবেডিংগুলিতে সরাসরি ভেক্টর সাদৃশ্য অনুসন্ধানের সাথে পরীক্ষা করেছিলাম, এমনকি কর্মক্ষমতা অপ্টিমাইজেশানের আগেও শব্দার্থিক বোঝার ক্ষমতা প্রদর্শন করে।
এম্বেডিং কলামটি পণ্যের বর্ণনা পাঠ্যের ভেক্টর মানের জন্য সঞ্চয়ের অনুমতি দেবে। img_embeddings কলাম ইমেজ এম্বেডিং (মাল্টিমোডাল) সঞ্চয়ের অনুমতি দেবে। এইভাবে আপনি চিত্র দূরত্ব ভিত্তিক অনুসন্ধানের বিপরীতে পাঠ্য ব্যবহার করতে পারেন। কিন্তু আমরা এই ল্যাবে শুধুমাত্র টেক্সট এম্বেডিং ব্যবহার করব।
SELECT embedding('text-embedding-005', 'AlloyDB is a managed, cloud-hosted SQL database service.');
এটি ক্যোয়ারীতে নমুনা পাঠ্যের জন্য এমবেডিং ভেক্টর ফেরত দিতে হবে, যা ফ্লোটগুলির একটি অ্যারের মতো দেখায়। এই মত দেখায়:
বিমূর্ত_এম্বেডিং ভেক্টর ক্ষেত্র আপডেট করুন
সংশ্লিষ্ট এম্বেডিংয়ের সাথে টেবিলে বিষয়বস্তুর বিবরণ আপডেট করতে নিচের DML চালান:
UPDATE apparels SET embedding = embedding('text-embedding-005',pdt_desc)::vector
WHERE pdt_desc IS NOT NULL;
আপনি যদি Google ক্লাউডের জন্য একটি ট্রায়াল ক্রেডিট বিলিং অ্যাকাউন্ট ব্যবহার করেন তবে কয়েকটি এম্বেডিং (সর্বোচ্চ বলুন 20-25) তৈরি করতে আপনার সমস্যা হতে পারে। তাই সন্নিবেশ স্ক্রিপ্টে সারির সংখ্যা সীমিত করুন।
আপনি যদি ইমেজ এম্বেডিং তৈরি করতে চান (মাল্টিমোডাল প্রাসঙ্গিক অনুসন্ধান করার জন্য) নীচের আপডেটটিও চালান:
update apparels set img_embeddings = ai.image_embedding(
model_id => 'multimodalembedding@001',
image => gsutil_uri,
mimetype => 'image/jpg')
where gsutil_uri is not null
6. AlloyDB এর নতুন বৈশিষ্ট্যগুলির সাথে উন্নত RAG সম্পাদন করুন৷
এখন যেহেতু টেবিল, ডেটা, এম্বেডিং সবই প্রস্তুত, চলুন ব্যবহারকারীর সার্চ টেক্সটের জন্য রিয়েল টাইম ভেক্টর সার্চ করা যাক। আপনি নীচের ক্যোয়ারী চালিয়ে এটি পরীক্ষা করতে পারেন:
SELECT id, content, uri, category, sub_category,color,gender
FROM apparels
ORDER BY embedding <=> embedding('text-embedding-005','T-shirt with round neck')::vector limit 10 ;
এই ক্যোয়ারীতে, আমরা কোসাইন সাদৃশ্য দূরত্ব ফাংশন ("<=> চিহ্ন দ্বারা উপস্থাপিত) ব্যবহার করে অ্যাপারেল টেবিলের সমস্ত পণ্যের বিবরণের টেক্সট এম্বেডিংয়ের সাথে "গোলাকার ঘাড়ের সাথে টি-শার্ট" অনুসন্ধানের ব্যবহারকারীর প্রবেশ করা টেক্সট এম্বেডিংয়ের তুলনা করছি। ডাটাবেসে সংরক্ষিত ভেক্টর LIMIT 10 প্রতিনিধিত্ব করে যে আমরা অনুসন্ধান পাঠ্যের 10টি নিকটতম মিল নির্বাচন করছি।
AlloyDB ভেক্টর অনুসন্ধান RAG পরবর্তী স্তরে নিয়ে যায়:
একটি এন্টারপ্রাইজ-স্কেল সমাধানের জন্য, কাঁচা ভেক্টর অনুসন্ধান যথেষ্ট নয়। কর্মক্ষমতা সমালোচনামূলক.
ScaNN (স্কেলযোগ্য নিকটতম প্রতিবেশী) সূচক
অতি-দ্রুত আনুমানিক নিকটতম প্রতিবেশী (ANN) অনুসন্ধান অর্জন করতে, আমরা AlloyDB-তে স্ক্যানএনএন সূচক সক্রিয় করেছি। ScaNN, একটি অত্যাধুনিক আনুমানিক নিকটতম প্রতিবেশী অনুসন্ধান অ্যালগরিদম যা Google গবেষণা দ্বারা তৈরি করা হয়েছে, এটি স্কেলে দক্ষ ভেক্টর সাদৃশ্য অনুসন্ধানের জন্য ডিজাইন করা হয়েছে। এটি অনুসন্ধানের স্থানকে দক্ষতার সাথে ছাঁটাই করে এবং কোয়ান্টাইজেশন কৌশল ব্যবহার করে, অন্যান্য সূচীকরণ পদ্ধতি এবং একটি ছোট মেমরি ফুটপ্রিন্টের তুলনায় 4x দ্রুত ভেক্টর কোয়েরি প্রদান করে তা উল্লেখযোগ্যভাবে কোয়েরির গতি বাড়ায়। এখানে এবং এখানে এটি সম্পর্কে আরও পড়ুন।
আসুন এক্সটেনশনটি সক্ষম করি এবং সূচীগুলি তৈরি করি:
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
টেক্সট এম্বেডিং এবং ইমেজ এম্বেডিং ফিল্ড উভয়ের জন্য ইনডেক্স তৈরি করা (যদি আপনি আপনার অনুসন্ধানে ইমেজ এম্বেডিং ব্যবহার করতে চান):
CREATE INDEX apparels_index ON apparels
USING scann (embedding cosine)
WITH (num_leaves=32);
CREATE INDEX apparels_img_index ON apparels
USING scann (img_embeddings cosine)
WITH (num_leaves=32);
মেটাডেটা সূচক
স্ক্যানএনএন ভেক্টর ইনডেক্সিং পরিচালনা করার সময়, ঐতিহ্যগত বি-ট্রি বা জিআইএন সূচীগুলি সুবিন্যস্তভাবে কাঠামোগত বৈশিষ্ট্যগুলিতে (যেমন বিভাগ, উপ বিভাগ, স্টাইলিং, রঙ ইত্যাদি) সেট আপ করা হয়েছিল। এই সূচকগুলি মুখী ফিল্টারিংয়ের দক্ষতার জন্য অত্যন্ত গুরুত্বপূর্ণ। মেটাডেটা সূচী সেট আপ করতে নীচের বিবৃতিগুলি চালান:
CREATE INDEX idx_category ON apparels (category);
CREATE INDEX idx_sub_category ON apparels (sub_category);
CREATE INDEX idx_color ON apparels (color);
CREATE INDEX idx_gender ON apparels (gender);
গুরুত্বপূর্ণ নোট:
যেহেতু আপনি শুধুমাত্র 25-50টি রেকর্ড সন্নিবেশ করতে পারেন, তাই সূচী (ScaNN বা সেই বিষয়ের জন্য কোনো সূচক) কার্যকর হবে না।
ইনলাইন ফিল্টারিং
ভেক্টর অনুসন্ধানে একটি সাধারণ চ্যালেঞ্জ হল এটিকে কাঠামোগত ফিল্টারগুলির সাথে একত্রিত করা (যেমন, "লাল জুতা")। AlloyDB এর ইনলাইন ফিল্টারিং এটিকে অপ্টিমাইজ করে। একটি বিস্তৃত ভেক্টর অনুসন্ধান থেকে পোস্ট-ফিল্টারিং ফলাফলের পরিবর্তে, ইনলাইন ফিল্টারিং ভেক্টর অনুসন্ধান প্রক্রিয়ার সময়ই ফিল্টার শর্ত প্রয়োগ করে, ফিল্টার করা ভেক্টর অনুসন্ধানের জন্য কার্যক্ষমতা এবং নির্ভুলতাকে ব্যাপকভাবে উন্নত করে।
ইনলাইন ফিল্টারিংয়ের প্রয়োজনীয়তা সম্পর্কে আরও জানতে এই ডকুমেন্টেশনটি পড়ুন। এছাড়াও এখানে ভেক্টর অনুসন্ধানের কর্মক্ষমতা অপ্টিমাইজেশনের জন্য ফিল্টার করা ভেক্টর অনুসন্ধান সম্পর্কে জানুন। এখন আপনি যদি আপনার অ্যাপ্লিকেশনের জন্য ইনলাইন ফিল্টারিং সক্ষম করতে চান তবে আপনার সম্পাদক থেকে নিম্নলিখিত বিবৃতিটি চালান:
SET scann.enable_inline_filtering = on;
মাঝারি সিলেক্টিভিটির ক্ষেত্রে ইনলাইন ফিল্টারিং সবচেয়ে ভালো। যেহেতু AlloyDB ভেক্টর সূচকের মাধ্যমে অনুসন্ধান করে, এটি কেবলমাত্র মেটাডেটা ফিল্টারিং অবস্থার সাথে মেলে এমন ভেক্টরগুলির জন্য দূরত্ব গণনা করে (কোয়েরিতে আপনার কার্যকরী ফিল্টারগুলি সাধারণত WHERE ক্লজে পরিচালনা করা হয়)। এটি পোস্ট-ফিল্টার বা প্রি-ফিল্টারের সুবিধার পরিপূরক এই প্রশ্নের জন্য কর্মক্ষমতা ব্যাপকভাবে উন্নত করে।
অভিযোজিত ফিল্টারিং
কর্মক্ষমতা আরও অপ্টিমাইজ করার জন্য, AlloyDB এর অভিযোজিত ফিল্টারিং ক্যোয়ারী সম্পাদনের সময় গতিশীলভাবে সবচেয়ে কার্যকর ফিল্টারিং কৌশল (ইনলাইন বা প্রি-ফিল্টারিং) বেছে নেয়। এটি ম্যানুয়াল হস্তক্ষেপ ছাড়াই সর্বোত্তম কর্মক্ষমতা নিশ্চিত করতে ক্যোয়ারী প্যাটার্ন এবং ডেটা বিতরণ বিশ্লেষণ করে, বিশেষত ফিল্টার করা ভেক্টর অনুসন্ধানের জন্য উপকারী যেখানে এটি স্বয়ংক্রিয়ভাবে ভেক্টর এবং মেটাডেটা সূচক ব্যবহারের মধ্যে স্যুইচ করে। অভিযোজিত ফিল্টারিং সক্ষম করতে, scann.enable_preview_features পতাকা ব্যবহার করুন।
যখন অভিযোজিত ফিল্টারিং কার্যকর করার সময় ইনলাইন ফিল্টারিং থেকে প্রি-ফিল্টারিং-এ একটি সুইচ ট্রিগার করে, তখন ক্যোয়ারী প্ল্যান গতিশীলভাবে পরিবর্তিত হয়।
SET scann.enable_preview_features = on;
গুরুত্বপূর্ণ দ্রষ্টব্য: আপনি যদি ত্রুটির সম্মুখীন হন তবে আপনি উদাহরণটি পুনরায় চালু না করে উপরের বিবৃতিটি চালাতে সক্ষম হবেন না — আপনার উদাহরণের ডাটাবেস পতাকা বিভাগ থেকে enable_preview_features পতাকাটি আরও ভালভাবে সক্ষম করুন।
সমস্ত সূচক ব্যবহার করে মুখী ফিল্টার
মুখী অনুসন্ধান ব্যবহারকারীদের নির্দিষ্ট বৈশিষ্ট্য বা "অভিমুখ" (যেমন, ব্র্যান্ড, মূল্য, আকার, গ্রাহক রেটিং) এর উপর ভিত্তি করে একাধিক ফিল্টার প্রয়োগ করে ফলাফল পরিমার্জন করতে দেয়। আমাদের অ্যাপ্লিকেশন ভেক্টর অনুসন্ধানের সাথে এই দিকগুলিকে নির্বিঘ্নে সংহত করে। একটি একক ক্যোয়ারী এখন প্রাকৃতিক ভাষা (প্রসঙ্গগত অনুসন্ধান) একত্রিত করতে পারে বহুমুখী নির্বাচনের সাথে, গতিশীলভাবে উভয় ভেক্টর এবং ঐতিহ্যগত সূচীকে ব্যবহার করে। এটি একটি সত্যিকারের ডায়নামিক হাইব্রিড অনুসন্ধান ক্ষমতা প্রদান করে, যা ব্যবহারকারীদের সঠিকভাবে ফলাফলে ড্রিল ডাউন করতে দেয়।
আমাদের অ্যাপ্লিকেশানে, যেহেতু আমরা ইতিমধ্যেই সমস্ত মেটাডেটা সূচী তৈরি করেছি, তাই আমরা সরাসরি এসকিউএল ক্যোয়ারীগুলি ব্যবহার করে ঠিকানার মাধ্যমে ওয়েবে ফেসেটেড ফিল্টার ব্যবহারের জন্য প্রস্তুত:
SELECT id, content, uri, category, sub_category,color,gender
FROM apparels
WHERE category = ANY($1) and sub_Category = ANY($2) and color = ANY($3) and gender = ANY($4)
ORDER BY embedding <=> embedding('text-embedding-005',$5)::vector limit 10 ;
এই ক্যোয়ারীতে, আমরা হাইব্রিড সার্চ করছি — উভয়কে অন্তর্ভুক্ত করে
- WHERE ক্লজে ফেসটেড ফিল্টারিং এবং
- কোসাইন সাদৃশ্য পদ্ধতি ব্যবহার করে ORDER BY ধারায় ভেক্টর অনুসন্ধান করুন।
$1, $2, $3 এবং $4 একটি অ্যারেতে ফেসটেড ফিল্টার মানগুলিকে উপস্থাপন করে এবং $5 ব্যবহারকারীর অনুসন্ধান পাঠ্যকে প্রতিনিধিত্ব করে। নিচের মত আপনার পছন্দের ফিল্টার মান দিয়ে $1 থেকে $4 প্রতিস্থাপন করুন:
বিভাগ = যেকোনও (['পোশাক', 'পাদুকা'])
আপনার পছন্দের একটি অনুসন্ধান পাঠ্যের সাথে $5 প্রতিস্থাপন করুন, বলুন, "পোলো টি-শার্ট"।
গুরুত্বপূর্ণ দ্রষ্টব্য: আপনার ঢোকানো রেকর্ডের সীমিত সেটের কারণে যদি আপনার কাছে সূচী না থাকে, তাহলে আপনি কর্মক্ষমতা প্রভাব দেখতে পাবেন না। কিন্তু একটি সম্পূর্ণ প্রোডাকশন ডেটাসেটে আপনি লক্ষ্য করবেন যে ভেক্টর অনুসন্ধানে ইনলাইন ফিল্টারিং ইনফিউজড স্ক্যানএন সূচক ব্যবহার করে একই ভেক্টর অনুসন্ধানের জন্য কার্যকর করার সময় উল্লেখযোগ্যভাবে হ্রাস পেয়েছে যা এটি সম্ভব করেছে!!!
এর পরে, আসুন এই ScaNN সক্ষম ভেক্টর অনুসন্ধানের জন্য প্রত্যাহার মূল্যায়ন করি।
রির্যাঙ্কিং
এমনকি উন্নত অনুসন্ধানের সাথেও, প্রাথমিক ফলাফলের চূড়ান্ত পলিশের প্রয়োজন হতে পারে। এটি একটি গুরুত্বপূর্ণ পদক্ষেপ যা প্রাসঙ্গিকতা উন্নত করার জন্য প্রাথমিক অনুসন্ধান ফলাফলগুলিকে পুনরায় সাজায়৷ প্রাথমিক হাইব্রিড অনুসন্ধান প্রার্থী পণ্যগুলির একটি সেট সরবরাহ করার পরে, একটি আরও পরিশীলিত (এবং প্রায়শই গণনাগতভাবে ভারী) মডেল একটি সূক্ষ্ম-দানাযুক্ত প্রাসঙ্গিক স্কোর প্রয়োগ করে। এটি নিশ্চিত করে যে ব্যবহারকারীর কাছে উপস্থাপিত শীর্ষ ফলাফলগুলি সবচেয়ে প্রাসঙ্গিক, উল্লেখযোগ্যভাবে অনুসন্ধানের গুণমানকে উন্নত করে৷ প্রদত্ত প্রশ্নের জন্য সিস্টেমটি কতটা ভালভাবে প্রাসঙ্গিক আইটেমগুলি পুনরুদ্ধার করে তা পরিমাপ করার জন্য আমরা ক্রমাগত প্রত্যাহার মূল্যায়ন করি, আমাদের মডেলগুলিকে পরিমার্জন করে একটি গ্রাহকের তাদের যা প্রয়োজন তা খুঁজে পাওয়ার সম্ভাবনাকে সর্বাধিক করে তোলে।
আপনি আপনার অ্যাপ্লিকেশনে এটি ব্যবহার করার আগে, নিশ্চিত করুন যে আপনি সমস্ত পূর্বশর্ত পূরণ করেছেন:
- google_ml_integration এক্সটেনশন ইনস্টল করা আছে কিনা তা যাচাই করুন।
- যাচাই করুন যে google_ml_integration.enable_model_support পতাকা চালু আছে।
- Vertex AI এর সাথে একীভূত করুন।
- ডিসকভারি ইঞ্জিন API সক্ষম করুন৷
- র্যাঙ্কিং মডেল ব্যবহার করার জন্য প্রয়োজনীয় ভূমিকা পান।
এবং তারপর আপনি হাইব্রিড-অনুসন্ধান ফলাফল সেট পুনরায় র্যাঙ্ক করতে আমাদের অ্যাপ্লিকেশনে নিম্নলিখিত ক্যোয়ারী ব্যবহার করতে পারেন:
WITH initial_ranking AS (
SELECT id,content, pdt_desc, uri, category, sub_category,color,gender,
ROW_NUMBER() OVER () AS ref_number
FROM apparels
order by embedding <=>embedding('text-embedding-005', 'Pink top')::vector),
reranked_results AS (
SELECT index, score from
ai.rank(
model_id => 'semantic-ranker-default-003',
search_string => 'Pink top',
documents => (SELECT ARRAY_AGG(pdt_desc ORDER BY ref_number) FROM initial_ranking)
)
)
SELECT id,content, pdt_desc, uri, category, sub_category,color,gender, score
FROM initial_ranking, reranked_results
WHERE initial_ranking.ref_number = reranked_results.index
ORDER BY reranked_results.score DESC
limit 25;
এই ক্যোয়ারীতে, আমরা কোসাইন সাদৃশ্য পদ্ধতি ব্যবহার করে ORDER BY ধারায় সম্বোধন করা প্রাসঙ্গিক অনুসন্ধানের পণ্য ফলাফল সেটের RERANKING সম্পাদন করছি। 'পিঙ্ক টপ' হল সেই টেক্সট যা ব্যবহারকারী খুঁজছেন।
গুরুত্বপূর্ণ দ্রষ্টব্য: আপনার মধ্যে কেউ কেউ এখনও রির্যাঙ্কিং-এ অ্যাক্সেস নাও থাকতে পারে, তাই আমি এটিকে অ্যাপ্লিকেশন কোড থেকে বাদ দিয়েছি, কিন্তু আপনি যদি এটি অন্তর্ভুক্ত করতে চান তবে আপনি উপরে আমরা যে নমুনাটি কভার করেছি তা অনুসরণ করতে পারেন।
মূল্যায়নকারীকে স্মরণ করুন
রিকল ইন সাদৃশ্য অনুসন্ধান হল প্রাসঙ্গিক দৃষ্টান্তের শতাংশ যা একটি অনুসন্ধান থেকে পুনরুদ্ধার করা হয়েছে, অর্থাৎ সত্য ইতিবাচক সংখ্যা। এটি অনুসন্ধানের গুণমান পরিমাপের জন্য ব্যবহৃত সবচেয়ে সাধারণ মেট্রিক। প্রত্যাহার ক্ষতির একটি উৎস আনুমানিক নিকটতম প্রতিবেশী অনুসন্ধান, বা aNN, এবং k (সঠিক) নিকটতম প্রতিবেশী অনুসন্ধান, বা kNN এর মধ্যে পার্থক্য থেকে আসে। AlloyDB-এর ScaNN-এর মতো ভেক্টর সূচীগুলি aNN অ্যালগরিদম প্রয়োগ করে , যা আপনাকে প্রত্যাহারে একটি ছোট ট্রেডঅফের বিনিময়ে বড় ডেটাসেটে ভেক্টর অনুসন্ধানের গতি বাড়াতে দেয়। এখন, AlloyDB আপনাকে পৃথক প্রশ্নের জন্য ডাটাবেসে সরাসরি এই ট্রেডঅফ পরিমাপ করার ক্ষমতা প্রদান করে এবং নিশ্চিত করে যে এটি সময়ের সাথে স্থিতিশীল। আপনি আরও ভাল ফলাফল এবং কর্মক্ষমতা অর্জন করতে এই তথ্যের প্রতিক্রিয়া হিসাবে ক্যোয়ারী এবং সূচক প্যারামিটার আপডেট করতে পারেন।
অনুসন্ধান ফলাফল প্রত্যাহার পিছনে যুক্তি কি?
ভেক্টর অনুসন্ধানের পরিপ্রেক্ষিতে, প্রত্যাহার ভেক্টরের শতাংশকে বোঝায় যা সূচকটি প্রদান করে যা সত্য নিকটতম প্রতিবেশী। উদাহরণস্বরূপ, যদি 20টি নিকটতম প্রতিবেশীর জন্য একটি নিকটতম প্রতিবেশীর প্রশ্ন 19টি গ্রাউন্ড ট্রুথ নিকটতম প্রতিবেশীদের প্রদান করে, তাহলে প্রত্যাহার 19/20x100 = 95%। রিকল হল সার্চ কোয়ালিটির জন্য ব্যবহৃত মেট্রিক, এবং প্রত্যাবর্তিত ফলাফলের শতাংশ হিসাবে সংজ্ঞায়িত করা হয় যেগুলি বস্তুনিষ্ঠভাবে কোয়েরি ভেক্টরের কাছাকাছি।
আপনি evaluate_query_recall ফাংশন ব্যবহার করে একটি প্রদত্ত কনফিগারেশনের জন্য একটি ভেক্টর সূচকে একটি ভেক্টর কোয়েরির জন্য রিকল খুঁজে পেতে পারেন। এই ফাংশনটি আপনাকে ভেক্টর কোয়েরি রিকল ফলাফলগুলি অর্জন করতে আপনার প্যারামিটারগুলি টিউন করতে দেয় যা আপনি চান।
গুরুত্বপূর্ণ নোট:
আপনি যদি নিম্নলিখিত ধাপে HNSW সূচকে অনুমতি অস্বীকার ত্রুটির সম্মুখীন হন, তাহলে আপাতত এই সম্পূর্ণ প্রত্যাহার মূল্যায়ন বিভাগটি এড়িয়ে যান। এটি এই মুহুর্তে অ্যাক্সেস সীমাবদ্ধতার সাথে করতে হতে পারে কারণ এই কোডল্যাবটি নথিভুক্ত করার সময় এটি প্রকাশিত হয়েছে।
- ScaNN সূচক এবং HNSW সূচকে সক্ষম সূচক স্ক্যান পতাকা সেট করুন:
SET scann.enable_indexscan = on
SET hnsw.enable_index_scan = on
- AlloyDB স্টুডিওতে নিম্নলিখিত ক্যোয়ারী চালান:
SELECT
*
FROM
evaluate_query_recall($$
SELECT id,content, pdt_desc, uri, category, sub_category,color,gender
FROM
apparels
order by embedding <=> embedding('text-embedding-005', 'skirts for women')::vector
LIMIT 25 $$,
'{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
ARRAY['scann']);
evaluate_query_recall ফাংশনটি একটি প্যারামিটার হিসাবে ক্যোয়ারী নেয় এবং এটির প্রত্যাহার করে। আমি একই ক্যোয়ারী ব্যবহার করছি যা আমি ফাংশন ইনপুট ক্যোয়ারী হিসাবে কর্মক্ষমতা পরীক্ষা করতে ব্যবহার করছি। আমি সূচী পদ্ধতি হিসাবে SCaNN যোগ করেছি। আরও প্যারামিটার বিকল্পের জন্য ডকুমেন্টেশন পড়ুন।
এই ভেক্টর অনুসন্ধান ক্যোয়ারীটির প্রত্যাহার আমরা ব্যবহার করছি:
আমি দেখতে পাচ্ছি যে RECALL 96%। এখন এই ক্ষেত্রে প্রত্যাহার সত্যিই ভাল. কিন্তু যদি এটি একটি অগ্রহণযোগ্য মান হয়, তাহলে আপনি এই তথ্যটি ব্যবহার করতে পারেন ইনডেক্স প্যারামিটার, পদ্ধতি এবং ক্যোয়ারী প্যারামিটার পরিবর্তন করতে এবং এই ভেক্টর অনুসন্ধানের জন্য আমার প্রত্যাহার উন্নত করতে!
পরিবর্তিত ক্যোয়ারী এবং সূচক প্যারামিটার দিয়ে এটি পরীক্ষা করুন
এখন প্রাপ্ত রিকলের উপর ভিত্তি করে ক্যোয়ারী পরামিতি পরিবর্তন করে ক্যোয়ারী পরীক্ষা করা যাক।
- সূচক পরামিতি সংশোধন করা হচ্ছে:
এই পরীক্ষার জন্য, আমি "কোসাইন" সাদৃশ্য দূরত্ব ফাংশনের পরিবর্তে "L2 দূরত্ব" ব্যবহার করতে যাচ্ছি।
অত্যন্ত গুরুত্বপূর্ণ দ্রষ্টব্য: "আমরা কিভাবে জানি যে এই প্রশ্নটি COSINE সাদৃশ্য ব্যবহার করে?" আপনি জিজ্ঞাসা করুন আপনি কোসাইন দূরত্ব উপস্থাপন করতে "<=>" ব্যবহার করে দূরত্ব ফাংশন সনাক্ত করতে পারেন।
ভেক্টর অনুসন্ধান দূরত্ব ফাংশন জন্য ডক্স লিঙ্ক .
পূর্ববর্তী ক্যোয়ারীটি কোসাইন সাদৃশ্য দূরত্ব ফাংশন ব্যবহার করে যেখানে এখন আমরা L2 দূরত্ব চেষ্টা করতে যাচ্ছি। কিন্তু এর জন্য আমাদের এটাও নিশ্চিত করা উচিত যে অন্তর্নিহিত ScaNN সূচক L2 দূরত্ব ফাংশন ব্যবহার করে। এখন একটি ভিন্ন দূরত্ব ফাংশন কোয়েরি সহ একটি সূচক তৈরি করা যাক: L2 দূরত্ব: <->
drop index apparels_index;
CREATE INDEX apparels_index ON apparels
USING scann (embedding L2)
WITH (num_leaves=32);
ড্রপ ইনডেক্স বিবৃতিটি শুধুমাত্র টেবিলে কোন অপ্রয়োজনীয় সূচক নেই তা নিশ্চিত করার জন্য।
এখন, আমি আমার ভেক্টর অনুসন্ধান কার্যকারিতার দূরত্ব ফাংশন পরিবর্তন করার পরে RECALL মূল্যায়ন করতে নিম্নলিখিত ক্যোয়ারীটি চালাতে পারি।
[পরে] প্রশ্ন যা L2 দূরত্ব ফাংশন ব্যবহার করে:
SELECT
*
FROM
evaluate_query_recall($$
SELECT id,content, pdt_desc, uri, category, sub_category,color,gender
FROM
apparels
order by embedding <-> embedding('text-embedding-005', 'skirts for women')::vector
LIMIT 25 $$,
'{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
ARRAY['scann']);
আপনি আপডেট করা সূচকের জন্য প্রত্যাহার মানের পার্থক্য / রূপান্তর দেখতে পারেন।
অন্যান্য পরামিতি রয়েছে যা আপনি সূচকে পরিবর্তন করতে পারেন, যেমন num_leaves ইত্যাদি। পছন্দসই রিকল মান এবং আপনার অ্যাপ্লিকেশন ব্যবহার করা ডেটাসেটের উপর ভিত্তি করে।
ভেক্টর অনুসন্ধান ফলাফলের এলএলএম বৈধতা
সর্বোচ্চ মানের নিয়ন্ত্রিত অনুসন্ধান অর্জনের জন্য, আমরা এলএলএম যাচাইকরণের একটি ঐচ্ছিক স্তর অন্তর্ভুক্ত করেছি। বৃহৎ ভাষার মডেলগুলি অনুসন্ধান ফলাফলের প্রাসঙ্গিকতা এবং সংগতি মূল্যায়ন করতে ব্যবহার করা যেতে পারে, বিশেষ করে জটিল বা অস্পষ্ট প্রশ্নের জন্য। এটি জড়িত হতে পারে:
শব্দার্থগত যাচাইকরণ:
একটি LLM ক্রস-রেফারেন্সিং কোয়েরির অভিপ্রায়ের বিরুদ্ধে ফলাফল।
লজিক্যাল ফিল্টারিং:
একটি LLM ব্যবহার করে জটিল ব্যবসায়িক যুক্তি বা নিয়মগুলি প্রয়োগ করা যা ঐতিহ্যগত ফিল্টারগুলিতে এনকোড করা কঠিন, পণ্যের তালিকাকে আরও পরিমার্জিত করে।
গুণমানের নিশ্চয়তা:
মানব পর্যালোচনা বা মডেল পরিমার্জনের জন্য স্বয়ংক্রিয়ভাবে কম প্রাসঙ্গিক ফলাফল সনাক্ত করা এবং পতাকাঙ্কিত করা।
AlloyDB AI বৈশিষ্ট্যগুলিতে আমরা এইভাবে সম্পন্ন করেছি:
WITH
apparels_temp as (
SELECT id,content, pdt_desc, uri, category, sub_category,color,gender
FROM apparels
-- where category = ANY($1) and sub_category = ANY($2) and color = ANY($3) and gender = ANY($4)
order by embedding <=> embedding('text-embedding-005', $5)::vector
limit 25
),
prompt AS (
SELECT 'You are a friendly advisor helping to filter whether a product match' || pdt_desc || 'is reasonably (not necessarily 100% but contextually in agreement) related to the customer''s request: ' || $5 || '. Respond only in YES or NO. Do not add any other text.'
AS prompt_text, *
from apparels_temp
)
,
response AS (
SELECT id,content,pdt_desc,uri,
json_array_elements(ml_predict_row('projects/abis-345004/locations/us-central1/publishers/google/models/gemini-1.5-pro:streamGenerateContent',
json_build_object('contents',
json_build_object('role',
'user',
'parts',
json_build_object('text', prompt_text)))))->'candidates'->0->'content'->'parts'->0->'text' AS resp
FROM
prompt)
SELECT id, content,uri,replace(replace(resp::text,'\n',''),'"','') as result
FROM
response where replace(replace(resp::text,'\n',''),'"','') in ('YES', 'NO')
limit 10;
অন্তর্নিহিত ক্যোয়ারী হল একই ক্যোয়ারী যা আমরা ফেসেটেড সার্চ, হাইব্রিড সার্চ এবং রির্যাঙ্কিং বিভাগে দেখেছি। এখন এই ক্যোয়ারীতে আমরা ML_predict_row কনস্ট্রাক্ট দ্বারা উপস্থাপিত পুনর্বিন্যাস ফলাফল সেটের GEMINI মূল্যায়নের একটি স্তর অন্তর্ভুক্ত করেছি। আমি ফেসটেড ফিল্টারগুলি সম্পর্কে মন্তব্য করেছি, কিন্তু আপনার পছন্দের আইটেমগুলিকে স্থানধারক $1 থেকে $4-এর জন্য একটি অ্যারেতে অন্তর্ভুক্ত করতে নির্দ্বিধায়। আপনি যে টেক্সট অনুসন্ধান করতে চান তার সাথে $5 প্রতিস্থাপন করুন, বলুন, "পিঙ্ক টপ, নো ফ্লোরাল প্যাটার্ন"।
7. ডাটাবেস এবং অ্যাপ্লিকেশন লেয়ারের জন্য MCP টুলবক্স
পর্দার আড়ালে, শক্তিশালী টুলিং এবং একটি সুগঠিত অ্যাপ্লিকেশন মসৃণ অপারেশন নিশ্চিত করে।
ডাটাবেসের জন্য MCP (মডেল কনটেক্সট প্রোটোকল) টুলবক্স AlloyDB-এর সাথে জেনারেটিভ এআই এবং এজেন্টিক টুলের একীকরণকে সহজ করে। এটি একটি ওপেন-সোর্স সার্ভার হিসাবে কাজ করে যা সংযোগ পুলিং, প্রমাণীকরণ, এবং AI এজেন্ট বা অন্যান্য অ্যাপ্লিকেশনগুলিতে ডেটাবেস কার্যকারিতাগুলির নিরাপদ এক্সপোজারকে স্ট্রীমলাইন করে।
আমাদের অ্যাপ্লিকেশনে আমরা ডাটাবেসের জন্য MCP টুলবক্স ব্যবহার করেছি আমাদের সমস্ত বুদ্ধিমান হাইব্রিড অনুসন্ধান প্রশ্নের জন্য একটি বিমূর্ত স্তর হিসাবে।
সেট আপ করতে নীচের পদক্ষেপগুলি অনুসরণ করুন, আমাদের ব্যবহারের ক্ষেত্রে টুলবক্স স্থাপন করুন:
আপনি দেখতে পাচ্ছেন যে ডাটাবেসের জন্য MCP টুলবক্স দ্বারা সমর্থিত ডেটাবেসগুলির মধ্যে একটি হল AlloyDB এবং যেহেতু আমরা ইতিমধ্যেই পূর্ববর্তী বিভাগে এটির ব্যবস্থা করেছি, আসুন এগিয়ে যান এবং টুলবক্স সেট আপ করি৷
- আপনার ক্লাউড শেল টার্মিনালে নেভিগেট করুন এবং নিশ্চিত করুন যে আপনার প্রকল্পটি নির্বাচিত হয়েছে এবং টার্মিনালের প্রম্পটে দেখানো হয়েছে। আপনার প্রকল্প ডিরেক্টরিতে নেভিগেট করতে আপনার ক্লাউড শেল টার্মিনাল থেকে নীচের কমান্ডটি চালান:
mkdir toolbox-tools
cd toolbox-tools
- আপনার নতুন ফোল্ডারে টুলবক্স ডাউনলোড এবং ইনস্টল করতে নীচের কমান্ডটি চালান:
# see releases page for other versions
export VERSION=0.7.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox
- ক্লাউড শেল এডিটরে নেভিগেট করুন (কোড এডিট মোডের জন্য) এবং প্রোজেক্ট রুট ফোল্ডারে "tools.yaml" নামে একটি ফাইল যোগ করুন।
sources:
alloydb:
kind: "alloydb-postgres"
project: "<<YOUR_PROJECT_ID>>"
region: "us-central1"
cluster: "vector-cluster"
instance: "vector-instance"
database: "postgres"
user: "postgres"
password: "alloydb"
tools:
<<tools go here... Refer to the github repo file>>
এই রেপো ফাইলের কোড দিয়ে Tools.yaml স্ক্রিপ্ট প্রতিস্থাপন করা নিশ্চিত করুন ।
আসুন tools.yaml বুঝুন:
উত্সগুলি আপনার বিভিন্ন ডেটা উত্সের প্রতিনিধিত্ব করে যার সাথে একটি টুল ইন্টারঅ্যাক্ট করতে পারে। একটি উৎস একটি তথ্য উৎস প্রতিনিধিত্ব করে যার সাথে একটি টুল ইন্টারঅ্যাক্ট করতে পারে। আপনি আপনার tools.yaml ফাইলের উত্স বিভাগে একটি মানচিত্র হিসাবে উত্সগুলিকে সংজ্ঞায়িত করতে পারেন৷ সাধারণত, একটি উৎস কনফিগারেশনে ডাটাবেসের সাথে সংযোগ এবং ইন্টারঅ্যাক্ট করার জন্য প্রয়োজনীয় যেকোন তথ্য থাকবে।
সরঞ্জামগুলি একটি এজেন্ট যে কাজগুলি নিতে পারে তা সংজ্ঞায়িত করে - যেমন একটি উত্স পড়া এবং লেখা৷ একটি টুল আপনার এজেন্ট নিতে পারে এমন একটি কাজকে প্রতিনিধিত্ব করে, যেমন একটি SQL স্টেটমেন্ট চালানো। আপনি আপনার tools.yaml ফাইলের টুলস বিভাগে একটি মানচিত্র হিসেবে টুলকে সংজ্ঞায়িত করতে পারেন। সাধারণত, একটি টুলের উপর কাজ করার জন্য একটি উৎসের প্রয়োজন হবে।
আপনার tools.yaml কনফিগার করার বিষয়ে আরো বিস্তারিত জানার জন্য, এই ডকুমেন্টেশন পড়ুন।
- সার্ভার শুরু করতে নিম্নলিখিত কমান্ডটি চালান (mcp-toolbox ফোল্ডার থেকে):
./toolbox --tools-file "tools.yaml"
এখন আপনি যদি ক্লাউডে একটি ওয়েব প্রিভিউ মোডে সার্ভারটি খোলেন, তাহলে আপনি দেখতে পাবেন টুলবক্স সার্ভার আপ এবং আপনার নতুন টুল নামক get-order-data দিয়ে চলমান।
এমসিপি টুলবক্স সার্ভার ডিফল্টভাবে পোর্ট 5000 এ চলে। আসুন এটি পরীক্ষা করার জন্য ক্লাউড শেল ব্যবহার করি।
ক্লাউড শেলের ওয়েব প্রিভিউতে ক্লিক করুন নিচের মত:
চেঞ্জ পোর্টে ক্লিক করুন এবং নীচের চিত্রের মতো পোর্টটিকে 5000 এ সেট করুন এবং পরিবর্তন এবং পূর্বরূপ ক্লিক করুন।
এটি আউটপুট আনতে হবে:
- ক্লাউড রানে আমাদের টুলবক্স স্থাপন করা যাক:
প্রথমত, আমরা MCP টুলবক্স সার্ভার দিয়ে শুরু করতে পারি এবং এটিকে ক্লাউড রানে হোস্ট করতে পারি। এটি তখন আমাদের একটি পাবলিক এন্ডপয়েন্ট দেবে যা আমরা অন্য কোনো অ্যাপ্লিকেশন এবং/অথবা এজেন্ট অ্যাপ্লিকেশনগুলির সাথেও একীভূত করতে পারি। ক্লাউড রানে এটি হোস্ট করার নির্দেশাবলী এখানে দেওয়া হয়েছে। আমরা এখন মূল পদক্ষেপের মধ্য দিয়ে যেতে হবে.
- একটি নতুন ক্লাউড শেল টার্মিনাল চালু করুন বা একটি বিদ্যমান ক্লাউড শেল টার্মিনাল ব্যবহার করুন৷ প্রকল্প ফোল্ডারে যান যেখানে টুলবক্স বাইনারি এবং tools.yaml উপস্থিত রয়েছে, এই ক্ষেত্রে toolbox-tools, যদি আপনি ইতিমধ্যে এটির ভিতরে না থাকেন:
cd toolbox-tools
- আপনার Google ক্লাউড প্রকল্প আইডি নির্দেশ করতে PROJECT_ID ভেরিয়েবল সেট করুন।
export PROJECT_ID="<<YOUR_GOOGLE_CLOUD_PROJECT_ID>>"
- এই Google ক্লাউড পরিষেবাগুলি সক্ষম করুন৷
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
iam.googleapis.com \
secretmanager.googleapis.com
- আসুন একটি পৃথক পরিষেবা অ্যাকাউন্ট তৈরি করি যা টুলবক্স পরিষেবার পরিচয় হিসাবে কাজ করবে যা আমরা Google ক্লাউড রানে স্থাপন করব৷
gcloud iam service-accounts create toolbox-identity
- আমরা এটাও নিশ্চিত করছি যে এই পরিষেবা অ্যাকাউন্টের সঠিক ভূমিকা রয়েছে যেমন সিক্রেট ম্যানেজার অ্যাক্সেস করার এবং AlloyDB এর সাথে কথা বলার ক্ষমতা
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com \
--role roles/secretmanager.secretAccessor
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com \
--role roles/alloydb.client
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com \
--role roles/serviceusage.serviceUsageConsumer
- আমরা একটি গোপন হিসাবে tools.yaml ফাইল আপলোড করব:
gcloud secrets create tools --data-file=tools.yaml
আপনার যদি ইতিমধ্যে একটি গোপন থাকে এবং গোপন সংস্করণটি আপডেট করতে চান তবে নিম্নলিখিতগুলি সম্পাদন করুন:
gcloud secrets versions add tools --data-file=tools.yaml
- আপনি ক্লাউড রানের জন্য যে কন্টেইনার ইমেজটি ব্যবহার করতে চান তাতে একটি পরিবেশ পরিবর্তনশীল সেট করুন:
export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
- ক্লাউড রানে পরিচিত স্থাপনার কমান্ডের শেষ ধাপ:
gcloud run deploy toolbox \
--image $IMAGE \
--service-account toolbox-identity \
--region us-central1 \
--set-secrets "/app/tools.yaml=tools:latest" \
--args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
--allow-unauthenticated \
--labels dev-tutorial=codelab-alloydb-search-toolbox
এটি আমাদের কনফিগার করা tools.yaml এর সাথে ক্লাউড রানে টুলবক্স সার্ভার স্থাপনের প্রক্রিয়া শুরু করবে। সফল স্থাপনায়, আপনি নিম্নলিখিতগুলির মতো একটি বার্তা দেখতে পাবেন:
Deploying container to Cloud Run service [toolbox] in project [YOUR_PROJECT_ID] region [us-central1]
OK Deploying new service... Done.
OK Creating Revision...
OK Routing traffic...
OK Setting IAM Policy...
Done.
Service [toolbox] revision [toolbox-00001-zsk] has been deployed and is serving 100 percent of traffic.
Service URL: https://toolbox-<SOME_ID>.us-central1.run.app
আপনি আপনার এজেন্টিক অ্যাপ্লিকেশনে আপনার নতুন স্থাপন করা টুল ব্যবহার করতে প্রস্তুত!!!
টুলবক্স সার্ভারে টুল অ্যাক্সেস করা
একবার টুলবক্স স্থাপন করা হলে, আমরা স্থাপন করা টুলবক্স সার্ভারের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি পাইথন ক্লাউড রান ফাংশন শিম তৈরি করব। কারণ বর্তমানে টুলবক্সে জাভা SDK নেই , তাই আমরা সার্ভারের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি পাইথন শিম তৈরি করেছি। এখানে সেই ক্লাউড রান ফাংশনের সোর্স কোড রয়েছে।
আপনাকে এই ক্লাউড রান ফাংশনটি তৈরি এবং স্থাপন করতে হবে যাতে আমরা এইমাত্র তৈরি এবং পূর্ববর্তী ধাপে স্থাপন করা টুলবক্স টুলগুলি অ্যাক্সেস করতে সক্ষম হতে পারি:
- Google ক্লাউড কনসোলে, ক্লাউড রান পৃষ্ঠাতে যান
- একটি ফাংশন লিখুন ক্লিক করুন.
- পরিষেবার নাম ক্ষেত্রে, আপনার ফাংশন বর্ণনা করতে একটি নাম লিখুন। পরিষেবার নামগুলি শুধুমাত্র একটি অক্ষর দিয়ে শুরু করতে হবে এবং অক্ষর, সংখ্যা বা হাইফেন সহ 49টি বা তার কম অক্ষর থাকতে হবে৷ পরিষেবার নামগুলি হাইফেন দিয়ে শেষ হতে পারে না এবং অঞ্চল এবং প্রকল্পের জন্য অনন্য হতে হবে৷ একটি পরিষেবার নাম পরে পরিবর্তন করা যাবে না এবং সর্বজনীনভাবে দৃশ্যমান। (খুচরা-পণ্য-সার্চ-গুণমান লিখুন)
- অঞ্চল তালিকায়, ডিফল্ট মান ব্যবহার করুন, অথবা আপনি যে অঞ্চলে আপনার ফাংশন স্থাপন করতে চান সেটি নির্বাচন করুন। (আমাদের নির্বাচন করুন-কেন্দ্রীয়1)
- রানটাইম তালিকায়, ডিফল্ট মান ব্যবহার করুন বা রানটাইম সংস্করণ নির্বাচন করুন। (পাইথন 3.11 চয়ন করুন)
- প্রমাণীকরণ বিভাগে, "পাবলিক অ্যাক্সেসের অনুমতি দিন" নির্বাচন করুন
- "তৈরি করুন" বোতামে ক্লিক করুন
- ফাংশনটি তৈরি করা হয় এবং একটি টেমপ্লেট main.py এবং requirements.txt দিয়ে লোড হয়
- এই প্রকল্পের রেপো থেকে ফাইলগুলি: main.py এবং requirements.txt দিয়ে এটি প্রতিস্থাপন করুন
- ফাংশনটি স্থাপন করুন এবং আপনার ক্লাউড রান ফাংশনের জন্য একটি শেষ পয়েন্ট পাওয়া উচিত
আপনার শেষ বিন্দু এই মত দেখতে হবে (বা অনুরূপ কিছু):
টুলবক্স অ্যাক্সেস করার জন্য ক্লাউড রান ফাংশন এন্ডপয়েন্ট: "https://retail-product-search-quality-<<YOUR_PROJECT_NUMBER>>.us-central1.run.app"
টাইমলাইনের মধ্যে সহজে সম্পন্ন করার জন্য (হ্যান্ড-অন ইন্সট্রাক্টর-লিড সেশনের জন্য) শেষ পয়েন্টের প্রকল্প নম্বর হ্যান্ড-অন সেশনের সময় শেয়ার করা হবে।
গুরুত্বপূর্ণ নোট:
বিকল্পভাবে আপনি আপনার অ্যাপ্লিকেশন কোড বা ক্লাউড রান ফাংশনের অংশ হিসাবে সরাসরি ডাটাবেস অংশটি বাস্তবায়ন করতে পারেন।
8. মুখী অনুসন্ধান সহ অ্যাপ্লিকেশন ডেভেলপমেন্ট (জাভা)
অবশেষে, এই সমস্ত শক্তিশালী ব্যাকএন্ড উপাদানগুলিকে প্রয়োগ স্তরের মাধ্যমে প্রাণবন্ত করা হয়। জাভাতে তৈরি, অ্যাপ্লিকেশনটি সার্চ সিস্টেমের সাথে ইন্টারঅ্যাক্ট করার জন্য ইউজার ইন্টারফেস প্রদান করে। এটি অ্যালোয়ডিবি-তে প্রশ্নগুলিকে অর্কেস্ট্রেট করে, মুখী ফিল্টারগুলির প্রদর্শন পরিচালনা করে, ব্যবহারকারীর নির্বাচন পরিচালনা করে এবং একটি বিরামহীন এবং স্বজ্ঞাত পদ্ধতিতে পুনরায় র্যাঙ্ক করা, যাচাইকৃত অনুসন্ধান ফলাফল উপস্থাপন করে।
- আপনি আপনার ক্লাউড শেল টার্মিনালে নেভিগেট করে এবং সংগ্রহস্থল ক্লোন করে শুরু করতে পারেন:
git clone https://github.com/AbiramiSukumaran/faceted_searching_retail
- ক্লাউড শেল এডিটরে নেভিগেট করুন , যেখানে আপনি নতুন তৈরি ফোল্ডার faceted_searching_retail দেখতে পাবেন
- নিম্নলিখিতগুলি মুছুন কারণ সেই পদক্ষেপগুলি ইতিমধ্যে পূর্ববর্তী বিভাগে সম্পন্ন হয়েছে:
- Cloud_Run_Function ফোল্ডারটি মুছুন
- db_script.sql ফাইলটি মুছুন
- tools.yaml ফাইলটি মুছে দিন
- প্রোজেক্ট ফোল্ডারে নেভিগেট করুন খুচরা-মুখী-অনুসন্ধান এবং আপনার প্রকল্পের কাঠামো দেখতে হবে:
- ProductRepository.java ফাইলে আপনাকে আপনার ক্লাউড রান ফাংশন (নিয়োজিত) থেকে এন্ডপয়েন্ট সহ TOOLBOX_ENDPOINT ভেরিয়েবল পরিবর্তন করতে হবে অথবা হ্যান্ডস-অন স্পিকার থেকে এন্ডপয়েন্ট নিতে হবে।
কোডের নিম্নলিখিত লাইনের জন্য অনুসন্ধান করুন এবং এটিকে আপনার শেষ পয়েন্ট দিয়ে প্রতিস্থাপন করুন:
public static final String TOOLBOX_ENDPOINT = "https://retail-product-search-quality-<<YOUR_PROJECT_NUMBER>>.us-central1.run.app";
- নিশ্চিত করুন যে Dockerfile এবং pom.xml আপনার প্রজেক্ট কনফিগারেশনের উপর নির্ভর করে (আপনি স্পষ্টভাবে কোনো সংস্করণ বা কনফিগারেশন পরিবর্তন না করলে কোনো পরিবর্তনের প্রয়োজন নেই।
- ক্লাউড শেল টার্মিনালে নিশ্চিত করুন যে আপনি আপনার প্রধান ফোল্ডারের ভিতরে এবং প্রকল্প ফোল্ডারের মধ্যে আছেন (faceted_searching_retail / retail-faceted-search)। আপনি টার্মিনালে সঠিক ফোল্ডারে না থাকলে তা নিশ্চিত করতে নিম্নলিখিত কমান্ডগুলি ব্যবহার করুন:
cd faceted_searching_retail
cd retail-faceted-search
- স্থানীয়ভাবে আপনার আবেদন প্যাকেজ, তৈরি এবং পরীক্ষা করুন:
mvn package
mvn spring-boot:run
ক্লাউড শেল টার্মিনালে "প্রিভিউ অন পোর্ট 8080"-এ ক্লিক করে আপনি আপনার আবেদনটি দেখতে সক্ষম হবেন যা নীচে দেখানো হয়েছে:
9. ক্লাউড রানে স্থাপন করুন: ***গুরুত্বপূর্ণ পদক্ষেপ
ক্লাউড শেল টার্মিনালে নিশ্চিত করুন যে আপনি আপনার প্রধান ফোল্ডারের ভিতরে এবং প্রকল্প ফোল্ডারের মধ্যে আছেন (faceted_searching_retail / retail-faceted-search)। আপনি টার্মিনালে সঠিক ফোল্ডারে না থাকলে তা নিশ্চিত করতে নিম্নলিখিত কমান্ডগুলি ব্যবহার করুন:
cd faceted_searching_retail
cd retail-faceted-search
একবার আপনি নিশ্চিত হন যে আপনি প্রকল্প ফোল্ডারে আছেন, নিম্নলিখিত কমান্ডটি চালান:
gcloud run deploy retail-search --source . \
--region us-central1 \
--allow-unauthenticated \
--labels dev-tutorial=codelab-alloydb-hybrid-search
একবার স্থাপন করা হলে, আপনার একটি স্থাপন করা ক্লাউড রান এন্ডপয়েন্ট পাওয়া উচিত যা দেখতে এইরকম:
https://retail-search-**********-uc.a.run.app/
10. ডেমো
চলুন দেখা যাক এটি সব একত্রে কাজ করে:
উপরের চিত্রটি ডায়নামিক হাইব্রিড অনুসন্ধান অ্যাপের জন্য ল্যান্ডিং পৃষ্ঠা দেখায়।
উপরের চিত্রটিতে "জরি ছাড়া রঙিন ট্যান" অনুসন্ধানের ফলাফল রয়েছে। বাছাই করা মুখী ফিল্টার হল: জুতা, স্যান্ডেল।
উপরের চিত্রটি "কলার ছাড়া টি শার্ট" অনুসন্ধানের ফলাফল দেখায়। মুখী ফিল্টার: পোশাক
এই অ্যাপ্লিকেশনটিকে কার্যকর করার জন্য আপনি এখন আরও জেনারেটিভ এবং এজেন্টিক বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করতে পারেন৷
এটি চেষ্টা করে দেখুন যাতে আপনি নিজের উপর তৈরি করতে অনুপ্রাণিত হন!!!
11. পরিষ্কার করুন
এই পোস্টে ব্যবহৃত সংস্থানগুলির জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- গুগল ক্লাউড কনসোলে, রিসোর্স ম্যানেজার পৃষ্ঠায় যান।
- প্রকল্প তালিকায়, আপনি যে প্রকল্পটি মুছতে চান সেটি নির্বাচন করুন এবং তারপরে মুছুন ক্লিক করুন।
- ডায়ালগে, প্রজেক্ট আইডি টাইপ করুন এবং তারপরে প্রোজেক্ট মুছে ফেলতে শাট ডাউন ক্লিক করুন।
- বিকল্পভাবে, আপনি কেবল অ্যালোয়েডবি ক্লাস্টারটি মুছতে পারেন (আপনি যদি কনফিগারেশনের সময় ক্লাস্টারের জন্য ইউএস-সেন্ট্রাল 1 বেছে না নেন) তবে আমরা এই প্রকল্পের জন্য ক্লাস্টারটি মুছুন বোতামটি ক্লিক করে এই প্রকল্পের জন্য তৈরি করেছি।
12। অভিনন্দন
অভিনন্দন! আপনি ক্লাউড রানে অ্যালোয়েডব সহ একটি হাইব্রিড অনুসন্ধান অ্যাপ্লিকেশন সফলভাবে তৈরি করেছেন এবং স্থাপন করেছেন !!!
কেন এটি ব্যবসায়ের জন্য গুরুত্বপূর্ণ:
অ্যালোয়েডবি এআই দ্বারা চালিত এই গতিশীল হাইব্রিড অনুসন্ধান অ্যাপ্লিকেশনটি এন্টারপ্রাইজ খুচরা এবং অন্যান্য ব্যবসায়ের জন্য উল্লেখযোগ্য সুবিধা দেয়:
সুপিরিয়র প্রাসঙ্গিকতা: সুনির্দিষ্ট দিকযুক্ত ফিল্টারিং এবং বুদ্ধিমান পুনর্নির্মাণের সাথে প্রাসঙ্গিক (ভেক্টর) অনুসন্ধানের সংমিশ্রণের মাধ্যমে গ্রাহকরা অত্যন্ত প্রাসঙ্গিক ফলাফল পান, যার ফলে সন্তুষ্টি এবং রূপান্তরগুলি বৃদ্ধি পায়।
স্কেলিবিলিটি: অ্যালোয়েডবির আর্কিটেকচার এবং স্ক্যান ইনডেক্সিংটি বৃহত্তর পণ্য ক্যাটালগ এবং উচ্চ ক্যোয়ারী ভলিউমগুলি পরিচালনা করার জন্য ডিজাইন করা হয়েছে, যা ক্রমবর্ধমান ই-কমার্স ব্যবসায়ের জন্য গুরুত্বপূর্ণ।
পারফরম্যান্স: দ্রুত ক্যোয়ারী প্রতিক্রিয়াগুলি, এমনকি জটিল হাইব্রিড অনুসন্ধানের জন্যও একটি মসৃণ ব্যবহারকারীর অভিজ্ঞতা নিশ্চিত করে এবং বিসর্জনের হার হ্রাস করে।
ফিউচার-প্রুফিং: এআই সক্ষমতার সংহতকরণ (এম্বেডিংস, এলএলএম বৈধতা) ব্যক্তিগতকৃত সুপারিশ, কথোপকথন বাণিজ্য এবং বুদ্ধিমান পণ্য আবিষ্কারে ভবিষ্যতের অগ্রগতির জন্য আবেদনকে অবস্থান করে।
সরলীকৃত আর্কিটেকচার: অ্যালোয়েডবির মধ্যে সরাসরি ভেক্টর অনুসন্ধানকে সংহত করা পৃথক ভেক্টর ডাটাবেস বা জটিল সিঙ্ক্রোনাইজেশন, বিকাশ এবং রক্ষণাবেক্ষণকে সহজতর করার প্রয়োজনীয়তা দূর করে।
আসুন আমরা বলি যে কোনও ব্যবহারকারী প্রাকৃতিক ভাষার ক্যোয়ারিতে টাইপ করেছেন যেমন "উচ্চ খিলান সমর্থন সহ মহিলাদের জন্য পরিবেশ বান্ধব চলমান জুতা"।
একই সাথে, ব্যবহারকারী "বিভাগ: << >>" "রঙ: << >>," এর জন্য ফেসড ফিল্টার প্রয়োগ করে এবং "মূল্য: $ 100- $ 150" বলুন:
- সিস্টেমটি তাত্ক্ষণিকভাবে পণ্যগুলির একটি পরিশোধিত তালিকা ফেরত দেয়, শব্দার্থগতভাবে প্রাকৃতিক ভাষার সাথে একত্রিত হয় এবং নির্বাচিত ফিল্টারগুলির সাথে যথাযথভাবে মিলে যায়।
- পর্দার আড়ালে, স্ক্যান সূচকটি ভেক্টর অনুসন্ধান, ইনলাইন এবং অভিযোজিত ফিল্টারিংকে সম্মিলিত মানদণ্ডের সাথে কর্মক্ষমতা নিশ্চিত করে এবং পুনর্নির্মাণ শীর্ষে সর্বোত্তম ফলাফল উপস্থাপন করে।
- ফলাফলগুলির গতি এবং নির্ভুলতা সত্যই বুদ্ধিমান খুচরা অনুসন্ধানের অভিজ্ঞতার জন্য এই প্রযুক্তিগুলিকে একত্রিত করার শক্তিটিকে পরিষ্কারভাবে চিত্রিত করে।
পরবর্তী প্রজন্মের খুচরা অনুসন্ধানের অ্যাপ্লিকেশন তৈরির জন্য প্রচলিত পদ্ধতিগুলির বাইরে চলে যাওয়া এবং অ্যালোয়েডবি, ভার্টেক্স এআই, স্ক্যান ইনডেক্সিং সহ ভেক্টর অনুসন্ধান, গতিশীল ফেস্টিড ফিল্টারিং, পুনরায়ঙ্কিং এবং এলএলএম বৈধতা ব্যবহার করে আমরা একটি অতুলনীয় গ্রাহকের অভিজ্ঞতা সরবরাহ করতে পারি যা বাগদানকে চালিত করে এবং বিক্রয়কে বাড়িয়ে তোলে। এই দৃ ust ়, স্কেলযোগ্য এবং বুদ্ধিমান সমাধানটি দেখায় যে কীভাবে আধুনিক ডাটাবেস ক্ষমতা, এআইয়ের সাথে সংক্রামিত, খুচরা ভবিষ্যতের পুনর্নির্মাণ করছে !!!