AlloyDB ve sunucusuz çalışma ortamları ile yapay zeka destekli kıyafet önerisi uygulaması oluşturma

AlloyDB ve sunucusuz çalışma ortamları ile yapay zeka destekli kıyafet önerisi uygulaması oluşturma

Bu codelab hakkında

subjectSon güncelleme Mar 28, 2025
account_circleYazan: Abirami Sukumaran, Shweta Shetye

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:

  1. AlloyDB örneği oluşturma ve E-ticaret veri kümesini yükleme
  2. AlloyDB'de pgvector ve üretken yapay zeka model uzantılarını etkinleştirme
  3. Ürün açıklamasından yerleştirilmiş öğeler oluşturma
  4. Çözümü sunucusuz Cloud Run işlevlerinde dağıtma
  5. Gemini'ye bir resim yükleyin ve resim açıklaması istemi oluşturun.
  6. E-ticaret veri kümesi yerleştirmeleriyle birlikte istemlere dayalı arama sonuçları oluşturun.
  7. İstemi özelleştirmek ve stil önerileri oluşturmak için ek istemler ekleyin.
  8. Çözümü sunucusuz Cloud Run işlevlerinde dağıtma

Şartlar

  • Chrome veya Firefox gibi bir tarayıcı
  • Faturalandırma özelliği etkinleştirilmiş bir Google Cloud projesi.

2. Mimari

Uygulamanın üst düzey mimarisi aşağıdaki gibidir:

ce32f865dfe59142.png

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:

  1. 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.
  2. 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.
  3. 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

  1. Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun.
  2. Cloud projenizde faturalandırmanın etkinleştirildiğinden emin olun. Projede faturalandırmanın etkin olup olmadığını nasıl kontrol edebileceğinizi öğrenin .
  3. 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 ( f2ae85166a716c5c.png) tıklayın.
  4. 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
  1. 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
  1. Projeniz ayarlanmadıysa açıkça ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>
  1. 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

  1. 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.
  2. KÜME OLUŞTUR'u tıklayın.

f76ff480c8c889aa.png

  1. 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"

538dba58908162fb.png

  1. 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.
    7939bbb6802a91bf.png
  2. 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. 768ff5210e79676f.png

Varsayılan ağ oluşturma işleminin tamamlanmasını bekleyin.

  1. Birincil örneğinizi yapılandırın bölümünde, örnek kimliğini "shopping-instance"" olarak ayarlayın.

2bddecf6b7c7407b.png

  1. Kümeyi aşağıdaki gibi oluşturma işlemini tamamlamak için KÜME OLUŞTUR'u tıklayın:

24eec29fa5cfdb3e.png

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

  1. 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:

847e35f1bf8a8bd8.png

  1. 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.

91a86d9469d499c4.png

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.
  1. 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
;
  1. 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

  1. 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:

908e33bbff58a6d.png

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.

  1. 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.
  1. apparels adlı tabloyu görene kadar Gezgin bölümünü genişletin.
  2. Menü simgesini [] ve Sorgu'yu tıklayın. Yeni bir Düzenleyici sekmesinde bir SELECT ifadesi açılır.

b31ece70e670ab89.png

  1. 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 [ f2ae85166a716c5c.png] 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.

  1. 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
;
  1. 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:

c69c08d085389f74.png

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,

  1. Kullanıcının arama metni: "I want womens tops, pink casual only pure cotton."
  2. Bu arama metnini, text-embedding-005 modeliyle birlikte embedding() 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.
  3. "<=>", 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.
  4. 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.
  5. 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:

4193a68737400535.png

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:

  1. 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;
  1. 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.

  1. Dizinin sorgu kullanılarak oluşturulup oluşturulmadığını kontrol edin:
SELECT * FROM pg_stat_ann_indexes;
  1. 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.

  1. 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

  1. 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.

  1. AlloyDB kümenizin birincil örneğine gidin ve BİRİNCİL ÖRNEĞİ DÜZENLE'yi tıklayın.

456ffdf292d3c0e0.png

  1. 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:

6a59351fcd2a9d35.png 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.

  1. 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.
  2. Varsayılan olarak google_ml_integration uzantısıyla kullanılabilen gemini-1.5-pro:generateContent değerini kullanırız. cdb5af753a625777.png
  3. 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;        
  1. 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.

  1. Ö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
  1. 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 tablosundaki user_text ve content 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."

  1. 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;
  1. 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.
  2. Son olarak, LLM alanını almak için x tablosundan çıkarmanız yeterlidir:
SELECT 
LLM_RESPONSE
FROM
        x
;
  1. 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: 14e74d71293b7b9.png

10. Uygulamayı web&#39;e taşıma

Artık bu uygulamayı internetten erişilebilir olacak şekilde barındıracağız.

Cloud Run işlevini oluşturma

  1. 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

  1. Yapılandır bölümünde, işlev adını "retail-engine" olarak ayarlayın ve bölgeyi "us-central1" olarak seçin.
  2. Uç Nokta URL'sinde çalışma zamanını Java 17 olarak seçin.
  3. Kimlik Doğrulama bölümünde Kimliği doğrulanmayan çağrılara izin ver'i seçin.
  4. Kapsayıcılar, Hacimler, Ağ İletişimi, Güvenlik'i genişletin ve Ağ İletişimi sekmesini tıklayın.
  5. 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.
  6. 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.
  7. Bağlayıcı oluşturma bölümünde adı alloydb-test-conn olarak ayarlayın.
  8. Bölgeyi us-central olarak ayarlayın.
  9. 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.
  10. Ölçeklemeyi göster ayarlarını genişletin ve Minimum örnek değerini 2, Maksimum örnek değerini ise 3 olarak ayarlayın.
  11. Örnek türünü f1-micro olarak seçin. Aşağıda, bağlayıcı oluşturma seçenekleri gösterilmektedir:

bed4b2af6795a8ba.png

  1. Bağlayıcıyı oluşturmak için Oluştur'u tıklayın.
  2. Trafik yönlendirme bölümünde Tüm trafiği VPC'ye yönlendir'i seçin.
  3. İş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.

  1. Cloud Run'da Hizmetler sekmesini ve retail-engine işlevini tıklayın.
  2. Kaynak sekmesini tıklayın. Varsayılan İşlev giriş noktasını "gcfv2.HelloHttpFunction" olarak ayarlayın.
  3. HelloHttpFunction.java dosyasının içeriğini bu Java dosyasının içeriğiyle değiştirin.
  4. 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.

a89dc5af3580fbcf.png

  1. pom.xml dosyasının içeriğini bu XML dosyasının içeriğiyle değiştirin.
  2. İş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ç:

88bc1ddfb5644a28.png

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:

  1. 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.
  2. 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.
  1. 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.

9fff8f5cbb62567.png

  1. endpoint değerini, daha önce barındırdığınız perakende motoru uygulama URL'siyle güncelleyin.

ae6227e88eec5485.png

  1. GenerateImageSample.java dosyasını açın ve proje kimliğini ve konumu AlloyDB örneğinizin oluşturulduğu yere göre güncelleyin.

db1f81a6f51d80de.png

  1. Tüm dosyaları kaydedin.

Şimdi bu uygulamayı Cloud Run sunucusuz çalışma zamanına dağıtacağız.

13. Uygulamayı web&#39;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:

  1. IDE'nizde kopyalanan dizini açın ve terminali başlatın. Visual Code Studio'da Terminal > Yeni Terminal'i tıklayın.
  2. gcloud CLI'yi yüklemek için bu dokümanda yer alan talimatları uygulayın.
  3. Visual Code Studio kullanıyorsanız Uzantılar'ı tıklayın, Google Cloud Code'u arayın ve uzantıyı yükleyin.
  4. IDE terminalinizde aşağıdaki komutu çalıştırarak Google Hesabınızın kimliğini doğrulayın:
gcloud auth application-default login
  1. Proje kimliğinizi, AlloyDB örneğinizin bulunduğu projeyle aynı olacak şekilde ayarlayın.
gcloud config set project PROJECT_ID
  1. Dağıtım işlemini başlatın.
gcloud run deploy
  1. Source code location alanında, kopyalanan GitHub dizini seçmek için Enter tuşuna basın.
  2. Service name alanına kıyafet-önerici gibi bir hizmet adı girin ve Enter tuşuna basın.
  3. 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.

12c0de4248660d4d.png

  1. 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:

1babbb82faa31fce.png

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:

  1. Google Cloud Console'da Cloud Run'a gidin.
  2. 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:

24dd0aebe224059e.png

  1. Önerici uygulama kullanıcı arayüzünü açmak için uygulama URL'sini tıklayın.

cdc9c1625b1648d2.png

    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:

76245d1a6152d313.png

Uygulamayı kullanma

Uygulamayı kullanmaya başlamak için aşağıdaki adımları uygulayın:

  1. Yükle'yi tıklayın ve bir giysi eşyasının resmini yükleyin.
  2. 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.

  1. 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.
  2. Nihai stili görmek için Göster'i tıklayın.

38d6d08e9a0a44c0.png

15. Temizleme

Bu yayında kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız şu adımları uygulayın:

  1. Google Cloud Console'da Kaynakları yönetin sayfasına gidin.
  2. Proje listesinde, silmek istediğiniz projeyi seçin ve ardından Sil'i tıklayın.
  3. İ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.