1. بررسی اجمالی
در فضای رقابتی خرده فروشی امروز، توانمندسازی مشتریان برای یافتن دقیقاً آنچه به دنبال آن هستند، سریع و شهودی، بسیار مهم است. جستجوی سنتی مبتنی بر کلیدواژه اغلب کوتاهی میکند، و با پرس و جوهای ظریف و کاتالوگهای محصول گسترده دست و پنجه نرم میکند. این Codelab از یک اپلیکیشن جستجوی خرده فروشی پیچیده ساخته شده بر روی AlloyDB، AlloyDB AI، استفاده از جستجوی بردار پیشرفته، نمایه سازی scaNN، فیلترهای وجهی، و فیلترهای تطبیقی هوشمند، با رتبه بندی مجدد برای ارائه یک تجربه جستجوی پویا و ترکیبی در مقیاس سازمانی، رونمایی می کند.
اکنون ما درک اساسی از 3 چیز داریم:
- معنای جستجوی متنی برای عامل شما چیست و چگونه می توان آن را با استفاده از جستجوی برداری انجام داد.
- ما همچنین برای دستیابی به جستجوی برداری در محدوده داده های شما، که در خود پایگاه داده شما است، عمیقاً تلاش می کنیم (اگر قبلاً نمی دانستید، همه پایگاه های داده ابری Google از آن پشتیبانی می کنند!).
- ما یک گام فراتر از سایر نقاط جهان رفتیم و به شما گفتیم که چگونه میتوانید چنین قابلیت Vector Search RAG سبک وزنی را با کارایی و کیفیت بالا با قابلیت AlloyDB Vector Search با شاخص ScaNN انجام دهید.
اگر آزمایشهای اولیه، متوسط و کمی پیشرفته RAG را انجام ندادهاید، توصیه میکنم آن 3 مورد را در اینجا ، اینجا و اینجا به ترتیب فهرست شده بخوانید.
چالش
فراتر از فیلترها، کلمات کلیدی و تطبیق متنی: یک جستجوی ساده کلمه کلیدی ممکن است هزاران نتیجه را به همراه داشته باشد که بسیاری از آنها نامربوط هستند. راه حل ایده آل نیاز به درک هدف پشت پرس و جو، ترکیب آن با معیارهای فیلتر دقیق (مانند نام تجاری، مواد، یا قیمت)، و ارائه مرتبط ترین موارد در میلی ثانیه دارد. این نیاز به یک زیرساخت جستجوی قدرتمند، انعطافپذیر و مقیاسپذیر دارد. مطمئناً ما از جستجوی کلمات کلیدی به جستجوهای مطابق متنی و شباهت راه زیادی پیموده ایم. اما تصور کنید مشتری به دنبال "یک ژاکت راحت، شیک و ضد آب برای پیاده روی در بهار" است. در حالی که همزمان فیلترها اعمال می شود و برنامه شما نه تنها پاسخ های با کیفیت را برمی گرداند، بلکه عملکرد بالایی نیز دارد و دنباله همه اینها به صورت پویا توسط پایگاه داده شما انتخاب می شود.
هدف
برای رفع این مشکل با ادغام
- جستجوی متنی (جستجوی برداری): درک معنای معنایی پرس و جوها و توضیحات محصول
- فیلتر وجهی: کاربران را قادر می سازد تا نتایج را با ویژگی های خاص اصلاح کنند
- رویکرد ترکیبی: ترکیب یکپارچه جستجوی متنی با فیلتر ساختاری
- بهینه سازی پیشرفته: استفاده از نمایه سازی تخصصی، فیلتر تطبیقی و رتبه بندی مجدد برای سرعت و ارتباط
- کنترل کیفیت مولد مبتنی بر هوش مصنوعی: شامل اعتبار سنجی LLM برای کیفیت نتایج برتر.
بیایید مسیر معماری و پیاده سازی را بشکنیم.
چیزی که خواهی ساخت
یک برنامه جستجوی خرده فروشی
به عنوان بخشی از این، شما:
- یک نمونه و جدول AlloyDB برای مجموعه داده های تجارت الکترونیک ایجاد کنید
- تعبیهها و جستجوی برداری را تنظیم کنید
- نمایه ابرداده و نمایه ScaNN ایجاد کنید
- با استفاده از روش فیلتر درون خطی ScaNN، جستجوی برداری پیشرفته را در AlloyDB پیاده سازی کنید
- فیلترهای وجهی و جستجوی ترکیبی را در یک جستجو تنظیم کنید
- اصلاح ارتباط جستجو با رتبهبندی مجدد و فراخوانی (اختیاری)
- ارزیابی پاسخ پرس و جو با Gemini (اختیاری)
- جعبه ابزار MCP برای پایگاه های داده و لایه برنامه
- توسعه برنامه (جاوا) با جستجوی چند جانبه
الزامات
2. قبل از شروع
یک پروژه ایجاد کنید
- در Google Cloud Console ، در صفحه انتخاب پروژه، یک پروژه Google Cloud را انتخاب یا ایجاد کنید.
- مطمئن شوید که صورتحساب برای پروژه Cloud شما فعال است. با نحوه بررسی فعال بودن صورتحساب در پروژه آشنا شوید.
برای اعتبارات Google Cloud: اگر میخواهید اعتبار Google Cloud را برای کمک به شروع کار دریافت کنید، از این پیوند برای بازخرید اعتبار استفاده کنید. برای بازخرید آن می توانید دستورالعمل های اینجا را دنبال کنید.
- شما از Cloud Shell ، یک محیط خط فرمان که در Google Cloud اجرا می شود، استفاده خواهید کرد. روی Activate Cloud Shell در بالای کنسول Google Cloud کلیک کنید.
- پس از اتصال به Cloud Shell، با استفاده از دستور زیر بررسی میکنید که قبلاً احراز هویت شدهاید و پروژه به ID پروژه شما تنظیم شده است:
gcloud auth list
- دستور زیر را در Cloud Shell اجرا کنید تا تأیید کنید که دستور gcloud از پروژه شما اطلاع دارد.
gcloud config list project
- اگر پروژه شما تنظیم نشده است، از دستور زیر برای تنظیم آن استفاده کنید:
gcloud config set project <YOUR_PROJECT_ID>
- فعال کردن API های مورد نیاز: پیوند را دنبال کنید و API ها را فعال کنید.
همچنین می توانید از دستور gcloud برای این کار استفاده کنید. برای دستورات و استفاده از gcloud به اسناد مراجعه کنید.
3. راه اندازی پایگاه داده
در این آزمایشگاه از AlloyDB به عنوان پایگاه داده برای داده های تجارت الکترونیک استفاده خواهیم کرد. از خوشهها برای نگهداری همه منابع مانند پایگاههای داده و گزارشها استفاده میکند. هر خوشه دارای یک نمونه اولیه است که یک نقطه دسترسی به داده ها را فراهم می کند. جداول داده های واقعی را نگه می دارند.
بیایید یک خوشه، نمونه و جدول AlloyDB ایجاد کنیم که مجموعه داده تجارت الکترونیک در آن بارگذاری شود.
یک خوشه و نمونه ایجاد کنید
- صفحه AlloyDB را در Cloud Console پیمایش کنید. یک راه آسان برای یافتن بیشتر صفحات در Cloud Console این است که آنها را با استفاده از نوار جستجوی کنسول جستجو کنید.
- CREATE CLUSTER را از آن صفحه انتخاب کنید:
- صفحه ای مانند تصویر زیر خواهید دید. یک خوشه و نمونه با مقادیر زیر ایجاد کنید (مطمئن شوید که مقادیر مطابقت دارند در صورتی که کد برنامه را از مخزن شبیه سازی می کنید):
- cluster id : "
vector-cluster
" - رمز عبور : "
alloydb
" - PostgreSQL 15 / آخرین توصیه شده است
- منطقه : "
us-central1
" - شبکه سازی : "
default
"
- وقتی شبکه پیشفرض را انتخاب میکنید، صفحهای مانند تصویر زیر خواهید دید.
SET UP CONECTION را انتخاب کنید.
- از آنجا، « استفاده از محدوده IP خودکار اختصاص داده شده » را انتخاب کنید و ادامه دهید. پس از بررسی اطلاعات، CREATE CONNECTION را انتخاب کنید.
- هنگامی که شبکه شما راه اندازی شد، می توانید به ایجاد خوشه خود ادامه دهید. روی CREATE CLUSTER کلیک کنید تا راه اندازی خوشه مطابق شکل زیر کامل شود:
نکته مهم:
- مطمئن شوید که شناسه نمونه (که می توانید در زمان پیکربندی خوشه / نمونه پیدا کنید) را به **
vector-instance
** تغییر دهید. اگر نمی توانید آن را تغییر دهید، به یاد داشته باشید که **از شناسه نمونه خود** در همه مراجع بعدی استفاده کنید. - توجه داشته باشید که ایجاد Cluster حدود 10 دقیقه طول خواهد کشید. پس از موفقیت آمیز بودن، باید صفحه ای را ببینید که نمای کلی خوشه شما را که به تازگی ایجاد کرده اید نشان می دهد.
4. بلع داده ها
اکنون زمان اضافه کردن یک جدول با داده های مربوط به فروشگاه است. به AlloyDB بروید، خوشه اصلی و سپس AlloyDB Studio را انتخاب کنید:
ممکن است لازم باشد منتظر بمانید تا ایجاد نمونه شما به پایان برسد. پس از آن، با استفاده از اعتبارنامه هایی که هنگام ایجاد کلاستر ایجاد کردید، وارد AlloyDB شوید. از داده های زیر برای احراز هویت در PostgreSQL استفاده کنید:
- نام کاربری: "
postgres
" - پایگاه داده: "
postgres
" - رمز عبور: "
alloydb
"
هنگامی که با موفقیت در AlloyDB Studio احراز هویت شدید، دستورات SQL در ویرایشگر وارد می شوند. میتوانید چندین پنجره ویرایشگر را با استفاده از علامت مثبت در سمت راست آخرین پنجره اضافه کنید.
در صورت لزوم با استفاده از گزینههای Run، Format و Clear، دستورات AlloyDB را در پنجرههای ویرایشگر وارد میکنید.
برنامه های افزودنی را فعال کنید
برای ساخت این برنامه از پسوندهای pgvector
و google_ml_integration
استفاده خواهیم کرد. پسوند pgvector به شما امکان می دهد جاسازی های برداری را ذخیره و جستجو کنید. پسوند google_ml_integration توابعی را ارائه می دهد که شما برای دسترسی به نقاط پایانی پیش بینی هوش مصنوعی Vertex برای دریافت پیش بینی در SQL استفاده می کنید. با اجرای DDL های زیر این افزونه ها را فعال کنید :
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;
اگر می خواهید افزونه هایی را که در پایگاه داده شما فعال شده اند بررسی کنید، این دستور SQL را اجرا کنید:
select extname, extversion from pg_extension;
یک جدول ایجاد کنید
می توانید با استفاده از دستور DDL زیر در استودیو AlloyDB یک جدول ایجاد کنید:
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));
ستون جاسازی اجازه ذخیره سازی مقادیر برداری متن را می دهد.
اعطای مجوز
دستور زیر را اجرا کنید تا در تابع "embedding" اجرا شود:
GRANT EXECUTE ON FUNCTION embedding TO postgres;
ROLE کاربر Vertex AI را به حساب سرویس AlloyDB اعطا کنید
از کنسول Google Cloud IAM ، به حساب سرویس AlloyDB (که به نظر می رسد: service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com) به نقش "کاربر Vertex AI" اجازه دسترسی دهید. PROJECT_NUMBER شماره پروژه شما را خواهد داشت.
یا می توانید دستور زیر را از ترمینال Cloud Shell اجرا کنید:
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
query را ازinsert scripts sql
در برگه به موارد ذکر شده در بالا در ویرایشگر کپی کنید. شما می توانید 10-50 عبارت insert را برای نمایش سریع این مورد استفاده کپی کنید. یک لیست انتخاب شده از درج ها در این برگه "درج های انتخابی 25-30 ردیف" وجود دارد.
پیوند به داده ها را می توانید در این فایل مخزن github پیدا کنید .
- روی Run کلیک کنید. نتایج جستجوی شما در جدول نتایج ظاهر می شود.
نکته مهم:
مطمئن شوید که فقط 25 تا 50 رکورد را برای درج کپی کنید و مطمئن شوید که از طیفی از دسته، زیر دسته، رنگ، انواع جنسیت است.
5. برای داده ها Embeddings ایجاد کنید
نوآوری واقعی در جستجوی مدرن در درک معنا نهفته است، نه فقط کلمات کلیدی. اینجاست که جاسازی ها و جستجوی برداری وارد عمل می شوند.
ما با استفاده از مدلهای زبانی از پیش آموزشدیده، توضیحات محصول و درخواستهای کاربر را به نمایشهای عددی با ابعاد بالا به نام «جاسازیها» تبدیل کردیم. این تعبیهها معنای معنایی را به دست میآورند و به ما امکان میدهند محصولاتی را پیدا کنیم که «از نظر معنی مشابه» باشند نه اینکه فقط حاوی کلمات منطبق باشند. در ابتدا، ما با جستجوی تشابه برداری مستقیم در این جاسازیها برای ایجاد یک خط پایه آزمایش کردیم که قدرت درک معنایی را حتی قبل از بهینهسازی عملکرد نشان میداد.
ستون جاسازی اجازه ذخیره سازی مقادیر برداری متن توضیحات محصول را می دهد. ستون img_embeddings امکان ذخیره سازی جاسازی های تصویر (چند وجهی) را فراهم می کند. به این ترتیب شما همچنین می توانید از متن در برابر جستجو بر اساس فاصله تصویر استفاده کنید. اما ما فقط از جاسازی متن در این آزمایشگاه استفاده خواهیم کرد.
SELECT embedding('text-embedding-005', 'AlloyDB is a managed, cloud-hosted SQL database service.');
این باید بردار embeddings را که شبیه آرایه ای از شناورها است، برای متن نمونه در پرس و جو برگرداند. به نظر می رسد این است:
فیلد abstract_embeddings Vector را به روز کنید
DML زیر را برای به روز رسانی توضیحات محتوا در جدول با جاسازی های مربوطه اجرا کنید:
UPDATE apparels SET embedding = embedding('text-embedding-005',pdt_desc)::vector
WHERE pdt_desc IS NOT NULL;
اگر از یک حساب صورتحساب اعتبار آزمایشی برای Google Cloud استفاده میکنید، ممکن است در ایجاد بیش از چند جاسازی (مثلاً حداکثر 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. RAG پیشرفته را با ویژگی های جدید AlloyDB انجام دهید
اکنون که جدول، دادهها، جاسازیها آماده هستند، بیایید جستجوی برداری واقعی را برای متن جستجوی کاربر انجام دهیم. شما می توانید این را با اجرای پرس و جو زیر تست کنید:
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 ;
در این جستار، ما در حال مقایسه جاسازی متن جستجوی کاربر "تی شرت با یقه گرد" با جاسازی های متنی تمام توضیحات محصول در جدول پوشاک (ذخیره شده در ستونی به نام "embedding") با استفاده از تابع فاصله تشابه کسینوس (نمایش دهنده نماد "<=>" هستیم. ما در حال تبدیل کردن آن به روش embeding vector به نوع embedat vector می کنیم. در پایگاه داده LIMIT 10 نشان می دهد که ما در حال انتخاب 10 مورد مطابقت متن جستجو هستیم.
AlloyDB Vector Search RAG را به سطح بعدی می برد:
برای یک راه حل در مقیاس سازمانی، جستجوی برداری خام کافی نیست. عملکرد حیاتی است.
شاخص ScaNN (نزدیکترین همسایگان مقیاس پذیر).
برای دستیابی به جستجوی بسیار سریع تقریبی نزدیکترین همسایه (ANN)، شاخص scaNN را در AlloyDB فعال کردیم. ScaNN، یک الگوریتم پیشرفته جستجوی تقریبی نزدیکترین همسایه که توسط Google Research توسعه یافته است، برای جستجوی کارآمد شباهت برداری در مقیاس طراحی شده است. با برش کارآمد فضای جستجو و استفاده از تکنیکهای کوانتیزه کردن، پرسوجوهای برداری را تا ۴ برابر سریعتر نسبت به سایر روشهای نمایهسازی و ردپای حافظه کوچکتر ارائه میدهد. اطلاعات بیشتر در مورد آن را اینجا و اینجا بخوانید.
بیایید پسوند را فعال کنیم و ایندکس ها را ایجاد کنیم:
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);
شاخص های فراداده
در حالی که scaNN نمایه سازی برداری را انجام می دهد، شاخص های سنتی B-tree یا GIN به دقت بر روی ویژگی های ساختاریافته (مانند دسته، دسته فرعی، استایل، رنگ و غیره) تنظیم شده اند. این شاخص ها برای کارایی فیلترینگ وجهی بسیار مهم هستند. عبارات زیر را برای تنظیم نمایه های ابرداده اجرا کنید:
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 را از بخش پرچم های پایگاه داده نمونه خود فعال کنید.
فیلترهای وجهی با استفاده از تمام شاخص ها
جستجوی وجهی به کاربران این امکان را میدهد تا با اعمال فیلترهای متعدد بر اساس ویژگیها یا "وجوه" خاص (به عنوان مثال، نام تجاری، قیمت، اندازه، رتبهبندی مشتری) نتایج را اصلاح کنند. برنامه ما این جنبه ها را به طور یکپارچه با جستجوی برداری ادغام می کند. اکنون یک پرس و جو می تواند زبان طبیعی (جستجوی متنی) را با انتخاب های چند وجهی ترکیب کند و به صورت پویا از شاخص های برداری و سنتی استفاده کند. این قابلیت جستجوی ترکیبی واقعاً پویا را فراهم میکند و به کاربران اجازه میدهد تا نتایج را دقیقاً بررسی کنند.
در برنامه ما، از آنجایی که ما قبلاً همه فهرستهای فراداده را ایجاد کردهایم، همه ما برای استفاده از فیلتر وجهی در وب با آدرس دادن مستقیم به آن با استفاده از پرسوجوهای SQL تنظیم شدهایم:
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 دلار را با متن جستجوی انتخابی خود جایگزین کنید، مثلاً «تیشرت پولو».
نکته مهم: اگر به دلیل مجموعه محدودی از رکوردهایی که درج کرده اید، ایندکس ها را نداشته باشید، تأثیر عملکرد را نخواهید دید. اما در یک مجموعه داده کامل تولید مشاهده خواهید کرد که زمان اجرا برای همان جستجوی برداری به میزان قابل توجهی کاهش می یابد که با استفاده از Inline Filtering Infused ScaNN در جستجوی برداری این امکان را فراهم کرده است!!!
سپس، بیایید فراخوانی را برای این جستجوی برداری فعال ScaNN ارزیابی کنیم.
رتبه بندی مجدد
حتی با جستجوی پیشرفته، نتایج اولیه ممکن است نیاز به صیقل نهایی داشته باشند. این یک گام مهم است که نتایج جستجوی اولیه را برای بهبود ارتباط مرتب می کند. پس از اینکه جستجوی ترکیبی اولیه مجموعهای از محصولات کاندید را فراهم کرد، یک مدل پیچیدهتر (و اغلب از نظر محاسباتی سنگینتر) یک امتیاز مرتبط با دانه بندی دقیقتر را اعمال میکند. این تضمین می کند که نتایج برتر ارائه شده به کاربر مناسب ترین هستند و کیفیت جستجو را به طور قابل توجهی افزایش می دهد. ما به طور مستمر یادآوری را ارزیابی می کنیم تا اندازه گیری کنیم که سیستم تا چه حد همه موارد مرتبط را برای یک جستار معین بازیابی می کند، و مدل های خود را برای به حداکثر رساندن احتمال یافتن نیاز مشتری توسط مشتری، اصلاح می کنیم.
قبل از اینکه از این در برنامه خود استفاده کنید، مطمئن شوید که تمام پیش نیازها را برآورده کرده اید:
- بررسی کنید که پسوند google_ml_integration نصب شده باشد.
- بررسی کنید که پرچم google_ml_integration.enable_model_support روی روشن تنظیم شده باشد.
- ادغام با Vertex AI.
- Discovery Engine 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 با استفاده از روش تشابه کسینوس نشان داده شده است. "بالای صورتی" متنی است که کاربر در جستجوی آن است.
نکته مهم: ممکن است برخی از شما هنوز به رتبهبندی مجدد دسترسی نداشته باشید، بنابراین من آن را از کد برنامه حذف کردهام، اما اگر میخواهید آن را لحاظ کنید، میتوانید نمونهای را که در بالا توضیح دادیم دنبال کنید.
فراخوان ارزیاب
یادآوری در جستجوی شباهت درصد موارد مرتبطی است که از یک جستجو بازیابی شدهاند، یعنی تعداد موارد مثبت واقعی. این رایج ترین معیاری است که برای اندازه گیری کیفیت جستجو استفاده می شود. یکی از منابع از دست دادن یادآوری از تفاوت بین جستجوی تقریبی نزدیکترین همسایه یا aNN و k (دقیق) جستجوی نزدیکترین همسایه یا kNN ناشی می شود. شاخصهای برداری مانند ScaNN AlloyDB الگوریتمهای aNN را پیادهسازی میکنند و به شما این امکان را میدهند که جستجوی برداری را در مجموعه دادههای بزرگ در ازای یک معاوضه کوچک در یادآوری سرعت بخشید. اکنون، AlloyDB این امکان را برای شما فراهم می کند که این مبادله را مستقیماً در پایگاه داده برای پرس و جوهای فردی اندازه گیری کنید و از پایداری آن در طول زمان اطمینان حاصل کنید. برای دستیابی به نتایج و عملکرد بهتر، می توانید پارامترهای پرس و جو و فهرست را در پاسخ به این اطلاعات به روز کنید.
منطق پشت یادآوری نتایج جستجو چیست؟
در زمینه جستجوی برداری، یادآوری به درصد بردارهایی اشاره دارد که شاخص نزدیکترین همسایگان واقعی هستند. به عنوان مثال، اگر یک جستجوی نزدیکترین همسایه برای 20 نزدیکترین همسایه، 19 از نزدیکترین همسایگان را برگرداند، آنگاه فراخوانی 19/20x100 = 95٪ است. یادآوری معیاری است که برای کیفیت جستجو استفاده می شود و به عنوان درصدی از نتایج بازگشتی که به طور عینی نزدیک به بردارهای پرس و جو هستند تعریف می شود.
می توانید فراخوانی برای یک پرس و جو برداری را در یک شاخص برداری برای یک پیکربندی معین با استفاده از تابع ارزیابی_query_recall پیدا کنید. این تابع به شما امکان می دهد پارامترهای خود را تنظیم کنید تا به نتایج فراخوانی پرس و جو برداری که می خواهید برسید.
نکته مهم:
اگر در مراحل زیر با خطای رد مجوز در نمایه HNSW مواجه هستید، فعلاً از این بخش ارزیابی فراخوان کامل صرفنظر کنید. ممکن است در این مرحله با محدودیتهای دسترسی مرتبط باشد زیرا در زمان مستندسازی این کد لبه منتشر شده است.
- پرچم Enable Index Scan را روی فهرست ScaNN Index & HNSW تنظیم کنید:
SET scann.enable_indexscan = on
SET hnsw.enable_index_scan = on
- کوئری زیر را در AlloyDB Studio اجرا کنید:
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']);
تابع value_query_recall پرس و جو را به عنوان پارامتر می گیرد و فراخوانی آن را برمی گرداند. من از همان پرس و جوی استفاده می کنم که برای بررسی عملکرد به عنوان پرس و جو ورودی تابع استفاده کردم. من SCaNN را به عنوان روش شاخص اضافه کرده ام. برای گزینه های پارامتر بیشتر به مستندات مراجعه کنید.
فراخوانی برای این عبارت جستجوی برداری که از آن استفاده کرده ایم:
من می بینم که RECALL 96٪ است. اکنون در این مورد، فراخوانی واقعاً خوب است. اما اگر یک مقدار غیرقابل قبول بود، می توانید از این اطلاعات برای تغییر پارامترهای شاخص، روش ها و پارامترهای پرس و جو و بهبود فراخوانی من برای این جستجوی برداری استفاده کنید!
آن را با پارامترهای پرس و جو و شاخص اصلاح شده آزمایش کنید
حال بیایید پرس و جو را با تغییر پارامترهای پرس و جو بر اساس فراخوان دریافتی آزمایش کنیم.
- اصلاح پارامترهای شاخص:
برای این تست، من قصد دارم از "L2 Distance" به جای تابع فاصله تشابه "کسینوس" استفاده کنم.
نکته بسیار مهم: "چگونه بفهمیم که این پرس و جو از شباهت COSINE استفاده می کند؟" شما بپرسید می توانید تابع فاصله را با استفاده از "<=>" برای نشان دادن فاصله کسینوس شناسایی کنید.
پیوند اسناد برای توابع فاصله جستجوی برداری.
پرس و جو قبلی از تابع فاصله شباهت کسینوس استفاده می کند در حالی که اکنون می خواهیم فاصله L2 را امتحان کنیم. اما برای آن باید اطمینان حاصل کنیم که شاخص ScaNN زیربنایی نیز از تابع فاصله L2 استفاده می کند. حالا بیایید یک شاخص با یک کوئری تابع فاصله متفاوت ایجاد کنیم: فاصله L2: <->
drop index apparels_index;
CREATE INDEX apparels_index ON apparels
USING scann (embedding L2)
WITH (num_leaves=32);
عبارت drop index فقط برای اطمینان از وجود هیچ شاخص غیر ضروری روی جدول است.
اکنون، می توانم پرس و جوی زیر را برای ارزیابی RECALL پس از تغییر تابع فاصله عملکرد جستجوی برداری خود اجرا کنم.
[AFTER] کوئری که از تابع فاصله 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 را گنجانده ایم. از مدلهای زبان بزرگ میتوان برای ارزیابی ارتباط و انسجام نتایج جستجو، بهویژه برای پرسشهای پیچیده یا مبهم استفاده کرد. این می تواند شامل موارد زیر باشد:
تأیید معنایی:
یک ارجاع متقابل LLM بر خلاف قصد پرس و جو نتیجه می دهد.
فیلتر منطقی:
استفاده از یک LLM برای اعمال منطق پیچیده تجاری یا قوانینی که رمزگذاری آنها در فیلترهای سنتی سخت است، و فهرست محصولات را بر اساس معیارهای ظریف اصلاح می کند.
تضمین کیفیت:
شناسایی و پرچمگذاری خودکار نتایج کمتر مرتبط برای بررسی انسانی یا اصلاح مدل.
این روشی است که ما در ویژگی های هوش مصنوعی AlloyDB به آن دست یافته ایم:
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;
پرس و جوی زیربنایی همان پرس و جوی است که در بخش های جستجوی وجهی، جستجوی ترکیبی و رتبه بندی مجدد دیده ایم. اکنون در این پرس و جو، لایه ای از ارزیابی GEMINI از مجموعه نتایج Reranked که توسط ساختار ml_predict_row نشان داده شده است، گنجانده ایم. من در مورد فیلترهای وجهی نظر داده ام، اما با خیال راحت موارد دلخواه خود را در یک آرایه برای متغیرهای 1 تا 4 دلار قرار دهید. 5 دلار را با هر متنی که میخواهید در آن جستجو کنید، جایگزین کنید، مثلاً "بالا صورتی، بدون الگوی گل".
7. جعبه ابزار MCP برای پایگاه های داده و لایه برنامه
در پشت صحنه، ابزار قوی و یک برنامه به خوبی ساختار یافته عملکرد روان را تضمین می کند.
جعبه ابزار MCP (Model Context Protocol) برای پایگاههای داده، ادغام ابزارهای Generative AI و Agentic با AlloyDB را ساده میکند. این به عنوان یک سرور منبع باز عمل می کند که ادغام اتصال، احراز هویت، و قرار گرفتن در معرض امن عملکردهای پایگاه داده را در برابر عوامل هوش مصنوعی یا سایر برنامه ها ساده می کند.
در برنامه خود ما از جعبه ابزار MCP برای پایگاه داده به عنوان یک لایه انتزاعی برای تمام جستارهای جستجوی ترکیبی هوشمند خود استفاده کرده ایم.
مراحل زیر را برای راهاندازی دنبال کنید، جعبه ابزار را برای مورد استفاده ما مستقر کنید:
می بینید که یکی از پایگاه های داده پشتیبانی شده توسط MCP Toolbox for Databases، AlloyDB است و از آنجایی که قبلاً در قسمت قبل آن را ارائه کرده ایم، بیایید جلو برویم و Toolbox را راه اندازی کنیم.
- به ترمینال Cloud Shell خود بروید و مطمئن شوید که پروژه شما انتخاب شده و در اعلان ترمینال نشان داده شده است. دستور زیر را از ترمینال Cloud Shell خود اجرا کنید تا به فهرست پروژه خود بروید:
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
- به Cloud Shell Editor (برای حالت ویرایش کد) بروید و در پوشه root پروژه، فایلی به نام "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 را بفهمیم:
منابع نشان دهنده منابع داده های مختلف شما هستند که یک ابزار می تواند با آنها تعامل داشته باشد. یک منبع منبع داده ای را نشان می دهد که یک ابزار می تواند با آن تعامل داشته باشد. می توانید Sources را به عنوان نقشه در قسمت sources فایل tools.yaml خود تعریف کنید. به طور معمول، یک پیکربندی منبع حاوی اطلاعات مورد نیاز برای اتصال و تعامل با پایگاه داده است.
ابزارها اقداماتی را که یک عامل می تواند انجام دهد را تعریف می کند - مانند خواندن و نوشتن برای یک منبع. یک ابزار عملکردی را نشان می دهد که نماینده شما می تواند انجام دهد، مانند اجرای یک دستور SQL. می توانید Tools را به عنوان نقشه در قسمت tools فایل tools.yaml خود تعریف کنید. به طور معمول، یک ابزار برای عمل کردن به یک منبع نیاز دارد.
برای جزئیات بیشتر در مورد پیکربندی tools.yaml خود، به این مستندات مراجعه کنید.
- دستور زیر را (از پوشه mcp-toolbox) برای راه اندازی سرور اجرا کنید:
./toolbox --tools-file "tools.yaml"
اکنون اگر سرور را در حالت پیشنمایش وب در فضای ابری باز کنید، باید بتوانید سرور جعبه ابزار را با ابزار جدید خود به نام get-order-data در حال اجرا و اجرا ببینید.
سرور MCP Toolbox به طور پیش فرض روی پورت 5000 اجرا می شود. اجازه دهید از Cloud Shell برای آزمایش آن استفاده کنیم.
مطابق شکل زیر روی Web Preview در Cloud Shell کلیک کنید:
بر روی Change port کلیک کنید و مطابق شکل زیر پورت را روی 5000 قرار دهید و روی Change and Preview کلیک کنید.
این باید خروجی را بیاورد:
- بیایید جعبه ابزار خود را در Cloud Run مستقر کنیم:
ابتدا میتوانیم با سرور MCP Toolbox شروع کنیم و آن را در Cloud Run میزبانی کنیم. سپس یک نقطه پایانی عمومی به ما می دهد که می توانیم با هر برنامه دیگر و/یا برنامه های Agent نیز ادغام کنیم. دستورالعمل های میزبانی این در Cloud Run در اینجا آورده شده است. اکنون مراحل کلیدی را طی خواهیم کرد.
- یک ترمینال جدید Cloud Shell راه اندازی کنید یا از یک ترمینال Cloud Shell موجود استفاده کنید. به پوشه پروژه بروید که جعبه ابزار باینری و tools.yaml در آن وجود دارد، در این مورد toolbox-tools، در صورتی که قبلاً داخل آن نیستید:
cd toolbox-tools
- متغیر PROJECT_ID را طوری تنظیم کنید که به شناسه پروژه Google Cloud شما اشاره کند.
export PROJECT_ID="<<YOUR_GOOGLE_CLOUD_PROJECT_ID>>"
- این خدمات Google Cloud را فعال کنید
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
iam.googleapis.com \
secretmanager.googleapis.com
- بیایید یک حساب سرویس جداگانه ایجاد کنیم که به عنوان هویت سرویس Toolbox که در Google Cloud Run اجرا خواهیم کرد، عمل می کند.
gcloud iam service-accounts create toolbox-identity
- ما همچنین تضمین میکنیم که این حساب سرویس دارای نقشهای صحیح است، یعنی توانایی دسترسی به Secret Manager و صحبت با 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
اگر از قبل یک Secret دارید و می خواهید نسخه مخفی را به روز کنید، موارد زیر را اجرا کنید:
gcloud secrets versions add tools --data-file=tools.yaml
- یک متغیر محیطی را برای تصویر کانتینری که میخواهید برای Cloud Run استفاده کنید، تنظیم کنید:
export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
- آخرین مرحله در دستور استقرار آشنا در Cloud Run:
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
این باید فرآیند استقرار Toolbox Server را با tools.yaml پیکربندی شده در Cloud Run آغاز کند. در استقرار موفقیت آمیز، باید پیامی شبیه به زیر مشاهده کنید:
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 ندارد ، بنابراین ما یک شیم پایتون برای تعامل با سرور ایجاد کردیم. در اینجا کد منبع برای آن عملکرد Cloud Run آمده است.
شما باید این تابع Cloud Run را ایجاد و استقرار دهید تا بتوانید به ابزارهای جعبه ابزاری که در مراحل قبلی ایجاد و مستقر کردیم دسترسی پیدا کنید:
- در کنسول Google Cloud، به صفحه Cloud Run بروید
- روی نوشتن یک تابع کلیک کنید.
- در قسمت Service name، نامی را برای توصیف عملکرد خود وارد کنید. نام خدمات فقط باید با یک حرف شروع شود و حداکثر 49 کاراکتر یا کمتر از جمله حروف، اعداد یا خط فاصله داشته باشد. نام سرویس ها نمی توانند با خط تیره ختم شوند و باید در هر منطقه و پروژه منحصر به فرد باشند. نام سرویس را نمی توان بعداً تغییر داد و برای عموم قابل مشاهده است. (خرده فروشی-محصول-جستجو-کیفیت را وارد کنید)
- در فهرست منطقه، از مقدار پیشفرض استفاده کنید یا منطقهای را که میخواهید عملکرد خود را در آن مستقر کنید، انتخاب کنید. (us-central1 را انتخاب کنید)
- در لیست Runtime، از مقدار پیش فرض استفاده کنید یا یک نسخه زمان اجرا را انتخاب کنید. (Python 3.11 را انتخاب کنید)
- در بخش احراز هویت، "اجازه دسترسی عمومی" را انتخاب کنید.
- روی دکمه "ایجاد" کلیک کنید
- تابع ایجاد شده و با الگوی main.py و requires.txt بارگیری می شود
- آن را با فایلهای: main.py و requires.txt از مخزن این پروژه جایگزین کنید
- تابع را اجرا کنید و باید یک نقطه پایانی برای عملکرد Cloud Run خود دریافت کنید
نقطه پایانی شما باید شبیه این باشد (یا چیزی مشابه):
نقطه پایانی عملکرد Cloud Run برای دسترسی به جعبه ابزار: "https://retail-product-search-quality-<<YOUR_PROJECT_NUMBER>>.us-central1.run.app"
برای سهولت تکمیل در جدول زمانی (برای جلسات مربی عملی) شماره پروژه برای نقطه پایانی در زمان جلسه عملی به اشتراک گذاشته خواهد شد.
نکته مهم:
همچنین میتوانید بخش پایگاه داده را مستقیماً به عنوان بخشی از کد برنامه یا تابع اجرای ابری پیادهسازی کنید.
8. توسعه برنامه (جاوا) با جستجوی وجهی
در نهایت، تمام این مؤلفه های قدرتمند باطن از طریق لایه برنامه زنده می شوند. این برنامه که در جاوا توسعه یافته است، رابط کاربری را برای تعامل با سیستم جستجو فراهم می کند. این پرسوجوها را به AlloyDB هماهنگ میکند، نمایش فیلترهای وجهی را مدیریت میکند، انتخابهای کاربر را مدیریت میکند، و نتایج جستجوی رتبهبندیشده و معتبر را به شیوهای یکپارچه و شهودی ارائه میدهد.
- می توانید با پیمایش به ترمینال Cloud Shell خود و شبیه سازی مخزن شروع کنید:
git clone https://github.com/AbiramiSukumaran/faceted_searching_retail
- به ویرایشگر پوسته ابری بروید ، جایی که می توانید پوشه تازه ایجاد شده faceted_searching_retail را ببینید.
- موارد زیر را حذف کنید زیرا این مراحل قبلاً در بخشهای قبلی تکمیل شدهاند:
- پوشه Cloud_Run_Function را حذف کنید
- فایل db_script.sql را حذف کنید
- فایل tools.yaml را حذف کنید
- به پوشه پروژه retail-faceted-search بروید و باید ساختار پروژه را ببینید:
- در فایل ProductRepository.java باید متغیر TOOLBOX_ENDPOINT را با نقطه پایانی تابع Cloud Run خود تغییر دهید (مستقر شده) یا نقطه پایانی را از بلندگوی عملی بگیرید.
خط کد زیر را جستجو کنید و آن را با نقطه پایانی خود جایگزین کنید:
public static final String TOOLBOX_ENDPOINT = "https://retail-product-search-quality-<<YOUR_PROJECT_NUMBER>>.us-central1.run.app";
- مطمئن شوید که Dockerfile و pom.xml مطابق با پیکربندی پروژه شما هستند (بدون نیاز به تغییر، مگر اینکه به صراحت هر نسخه یا پیکربندی را تغییر داده باشید.
- در ترمینال Cloud Shell مطمئن شوید که در پوشه اصلی خود و در پوشه پروژه (faceted_searching_retail / retail-faceted-search) هستید. از دستورات زیر برای اطمینان از این موضوع استفاده کنید مگر اینکه قبلاً در پوشه مناسب ترمینال قرار داشته باشید:
cd faceted_searching_retail
cd retail-faceted-search
- برنامه خود را به صورت محلی بسته بندی، ساخت و آزمایش کنید:
mvn package
mvn spring-boot:run
همانطور که در زیر نشان داده شده است، باید بتوانید برنامه خود را با کلیک بر روی "پیش نمایش در پورت 8080" در ترمینال Cloud Shell مشاهده کنید:
9. استقرار در Cloud Run: ***گام مهم
در ترمینال Cloud Shell مطمئن شوید که در پوشه اصلی خود و در پوشه پروژه (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
پس از استقرار، باید یک Cloud Run Endpoint مستقر دریافت کنید که به شکل زیر است:
https://retail-search-***********-uc.a.run.app/
10. نسخه ی نمایشی
بیایید ببینیم که همه اینها در عمل جمع می شوند:
تصویر بالا صفحه فرود اپلیکیشن جستجوی هیبریدی پویا را نشان می دهد.
تصویر فوق نتایج جستجوی "برنزه بدون توری" را دارد. فیلترهای صورت انتخاب شده عبارتند از: کفش ، صندل.
تصویر فوق نتایج جستجو برای "پیراهن بدون یقه" را نشان می دهد. فیلترهای صورت: پوشاک
اکنون می توانید ویژگی های تولیدی و عامل بیشتری را برای عملی کردن این برنامه درج کنید.
آن را امتحان کنید تا الهام بگیرید که به تنهایی خود را بسازید !!!
11. تمیز کنید
برای جلوگیری از تحمل هزینه های Google Cloud خود برای منابع مورد استفاده در این پست ، این مراحل را دنبال کنید:
- در کنسول Google Cloud ، به صفحه Resource Manager بروید.
- در لیست پروژه، پروژه ای را که می خواهید حذف کنید انتخاب کنید و سپس روی Delete کلیک کنید.
- در محاوره، شناسه پروژه را تایپ کنید و سپس روی Shut down کلیک کنید تا پروژه حذف شود.
- از طرف دیگر ، شما فقط می توانید خوشه AlloyDB را حذف کنید (اگر در زمان پیکربندی US-Central1 را برای خوشه انتخاب نکردید ، مکان موجود در این لینک را تغییر دهید.
12. تبریک می گویم
تبریک می گویم! شما با موفقیت یک برنامه جستجوی ترکیبی را با AlloyDB در Cloud Run ساخته و مستقر کرده اید !!!
چرا این برای مشاغل مهم است:
این برنامه جستجوی هیبریدی پویا ، با استفاده از AlloyDB AI ، مزایای قابل توجهی را برای خرده فروشی سازمانی و سایر مشاغل ارائه می دهد:
ارتباط برتر: با ترکیب جستجوی متنی (بردار) با فیلتر دقیق و دقیق و مجدداً هوشمند ، مشتریان نتایج بسیار مناسبی دریافت می کنند و منجر به افزایش رضایت و تبدیل می شوند.
مقیاس پذیری: معماری AlloyDB و نمایه سازی اسکن برای رسیدگی به کاتالوگ های گسترده محصولات و حجم پرس و جو بالا ، برای رشد مشاغل تجارت الکترونیکی بسیار مهم است.
عملکرد: پاسخ های پرس و جو سریعتر ، حتی برای جستجوهای پیچیده ترکیبی ، یک تجربه کاربر صاف را تضمین کرده و نرخ ترک را به حداقل می رساند.
اثبات آینده: ادغام قابلیت های هوش مصنوعی (تعبیه ، اعتبار سنجی LLM) برنامه پیشرفت های آینده را در توصیه های شخصی ، تجارت مکالمه و کشف محصول هوشمند قرار می دهد.
معماری ساده: ادغام جستجوی بردار به طور مستقیم در AlloyDB نیاز به پایگاه داده های بردار جداگانه یا هماهنگ سازی پیچیده را از بین می برد و توسعه و نگهداری را ساده می کند.
بیایید بگوییم یک کاربر در یک پرس و جو در زبان طبیعی مانند "کفش های در حال اجرا سازگار با محیط زیست برای زنان با پشتیبانی قوس بالا" تایپ شده است.
در حالی که به طور همزمان ، کاربر فیلترهای صورت را برای "دسته: << >>" "رنگ: <<>" اعمال می کند و می گوید "قیمت: 100 تا 150 دلار":
- این سیستم فوراً لیستی از محصولات تصفیه شده را باز می گرداند ، که از لحاظ معنایی با زبان طبیعی هماهنگ شده و دقیقاً مطابق با فیلترهای انتخاب شده است.
- در پشت صحنه ، شاخص اسکن ، جستجوی بردار ، فیلتر درون خطی و تطبیقی را تسریع می کند ، عملکرد را با معیارهای ترکیبی تضمین می کند ، و Reranking نتایج بهینه را در بالا ارائه می دهد.
- سرعت و صحت نتایج به وضوح قدرت ترکیب این فناوری ها را برای یک تجربه جستجوی خرده فروشی واقعاً هوشمند نشان می دهد.
ایجاد یک برنامه جستجوی خرده فروشی نسل بعدی نیاز به حرکت فراتر از روشهای معمولی دارد و با استفاده از قدرت آلیاژ ، ورتکس هوش مصنوعی ، جستجوی بردار با فهرست بندی اسکن ، فیلتر کردن دینامیکی ، و اعتبار سنجی LLM ، می توانیم یک تجربه مشتری بی نظیر را ارائه دهیم که باعث افزایش و تقویت فروش می شود. این راه حل قوی ، مقیاس پذیر و هوشمند نشان می دهد که چگونه قابلیت های پایگاه داده مدرن ، تزریق شده با هوش مصنوعی ، در حال تغییر شکل آینده خرده فروشی است!