Bu codelab hakkında
1. Genel Bakış
Son teknoloji üretken yapay zeka entegrasyonunun gücü sayesinde hem mükemmel kıyafeti bulmanıza hem de gerçek zamanlı stil önerileri sunan bir moda uygulaması düşünün. Bu konuşmada, AlloyDB'nin vektör arama özelliklerini Google'ın ScaNN dizini ile birlikte kullanarak böyle bir uygulamayı nasıl geliştirdiğimizi, eşleşen kıyafetler için ışık hızında aramalar yapmayı ve anında moda önerileri sunmayı nasıl sağladığımızı inceleyeceğiz.
Ayrıca AlloyDB'nin ScaNN dizininin, kişiselleştirilmiş stil önerileri oluşturmak için karmaşık sorguları nasıl optimize ettiğini de inceleyeceğiz. Ayrıca, yaratıcı stil ilhamları sağlamak ve hatta kişiselleştirilmiş görünümlerinizi görselleştirmek için güçlü üretken yapay zeka modelleri olan Gemini ve Imagen'i de kullanacağız. Uygulamanın tamamı sunucusuz bir mimari üzerine inşa edilmiştir. Bu sayede kullanıcılar sorunsuz ve ölçeklenebilir bir deneyim elde eder.
Meydan okuma: Uygulama, kişiselleştirilmiş kıyafet önerileri sunarak moda konusunda kararsız kalan kullanıcılara yardımcı olmayı amaçlamaktadır. Ayrıca kıyafet planlamasından kaynaklanan karar verme yorgunluğunu önlemeye de yardımcı olur.
Çözüm: Kıyafet önerici uygulama, kullanıcılara akıllı, kişiselleştirilmiş ve ilgi çekici bir moda deneyimi sunma sorununu çözerken AlloyDB, üretken yapay zeka ve sunucusuz teknolojilerin özelliklerini de sergiler.
Ne oluşturacaksınız?
Bu laboratuvarda şunları yapacaksınız:
- AlloyDB örneği oluşturma ve E-ticaret veri kümesini yükleme
- AlloyDB'de pgvector ve üretken yapay zeka model uzantılarını etkinleştirme
- Ürün açıklamasından yerleştirilmiş öğeler oluşturma
- Çözümü sunucusuz Cloud Run işlevlerinde dağıtma
- Gemini'ye bir resim yükleyin ve resim açıklaması istemi oluşturun.
- E-ticaret veri kümesi yerleştirmeleriyle birlikte istemlere dayalı arama sonuçları oluşturun.
- İstemi özelleştirmek ve stil önerileri oluşturmak için ek istemler ekleyin.
- Çözümü sunucusuz Cloud Run işlevlerinde dağıtma
Şartlar
2. Mimari
Uygulamanın üst düzey mimarisi aşağıdaki gibidir:
Aşağıdaki bölümlerde, eğitimdeki bağlamsal akış vurgulanmaktadır:
Besleme:
İlk adımımız, perakende verilerini (envanter, ürün açıklamaları, müşteri etkileşimleri) AlloyDB'ye beslemektir.
Analytics motoru:
Aşağıdakileri gerçekleştirmek için analiz motoru olarak AlloyDB'yi kullanacağız:
- Bağlam ayıklama: Motor, geçerli olduğu durumlarda ürünler, kategoriler, müşteri davranışı vb. arasındaki ilişkileri anlamak için AlloyDB'de depolanan verileri analiz eder.
- Embedding Oluşturma: Hem kullanıcının sorgusu hem de AlloyDB'de depolanan bilgiler için embedding'ler (metnin matematiksel gösterimi) oluşturulur.
- Vektör Arama: Motor, sorgu yerleştirmesini ürün açıklamalarının, yorumların ve diğer alakalı verilerin yerleştirmeleriyle karşılaştırarak benzerlik araması yapar. Bu işlem, en alakalı 25 "en yakın komşuyu" tanımlar.
Gemini önerisi:
Resim bayt dizisi, Vertex AI API aracılığıyla Gemini modeline iletilir. Bu işlemle birlikte, alt giyim önerileriyle birlikte üst giyimin metin açıklamasını isteyen istem de iletilir.
AlloyDB RAG ve vektör arama:
Üst giyim eşyasının açıklaması, veritabanını sorgulamak için kullanılır. Sorgu, arama metnini (eşleşen alt giyim için Gemini modelinden öneri) gömmelere dönüştürür ve en yakın komşuları (eşleşen sonuçları) bulmak için veritabanında depolanan gömmelerde bir Vector Search gerçekleştirir. AlloyDB veritabanındaki vektör yerleştirmeleri, daha iyi hatırlama için ScaNN dizini kullanılarak dizine eklenir.
Yanıt Resmi Oluşturma:
Doğrulanan yanıtlar bir JSON dizisi olarak yapılandırılır ve motorun tamamı, Agent Builder'dan çağrılan sunucusuz bir Cloud Run işlevi olarak paketlenir.
Imagen görüntü üretme:
Kullanıcının stil istemi, kullanıcı tarafından seçilen bir öneri ve tüm kişiselleştirme istekleri birleştirilerek Imagen 3'e mevcut bir resim gösterilir. Stilize edilmiş resim, Vertex AI API kullanılarak bu istem temel alınarak oluşturulur.
3. Başlamadan önce
Proje oluşturma
- Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun.
- Cloud projenizde faturalandırmanın etkinleştirildiğinden emin olun. Projede faturalandırmanın etkin olup olmadığını nasıl kontrol edebileceğinizi öğrenin .
- Google Cloud'da çalışan ve bq ile önceden yüklenmiş bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız. Google Cloud Console'un üst kısmından Cloud Shell'i etkinleştir'i (
) tıklayın.
- Cloud Shell'e bağlandıktan sonra aşağıdaki komutu kullanarak kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını doğrulayın:
gcloud auth list
- Gelecekteki gcloud komutlarının projenizi doğru şekilde tanımlayacağını onaylamak için aşağıdaki komutu çalıştırın.
gcloud config list project
- Projeniz ayarlanmadıysa açıkça ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>
- Gerekli API'leri etkinleştirin.
API'leri etkinleştirmek için bağlantıyı takip edin.
Herhangi bir API'yi etkinleştirmeyi unutursanız uygulama sırasında istediğiniz zaman etkinleştirebilirsiniz.
gcloud komutları ve kullanımı hakkında daha fazla bilgi için belgelere bakın.
4. Veritabanı kurulumu
Bu laboratuvarda, perakende e-ticaret veri kümesini depolamak için veritabanı olarak AlloyDB'yi kullanacağız. Veritabanları ve günlükler gibi tüm kaynakları depolamak için kümeler kullanır. Her kümenin, verilere erişim noktası sağlayan bir birincil örneği vardır. Tablolar, verileri depolayan gerçek kaynaktır.
E-ticaret veri kümesinin yükleneceği bir AlloyDB kümesi, örneği ve tablosu oluşturalım.
Küme ve örnek oluşturma
- Google Cloud Console'da AlloyDB'yi arayın. Cloud Console'daki çoğu sayfayı bulmanın kolay bir yolu, konsolun arama çubuğunu kullanarak arama yapmaktır.
- KÜME OLUŞTUR'u tıklayın.
- Aşağıdaki değerlerle bir küme ve örnek oluşturun:
- cluster id: "
shopping-cluster
" - şifre: "
alloydb
" - PostgreSQL 15 ile uyumlu
- Bölge: "
us-central1
" - Ağ oluşturma: "
default
"
- Ağ bölümünde, varsayılan ağı seçtiğinizde aşağıdaki seçenek gösterilir. Varsayılan bir ağ oluşturmak için BAĞLANTI KUR'u tıklayın.
- Otomatik olarak atanmış bir IP aralığı kullan'ı seçin ve Devam'ı tıklayın. Bilgileri inceledikten sonra BAĞLANTI OLUŞTUR'u tıklayın.
Varsayılan ağ oluşturma işleminin tamamlanmasını bekleyin.
- Birincil örneğinizi yapılandırın bölümünde, örnek kimliğini "
shopping-instance"
" olarak ayarlayın.
- Kümeyi aşağıdaki gibi oluşturma işlemini tamamlamak için KÜME OLUŞTUR'u tıklayın:
5. Veri kullanımı
Şimdi, mağazayla ilgili verileri içeren bir tablo ekleme zamanı. Örneğinizin oluşturulmasının tamamlanmasını bekleyin. Oluşturulduktan sonra, kümeyi oluştururken ayarladığınız kimlik bilgilerini kullanarak AlloyDB'de oturum açabilirsiniz.
AlloyDB veritabanında kimlik doğrulama
- Google Cloud Console'da AlloyDB'ye gidin. Birincil kümeyi seçin ve ardından soldaki gezinme menüsünden AlloyDB Studio'yu tıklayın:
- AlloyDB veritabanında kimlik doğrulamak için aşağıdaki ayrıntıları girin:
- Kullanıcı adı : "
postgres
" - Veritabanı : "
postgres
" - Şifre : "
alloydb
"
AlloyDB Studio'da kimlik doğrulamayı başarıyla tamamladıktan sonra SQL komutları Düzenleyici sekmelerine girilir. İlk Düzenleyici sekmesinin sağındaki artı işaretini kullanarak birden fazla Düzenleyici penceresi ekleyebilirsiniz.
Gerektiği gibi Çalıştır, Biçimlendir ve Temizle seçeneklerini kullanarak Düzenleyici pencerelerinde AlloyDB komutları girersiniz.
Uzantılar'ı etkinleştirme
Bu uygulamayı oluşturmak için "pgvector"
ve "google_ml_integration"
uzantılarını kullanacağız.
- pgvector uzantısı, vektör yerleştirmelerini depolamanıza ve aramanıza olanak tanır.
- google_ml_integration uzantısı, SQL'de tahmin almak için Vertex AI tahmin uç noktalarına erişmek üzere kullandığınız işlevleri sağlar.
- Aşağıdaki DDL'leri çalıştırarak bu uzantıları etkinleştirin:
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;
- Aşağıdaki SQL komutunu çalıştırarak uzantıların yüklü olup olmadığını doğrulayın:
select extname, extversion from pg_extension;
Tablo oluşturma
- Aşağıdaki DDL ifadesini kullanarak bir tablo oluşturun:
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) );
Yukarıdaki komut başarıyla yürütüldüğünde tabloyu
on adres vardır. Aşağıdaki resimde bir örnek gösterilmektedir:
Verileri besleme
Bu laboratuvarda, SQL dosyasında yaklaşık 200 kayıtlık test verileri var. id, category, sub_category, uri, image
ve content
içerir. Diğer alanlar laboratuvarda doldurulur.
- SQL dosyasından 20 satırı/insert ifadesini AlloyDB Studio'daki yeni bir Düzenleyici sekmesine kopyalayın ve ÇALıştır'ı tıklayın.
apparels
adlı tabloyu görene kadar Gezgin bölümünü genişletin.- Menü simgesini [⋮] ve Sorgu'yu tıklayın. Yeni bir Düzenleyici sekmesinde bir SELECT ifadesi açılır.
- Satırların eklendiğini doğrulamak için Çalıştır'ı tıklayın.
Kullanıcıya izin verme
postgres
kullanıcısına AlloyDB'den yerleşik oluşturma izni vereceğiz.
AlloyDB Studio'da, embedding
işlevinde yürütme haklarını postgres
kullanıcısına vermek için aşağıdaki ifadeyi çalıştırın:
GRANT EXECUTE ON FUNCTION embedding TO postgres;
AlloyDB hizmet hesabına Vertex AI Kullanıcı ROLÜ verme
AlloyDB hizmet hesabında Vertex AI kullanıcı rolü için gömme oluşturmak üzere Vertex AI'daki metin gömme modellerini kullanacağız.
Google Cloud Console'da Cloud Shell terminali [ ] simgesini tıklayın ve aşağıdaki komutu çalıştırın:
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. Derleme Bağlamı
Yer paylaşımı oluşturmak için context
'ye (yani tek bir alana dahil etmek istediğimiz tüm bilgilere) sahip olmamız gerekir. Bunu, apparels
tablosundaki pdt_desc
sütununda depolayacağımız bir ürün açıklaması oluşturarak yapacağız.
Bizim durumumuzda her ürünle ilgili tüm bilgileri kullanacağız ancak bunu kendi verilerinizle yaparken verileri işletmeniz için anlamlı bulduğunuz herhangi bir şekilde mühendislik yapabilirsiniz.
AlloyDB Studio Düzenleyici sekmesinde, pdt_desc
alanını bağlam verileriyle güncelleyen aşağıdaki komutu çalıştırın:
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;
Bu DML, tablodaki tüm alanlardan ve diğer bağımlılıklardan (kullanım alanınızda varsa) alınan bilgileri kullanarak basit bir bağlam özeti oluşturur. Daha hassas bir bilgi ve bağlam oluşturmak için verileri işletmeniz için anlamlı bulduğunuz herhangi bir şekilde tasarlayabilirsiniz.
7. Bağlam için gömmeler oluşturma
Bilgisayarların sayıları işlemesi metinleri işlemekten çok daha kolaydır. Yerleştirme sistemi, metni nasıl ifade edildiğine, hangi dilin kullanıldığına vb. bakılmaksızın metni temsil etmesi gereken bir dizi kayan noktalı sayıya dönüştürür.
Deniz kıyısındaki bir yeri açıklamayı deneyin. "on the water
", "beachfront
", "walk from your room to the ocean
", "sur la mer
", "на берегу океана
" vb. olarak adlandırılabilir. Bu terimlerin tümü farklı görünse de anlamsal anlamları veya makine öğrenimi terminolojisinde yer paylaşımları birbirine çok yakın olmalıdır.
Veriler ve bağlam hazır olduğunda, ürün açıklaması(pdt_desc
) sütununun yerleştirilmesini sağlamak için SQL'i embedding
alanındaki tabloya çalıştıracağız. Kullanabileceğiniz çeşitli yerleştirme modelleri vardır. Vertex AI'dan text-embedding-005
kullanıyoruz.
- AlloyDB Studio'da, aşağıdaki komutu çalıştırarak yerleştirmeler oluşturun ve
pdt_desc
sütununu, depoladığı verilerin yerleştirmeleriyle güncelleyin:
UPDATE
apparels
SET
embedding = embedding( 'text-embedding-005',
pdt_desc)
WHERE
TRUE;
- Aşağıdaki komutu çalıştırarak yerleştirmelerin oluşturulduğunu doğrulayın:
SELECT
id,
category,
sub_category,
content,
embedding
FROM
Apparels
LIMIT 5;
Aşağıda, sorgudaki örnek metin için kayan nokta dizisi gibi görünen örnek bir gömme vektörü verilmiştir:
8. Vektör araması yapma
Tablo, veriler ve yerleştirmeler hazır olduğuna göre kullanıcı arama metni için gerçek zamanlı vektör araması yapalım.
Kullanıcının arama metninin "pink color, casual, pure cotton tops for women
" olduğunu varsayalım.
Bu sorguyla eşleşen öğeleri bulmak için aşağıdaki SQL sorgusunu çalıştırın:
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;
Bu sorguyu ayrıntılı olarak inceleyelim:
Bu sorguda,
- Kullanıcının arama metni: "
I want womens tops, pink casual only pure cotton.
" - Bu arama metnini,
text-embedding-005
modeliyle birlikteembedding()
yöntemini kullanarak yerleştirmelere dönüştürüyoruz. Bu adım, tablodaki tüm öğelere yerleştirme işlevini uyguladığımız son adımdan sonra tanıdık gelecektir. - "
<=>
", KOSİNÜS BENZERLİĞİ uzaklık yönteminin kullanıldığını gösterir. Kullanılabilen tüm benzerlik ölçümlerini pgvector dokümanlarında bulabilirsiniz. - Yerleştirme yönteminin sonucunu, veritabanında depolanan vektörlerle uyumlu hale getirmek için vektör veri türüne dönüştürüyoruz.
- LIMIT 5, arama metnine en yakın 5 komşuyu ayıklamak istediğimizi gösterir.
Aşağıda bu SQL sorgusunun örnek yanıtı gösterilmektedir:
Sonuçlarınızda görebileceğiniz gibi, eşleşmeler arama metnine oldukça yakın. Sonuçların nasıl değiştiğini görmek için rengi değiştirmeyi deneyin.
Sorgu performansı için AlloyDB ScaNN dizini
Şimdi ScaNN dizini kullanarak bu Vektör Arama sonucunun performansını (sorgu süresi), verimliliğini ve hatırlama oranını artırmak istediğimizi varsayalım.
ScaNN dizini kullanmak istiyorsanız aşağıdaki adımları deneyin:
- Küme, örnek, bağlam ve yerleştirilmeler zaten oluşturulduğundan, aşağıdaki ifadeyi kullanarak ScaNN uzantısını yüklememiz yeterlidir:
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
- ScaNN dizinini oluşturun:
CREATE INDEX apparel_index ON apparels
USING scann (embedding cosine)
WITH (num_leaves=54);
Yukarıdaki DDL'de:
apparel_index
, dizinin adıdır.apparels
, tablo adıdır.scann
, dizin yöntemidir.embedding
, tabloda dizine eklemek istediğiniz sütundur.cosine
, dizinle kullanmak istediğiniz mesafe yöntemidir.54
, bu dizin için uygulanacak bölüm sayısıdır. 1 ile 1048576 arasında bir değere ayarlayın. Bu değere nasıl karar vereceğiniz hakkında daha fazla bilgi için ScaNN dizini ayarlama başlıklı makaleyi inceleyin.
ScaNN repo'sundaki öneriye göre, veri noktalarının sayısının KÖKÜNÜ kullandık. Bölümlere ayırma işleminde num_leaves
, yaklaşık olarak veri noktalarının sayısının kareköküne eşit olmalıdır.
- Dizinin sorgu kullanılarak oluşturulup oluşturulmadığını kontrol edin:
SELECT * FROM pg_stat_ann_indexes;
- Dizin olmadan kullandığımız aynı sorguyu kullanarak vektör araması yapın:
select * from apparels
ORDER BY embedding <=> CAST(embedding('textembedding-gecko', 'white tops for girls without any print') as vector(768))
LIMIT 20
Yukarıdaki sorgu, laboratuvarda 8. adımda kullandığımız sorguyla aynıdır. Ancak artık alanı ScaNN dizini kullanılarak dizine ekledik.
- Dizinle ve dizin olmadan basit bir arama sorgusuyla test edin. Dizin olmadan test etmek için dizini bırakmanız gerekir:
white tops for girls without any print
Dizinlenen gömülü verilerdeki Vector Search sorgusundaki yukarıdaki arama metni, kaliteli arama sonuçları ve verimlilik sağlar. Dizinle verimlilik büyük ölçüde artar (yürütme süresi açısından: ScaNN olmadan 10,37 ms ve ScaNN ile 0,87 ms). Bu konu hakkında daha fazla bilgi için lütfen bu blogu inceleyin.
9. LLM ile Eşleşme Doğrulaması
Devam edip bir uygulamaya en iyi eşleşmeleri döndürecek bir hizmet oluşturmadan önce, bu potansiyel yanıtların gerçekten alakalı olup olmadığını ve kullanıcıyla paylaşmanın güvenli olup olmadığını doğrulamak için üretken yapay zeka modeli kullanalım.
Örneğin Gemini için ayarlandığından emin olma
google_ml_integration
özelliğinin kümeniz ve örneğiniz için etkinleştirildiğinden emin olun. AlloyDB Studio'da aşağıdaki komutu çalıştırın:
show google_ml_integration.enable_model_support;
Değer "açık" olarak gösteriliyorsa sonraki 2 adımı atlayabilir ve doğrudan ayarlamaya geçebilirsiniz.
AlloyDB ve Vertex AI Model entegrasyonu.
- AlloyDB kümenizin birincil örneğine gidin ve BİRİNCİL ÖRNEĞİ DÜZENLE'yi tıklayın.
- Gelişmiş yapılandırma seçenekleri bölümünde, Yeni veritabanı işareti bölümünü genişletin ve
google_ml_integration.enable_model_support flag
değerinin aşağıdaki gibi "on
" olarak ayarlandığından emin olun:
3. "
on
" olarak ayarlanmamışsa "on
" olarak ayarlayın ve ardından ÖRNEK YENİLE'yi tıklayın.
Bu adım birkaç dakika sürer.
AlloyDB ve Vertex AI modeli entegrasyonu
Artık AlloyDB Studio'ya bağlanabilir ve belirtilen yerde proje kimliğinizi kullanarak AlloyDB'den Gemini model erişimini ayarlamak için aşağıdaki DML ifadesini çalıştırabilirsiniz. Komutu çalıştırmadan önce söz dizimi hatası konusunda uyarı alabilirsiniz ancak komut sorunsuz şekilde çalışır.
- Google Cloud Console'da AlloyDB'ye gidin. Birincil kümeyi seçin ve ardından sol gezinme menüsünde AlloyDB Studio'yu tıklayın.
- Varsayılan olarak
google_ml_integration
uzantısıyla kullanılabilengemini-1.5-pro:generateContent
değerini kullanırız. - AlloyDB Studio'da aşağıdaki komutu kullanarak erişim için yapılandırılmış modelleri kontrol edebilirsiniz:
select model_id,model_type from google_ml.model_info_view;
- Aşağıdaki komutu çalıştırarak veritabanı kullanıcılarının Google Vertex AI modellerini kullanarak tahmin yürütmek için ml_predict_row işlevini yürütmesine izin verin:
GRANT EXECUTE ON FUNCTION ml_predict_row to postgres;
Yanıtları değerlendirme
Uygulamayı Cloud Run'a taşıdığımız bir sonraki bölümde tek bir büyük sorgu kullanacağız. Sorgudan alınan yanıtların makul olmasını sağlamak için sorgunun anlaşılması zor olabilir.
Sonunda kullanacağımız daha büyük sorguyu oluşturmaya devam eden bölümlere bakacağız.
- Öncelikle, kullanıcı sorgusuna en yakın 5 eşleşmeyi almak için veritabanına bir istek göndeririz. Bu işlemi basitleştirmek için sorguyu sabit kodluyoruz ancak endişelenmeyin, daha sonra sorguya dahil edeceğiz.
apparels
tablosundaki ürün açıklamasını ekliyoruz ve açıklamayı dizinle birleştiren bir alan ve orijinal isteği birleştiren bir alan ekliyoruz. Bu veriler, geçici bir tablo adı olan xyz
adlı bir tabloya kaydedilir.
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;
Bu sorgunun sonucu, kullanıcı sorgusuyla ilgili en benzer 5 satır olacaktır. Google Cloud blogu,
Yeni tablo xyz
, her satırında aşağıdaki sütunların yer aldığı 5 satır içerir:
literature
content
user_text
- Yanıtların ne kadar geçerli olduğunu belirlemek için yanıtların nasıl değerlendirileceğini açıkladığımız karmaşık bir sorgu kullanırız. Sorgu kapsamında
xyz
tablosundakiuser_text
vecontent
kullanılır.
"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."
- Bu sorguyu kullanarak
xyz
tablosundaki yanıtların "iyiliğini" inceleriz. "İyi" ifadesinde, oluşturulan yanıtların beklenen yanıtlara ne kadar yakın olduğunu kastediyoruz.
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
, sonucunu JSON biçiminde döndürür. "-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'"
kodu, söz konusu JSON'dan asıl metni ayıklamak için kullanılır. Döndürülen gerçek JSON'u görmek için bu kodu kaldırabilirsiniz.- Son olarak, LLM alanını almak için x tablosundan çıkarmanız yeterlidir:
SELECT
LLM_RESPONSE
FROM
x;
- Bu, aşağıdaki gibi tek bir sorguda birleştirilebilir:
Uyarı: Ara sonuçları kontrol etmek için yukarıdaki sorguları çalıştırdıysanız
Bu sorguyu çalıştırmadan önce AlloyDB veritabanından xyz
ve x
tablolarını sildiğinizden/kaldırdığınızdan emin olun,
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;
Daha büyük sorgu, önceki adımlarda çalıştırdığımız tüm sorguların bir kombinasyonudur. Sonuçlar, eşleşme olup olmadığını, eşleşmenin yüzdesini ve derecelendirmeyle ilgili bazı açıklamaları gösterir.
Gemini modelinde akış özelliğinin varsayılan olarak etkin olduğunu unutmayın. Bu nedenle, gerçek yanıt birden fazla satıra yayılır:
10. Uygulamayı web'e taşıma
Artık bu uygulamayı internetten erişilebilir olacak şekilde barındıracağız.
Cloud Run işlevini oluşturma
- Google Cloud Console'da aşağıdaki bağlantıyı kullanarak Cloud Run İşlevleri'ne gidin:
https://console.cloud.google.com/run/create?deploymentType=function
- Yapılandır bölümünde, işlev adını "retail-engine" olarak ayarlayın ve bölgeyi "us-central1" olarak seçin.
- Uç Nokta URL'sinde çalışma zamanını Java 17 olarak seçin.
- Kimlik Doğrulama bölümünde Kimliği doğrulanmayan çağrılara izin ver'i seçin.
- Kapsayıcılar, Hacimler, Ağ İletişimi, Güvenlik'i genişletin ve Ağ İletişimi sekmesini tıklayın.
- Giden trafik için bir VPC'ye bağlan'ı seçin ve ardından Sunucusuz VPC Erişimi bağlayıcılarını kullan'ı tıklayın.
- Ağ'da Yeni VPC Bağlayıcısı Ekle'yi tıklayın. Henüz etkinleştirilmediyse Sunucusuz VPC Erişimi API'sini etkinleştirin.
- Bağlayıcı oluşturma bölümünde adı
alloydb-test-conn
olarak ayarlayın. - Bölgeyi
us-central
olarak ayarlayın. - Ağ değerini varsayılan olarak bırakın ve Alt ağ'ı Özel IP Aralığı olarak ayarlayın. 10.8.0.0 veya mevcut benzer bir IP aralığı kullanın.
- Ölçeklemeyi göster ayarlarını genişletin ve Minimum örnek değerini 2, Maksimum örnek değerini ise 3 olarak ayarlayın.
- Örnek türünü f1-micro olarak seçin. Aşağıda, bağlayıcı oluşturma seçenekleri gösterilmektedir:
- Bağlayıcıyı oluşturmak için Oluştur'u tıklayın.
- Trafik yönlendirme bölümünde Tüm trafiği VPC'ye yönlendir'i seçin.
- İşlevi oluşturmak için Oluştur'u tıklayın.
Uygulamayı dağıtın
İşlev oluşturulduktan sonra kaynağı güncelleyin ve uygulamayı yeniden dağıtın.
- Cloud Run'da Hizmetler sekmesini ve retail-engine işlevini tıklayın.
- Kaynak sekmesini tıklayın. Varsayılan İşlev giriş noktasını "
gcfv2.HelloHttpFunction
" olarak ayarlayın. - HelloHttpFunction.java dosyasının içeriğini bu Java dosyasının içeriğiyle değiştirin.
- Dosyadaki AlloyDbJdbcConnector ayrıntılarını AlloyDB örneğinizin ve kümenizin ayrıntılarına göre güncelleyin.
$PROJECT_ID
yerine AlloyDB kümenizin ve örneğinizin proje kimliğini yazın.
- pom.xml dosyasının içeriğini bu XML dosyasının içeriğiyle değiştirin.
- İşlevi dağıtmak için Kaydet ve yeniden dağıt'ı tıklayın.
11. Perakende motoru uygulamasını test etme
Güncellenen Cloud Functions dağıtıldıktan sonra uç noktayı aşağıdaki biçimde görürsünüz:
https://retail-engine-PROJECT_NUMBER.us-central1.run.app
Aşağıdaki komutu çalıştırarak Cloud Shell Terminal'de test edebilirsiniz:
gcloud functions call retail-engine --region=us-central1 --gen2 --data '{"search": "I want some kids clothes themed on Disney"}'
Alternatif olarak, Cloud Run işlevini aşağıdaki gibi test edebilirsiniz:
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 .
Sonuç:
AlloyDB verilerinde embedding modelini kullanarak benzerlik vektörü araması yaptığımıza göre, bu embedding'leri resminizle birlikte kullanan ve stil önerileri oluşturmak için istemler sunan uygulamayı oluşturmaya geçebiliriz.
12. Kıyafet önerisi akışını anlama
Kıyafet önerisi uygulaması, görsel kıyafet stili seçenekleri oluşturmak için AlloyDB perakende motoru uygulamasında oluşturduğumuz yerleştirmelerle birlikte Gemini ve Imagen ile çalışacak şekilde yapılandırılmış bir sprint boot uygulamasıdır. Ayrıca özel istemler eklemenize ve öneriyi doğaçlama yapmanıza olanak tanır.
Bunu şöyle düşünün: Gardırobunuzdaki fuşya bir üst giysinin resmini bu uygulamaya yüklersiniz. Göster'i tıkladığınızda uygulama, uygulama kodunda ayarlanan istem ve AlloyDB veritabanındaki yerleşimlere göre orijinal resimle eşleşen birden fazla seçenek oluşturur. Önerilen seçeneklerin mavi bir kolyeyle nasıl görüneceğini merak ediyorsunuz. Bu satırlara bir istem ekleyip Stil'i tıklayın. Orijinal resim ve eşleşen bir kıyafet oluşturmak için önerilerin güçlü bir kombinasyonunu içeren nihai resim oluşturulur.
Kıyafet önerisi uygulamasını oluşturmaya başlamak için aşağıdaki adımları uygulayın:
- Cloud Run'da retail-engine uygulamasını açın ve uygulamanızın URL'sini not edin. Bu, benzer öneriler oluşturmak için kullanacağımız yerleştirme deposudur.
- IDE'nizde https://github.com/AbiramiSukumaran/outfit-recommender/ deposunu klonlayın. Bu alıştırmada gösterilen adımlar Visual Studio Code IDE'de gerçekleştirilir.
git clone https://github.com/AbiramiSukumaran/outfit-recommender/
Uygulamanın dizinindeki önemli dosyalardan bazıları şunlardır:
src/main
: Uygulama dosyalarının ve HTML'nin bulunduğu kaynak dizin:HelloWorldApplication.java
: Spring Boot uygulamasının ana giriş noktası.HelloWorldController.java
: Kıyafet önerici uygulamasıyla ilgili HTTP isteklerini işleyen Spring Boot REST denetleyicisi. Bu dosya, GET ve POST isteklerini işler, kullanıcı istemlerini işler, resimleri analiz eder, AlloyDB yerleşikleriyle etkileşim kurar ve kullanıcı arayüzüne nihai yanıtı döndürür. Bu denetleyici, GenerateImageSample sınıfını çağırır.GenerateImageSample.java
: Vertex AI'a bağlanan, kullanıcı istemini biçimlendiren, Imagen modeline API çağrıları yapan ve tahmin edilen resmi denetleyici sınıfına döndüren görüntü oluşturma sınıfını içerir.Resources
: Bu dizin, uygulama kullanıcı arayüzünü oluşturmak için gereken resimleri ve HTML dosyalarını içerir.Pom.xml
: Proje bağımlılıklarını ve yapılandırmalarını tanımlar.
- Visual Studio Code'da
HelloWorldController.java
dosyasını açın ve proje kimliği ile konum örneklerini AlloyDB örneğinizin oluşturulduğu yere göre güncelleyin.
endpoint
değerini, daha önce barındırdığınız perakende motoru uygulama URL'siyle güncelleyin.
GenerateImageSample.java
dosyasını açın ve proje kimliğini ve konumu AlloyDB örneğinizin oluşturulduğu yere göre güncelleyin.
- Tüm dosyaları kaydedin.
Şimdi bu uygulamayı Cloud Run sunucusuz çalışma zamanına dağıtacağız.
13. Uygulamayı web'e taşıma
Kıyafet önerisi spring boot uygulamasına ilgili projeyi, konumu ve retail-engine uygulama ayrıntılarını eklediğimize göre uygulamayı Cloud Run'a dağıtabiliriz.
Uygulamayı dağıtmak için Visual Code Studio terminalinde gcloud run deploy
komutunu kullanacağız. Visual Studio Code için gcloud CLI'yi kullanmaya başlamak üzere Google Cloud Code uzantısını yükleyebilirsiniz.
Uygulamayı dağıtmak için aşağıdaki adımları uygulayın:
- IDE'nizde kopyalanan dizini açın ve terminali başlatın. Visual Code Studio'da Terminal > Yeni Terminal'i tıklayın.
- gcloud CLI'yi yüklemek için bu dokümanda yer alan talimatları uygulayın.
- Visual Code Studio kullanıyorsanız Uzantılar'ı tıklayın, Google Cloud Code'u arayın ve uzantıyı yükleyin.
- IDE terminalinizde aşağıdaki komutu çalıştırarak Google Hesabınızın kimliğini doğrulayın:
gcloud auth application-default login
- Proje kimliğinizi, AlloyDB örneğinizin bulunduğu projeyle aynı olacak şekilde ayarlayın.
gcloud config set project PROJECT_ID
- Dağıtım işlemini başlatın.
gcloud run deploy
Source code location
alanında, kopyalanan GitHub dizini seçmek için Enter tuşuna basın.Service name
alanına kıyafet-önerici gibi bir hizmet adı girin ve Enter tuşuna basın.Please specify a region
alanına AlloyDB örneğinizin ve retail-engine uygulamanızın barındırıldığı konumu (ör. us-central1 için 32) girin ve Enter tuşuna basın.
Allow unauthenticated invocations to [..]
alanına Y yazın ve Enter tuşuna basın.
Aşağıdaki resimde, uygulamanızın dağıtım ilerleme durumu gösterilmektedir:
14. Kıyafet önerisi uygulamasını test etme
Uygulama Cloud Run'a başarıyla dağıtıldıktan sonra hizmeti Google Cloud Console'da aşağıdaki gibi görebilirsiniz:
- Google Cloud Console'da Cloud Run'a gidin.
- Hizmetler bölümünde, dağıttığınız kıyafet önerici hizmetini tıklayın. Aşağıdaki gibi hem retail-engine hem de outfit-recommender hizmetini göreceksiniz:
- Önerici uygulama kullanıcı arayüzünü açmak için uygulama URL'sini tıklayın.
The following is a sample URL that you will use:
https://outfit-recommender-22905290964.us-central1.run.app/style
Dağıtılan uygulama aşağıdaki gibi görülebilir:
Uygulamayı kullanma
Uygulamayı kullanmaya başlamak için aşağıdaki adımları uygulayın:
- Yükle'yi tıklayın ve bir giysi eşyasının resmini yükleyin.
- Resim yüklendikten sonra Stil'i tıklayın. Uygulama, resmi istem olarak kullanır ve retail-engine uygulamasından gelen istemi temel alarak perakende veri kümesi için yerleştirmeleri içeren alt seçenekler oluşturur.
Uygulama, resim önerilerinin yanı sıra stil önerileri içeren bir istem de oluşturur. Örneğin, A white semi-sheer button up blouse with pink floral patterns on it, with balloon sleeves.
- Bu otomatik olarak oluşturulan stil önerisine ek istemler iletebilirsiniz. Örneğin,
STYLE RECOMMENDATION: Cute brown skirt on a curly updo. Make it photo realistic. Accessorize with cherry earrings and burgundy plastic case sling bag.
- Nihai stili görmek için Göster'i tıklayın.
15. Temizleme
Bu yayında kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız şu adımları uygulayın:
- Google Cloud Console'da Kaynakları yönetin sayfasına gidin.
- Proje listesinde, silmek istediğiniz projeyi seçin ve ardından Sil'i tıklayın.
- İletişim kutusuna proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.
16. Tebrikler
Tebrikler! AlloyDB, pgvector ve vektör aramayı kullanarak başarılı bir benzerlik araması yaptınız. Ayrıca, stil önerileri oluşturmak için arama sonucunu güçlü Imagen modeliyle birlikte kullandınız.