1. खास जानकारी
कल्पना करें कि कोई फ़ैशन ऐप्लिकेशन, आपको न सिर्फ़ बेहतरीन कपड़े ढूंढने में मदद करता है, बल्कि रीयल-टाइम में स्टाइलिंग से जुड़ी सलाह भी देता है. यह सब, जनरेटिव एआई को इंटिग्रेट करने की वजह से मुमकिन हो पाता है! इस बातचीत में, हम यह जानेंगे कि हमने AlloyDB की वेक्टर सर्च की सुविधाओं और Google के ScaNN इंडेक्स का इस्तेमाल करके, इस ऐप्लिकेशन को कैसे बनाया. इससे, मिलती-जुलती पोशाकों को तेज़ी से खोजा जा सकता है और फ़ैशन से जुड़े सुझाव तुरंत दिए जा सकते हैं.
हम यह भी जानेंगे कि AlloyDB का ScaNN इंडेक्स, आपकी पसंद के हिसाब से स्टाइल के सुझाव जनरेट करने के लिए, मुश्किल क्वेरी को कैसे ऑप्टिमाइज़ करता है. हम Gemini और Imagen जैसे दमदार जनरेटिव एआई मॉडल का इस्तेमाल करेंगे. इससे आपको क्रिएटिव स्टाइलिंग के लिए प्रेरणा मिलेगी. साथ ही, आपको अपनी पसंद के मुताबिक लुक की झलक भी दिखेगी. यह पूरा ऐप्लिकेशन, सर्वरलेस आर्किटेक्चर पर बनाया गया है. इससे उपयोगकर्ताओं को बेहतर और आसानी से इस्तेमाल किया जा सकने वाला अनुभव मिलता है.
चुनौती: यह ऐप्लिकेशन, लोगों को उनकी पसंद के हिसाब से कपड़े पहनने के सुझाव देता है. इससे उन लोगों को मदद मिलती है जो यह तय नहीं कर पाते कि उन्हें कौनसे कपड़े पहनने चाहिए. इससे आपको कपड़ों के बारे में फ़ैसले लेने में भी आसानी होती है.
समाधान: कपड़े के सुझाव देने वाला ऐप्लिकेशन, उपयोगकर्ताओं को उनकी पसंद के हिसाब से, स्मार्ट और दिलचस्प फ़ैशन अनुभव देने की समस्या को हल करता है. साथ ही, AlloyDB, जनरेटिव एआई, और सर्वरलेस टेक्नोलॉजी की क्षमताओं को दिखाता है.
आपको क्या बनाना है
इस लैब में, आपको ये काम करने होंगे:
- AlloyDB इंस्टेंस बनाना और ई-कॉमर्स डेटासेट लोड करना
- AlloyDB में pgvector और जनरेटिव एआई मॉडल एक्सटेंशन चालू करना
- प्रॉडक्ट के ब्यौरे से एम्बेडिंग जनरेट करना
- सर्वरलेस Cloud Run फ़ंक्शन में समाधान डिप्लॉय करना
- Gemini में कोई इमेज अपलोड करें और इमेज के बारे में जानकारी देने वाला प्रॉम्प्ट जनरेट करें.
- ई-कॉमर्स डेटासेट एम्बेडिंग के साथ-साथ प्रॉम्प्ट के आधार पर खोज के नतीजे जनरेट करना.
- प्रॉम्प्ट को पसंद के मुताबिक बनाने और स्टाइल से जुड़े सुझाव पाने के लिए, अतिरिक्त प्रॉम्प्ट जोड़ें.
- सर्वरलेस Cloud Run फ़ंक्शन में समाधान डिप्लॉय करना
ज़रूरी शर्तें
2. आर्किटेक्चर
ऐप्लिकेशन का हाई-लेवल आर्किटेक्चर यहां दिया गया है:

यहां दिए गए सेक्शन में, ट्यूटोरियल के कॉन्टेक्स्ट के हिसाब से फ़्लो के बारे में बताया गया है:
डेटा डालना:
हमारा पहला चरण, खुदरा कारोबार से जुड़े डेटा (इन्वेंट्री, प्रॉडक्ट के ब्यौरे, ग्राहक के इंटरैक्शन) को AlloyDB में डालना है.
Analytics Engine:
हम AlloyDB का इस्तेमाल, आंकड़ों के विश्लेषण वाले इंजन के तौर पर करेंगे. इससे ये काम किए जा सकेंगे:
- संदर्भ निकालना: इंजन, AlloyDB में सेव किए गए डेटा का विश्लेषण करता है. इससे उसे प्रॉडक्ट, कैटगरी, ग्राहक के व्यवहार वगैरह के बीच के संबंध को समझने में मदद मिलती है.
- एम्बेडिंग बनाना: एम्बेडिंग (टेक्स्ट का गणितीय प्रतिनिधित्व) को उपयोगकर्ता की क्वेरी और AlloyDB में सेव की गई जानकारी, दोनों के लिए जनरेट किया जाता है.
- वेक्टर सर्च: यह इंजन, मिलती-जुलती चीज़ें खोजने की सुविधा देता है. इसके लिए, यह क्वेरी एम्बेडिंग की तुलना, प्रॉडक्ट के ब्यौरे, समीक्षाओं, और अन्य काम के डेटा की एम्बेडिंग से करता है. इससे, सबसे मिलते-जुलते 25 "सबसे नज़दीकी पड़ोसी" की पहचान होती है.
Gemini का सुझाव:
इमेज के बाइट ऐरे को Vertex AI API के ज़रिए Gemini मॉडल को पास किया जाता है. साथ ही, टॉप वियर के बारे में टेक्स्ट में जानकारी देने और बॉटम वियर के सुझाव देने के लिए प्रॉम्प्ट भी पास किया जाता है.
AlloyDB RAG और वेक्टर सर्च:
टॉपवियर की जानकारी का इस्तेमाल, डेटाबेस से क्वेरी करने के लिए किया जाता है. यह क्वेरी, खोज के लिए इस्तेमाल किए गए टेक्स्ट (Gemini मॉडल से मिली, बॉटम वियर से मिलती-जुलती चीज़ों के बारे में सुझाव देने वाली सुविधा) को एम्बेड किए गए डेटा में बदलती है. इसके बाद, डेटाबेस में सेव किए गए एम्बेड किए गए डेटा पर वेक्टर सर्च करती है, ताकि मिलते-जुलते नतीजे (मिलते-जुलते नतीजे) खोजे जा सकें. AlloyDB डेटाबेस में मौजूद वेक्टर एम्बेडिंग को ScaNN इंडेक्स का इस्तेमाल करके इंडेक्स किया जाता है, ताकि उन्हें बेहतर तरीके से याद रखा जा सके.
जवाब के तौर पर इमेज जनरेट करना:
पुष्टि किए गए जवाबों को JSON ऐरे में स्ट्रक्चर किया जाता है. साथ ही, पूरे इंजन को सर्वरलेस Cloud Run फ़ंक्शन में पैकेज किया जाता है. इसे Agent Builder से शुरू किया जाता है.
Imagen की मदद से इमेज जनरेट करने की सुविधा:
उपयोगकर्ता के स्टाइलिंग प्रॉम्प्ट, उपयोगकर्ता की चुनी गई सलाह, और निजीकरण के किसी भी अनुरोध को मिलाकर, मौजूदा इमेज के साथ Imagen 3 को प्रॉम्प्ट किया जाता है. स्टाइलिंग इमेज, Vertex AI API का इस्तेमाल करके इस प्रॉम्प्ट के आधार पर जनरेट की जाती है.
3. शुरू करने से पहले
प्रोजेक्ट बनाना
- Google Cloud Console में, प्रोजेक्ट चुनने वाले पेज पर, Google Cloud प्रोजेक्ट चुनें या बनाएं.
- पक्का करें कि आपके Cloud प्रोजेक्ट के लिए बिलिंग चालू हो. किसी प्रोजेक्ट के लिए बिलिंग चालू है या नहीं, यह देखने का तरीका जानें .
- आपको Cloud Shell का इस्तेमाल करना होगा. यह Google Cloud में चलने वाला कमांड-लाइन एनवायरमेंट है. इसमें bq पहले से लोड होता है. Google Cloud Console में सबसे ऊपर मौजूद, Cloud Shell चालू करें (
) पर क्लिक करें. - Cloud Shell से कनेक्ट होने के बाद, पुष्टि करें कि आपने पहले ही पुष्टि कर ली है और प्रोजेक्ट को अपने प्रोजेक्ट आईडी पर सेट किया गया है. इसके लिए, यहां दिए गए निर्देश का इस्तेमाल करें:
gcloud auth list
- यह पुष्टि करने के लिए कि gcloud की आने वाली कमांड आपके प्रोजेक्ट की सही पहचान करेंगी, यह कमांड चलाएं.
gcloud config list project
- अगर आपका प्रोजेक्ट सेट नहीं है, तो इसे सेट करने के लिए इस निर्देश का इस्तेमाल करें:
gcloud config set project <YOUR_PROJECT_ID>
- ज़रूरी एपीआई चालू करें.
एपीआई चालू करने के लिए, लिंक पर क्लिक करें.
अगर आपने किसी एपीआई को चालू नहीं किया है, तो उसे लागू करने के दौरान कभी भी चालू किया जा सकता है.
gcloud कमांड और उनके इस्तेमाल के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
4. डेटाबेस सेटअप करना
इस लैब में, हम खुदरा ई-कॉमर्स डेटासेट को सेव करने के लिए, AlloyDB का इस्तेमाल करेंगे. यह डेटाबेस और लॉग जैसे सभी संसाधनों को सेव करने के लिए, क्लस्टर का इस्तेमाल करता है. हर क्लस्टर में एक प्राइमरी इंस्टेंस होता है, जो डेटा का ऐक्सेस पॉइंट उपलब्ध कराता है. टेबल, असल में डेटा स्टोर करने वाला संसाधन होती हैं.
आइए, एक AlloyDB क्लस्टर, इंस्टेंस, और टेबल बनाएं. इसमें ई-कॉमर्स डेटासेट लोड किया जाएगा.
क्लस्टर और इंस्टेंस बनाना
- Google Cloud Console में, AlloyDB खोजें. Cloud Console में ज़्यादातर पेजों को आसानी से ढूंढने के लिए, कंसोल के खोज बार का इस्तेमाल करके उन्हें खोजें.
- क्लस्टर बनाएं पर क्लिक करें.

- नीचे दी गई वैल्यू के साथ क्लस्टर और इंस्टेंस बनाएं:
- क्लस्टर आईडी: "
shopping-cluster" - password: "
alloydb" - PostgreSQL 15 के साथ काम करता है
- देश/इलाका: "
us-central1" - नेटवर्किंग: "
default"

- नेटवर्क में, डिफ़ॉल्ट नेटवर्क चुनने पर यह विकल्प दिखता है. डिफ़ॉल्ट नेटवर्क सेट अप करने के लिए, कनेक्शन सेट अप करें पर क्लिक करें.

- अपने-आप असाइन की गई आईपी रेंज का इस्तेमाल करें को चुनें और जारी रखें पर क्लिक करें. जानकारी की समीक्षा करने के बाद, कनेक्शन बनाएं पर क्लिक करें.

डिफ़ॉल्ट नेटवर्क बनने तक इंतज़ार करें.
- 'अपने मुख्य इंस्टेंस को कॉन्फ़िगर करें' में, इंस्टेंस आईडी को "
shopping-instance"के तौर पर सेट करें.

- क्लस्टर को इस तरह से सेट अप करने के लिए, क्लस्टर बनाएं पर क्लिक करें:

5. डेटा डालना
अब स्टोर के बारे में जानकारी देने वाली टेबल जोड़ें. अपने इंस्टेंस के बनने का इंतज़ार करें. क्लस्टर बनाने के बाद, AlloyDB में साइन इन करने के लिए उन क्रेडेंशियल का इस्तेमाल किया जा सकता है जिन्हें आपने क्लस्टर बनाते समय सेट किया था.
AlloyDB डेटाबेस से पुष्टि करना
- Google Cloud Console में, AlloyDB पर जाएं. प्राइमरी क्लस्टर चुनें. इसके बाद, बाईं ओर मौजूद नेविगेशन में, AlloyDB Studio पर क्लिक करें:

- AlloyDB डेटाबेस में पुष्टि करने के लिए, यह जानकारी डालें:
- उपयोगकर्ता नाम : "
postgres" - डेटाबेस : "
postgres" - पासवर्ड : "
alloydb"
AlloyDB Studio में पुष्टि हो जाने के बाद, SQL कमांड को एडिटर टैब में डाला जाता है. पहले एडिटर टैब के दाईं ओर मौजूद प्लस बटन का इस्तेमाल करके, एक से ज़्यादा एडिटर विंडो जोड़ी जा सकती हैं.

एडिटर विंडो में, AlloyDB के लिए कमांड डाली जाएंगी. इसके लिए, ज़रूरत के हिसाब से 'चलाएं', 'फ़ॉर्मैट करें', और 'मिटाएं' विकल्पों का इस्तेमाल किया जाएगा.
एक्सटेंशन चालू करना
इस ऐप्लिकेशन को बनाने के लिए, हम "pgvector" और "google_ml_integration" एक्सटेंशन का इस्तेमाल करेंगे.
- pgvector एक्सटेंशन की मदद से, वेक्टर एम्बेडिंग को सेव किया जा सकता है और उन्हें खोजा जा सकता है.
- google_ml_integration एक्सटेंशन, ऐसे फ़ंक्शन उपलब्ध कराता है जिनका इस्तेमाल करके, Vertex AI के अनुमान लगाने वाले एंडपॉइंट को ऐक्सेस किया जा सकता है. इससे एसक्यूएल में अनुमान मिलते हैं.
- इन एक्सटेंशन को चालू करें. इसके लिए, ये DDL चलाएं:
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;
- यह पुष्टि करें कि एक्सटेंशन इंस्टॉल किए गए हैं या नहीं. इसके लिए, यह एसक्यूएल कमांड चलाएं:
select extname, extversion from pg_extension;
टेबल बनाना
- इस डीडीएल स्टेटमेंट का इस्तेमाल करके टेबल बनाएं:
CREATE TABLE
apparels ( id BIGINT,
category VARCHAR(100),
sub_category VARCHAR(50),
uri VARCHAR(200),
image VARCHAR(100),
content VARCHAR(2000),
pdt_desc VARCHAR(5000),
embedding vector(768) );
ऊपर दिए गए निर्देश को पूरा करने के बाद, आपको टेबल में
डेटाबेस में सेव किया जाता है. यहां दी गई इमेज में इसका एक उदाहरण दिखाया गया है:

डेटा डालना
इस लैब के लिए, हमारे पास इस SQL फ़ाइल में करीब 200 रिकॉर्ड का टेस्ट डेटा है. इसमें id, category, sub_category, uri, image और content शामिल हैं. अन्य फ़ील्ड को लैब में बाद में भरा जाएगा.
- SQL फ़ाइल से 20 लाइनें/INSERT स्टेटमेंट कॉपी करें और उन्हें AlloyDB Studio के नए एडिटर टैब में चिपकाएं. इसके बाद, RUN पर क्लिक करें.
- एक्सप्लोरर सेक्शन को तब तक बड़ा करें, जब तक आपको
apparelsनाम वाली टेबल न दिख जाए. - मेन्यू आइकॉन [⋮] पर क्लिक करें. इसके बाद, क्वेरी पर क्लिक करें. SELECT स्टेटमेंट, नए एडिटर टैब में खुलेगा.

- पंक्तियों को डाला गया है या नहीं, इसकी पुष्टि करने के लिए चलाएं पर क्लिक करें.
उपयोगकर्ता को अनुमति देना
हम postgres उपयोगकर्ता को AlloyDB. से एम्बेडिंग जनरेट करने की अनुमति देंगे. AlloyDB Studio में, उपयोगकर्ता postgres को embedding फ़ंक्शन पर कार्रवाई करने के अधिकार देने के लिए, यह स्टेटमेंट चलाएं:
GRANT EXECUTE ON FUNCTION embedding TO postgres;
AlloyDB सेवा खाते को Vertex AI User की भूमिका असाइन करना
हम Vertex AI के टेक्स्ट एम्बेडिंग मॉडल का इस्तेमाल करके एम्बेडिंग जनरेट करेंगे. इसके लिए, Vertex AI के उपयोगकर्ता को AlloyDB सेवा खाते की भूमिका दी जाएगी.
Google Cloud Console में, 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"
6. कॉन्टेक्स्ट तैयार करना
एम्बेडिंग बनाने के लिए, हमें context की ज़रूरत होगी. इसका मतलब है कि हमें एक फ़ील्ड में वह सारी जानकारी शामिल करनी होगी जो हमें एम्बेड करनी है. इसके लिए, हम प्रॉडक्ट का ब्यौरा तैयार करेंगे. इसे हम apparels टेबल के pdt_desc कॉलम में सेव करेंगे.
हम अपने मामले में, हर प्रॉडक्ट के बारे में पूरी जानकारी का इस्तेमाल करेंगे. हालांकि, जब आप अपने डेटा के साथ ऐसा करते हैं, तो डेटा को किसी भी तरह से व्यवस्थित करें. इससे आपको अपने कारोबार के लिए फ़ायदेमंद जानकारी मिल सकती है.
AlloyDB Studio के एडिटर टैब में, यहां दिया गया निर्देश चलाएं. इससे कॉन्टेक्स्ट डेटा के साथ pdt_desc फ़ील्ड अपडेट हो जाएगा:
UPDATE
apparels
SET
pdt_desc = CONCAT('This product category is: ', category, ' and sub_category is: ', sub_category, '. The description of the product is as follows: ', content, '. The product image is stored at: ', uri)
WHERE
id IS NOT NULL;
यह डीएमएल, टेबल में मौजूद सभी फ़ील्ड और अन्य डिपेंडेंसी (अगर आपके इस्तेमाल के उदाहरण में कोई डिपेंडेंसी है) से मिली जानकारी का इस्तेमाल करके, कॉन्टेक्स्ट की खास जानकारी बनाता है. ज़्यादा सटीक जानकारी और कॉन्टेक्स्ट बनाने के लिए, डेटा को अपने कारोबार के हिसाब से किसी भी तरीके से व्यवस्थित करें.
7. कॉन्टेक्स्ट के लिए एंबेडिंग बनाना
कंप्यूटर के लिए, टेक्स्ट को प्रोसेस करने की तुलना में नंबरों को प्रोसेस करना ज़्यादा आसान होता है. एम्बेडिंग सिस्टम, टेक्स्ट को फ़्लोटिंग पॉइंट नंबर की सीरीज़ में बदलता है. यह सीरीज़, टेक्स्ट को दिखाती है. इससे कोई फ़र्क़ नहीं पड़ता कि टेक्स्ट को किस तरह से लिखा गया है, उसमें किस भाषा का इस्तेमाल किया गया है वगैरह.
समुद्र के किनारे की किसी जगह के बारे में बताएं. इसे "on the water", "beachfront", "walk from your room to the ocean", "sur la mer", "на берегу океана" वगैरह कहा जा सकता है. ये सभी शब्द अलग-अलग दिखते हैं, लेकिन इनका सिमैंटिक मतलब या मशीन लर्निंग की शब्दावली में, इनके एम्बेडिंग एक-दूसरे के बहुत करीब होने चाहिए.
डेटा और कॉन्टेक्स्ट तैयार होने के बाद, हम SQL चलाएंगे. इससे प्रॉडक्ट की जानकारी(pdt_desc) कॉलम के एम्बेडिंग को फ़ील्ड embedding में टेबल में जोड़ा जा सकेगा. आपके पास कई तरह के एम्बेडिंग मॉडल इस्तेमाल करने का विकल्प होता है. हम Vertex AI से text-embedding-005 का इस्तेमाल कर रहे हैं.
- AlloyDB Studio में, एम्बेडिंग जनरेट करने के लिए यह कमांड चलाएं. साथ ही,
pdt_descकॉलम को अपडेट करें. इसमें सेव किए गए डेटा के लिए एम्बेडिंग शामिल होती हैं:
UPDATE
apparels
SET
embedding = embedding( 'text-embedding-005',
pdt_desc)
WHERE
TRUE;
- पुष्टि करें कि एम्बेडिंग जनरेट की गई हैं. इसके लिए, यह कमांड चलाएं:
SELECT
id,
category,
sub_category,
content,
embedding
FROM
Apparels
LIMIT 5;
यहां एम्बेडिंग वेक्टर का एक उदाहरण दिया गया है. यह क्वेरी में मौजूद सैंपल टेक्स्ट के लिए, फ़्लोटिंग पॉइंट नंबर के कलेक्शन की तरह दिखता है.

8. वेक्टर सर्च करना
अब टेबल, डेटा, और एम्बेडिंग तैयार हैं. इसलिए, उपयोगकर्ता के खोज टेक्स्ट के लिए रीयल टाइम वेक्टर सर्च करते हैं.
मान लें कि उपयोगकर्ता का खोज टेक्स्ट "pink color, casual, pure cotton tops for women" है
इस क्वेरी से मिलते-जुलते नतीजे पाने के लिए, यह एसक्यूएल क्वेरी चलाएं:
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;
आइए, इस क्वेरी के बारे में ज़्यादा जानें:
इस क्वेरी में,
- उपयोगकर्ता ने यह खोज क्वेरी डाली है: "
I want womens tops, pink casual only pure cotton." - हम इस खोज टेक्स्ट को एम्बेडिंग में बदल रहे हैं. इसके लिए,
embedding()तरीके के साथ-साथ इस मॉडल का इस्तेमाल किया जा रहा है:text-embedding-005. यह चरण पिछले चरण जैसा ही है. पिछले चरण में, हमने टेबल में मौजूद सभी आइटम पर एम्बेड करने की सुविधा लागू की थी. - "
<=>" का मतलब, कोसाइन सिमिलैरिटी दूरी के तरीके का इस्तेमाल करना है. pgvector के दस्तावेज़ में, समानता मापने के सभी तरीके देखे जा सकते हैं. - हम एम्बेड करने के तरीके के नतीजे को वेक्टर डेटा टाइप में बदल रहे हैं, ताकि यह डेटाबेस में सेव किए गए वेक्टर के साथ काम कर सके.
- LIMIT 5 का मतलब है कि हमें खोज के लिए इस्तेमाल किए गए टेक्स्ट के पांच सबसे मिलते-जुलते शब्दों को निकालना है.
यहां इस एसक्यूएल क्वेरी के जवाब का उदाहरण दिया गया है:

नतीजों में देखा जा सकता है कि खोज के लिए इस्तेमाल किए गए टेक्स्ट से मिलते-जुलते नतीजे मिले हैं. नतीजों में बदलाव देखने के लिए, रंग बदलकर देखें.
क्वेरी की परफ़ॉर्मेंस के लिए AlloyDB ScaNN इंडेक्स
अब मान लें कि हमें ScaNN इंडेक्स का इस्तेमाल करके, वेक्टर सर्च के इस नतीजे की परफ़ॉर्मेंस (क्वेरी का समय), दक्षता, और रीकॉल को बढ़ाना है.
अगर आपको ScaNN इंडेक्स का इस्तेमाल करना है, तो यह तरीका आज़माएं:
- हमारे पास पहले से ही क्लस्टर, इंस्टेंस, कॉन्टेक्स्ट, और एम्बेडिंग बनाए गए हैं. इसलिए, हमें सिर्फ़ ScaNN एक्सटेंशन इंस्टॉल करना होगा. इसके लिए, यह स्टेटमेंट इस्तेमाल करें:
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
- ScaNN इंडेक्स बनाएं:
CREATE INDEX apparel_index ON apparels
USING scann (embedding cosine)
WITH (num_leaves=54);
ऊपर दिए गए DDL में:
apparel_indexइंडेक्स का नाम है.apparels, टेबल का नाम है.scannइंडेक्स का तरीका है.embeddingवह कॉलम है जिसे आपको इंडेक्स करना है.cosineवह दूरी का तरीका है जिसका इस्तेमाल आपको इंडेक्स के साथ करना है.54इस इंडेक्स पर लागू किए जाने वाले पार्टीशन की संख्या है. इसकी वैल्यू 1 से 1048576 के बीच में सेट करें. इस वैल्यू को तय करने के तरीके के बारे में ज़्यादा जानने के लिए, ScaNN इंडेक्स को ट्यून करना लेख पढ़ें.
ScaNN repo में दिए गए सुझाव के मुताबिक, हमने डेटा पॉइंट की संख्या के वर्गमूल का इस्तेमाल किया है. डेटा को हिस्सों में बांटते समय, num_leaves की वैल्यू, डेटा पॉइंट की संख्या के वर्गमूल के आस-पास होनी चाहिए.
- देखें कि इंडेक्स, इस क्वेरी का इस्तेमाल करके बनाया गया हो:
SELECT * FROM pg_stat_ann_indexes;
- हमने इंडेक्स के बिना जिस क्वेरी का इस्तेमाल किया था उसी का इस्तेमाल करके, वेक्टर सर्च करें:
select * from apparels
ORDER BY embedding <=> CAST(embedding('textembedding-gecko', 'white tops for girls without any print') as vector(768))
LIMIT 20
ऊपर दी गई क्वेरी वही है जिसका इस्तेमाल हमने लैब में आठवें चरण में किया था. हालांकि, अब हमने ScaNN इंडेक्स का इस्तेमाल करके फ़ील्ड को इंडेक्स कर दिया है.
- इंडेक्स किए गए और इंडेक्स नहीं किए गए कॉन्टेंट के लिए, खोज क्वेरी डालकर टेस्ट करें. इंडेक्स के बिना टेस्टिंग के लिए, आपको इंडेक्स हटाना होगा:
white tops for girls without any print
ऊपर दिए गए खोज के लिए इस्तेमाल किए गए टेक्स्ट को इंडेक्स किए गए एम्बेडिंग डेटा पर वेक्टर सर्च क्वेरी में इस्तेमाल करने से, खोज के बेहतर नतीजे मिलते हैं और खोज ज़्यादा असरदार तरीके से होती है. इंडेक्स की मदद से, परफ़ॉर्मेंस को काफ़ी बेहतर बनाया गया है. जैसे, ScaNN के बिना इंडेक्स बनाने में 10.37 मि॰से॰ और ScaNN के साथ इंडेक्स बनाने में 0.87 मि॰से॰ लगते हैं. इस विषय के बारे में ज़्यादा जानने के लिए, कृपया यह ब्लॉग पढ़ें.
9. एलएलएम की मदद से मैच की पुष्टि करना
आगे बढ़ने और किसी ऐप्लिकेशन के लिए सबसे सही जवाब देने वाली सेवा बनाने से पहले, आइए जनरेटिव एआई मॉडल का इस्तेमाल करके यह पुष्टि करें कि ये संभावित जवाब, उपयोगकर्ता के लिए वाकई काम के हैं और इन्हें शेयर करना सुरक्षित है.
यह पक्का करना कि Gemini के लिए इंस्टेंस सेट अप किया गया हो
- पुष्टि करें कि आपके क्लस्टर और इंस्टेंस के लिए
google_ml_integrationपहले से चालू है. AlloyDB Studio में, यह कमांड चलाएं:
show google_ml_integration.enable_model_support;
अगर वैल्यू "चालू है" के तौर पर दिखती है, तो अगले दो चरणों को छोड़कर सीधे
AlloyDB और Vertex AI Model का इंटिग्रेशन.
- अपने AlloyDB क्लस्टर के प्राइमरी इंस्टेंस पर जाएं. इसके बाद, प्राइमरी इंस्टेंस में बदलाव करें पर क्लिक करें.

- ऐडवांस कॉन्फ़िगरेशन के विकल्पों में जाकर, नए डेटाबेस फ़्लैग सेक्शन को बड़ा करें. इसके बाद, पक्का करें कि
google_ml_integration.enable_model_support flagको "on" पर सेट किया गया हो. ऐसा इस तरह करें:
3. अगर यह "on" पर सेट नहीं है, तो इसे "on" पर सेट करें. इसके बाद, अपडेट इंस्टेंस पर क्लिक करें.
इस चरण में कुछ मिनट लगेंगे.
AlloyDB और Vertex AI मॉडल का इंटिग्रेशन
अब AlloyDB Studio से कनेक्ट करें और यहां दिया गया DML स्टेटमेंट चलाएं. इससे AlloyDB से Gemini मॉडल का ऐक्सेस सेट अप किया जा सकेगा. इसके लिए, आपको अपनी प्रोजेक्ट आईडी का इस्तेमाल करना होगा. कमांड चलाने से पहले, आपको सिंटैक्स की गड़बड़ी के बारे में चेतावनी मिल सकती है. हालांकि, यह ठीक से काम करेगी.
- Google Cloud Console में, AlloyDB पर जाएं. प्राइमरी क्लस्टर चुनें. इसके बाद, बाईं ओर मौजूद नेविगेशन में, AlloyDB Studio पर क्लिक करें.
- हम
google_ml_integrationएक्सटेंशन के साथ डिफ़ॉल्ट रूप से उपलब्धgemini-1.5-pro:generateContentका इस्तेमाल करेंगे.
- AlloyDB Studio में, ऐक्सेस के लिए कॉन्फ़िगर किए गए मॉडल की जांच करने के लिए, इस निर्देश का इस्तेमाल करें:
select model_id,model_type from google_ml.model_info_view;
- डेटाबेस के उपयोगकर्ताओं को ml_predict_row फ़ंक्शन को लागू करने की अनुमति दें, ताकि वे Google Vertex AI मॉडल का इस्तेमाल करके अनुमान लगा सकें. इसके लिए, यह कमांड चलाएं:
GRANT EXECUTE ON FUNCTION ml_predict_row to postgres;
जवाबों का आकलन करना
अगले सेक्शन में, हम एक बड़ी क्वेरी का इस्तेमाल करेंगे. इसमें ऐप्लिकेशन को Cloud Run पर ले जाया जाएगा. हालांकि, क्वेरी से मिले जवाबों के सही होने की पुष्टि करने के लिए, क्वेरी को समझना मुश्किल हो सकता है.
हम उन अलग-अलग सेक्शन पर नज़र डालेंगे जिनसे मिलकर, वह बड़ी क्वेरी बनती है जिसका इस्तेमाल हम आखिर में करते हैं.
- सबसे पहले, हम डेटाबेस को एक अनुरोध भेजेंगे, ताकि उपयोगकर्ता की क्वेरी से सबसे मिलते-जुलते पांच जवाब मिल सकें. हम इस क्वेरी को आसान बनाने के लिए, इसे हार्डकोड कर रहे हैं. हालांकि, चिंता न करें. हम इसे बाद में क्वेरी में इंटरपोलेट कर देंगे.
हम 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 में पांच लाइनें होंगी. हर लाइन में ये कॉलम होंगे:
literaturecontentuser_text
- जवाब कितने सही हैं, यह पता लगाने के लिए हम एक मुश्किल क्वेरी का इस्तेमाल करेंगे. इसमें हम यह बताएंगे कि जवाबों का आकलन कैसे किया जाता है. यह क्वेरी के हिस्से के तौर पर,
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."
- उस क्वेरी का इस्तेमाल करके, हम
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;
predict_row, नतीजे को JSON फ़ॉर्मैट में दिखाता है. कोड "-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'"का इस्तेमाल, उस JSON से असल टेक्स्ट निकालने के लिए किया जाता है. अगर आपको असली JSON देखना है, तो इस कोड को हटाया जा सकता है.- आखिर में, एलएलएम फ़ील्ड पाने के लिए, आपको इसे x टेबल से निकालना होगा:
SELECT
LLM_RESPONSE
FROM
x;
- इसे एक ही क्वेरी में इस तरह से जोड़ा जा सकता है:
चेतावनी: अगर आपने इंटरमीडिएट नतीजों की जांच करने के लिए ऊपर दी गई क्वेरी चलाई हैं, तो
इस क्वेरी को चलाने से पहले, पक्का करें कि आपने 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;
बड़ी क्वेरी, उन सभी क्वेरी का कॉम्बिनेशन होती है जिन्हें हमने पिछले चरणों में चलाया था. नतीजों से पता चलता है कि कोई मिलता-जुलता कॉन्टेंट है या नहीं. साथ ही, यह भी पता चलता है कि वह कॉन्टेंट कितने प्रतिशत तक मिलता-जुलता है. इसके अलावा, रेटिंग के बारे में कुछ जानकारी भी मिलती है.
ध्यान दें कि Gemini मॉडल में, स्ट्रीमिंग की सुविधा डिफ़ॉल्ट रूप से चालू होती है. इसलिए, असली जवाब कई लाइनों में फैला होता है: 
10. ऐप्लिकेशन को वेब पर ले जाना
अब हम इस ऐप्लिकेशन को होस्ट करेंगे, ताकि इसे इंटरनेट से ऐक्सेस किया जा सके.
Cloud Run फ़ंक्शन बनाना
- Google Cloud Console में, इस लिंक का इस्तेमाल करके Cloud Run Functions पर जाएं:
https://console.cloud.google.com/run/create?deploymentType=function
- कॉन्फ़िगर करें में, फ़ंक्शन का नाम "retail-engine" के तौर पर सेट करें और क्षेत्र के तौर पर "us-central1" चुनें.
- एंडपॉइंट यूआरएल में, रनटाइम के तौर पर Java 17 चुनें.
- पुष्टि करने की सुविधा में जाकर, बिना पुष्टि किए गए अनुरोधों को अनुमति दें को चुनें.
- कंटेनर, वॉल्यूम, नेटवर्किंग, सुरक्षा को बड़ा करें और नेटवर्किंग टैब पर क्लिक करें.
- आउटबाउंड ट्रैफ़िक के लिए वीपीसी से कनेक्ट करें को चुनें. इसके बाद, सर्वर के बिना वीपीसी ऐक्सेस करने की सुविधा वाले कनेक्टर का इस्तेमाल करें पर क्लिक करें.
- नेटवर्क में जाकर, नया वीपीसी कनेक्टर जोड़ें पर क्लिक करें. अगर Serverless VPC Access API पहले से चालू नहीं है, तो इसे चालू करें.
- कनेक्टर बनाएं में, नाम को
alloydb-test-connपर सेट करें. - क्षेत्र को
us-centralपर सेट करें. - नेटवर्क की वैल्यू को डिफ़ॉल्ट पर छोड़ दें. साथ ही, सबनेट को कस्टम आईपी रेंज के तौर पर सेट करें. इसके लिए, 10.8.0.0 या इसके जैसा कोई अन्य उपलब्ध आईपी रेंज इस्तेमाल करें.
- स्केलिंग दिखाएं सेटिंग को बड़ा करें. इसके बाद, कम से कम इंस्टेंस को 2 और ज़्यादा से ज़्यादा इंस्टेंस को 3 पर सेट करें.
- इंस्टेंस टाइप को f1-micro के तौर पर चुनें. यहां कनेक्टर बनाने के विकल्प दिखाए गए हैं:

- कनेक्टर बनाने के लिए, बनाएं पर क्लिक करें.
- ट्रैफ़िक राउटिंग में जाकर, सभी ट्रैफ़िक को वीपीसी पर रूट करें को चुनें.
- फ़ंक्शन बनाने के लिए, बनाएं पर क्लिक करें.
ऐप्लिकेशन डिप्लॉय करना
फ़ंक्शन बनाने के बाद, सोर्स को अपडेट करें और ऐप्लिकेशन को फिर से डिप्लॉय करें.
- Cloud Run में, Services टैब पर क्लिक करें. इसके बाद, retail-engine फ़ंक्शन पर क्लिक करें.
- सोर्स टैब पर क्लिक करें. डिफ़ॉल्ट फ़ंक्शन एंट्री पॉइंट को "
gcfv2.HelloHttpFunction" पर सेट रहने दें. - HelloHttpFunction.java फ़ाइल के कॉन्टेंट को इस Java फ़ाइल के कॉन्टेंट से बदलें.
- फ़ाइल में, AlloyDbJdbcConnector की जानकारी को अपने AlloyDB इंस्टेंस और क्लस्टर की जानकारी के हिसाब से अपडेट करें.
$PROJECT_IDकी जगह, अपने AlloyDB क्लस्टर और इंस्टेंस का प्रोजेक्ट आईडी डालें.

- pom.xml फ़ाइल के कॉन्टेंट को इस XML फ़ाइल के कॉन्टेंट से बदलें.
- फ़ंक्शन को डिप्लॉय करने के लिए, सेव करें और फिर से डिप्लॉय करें पर क्लिक करें.
11. खुदरा कारोबार के इंजन वाले ऐप्लिकेशन की जांच करना
अपडेट किए गए क्लाउड फ़ंक्शन को डिप्लॉय करने के बाद, आपको एंडपॉइंट इस फ़ॉर्मैट में दिखेगा:
https://retail-engine-PROJECT_NUMBER.us-central1.run.app
Cloud Shell टर्मिनल से, इस कमांड को चलाकर इसकी जांच की जा सकती है:
gcloud functions call retail-engine --region=us-central1 --gen2 --data '{"search": "I want some kids clothes themed on Disney"}'
इसके अलावा, Cloud Run फ़ंक्शन को इस तरह से भी आज़माया जा सकता है:
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 .
और नतीजा:

अब हमने AlloyDB के डेटा पर एम्बेडिंग मॉडल का इस्तेमाल करके, मिलती-जुलती वेक्टर खोज की है. अब हम ऐसा ऐप्लिकेशन बना सकते हैं जो आपकी इमेज के साथ-साथ इन एम्बेडिंग का इस्तेमाल करता है. साथ ही, स्टाइलिंग के सुझाव जनरेट करने के लिए प्रॉम्प्ट देता है
12. पहनावे के लिए सुझाव देने वाले फ़्लो के बारे में जानकारी
कपड़ों के सुझाव देने वाला ऐप्लिकेशन, स्प्रिंट बूट ऐप्लिकेशन है. इसे AlloyDB के खुदरा इंजन वाले ऐप्लिकेशन में बनाए गए एम्बेडिंग के साथ काम करने के लिए कॉन्फ़िगर किया गया है. साथ ही, इसे Gemini और Imagen के साथ काम करने के लिए भी कॉन्फ़िगर किया गया है, ताकि कपड़ों की स्टाइलिंग के विज़ुअल विकल्प जनरेट किए जा सकें. इसकी मदद से, अपनी पसंद के मुताबिक प्रॉम्प्ट जोड़े जा सकते हैं और सुझाव को बेहतर बनाया जा सकता है.
इसे ऐसे समझें कि आपने इस ऐप्लिकेशन में, अपनी अलमारी में रखे हॉट पिंक टॉप की इमेज अपलोड की. 'दिखाएं' पर क्लिक करने पर, ऐप्लिकेशन कोड में सेट किए गए प्रॉम्प्ट और AlloyDB डेटाबेस में मौजूद एम्बेडिंग के आधार पर, ऐप्लिकेशन कई ऐसे विकल्प जनरेट करता है जो ओरिजनल इमेज से मिलते-जुलते होते हैं. अब आपको यह जानना है कि नीले रंग के नेकलेस के साथ सुझाए गए विकल्प कैसे दिखेंगे. इसलिए, आपने इस तरह का एक प्रॉम्प्ट जोड़ा और स्टाइल पर क्लिक किया. इसके बाद, ओरिजनल इमेज और सुझावों को मिलाकर, मिलती-जुलती पोशाक की फ़ाइनल इमेज जनरेट की जाती है.
कपड़ों के सुझाव देने वाला ऐप्लिकेशन बनाने के लिए, यह तरीका अपनाएं:
- Cloud Run में, retail-engine ऐप्लिकेशन खोलें और अपने ऐप्लिकेशन का यूआरएल नोट करें. यह एम्बेडिंग रिपॉज़िटरी है. इसका इस्तेमाल हम मिलते-जुलते सुझाव जनरेट करने के लिए करेंगे.
- अपने आईडीई में, https://github.com/AbiramiSukumaran/outfit-recommender/ रिपॉज़िटरी को क्लोन करें. इस अभ्यास के लिए, दिखाए गए चरणों को Visual Studio Code IDE में पूरा किया गया है.
git clone https://github.com/AbiramiSukumaran/outfit-recommender/
ऐप्लिकेशन की डायरेक्ट्री में मौजूद कुछ अहम फ़ाइलें यहां दी गई हैं:
src/main: सोर्स डायरेक्ट्री, जहां ऐप्लिकेशन फ़ाइलें और एचटीएमएल मौजूद हैं:HelloWorldApplication.java: स्प्रिंग बूट ऐप्लिकेशन के लिए मुख्य एंट्री पॉइंट.HelloWorldController.java: Spring Boot REST कंट्रोलर, जो कपड़े के सुझाव देने वाले ऐप्लिकेशन से जुड़े एचटीटीपी अनुरोधों को हैंडल करता है. यह फ़ाइल, GET और POST अनुरोधों को मैनेज करती है. साथ ही, उपयोगकर्ता के प्रॉम्प्ट को प्रोसेस करती है, इमेज का विश्लेषण करती है, AlloyDB एम्बेडिंग के साथ इंटरैक्ट करती है, और यूज़र इंटरफ़ेस (यूआई) को फ़ाइनल जवाब देती है. यह कंट्रोलर, GenerateImageSample क्लास को कॉल करता है.GenerateImageSample.java: इसमें इमेज जनरेट करने वाली क्लास होती है, जो Vertex AI से कनेक्ट होती है. यह क्लास, उपयोगकर्ता के प्रॉम्प्ट को फ़ॉर्मैट करती है, Imagen मॉडल को एपीआई कॉल करती है, और कंट्रोलर क्लास को अनुमानित इमेज वापस भेजती है.Resources: इस डायरेक्ट्री में, ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) जनरेट करने के लिए ज़रूरी इमेज और एचटीएमएल फ़ाइलें होती हैं.Pom.xml: प्रोजेक्ट की डिपेंडेंसी और कॉन्फ़िगरेशन तय करता है.
- Visual Studio Code में,
HelloWorldController.javaखोलें. इसके बाद, प्रोजेक्ट आईडी और जगह के इंस्टेंस को अपडेट करें. यह अपडेट, आपके AlloyDB इंस्टेंस के हिसाब से होना चाहिए.

endpointको उस खुदरा इंजन ऐप्लिकेशन के यूआरएल पर अपडेट करें जिसे आपने पहले होस्ट किया था.

GenerateImageSample.javaखोलें और प्रोजेक्ट आईडी और जगह की जानकारी को अपडेट करें. यह जानकारी, आपके AlloyDB इंस्टेंस के हिसाब से होनी चाहिए.

- सभी फ़ाइलें सेव करें.
अब हम इस ऐप्लिकेशन को Cloud Run के सर्वरलेस रनटाइम पर डिप्लॉय करेंगे.
13. ऐप्लिकेशन को वेब पर उपलब्ध कराना
हमने ऑउटफ़िट के सुझाव देने वाले Spring Boot ऐप्लिकेशन में, काम का प्रोजेक्ट, जगह की जानकारी, और Retail-Engine ऐप्लिकेशन की जानकारी जोड़ दी है. अब हम ऐप्लिकेशन को Cloud Run पर डिप्लॉय कर सकते हैं.
हम ऐप्लिकेशन को डिप्लॉय करने के लिए, Visual Code Studio टर्मिनल में gcloud run deploy कमांड का इस्तेमाल करेंगे. Visual Studio Code के लिए, gcloud CLI का इस्तेमाल शुरू करने के लिए, Google Cloud Code एक्सटेंशन इंस्टॉल किया जा सकता है.
ऐप्लिकेशन को डिप्लॉय करने के लिए, यह तरीका अपनाएं:
- अपने आईडीई में, क्लोन की गई डायरेक्ट्री खोलें और टर्मिनल शुरू करें. Visual Code Studio के लिए, Terminal > New Terminal पर क्लिक करें.
- gcloud सीएलआई इंस्टॉल करने के लिए, इस दस्तावेज़ में दिए गए निर्देशों का पालन करें.
- अगर Visual Code Studio का इस्तेमाल किया जा रहा है, तो Extensions पर क्लिक करें. इसके बाद, Google Cloud Code खोजें और एक्सटेंशन इंस्टॉल करें.
- अपने आईडीई टर्मिनल में, यह निर्देश चलाकर अपने Google खाते की पुष्टि करें:
gcloud auth application-default login
- अपने प्रोजेक्ट आईडी को उसी प्रोजेक्ट पर सेट करें जहां आपका AlloyDB इंस्टेंस मौजूद है.
gcloud config set project PROJECT_ID
- डिप्लॉय करने की प्रोसेस शुरू करें.
gcloud run deploy
Source code locationमें, क्लोन की गई GitHub डायरेक्ट्री चुनने के लिए, Enter दबाएं.Service nameमें, सेवा का नाम डालें. जैसे, outfit-recommender. इसके बाद, Enter दबाएं.Please specify a regionमें, वह जगह डालें जहां आपका AlloyDB इंस्टेंस और Retail-Engine ऐप्लिकेशन होस्ट किया गया है. उदाहरण के लिए, us-central1 के लिए 32 डालें और Enter दबाएं.

Allow unauthenticated invocations to [..]में, Y डालें और Enter दबाएं.
यहां दी गई इमेज में, आपके ऐप्लिकेशन को डिप्लॉय करने की प्रोसेस दिखाई गई है:

14. कपड़ों के सुझाव देने वाले ऐप्लिकेशन को टेस्ट करना
ऐप्लिकेशन को Cloud Run पर डिप्लॉय करने के बाद, Google Cloud Console में सेवा को इस तरह देखा जा सकता है:
- Google Cloud Console में, Cloud Run पर जाएं.
- सेवाओं में जाकर, डिप्लॉय की गई कपड़े का सुझाव देने वाली सेवा पर क्लिक करें. आपको retail-engine और outfit-recommender, दोनों सेवाएं इस तरह दिखनी चाहिए:

- रेकमेंडर ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) खोलने के लिए, ऐप्लिकेशन के यूआरएल पर क्लिक करें.

The following is a sample URL that you will use:
https://outfit-recommender-22905290964.us-central1.run.app/style
डिप्लॉय किए गए ऐप्लिकेशन को इस तरह देखा जा सकता है:

ऐप्लिकेशन का इस्तेमाल करना
ऐप्लिकेशन का इस्तेमाल शुरू करने के लिए, यह तरीका अपनाएं:
- अपलोड करें पर क्लिक करें और किसी कपड़े की फ़ोटो अपलोड करें.
- इमेज अपलोड होने के बाद, स्टाइल पर क्लिक करें. यह ऐप्लिकेशन, इमेज को प्रॉम्प्ट के तौर पर इस्तेमाल करता है. साथ ही, खुदरा इंजन वाले ऐप्लिकेशन से मिले प्रॉम्प्ट के आधार पर, नीचे दिए गए विकल्प जनरेट करता है. इसमें खुदरा डेटासेट के लिए एम्बेडिंग शामिल होती हैं.
यह ऐप्लिकेशन, स्टाइल से जुड़े सुझावों के साथ-साथ इमेज के आधार पर प्रॉम्प्ट और इमेज के सुझाव जनरेट करता है. उदाहरण के लिए, A white semi-sheer button up blouse with pink floral patterns on it, with balloon sleeves.
- अपने-आप जनरेट हुए स्टाइल के इस सुझाव में, अन्य प्रॉम्प्ट जोड़े जा सकते हैं. उदाहरण के लिए,
STYLE RECOMMENDATION: Cute brown skirt on a curly updo. Make it photo realistic. Accessorize with cherry earrings and burgundy plastic case sling bag. - फ़ाइनल स्टाइलिंग देखने के लिए, दिखाएं पर क्लिक करें.

15. व्यवस्थित करें
इस पोस्ट में इस्तेमाल की गई संसाधनों के लिए, अपने Google Cloud खाते से शुल्क न लिए जाने के लिए, यह तरीका अपनाएं:
- Google Cloud Console में, संसाधन मैनेज करें पेज पर जाएं.
- प्रोजेक्ट की सूची में, वह प्रोजेक्ट चुनें जिसे आपको मिटाना है. इसके बाद, मिटाएं पर क्लिक करें.
- डायलॉग बॉक्स में, प्रोजेक्ट आईडी टाइप करें. इसके बाद, प्रोजेक्ट मिटाने के लिए बंद करें पर क्लिक करें.
16. बधाई हो
बधाई हो! आपने AlloyDB, pgvector, और वेक्टर सर्च का इस्तेमाल करके, मिलती-जुलती इमेज खोजने की सुविधा का इस्तेमाल किया है. साथ ही, स्टाइल से जुड़े सुझाव जनरेट करने के लिए, खोज के नतीजों को Imagen मॉडल के साथ इस्तेमाल किया है.