इस कोडलैब (कोड बनाना सीखने के लिए ट्यूटोरियल) के बारे में जानकारी
1. खास जानकारी
ऐसे फ़ैशन ऐप्लिकेशन की कल्पना करें जो आपको न सिर्फ़ सही कपड़े ढूंढने में मदद करता है, बल्कि रीयल-टाइम में स्टाइल से जुड़ी सलाह भी देता है. ऐसा, जेन एआई इंटिग्रेशन की मदद से किया जा सकता है! इस बातचीत में, हम यह जानेंगे कि हमने AlloyDB की वेक्टर सर्च की सुविधाओं और Google के ScaNN इंडेक्स का इस्तेमाल करके, ऐसा ऐप्लिकेशन कैसे बनाया. इसकी मदद से, कपड़ों के साथ मैच करने वाले आउटफ़िट को तेज़ी से खोजा जा सकता है. साथ ही, फ़ैशन के सुझाव तुरंत मिल सकते हैं.
हम यह भी जानेंगे कि आपके हिसाब से स्टाइल के सुझाव जनरेट करने के लिए, AlloyDB का ScaNN इंडेक्स, जटिल क्वेरी को कैसे ऑप्टिमाइज़ करता है. हम क्रिएटिव स्टाइल के आइडिया देने के लिए, जनरेटिव एआई मॉडल Gemini और Imagen का भी इस्तेमाल करेंगे. साथ ही, आपके हिसाब से लुक दिखाने के लिए भी इनका इस्तेमाल किया जाएगा. यह पूरा ऐप्लिकेशन, सर्वरलेस आर्किटेक्चर पर बनाया गया है. इससे, उपयोगकर्ताओं को आसान और बेहतर अनुभव मिलता है.
चुनौती: इस ऐप्लिकेशन का मकसद, लोगों को उनके हिसाब से कपड़ों के सुझाव देना है. इससे उन लोगों को फ़ैशन के बारे में फ़ैसला लेने में मदद मिलेगी जो इस बारे में तय नहीं कर पाते. इससे, कपड़े चुनने में होने वाली परेशानी से भी बचा जा सकता है.
समाधान: कपड़ों के सुझाव देने वाला ऐप्लिकेशन, उपयोगकर्ताओं को फ़ैशन से जुड़ा बेहतरीन, मनमुताबिक, और दिलचस्प अनुभव देता है. साथ ही, यह ऐप्लिकेशन AlloyDB, जनरेटिव एआई, और सर्वरलेस टेक्नोलॉजी की सुविधाओं को दिखाता है.
आपको क्या बनाना है
इस लैब में, आपको ये काम करने होंगे:
- AlloyDB इंस्टेंस बनाना और ई-कॉमर्स डेटासेट लोड करना
- AlloyDB में pgvector और जनरेटिव एआई मॉडल एक्सटेंशन चालू करना
- प्रॉडक्ट के ब्यौरे से एम्बेड जनरेट करना
- समाधान को सर्वरलेस Cloud Run फ़ंक्शन में डिप्लॉय करना
- Gemini में कोई इमेज अपलोड करें और इमेज की जानकारी देने वाला प्रॉम्प्ट जनरेट करें.
- ई-कॉमर्स डेटासेट एम्बेड के साथ प्रॉम्प्ट के आधार पर खोज के नतीजे जनरेट करें.
- प्रॉम्प्ट को पसंद के मुताबिक बनाने और स्टाइल के सुझाव जनरेट करने के लिए, अतिरिक्त प्रॉम्प्ट जोड़ें.
- समाधान को सर्वरलेस Cloud Run फ़ंक्शन में डिप्लॉय करना
ज़रूरी शर्तें
2. आर्किटेक्चर
ऐप्लिकेशन का हाई-लेवल आर्किटेक्चर इस तरह का है:
यहां दिए गए सेक्शन में, ट्यूटोरियल के कॉन्टेक्स्ट फ़्लो को हाइलाइट किया गया है:
डेटा डालना:
हमारा पहला चरण, खुदरा डेटा (इन्वेंट्री, प्रॉडक्ट की जानकारी, ग्राहक इंटरैक्शन) को AlloyDB में डालना है.
Analytics इंजन:
हम नीचे दी गई कार्रवाइयां करने के लिए, Analytics Engine के तौर पर AlloyDB का इस्तेमाल करेंगे:
- कॉन्टेक्स्ट निकालना: इंजन, AlloyDB में सेव किए गए डेटा का विश्लेषण करता है, ताकि प्रॉडक्ट, कैटगरी, ग्राहक के व्यवहार वगैरह के बीच के संबंधों को समझा जा सके.
- एम्बेडिंग बनाना: उपयोगकर्ता की क्वेरी और AlloyDB में सेव की गई जानकारी, दोनों के लिए एम्बेडिंग (टेक्स्ट का गणितीय रूप) जनरेट किए जाते हैं.
- वेक्टर सर्च: यह इंजन, मिलती-जुलती चीज़ों को खोजता है. इसके लिए, वह क्वेरी एम्बेडिंग की तुलना प्रॉडक्ट के ब्यौरे, समीक्षाओं, और काम के दूसरे डेटा के एम्बेडिंग से करता है. इससे, सबसे ज़्यादा काम के 25 "नज़दीकी नेबर" की पहचान की जाती है.
Gemini से जुड़ा सुझाव:
इमेज के बाइट कलेक्शन को Vertex AI API के ज़रिए Gemini मॉडल को भेजा जाता है. साथ ही, इसमें एक प्रॉम्प्ट भी शामिल होता है, जिसमें ऊपर पहने जाने वाले कपड़े के बारे में टेक्स्ट में जानकारी देने के साथ-साथ, नीचे पहने जाने वाले कपड़े के सुझाव भी मांगे जाते हैं.
AlloyDB RAG और वेक्टर सर्च:
टॉपवियर की जानकारी का इस्तेमाल, डेटाबेस से क्वेरी करने के लिए किया जाता है. क्वेरी, खोज के लिए इस्तेमाल किए गए टेक्स्ट (जैसे, Gemini मॉडल से मिलने वाले, बॉटम वियर से मैच करने वाले कपड़ों के सुझाव) को एम्बेड में बदल देती है. साथ ही, डेटाबेस में सेव किए गए एम्बेड पर वेक्टर सर्च की मदद से, मिलते-जुलते नतीजे (मैच करने वाले नतीजे) खोजती है. बेहतर तरीके से जानकारी पाने के लिए, AlloyDB डेटाबेस में वेक्टर एम्बेड को ScaNN इंडेक्स का इस्तेमाल करके इंडेक्स किया जाता है.
जवाब की इमेज जनरेट करना:
पुष्टि किए गए रिस्पॉन्स को JSON कलेक्शन में स्ट्रक्चर किया जाता है. साथ ही, पूरे इंजन को सर्वरलेस Cloud Run फ़ंक्शन में पैकेज किया जाता है. इसे एजेंट बिल्डर से शुरू किया जाता है.
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 निर्देश डाले जाते हैं. पहले Editor टैब की दाईं ओर मौजूद प्लस का इस्तेमाल करके, कई Editor विंडो जोड़ी जा सकती हैं.
आपको एडिटर विंडो में AlloyDB के लिए निर्देश डालने होंगे. इसके लिए, ज़रूरत के हिसाब से 'चालू करें', 'फ़ॉर्मैट करें', और 'मिटाएं' विकल्पों का इस्तेमाल करें.
एक्सटेंशन चालू करना
इस ऐप्लिकेशन को बनाने के लिए, हम "pgvector"
और "google_ml_integration"
एक्सटेंशन का इस्तेमाल करेंगे.
- pgvector एक्सटेंशन की मदद से, वेक्टर एम्बेडमेंट को सेव और खोजा जा सकता है.
- google_ml_integration एक्सटेंशन, ऐसे फ़ंक्शन उपलब्ध कराता है जिनका इस्तेमाल करके, Vertex AI के अनुमान वाले एंडपॉइंट को ऐक्सेस किया जा सकता है. इससे, एसक्यूएल में अनुमान पाने में मदद मिलती है.
- इन डीडीएल को चलाकर, इन एक्सटेंशन को चालू करें:
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 के नए एडिटर टैब में चिपकाएं. इसके बाद, रन करें पर क्लिक करें.
- एक्सप्लोरर सेक्शन को तब तक बड़ा करें, जब तक आपको
apparels
नाम की टेबल न दिख जाए. - मेन्यू आइकॉन [⋮] पर क्लिक करें. इसके बाद, क्वेरी पर क्लिक करें. SELECT स्टेटमेंट, Editor के नए टैब में खुलेगा.
- पंक्तियों के डाले जाने की पुष्टि करने के लिए, चलाएं पर क्लिक करें.
उपयोगकर्ता को अनुमति देना
हम postgres
उपयोगकर्ता को AlloyDB में जाकर एम्बेड जनरेट करने की अनुमति देंगे.
. AlloyDB Studio में, postgres
उपयोगकर्ता को embedding
फ़ंक्शन को चलाने का अधिकार देने के लिए, यह स्टेटमेंट चलाएं:
GRANT EXECUTE ON FUNCTION embedding TO postgres;
AlloyDB सेवा खाते को Vertex AI उपयोगकर्ता की भूमिका देना
हम Vertex AI के टेक्स्ट एम्बेडिंग मॉडल का इस्तेमाल करके, एम्बेड जनरेट करेंगे. इन एम्बेड के लिए, AlloyDB सेवा खाते में Vertex AI उपयोगकर्ता की भूमिका तय की जाएगी.
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
", "на берегу океана
" वगैरह कहा जा सकता है. ये सभी शब्द अलग-अलग दिखते हैं, लेकिन उनके सेमैनटिक मतलब या मशीन लर्निंग के शब्दों में, उनके एम्बेड एक-दूसरे के बहुत करीब होने चाहिए.
अब डेटा और कॉन्टेक्स्ट तैयार है. इसलिए, हम embedding
फ़ील्ड में टेबल में प्रॉडक्ट के ब्यौरे(pdt_desc
) कॉलम के एम्बेड जोड़ने के लिए, SQL चलाएंगे. एम्बेड करने के लिए कई तरह के मॉडल इस्तेमाल किए जा सकते हैं. हम 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.
" - हम इस खोज टेक्स्ट को एम्बेड में बदल रहे हैं. इसके लिए, हम मॉडल:
text-embedding-005
के साथembedding()
तरीके का इस्तेमाल कर रहे हैं. पिछले चरण के बाद, यह चरण आपको जाना-पहचाना लगेगा. पिछले चरण में, हमने टेबल के सभी आइटम में एम्बेड करने की सुविधा लागू की थी. - "
<=>
", कोसाइन मिलते-जुलते डिस्टेंस मेथड का इस्तेमाल दिखाता है. 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);
ऊपर दिए गए डीडीएल में:
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 मॉडल इंटिग्रेशन.
- अपने AlloyDB क्लस्टर के प्राइमरी इंस्टेंस पर जाएं और प्राइमरी इंस्टेंस में बदलाव करें पर क्लिक करें.
- बेहतर कॉन्फ़िगरेशन के विकल्प में, नया डेटाबेस फ़्लैग सेक्शन बड़ा करें. साथ ही, पक्का करें कि
google_ml_integration.enable_model_support flag
को "on
" पर सेट किया गया हो. इसके लिए, यह तरीका अपनाएं:
3. अगर यह "
on
" पर सेट नहीं है, तो इसे "on
" पर सेट करें. इसके बाद, इंस्टेंस अपडेट करें पर क्लिक करें.
इस चरण में कुछ मिनट लगेंगे.
AlloyDB और Vertex AI मॉडल का इंटिग्रेशन
अब AlloyDB Studio से कनेक्ट करके, यहां दिया गया डीएमएल स्टेटमेंट चलाया जा सकता है. इससे, 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
में पांच लाइनें होंगी. हर लाइन में ये कॉलम होंगे:
literature
content
user_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 देखने के लिए, इस कोड को हटाया जा सकता है.- आखिर में, LLM फ़ील्ड पाने के लिए, आपको उसे 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 फ़ंक्शन पर जाएं:
https://console.cloud.google.com/run/create?deploymentType=function
- 'कॉन्फ़िगर करें' में, फ़ंक्शन का नाम "retail-engine" के तौर पर सेट करें और क्षेत्र के तौर पर "us-central1" चुनें.
- एंडपॉइंट यूआरएल में, रनटाइम के तौर पर Java 17 चुनें.
- पुष्टि करने की सुविधा में जाकर, बिना पुष्टि के अनुरोध करने की अनुमति दें को चुनें.
- कंटेनर, वॉल्यूम, नेटवर्किंग, सुरक्षा को बड़ा करें और नेटवर्किंग टैब पर क्लिक करें.
- आउटबाउंड ट्रैफ़िक के लिए वीपीसी से कनेक्ट करें को चुनें. इसके बाद, सर्वर के बिना VPC ऐक्सेस करने की सुविधा वाले कनेक्टर का इस्तेमाल करें पर क्लिक करें.
- नेटवर्क में, नया वीपीसी कनेक्टर जोड़ें पर क्लिक करें. अगर Serverless VPC Access API पहले से चालू नहीं है, तो उसे चालू करें.
- 'कनेक्टर बनाएं' में जाकर, नाम को
alloydb-test-conn
पर सेट करें. - क्षेत्र को
us-central
पर सेट करें. - नेटवर्क की वैल्यू को डिफ़ॉल्ट पर सेट रहने दें. साथ ही, सबनेट को कस्टम आईपी रेंज के तौर पर सेट करें. इसके लिए, 10.8.0.0 या मिलती-जुलती कोई अन्य आईपी रेंज इस्तेमाल करें.
- स्केलिंग दिखाएं सेटिंग को बड़ा करें और कम से कम इंस्टेंस को 2 पर और ज़्यादा से ज़्यादा इंस्टेंस को 3 पर सेट करें.
- इंस्टेंस टाइप के तौर पर f1-micro चुनें. कनेक्टर बनाने के विकल्प यहां दिए गए हैं:
- कनेक्टर बनाने के लिए, बनाएं पर क्लिक करें.
- ट्रैफ़िक रूटिंग में, सभी ट्रैफ़िक को वीपीसी पर भेजें चुनें.
- फ़ंक्शन बनाने के लिए, बनाएं पर क्लिक करें.
ऐप्लिकेशन को डिप्लॉय करना
फ़ंक्शन बनाने के बाद, सोर्स को अपडेट करें और ऐप्लिकेशन को फिर से डिप्लॉय करें.
- Cloud Run में, सेवाएं टैब पर क्लिक करें. इसके बाद, retail-engine फ़ंक्शन पर क्लिक करें.
- सोर्स टैब पर क्लिक करें. डिफ़ॉल्ट फ़ंक्शन एंट्री पॉइंट को "
gcfv2.HelloHttpFunction
" पर सेट रहने दें. - HelloHttpFunction.java फ़ाइल के कॉन्टेंट को, इस Java फ़ाइल के कॉन्टेंट से बदलें.
- अपने AlloyDB इंस्टेंस और क्लस्टर की जानकारी के हिसाब से, फ़ाइल में AlloyDbJdbcConnector की जानकारी अपडेट करें.
$PROJECT_ID
को अपने AlloyDB क्लस्टर और इंस्टेंस के प्रोजेक्ट आईडी से बदलें.
- pom.xml फ़ाइल के कॉन्टेंट को इस XML फ़ाइल के कॉन्टेंट से बदलें.
- फ़ंक्शन को डिप्लॉय करने के लिए, सेव करें और फिर से डिप्लॉय करें पर क्लिक करें.
11. खुदरा-इंजन ऐप्लिकेशन की जांच करना
अपडेट किया गया Cloud फ़ंक्शन डिप्लॉय होने के बाद, आपको एंडपॉइंट इस फ़ॉर्मैट में दिखेगा:
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. कपड़ों के सुझाव देने वाले फ़्लो के बारे में जानकारी
कपड़ों के सुझाव देने वाला ऐप्लिकेशन, एक स्प्रिंट बूट ऐप्लिकेशन है. इसे, Gemini और Imagen के साथ-साथ AlloyDB रीटेल-इंजन ऐप्लिकेशन में बनाए गए एम्बेडिंग के साथ काम करने के लिए कॉन्फ़िगर किया गया है. इससे, कपड़ों के स्टाइल के विज़ुअल विकल्प जनरेट किए जा सकते हैं. इसकी मदद से, पसंद के मुताबिक प्रॉम्प्ट जोड़े जा सकते हैं और सुझाव को बेहतर बनाया जा सकता है.
इस बारे में इस तरह से सोचें, आपने अपने वार्डरोब में मौजूद हॉट पिंक टॉप की इमेज को इस ऐप्लिकेशन में अपलोड किया है. 'दिखाएं' पर क्लिक करने पर, ऐप्लिकेशन को ओरिजनल इमेज से मिलते-जुलते कई विकल्प जनरेट करने के लिए, ऐप्लिकेशन कोड में सेट किए गए प्रॉम्प्ट और AlloyDB डेटाबेस में एम्बेड किए गए डेटा का इस्तेमाल किया जाता है. अब आपको यह जानना है कि सुझाए गए विकल्प, नीले रंग के नेकलेस के साथ कैसे दिखेंगे. इसलिए, उन लाइनों पर प्रॉम्प्ट जोड़ें और 'स्टाइल' पर क्लिक करें. आखिर में, एक ऐसी इमेज जनरेट की जाती है जिसमें ओरिजनल इमेज और सुझावों को मिलाकर, कपड़ों का एक बेहतरीन कॉम्बिनेशन बनाया जाता है.
कपड़ों के सुझाव देने वाला ऐप्लिकेशन बनाने के लिए, यह तरीका अपनाएं:
- Cloud Run में, retail-engine ऐप्लिकेशन खोलें और अपने ऐप्लिकेशन का यूआरएल नोट करें. यह एम्बेड का रिपॉज़िटरी है. इसका इस्तेमाल, मिलते-जुलते सुझाव जनरेट करने के लिए किया जाएगा.
- अपने IDE में, https://github.com/AbiramiSukumaran/outfit-recommender/ डेटा स्टोर करने की जगह को क्लोन करें. इस एक्सरसाइज़ के लिए, यहां दिए गए चरणों को Visual Studio Code IDE में पूरा किया गया है.
git clone https://github.com/AbiramiSukumaran/outfit-recommender/
ऐप्लिकेशन की डायरेक्ट्री में मौजूद कुछ अहम फ़ाइलें यहां दी गई हैं:
src/main
: सोर्स डायरेक्ट्री, जहां ऐप्लिकेशन फ़ाइलें और एचटीएमएल मौजूद होते हैं:HelloWorldApplication.java
: Spring Boot ऐप्लिकेशन का मुख्य एंट्री पॉइंट.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. ऐप्लिकेशन को वेब पर उपलब्ध कराना
अब हमने आउटफ़िट के सुझाव देने वाले स्प्रिंग बूट ऐप्लिकेशन में, काम का प्रोजेक्ट, जगह, और रीटेल-इंजन ऐप्लिकेशन की जानकारी जोड़ दी है. इसलिए, अब हम ऐप्लिकेशन को Cloud Run पर डिप्लॉय कर सकते हैं.
ऐप्लिकेशन को डिप्लॉय करने के लिए, हम Visual Code Studio टर्मिनल में gcloud run deploy
कमांड का इस्तेमाल करेंगे. Visual Studio Code के लिए, gcloud CLI का इस्तेमाल शुरू करने के लिए, Google Cloud Code एक्सटेंशन इंस्टॉल किया जा सकता है.
ऐप्लिकेशन को डिप्लॉय करने के लिए, यह तरीका अपनाएं:
- अपने आईडीई में, क्लोन की गई डायरेक्ट्री खोलें और टर्मिनल शुरू करें. Visual Code Studio के लिए, Terminal > नया Terminal पर क्लिक करें.
- gcloud सीएलआई इंस्टॉल करने के लिए, इस दस्तावेज़ में दिए गए निर्देशों का पालन करें.
- अगर Visual Code Studio का इस्तेमाल किया जा रहा है, तो एक्सटेंशन पर क्लिक करें. इसके बाद, Google Cloud Code खोजें और एक्सटेंशन इंस्टॉल करें.
- अपने IDE टर्मिनल में, यह कमांड चलाकर अपने Google खाते की पुष्टि करें:
gcloud auth application-default login
- अपने प्रोजेक्ट आईडी को उसी प्रोजेक्ट पर सेट करें जहां आपका AlloyDB इंस्टेंस मौजूद है.
gcloud config set project PROJECT_ID
- डिप्लॉय करने की प्रोसेस शुरू करें.
gcloud run deploy
Source code location
में, क्लोन की गई GitHub डायरेक्ट्री चुनने के लिए Enter दबाएं.Service name
में, सेवा का नाम डालें, जैसे कि आउटफ़िट-सुझाव देने वाला. इसके बाद, Enter दबाएं.Please specify a region
में, वह जगह डालें जहां आपका AlloyDB इंस्टेंस और रीटेल-इंजन ऐप्लिकेशन होस्ट किया गया है. जैसे, us-central1 के लिए 32 डालें और Enter दबाएं.
Allow unauthenticated invocations to [..]
में, Y डालें और Enter दबाएं.
नीचे दी गई इमेज में, आपके ऐप्लिकेशन के डिप्लॉयमेंट की प्रोग्रेस दिख रही है:
14. कपड़ों के सुझाव देने वाले ऐप्लिकेशन को टेस्ट करना
ऐप्लिकेशन को Cloud Run पर डिप्लॉय करने के बाद, Google Cloud Console में इस सेवा को इस तरह देखा जा सकता है:
- Google Cloud Console में, Cloud Run पर जाएं.
- सेवाओं में जाकर, डिप्लॉय की गई कपड़े के सुझाव देने वाली सेवा पर क्लिक करें. आपको रीटेल-इंजन और आउटफ़िट-सुझाने वाला टूल, इस तरह दिखेगा:
- सुझाव देने वाले ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) खोलने के लिए, ऐप्लिकेशन के यूआरएल पर क्लिक करें.
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 मॉडल के साथ इस्तेमाल किया है.