AlloyDB, Gemini ve Cloud Run ile dinamik bir karma perakende araması oluşturma ve dağıtma

1. Genel Bakış

Günümüzün rekabetçi perakende ortamında, müşterilerin tam olarak aradıklarını hızlı ve sezgisel bir şekilde bulmalarını sağlamak büyük önem taşır. Geleneksel anahtar kelime tabanlı arama, genellikle ayrıntılı sorgular ve geniş ürün kataloglarıyla mücadele ettiğinden yetersiz kalır. Bu codelab, AlloyDB ve AlloyDB AI üzerinde oluşturulmuş, son teknoloji ürünü Vector Search, scaNN indeksleme, yönlü filtreler ve akıllı uyarlanabilir filtreleme ile yeniden sıralamadan yararlanarak kurumsal ölçekte dinamik ve karma bir arama deneyimi sunan gelişmiş bir perakende arama uygulamasını tanıtıyor.

Şu anda 3 temel konu hakkında bilgi sahibiyiz:

  1. Bağlamsal aramanın temsilciniz için ne anlama geldiği ve Vector Search'ü kullanarak bunu nasıl başaracağınız.
  2. Ayrıca, verileriniz kapsamında, yani veritabanınızın içinde Vector Search'e ulaşma konusunu da ayrıntılı olarak ele aldık (Google Cloud Veritabanlarının tümü bunu destekler).
  3. ScaNN dizini tarafından desteklenen AlloyDB Vektör Arama özelliğiyle yüksek performans ve kaliteye sahip bu tür hafif bir Vektör Arama RAG özelliğini nasıl kullanacağınızı anlatarak dünyanın geri kalanından bir adım öteye gittik.

Temel, orta ve biraz gelişmiş RAG denemelerini yapmadıysanız listelenen sırayla buradaki, buradaki ve buradaki 3 denemeyi okumanızı öneririz.

Hedef

Filtrelerin, anahtar kelimelerin ve bağlamsal eşleşmenin ötesine geçme: Basit bir anahtar kelime araması binlerce sonuç döndürebilir ve bunların çoğu alakasız olabilir. İdeal çözüm, sorgunun amacını anlamalı, bunu hassas filtre ölçütleriyle (ör. marka, malzeme veya fiyat) birleştirmeli ve en alakalı öğeleri milisaniyeler içinde sunmalıdır. Bu durum, güçlü, esnek ve ölçeklenebilir bir arama altyapısı gerektirir. Anahtar kelime aramasından bağlamsal eşleşmelere ve benzerlik aramalarına kadar uzun bir yol katettik. Ancak bir müşterinin "ilkbaharda yürüyüş için rahat, şık ve su geçirmez bir ceket" aradığını ve aynı anda filtreler uyguladığını düşünün. Uygulamanız yalnızca kaliteli yanıtlar döndürmekle kalmıyor, aynı zamanda yüksek performans gösteriyor ve tüm bunların sırası veritabanınız tarafından dinamik olarak seçiliyor.

Hedef

Bu sorunu çözmek için

  • Bağlamsal Arama (Vektör Arama): Sorguların ve ürün açıklamalarının semantik anlamını anlama
  • Yönlü Filtreleme: Kullanıcıların sonuçları belirli özelliklerle daraltmasına olanak tanır.
  • Karma Yaklaşım: Bağlamsal arama ile yapılandırılmış filtrelemeyi sorunsuz bir şekilde birleştirme
  • Gelişmiş Optimizasyon: Hız ve alaka düzeyi için özel dizine ekleme, uyarlanabilir filtreleme ve yeniden sıralamadan yararlanma
  • Üretken yapay zeka destekli kalite kontrolü: Üstün sonuç kalitesi için LLM doğrulamasını içerir.

Mimariyi ve uygulama sürecini inceleyelim.

Ne oluşturacaksınız?

Perakende Araması Uygulaması

Bu kapsamda:

  1. E-ticaret veri kümesi için AlloyDB örneği ve tablosu oluşturma
  2. Yerleştirilmiş öğeleri ve Vector Search'ü ayarlama
  3. Meta veri dizini ve ScaNN dizini oluşturma
  4. ScaNN'nin satır içi filtreleme yöntemini kullanarak AlloyDB'de gelişmiş vektör araması uygulama
  5. Tek bir sorguda Faceted Filters ve Hybrid Search'ü ayarlama
  6. Yeniden sıralama ve geri çağırma ile sorgu alaka düzeyini hassaslaştırma (isteğe bağlı)
  7. Gemini ile sorgu yanıtını değerlendirme (isteğe bağlı)
  8. Veritabanları ve Uygulama Katmanı için MCP Araç Kutusu
  9. Özelliklere Göre Arama ile Uygulama Geliştirme (Java)

Şartlar

  • Chrome veya Firefox gibi bir tarayıcı
  • Faturalandırmanın etkin olduğu bir Google Cloud projesi.

2. 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 projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Faturalandırmanın bir projede etkin olup olmadığını kontrol etmeyi öğrenin .

Google Cloud kredileri için: Başlamanıza yardımcı olacak Google Cloud kredileri almak istiyorsanız kredileri kullanmak için bu bağlantıyı kullanın. Buradaki talimatları uygulayarak hediyenizi kullanabilirsiniz.

  1. Google Cloud'da çalışan 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'i etkinleştir düğmesinin resmi

  1. Cloud Shell'e bağlandıktan sonra aşağıdaki komutu kullanarak kimliğinizin doğrulanmış olduğunu ve projenin proje kimliğinize ayarlandığını kontrol edin:
gcloud auth list
  1. gcloud komutunun projeniz hakkında bilgi sahibi olduğunu doğrulamak için Cloud Shell'de aşağıdaki komutu çalıştırın.
gcloud config list project
  1. Projeniz ayarlanmamışsa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>
  1. Gerekli API'leri etkinleştirin: Bağlantıyı takip ederek API'leri etkinleştirin.

Alternatif olarak, bu işlem için gcloud komutunu kullanabilirsiniz. gcloud komutları ve kullanımı için belgelere bakın.

3. Veritabanı kurulumu

Bu laboratuvarda, e-ticaret verileri için veritabanı olarak AlloyDB'yi kullanacağız. Veritabanları ve günlükler gibi tüm kaynakları tutmak için kümeler kullanılır. Her kümede, verilere erişim noktası sağlayan bir birincil örnek bulunur. Tablolar gerçek verileri içerir.

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. Cloud Console'da AlloyDB sayfasına gidin. Cloud Console'daki çoğu sayfayı bulmanın kolay bir yolu, konsolun arama çubuğunu kullanarak arama yapmaktır.
  2. Bu sayfada KÜME OLUŞTUR'u seçin:

f76ff480c8c889aa.png

  1. Aşağıdaki gibi bir ekran görürsünüz. Aşağıdaki değerlerle bir küme ve örnek oluşturun (Uygulama kodunu depodan klonluyorsanız değerlerin eşleştiğinden emin olun):
  • küme kimliği: "vector-cluster"
  • password: "alloydb"
  • PostgreSQL 15 / en son önerilen
  • Region: "us-central1"
  • : "default"

538dba58908162fb.png

  1. Varsayılan ağı seçtiğinizde aşağıdaki gibi bir ekran görürsünüz.

BAĞLANTIYI AYARLA'yı seçin.

7939bbb6802a91bf.png

  1. Buradan "Otomatik olarak atanmış bir IP aralığı kullan"ı seçip Devam'ı tıklayın. Bilgileri inceledikten sonra BAĞLANTI OLUŞTUR'u seçin. 768ff5210e79676f.png
  2. Ağınız kurulduktan sonra kümenizi oluşturmaya devam edebilirsiniz. Aşağıda gösterildiği gibi küme kurulumunu tamamlamak için KÜME OLUŞTUR'u tıklayın:

e06623e55195e16e.png

ÖNEMLİ NOT:

  1. Küme / örnek yapılandırılırken bulabileceğiniz örnek kimliğini **vector-instance** olarak değiştirdiğinizden emin olun. Değiştiremiyorsanız tüm referanslarda **örnek kimliğinizi kullanmayı** unutmayın.
  2. Küme oluşturma işleminin yaklaşık 10 dakika süreceğini unutmayın. İşlem başarılı olduğunda, yeni oluşturduğunuz kümenizin genel görünümünü gösteren bir ekran görürsünüz.

4. Veri kullanımı

Şimdi de mağazayla ilgili verilerin bulunduğu bir tablo ekleme zamanı. AlloyDB'ye gidin, birincil kümeyi ve ardından AlloyDB Studio'yu seçin:

847e35f1bf8a8bd8.png

Örneğinizin oluşturulmasının tamamlanmasını beklemeniz gerekebilir. Bu işlem tamamlandıktan sonra, kümeyi oluştururken oluşturduğunuz kimlik bilgilerini kullanarak AlloyDB'de oturum açın. PostgreSQL'de kimlik doğrulaması yapmak için aşağıdaki verileri kullanın:

  • Kullanıcı adı : "postgres"
  • Veritabanı : "postgres"
  • Şifre : "alloydb"

AlloyDB Studio'da kimlik doğrulama işlemini başarıyla tamamladıktan sonra SQL komutları Düzenleyici'ye girilir. Son pencerenin sağındaki artı işaretini kullanarak birden fazla düzenleyici penceresi ekleyebilirsiniz.

91a86d9469d499c4.png

Gerekli durumlarda Çalıştır, Biçimlendir ve Temizle seçeneklerini kullanarak AlloyDB için komutları düzenleyici pencerelerine gireceksiniz.

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;

Veritabanınızda etkinleştirilen uzantıları kontrol etmek istiyorsanız şu SQL komutunu çalıştırın:

select extname, extversion from pg_extension;

Tablo oluşturma

AlloyDB Studio'da aşağıdaki DDL ifadesini kullanarak bir tablo oluşturabilirsiniz:

CREATE TABLE apparels ( 
  id BIGINT, 
  category VARCHAR(100), 
  sub_category VARCHAR(50), 
  uri VARCHAR(200), 
  gsutil_uri VARCHAR(200),
  image VARCHAR(100), 
  content VARCHAR(2000), 
  pdt_desc VARCHAR(5000), 
  color VARCHAR(2000),
  gender VARCHAR(200),
  embedding vector(768),
  img_embeddings vector(1408),
  additional_specification VARCHAR(100000));

Yerleştirme sütunu, metnin vektör değerlerinin depolanmasına olanak tanır.

İzin Ver

"embedding" işlevinde yürütme izni 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ısı ROLÜ'nü verme

Google Cloud IAM Console'da AlloyDB hizmet hesabına (service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com gibi görünür) "Vertex AI Kullanıcısı" rolüne erişim izni verin. PROJECT_NUMBER, proje numaranızı içerir.

Alternatif olarak, aşağıdaki komutu Cloud Shell Terminali'nden çalıştırabilirsiniz:

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"

Verileri veritabanına yükleme

  1. E-tablodaki insert sorgu ifadelerini kopyalayıp yukarıda belirtilen düzenleyiciye yapıştırın.insert scripts sql Bu kullanım alanının hızlı bir demosunu yapmak için 10-50 ekleme ifadesini kopyalayabilirsiniz. Bu "Seçilen Ekleme İşlemleri 25-30 satır" sekmesinde belirli bir ekleme işlemleri listesi bulunur.

Verilere bağlantıyı bu GitHub depo dosyasında bulabilirsiniz.

  1. Çalıştır'ı tıklayın. Sorgunuzun sonuçları Sonuçlar tablosunda görünür.

ÖNEMLİ NOT:

Yalnızca 25-50 kayıt kopyaladığınızdan ve bunların kategori, alt_kategori, renk, cinsiyet türleri aralığından olduğundan emin olun.

5. Veriler için gömmeler oluşturma

Modern aramadaki gerçek yenilik, yalnızca anahtar kelimeleri değil, anlamı da anlamaktan geçiyor. Bu noktada yerleştirmeler ve vektör araması devreye girer.

Ürün açıklamalarını ve kullanıcı sorgularını, önceden eğitilmiş dil modellerini kullanarak "gömme" adı verilen yüksek boyutlu sayısal gösterimlere dönüştürdük. Bu yerleştirmeler, anlamsal anlamı yakalayarak yalnızca eşleşen kelimeleri içeren ürünler yerine "anlamı benzer" olan ürünleri bulmamızı sağlar. Başlangıçta, bir temel oluşturmak için bu yerleştirmelerde doğrudan vektör benzerliği aramasıyla denemeler yaptık. Bu denemeler, performans optimizasyonlarından önce bile anlamsal anlayışın gücünü gösterdi.

Yerleştirme sütunu, ürün açıklaması metninin vektör değerlerinin depolanmasına olanak tanır. img_embeddings sütunu, resim yerleştirmelerinin (çok formatlı) depolanmasına olanak tanır. Bu şekilde, metin ile resim arasındaki mesafeye dayalı aramayı da kullanabilirsiniz. Ancak bu laboratuvarda yalnızca metin yerleştirmelerini kullanacağız.

SELECT embedding('text-embedding-005', 'AlloyDB is a managed, cloud-hosted SQL database service.');

Bu işlem, sorgudaki örnek metin için kayan nokta dizisi gibi görünen yerleştirme vektörünü döndürmelidir. Şöyle görünür:

25a1d7ef0e49e91e.png

abstract_embeddings adlı Vector alanını güncelleme

Tablodaki içerik açıklamasını ilgili yerleştirmelerle güncellemek için aşağıdaki DML'yi çalıştırın:

UPDATE apparels SET embedding = embedding('text-embedding-005',pdt_desc)::vector 
WHERE pdt_desc IS NOT NULL;

Google Cloud için deneme kredisi faturalandırma hesabı kullanıyorsanız birkaç yerleştirme (ör. en fazla 20-25) oluşturmakta sorun yaşayabilirsiniz. Bu nedenle, ekleme komut dosyasındaki satır sayısını sınırlayın.

Görüntü gömmeleri oluşturmak (çok formatlı bağlamsal arama yapmak için) istiyorsanız aşağıdaki güncellemeyi de çalıştırın:

update apparels set img_embeddings = ai.image_embedding(
  model_id => 'multimodalembedding@001',
  image => gsutil_uri,
  mimetype => 'image/jpg')       
where gsutil_uri is not null

6. AlloyDB'nin yeni özellikleriyle gelişmiş RAG gerçekleştirme

Tablo, veriler ve yerleştirmeler hazır olduğuna göre artık kullanıcı arama metni için gerçek zamanlı vektör araması yapabiliriz. Aşağıdaki sorguyu çalıştırarak bunu test edebilirsiniz:

SELECT id, content, uri, category, sub_category,color,gender 
FROM apparels 
ORDER BY embedding <=> embedding('text-embedding-005','T-shirt with round neck')::vector limit 10 ;

Bu sorguda, kullanıcının girdiği "yuvarlak yakalı tişört" aramasının metin yerleştirme işlemini, kosinüs benzerliği uzaklığı işlevini ("<=>" sembolüyle gösterilir) kullanarak giyim tablosundaki tüm ürün açıklamalarının metin yerleştirme işlemleriyle ("embedding" adlı sütunda depolanır) karşılaştırıyoruz. Yerleştirme yönteminin sonucunu, veritabanında depolanan vektörlerle uyumlu hale getirmek için vektör türüne dönüştürüyoruz. LIMIT 10, arama metninin en yakın 10 eşleşmesinin seçildiğini gösterir.

AlloyDB, Vector Search RAG'i bir üst seviyeye taşıyor:

Kurumsal ölçekli bir çözüm için ham vektör araması yeterli değildir. Performans çok önemlidir.

ScaNN (Ölçeklenebilir En Yakın Komşular) Dizini

Ultra hızlı yaklaşık en yakın komşu (ANN) araması yapmak için AlloyDB'de ScaNN dizinini etkinleştirdik. Google Araştırma tarafından geliştirilen son teknoloji bir yaklaşık en yakın komşu arama algoritması olan ScaNN, ölçekli olarak etkili vektör benzerliği araması için tasarlanmıştır. Arama alanını etkili bir şekilde budayarak ve nicemleme tekniklerini kullanarak sorguları önemli ölçüde hızlandırır. Diğer indeksleme yöntemlerine kıyasla 4 kata kadar daha hızlı vektör sorguları ve daha küçük bir bellek alanı sunar. Bu konu hakkında daha fazla bilgiye buradan ve buradan ulaşabilirsiniz.

Uzantıyı etkinleştirelim ve dizinleri oluşturalım:

CREATE EXTENSION IF NOT EXISTS alloydb_scann;

Hem metin gömme hem de resim gömme alanları için dizin oluşturma (arama işleminizde resim gömmelerini kullanmak istiyorsanız):

CREATE INDEX apparels_index ON apparels 
USING scann (embedding cosine)
WITH (num_leaves=32);

CREATE INDEX apparels_img_index ON apparels 
USING scann (img_embeddings cosine)
WITH (num_leaves=32);

Meta Veri Dizinleri

ScaNN, vektör indekslemeyi yönetirken yapılandırılmış özelliklerde (ör. kategori, alt kategori, stil, renk vb.) geleneksel B-ağacı veya GIN indeksleri titizlikle ayarlanmıştır. Bu dizinler, yönlü filtrelemenin verimliliği açısından çok önemlidir. Meta veri dizinlerini ayarlamak için aşağıdaki ifadeleri çalıştırın:

CREATE INDEX idx_category ON apparels (category);

CREATE INDEX idx_sub_category ON apparels (sub_category);

CREATE INDEX idx_color ON apparels (color);

CREATE INDEX idx_gender ON apparels (gender);

ÖNEMLİ NOT:

Yalnızca 25-50 kayıt eklemiş olabileceğiniz için dizinler (ScaNN veya bu konudaki herhangi bir dizin) etkili olmayacaktır.

Satır İçi Filtreleme

Vektör aramasında yaygın bir zorluk, yapılandırılmış filtrelerle (ör. "kırmızı ayakkabılar"). AlloyDB'nin satır içi filtreleme özelliği bu işlemi optimize eder. Satır içi filtreleme, geniş bir vektör aramasından elde edilen sonuçları filtrelemek yerine filtre koşullarını vektör arama işlemi sırasında uygular. Bu sayede, filtrelenmiş vektör aramalarının performansı ve doğruluğu önemli ölçüde artar.

Satır içi filtreleme ihtiyacı hakkında daha fazla bilgi edinmek için bu belgeye bakın. Ayrıca, vektör aramasının performansını optimize etmek için filtrelenmiş vektör araması hakkında buradan bilgi edinebilirsiniz. Uygulamanızda satır içi filtrelemeyi etkinleştirmek istiyorsanız düzenleyicinizden aşağıdaki ifadeyi çalıştırın:

SET scann.enable_inline_filtering = on;

Satır içi filtreleme, orta seçiciliğe sahip durumlar için en iyisidir. AlloyDB, vektör dizininde arama yaparken yalnızca meta veri filtreleme koşullarıyla (bir sorguda genellikle WHERE ifadesinde işlenen işlevsel filtreleriniz) eşleşen vektörlerin mesafelerini hesaplar. Bu, filtre sonrası veya filtre öncesi avantajlarını tamamlayarak bu sorguların performansını büyük ölçüde artırır.

Uyarlanabilir Filtreleme

Performansı daha da optimize etmek için AlloyDB'nin uyarlanabilir filtrelemesi, sorgu yürütme sırasında en verimli filtreleme stratejisini (satır içi veya ön filtreleme) dinamik olarak seçer. Sorgu kalıplarını ve veri dağıtımlarını analiz ederek manuel müdahale olmadan optimum performans sağlar. Özellikle vektör ve meta veri dizini kullanımı arasında otomatik olarak geçiş yaptığı filtrelenmiş vektör aramaları için faydalıdır. Uyarlanabilir filtrelemeyi etkinleştirmek için scann.enable_preview_features işaretini kullanın.

Uyarlanabilir filtreleme, yürütme sırasında satır içi filtrelemeden ön filtrelemeye geçişi tetiklediğinde sorgu planı dinamik olarak değişir.

SET scann.enable_preview_features = on;

ÖNEMLİ NOT: Yukarıdaki ifadeyi, örnek yeniden başlatılmadan çalıştıramayabilirsiniz. Hata alırsanız örnek veritabanı işaretleri bölümünden enable_preview_features işaretini etkinleştirmeniz önerilir.

Tüm dizinleri kullanan yönlü filtreler

Ayrıntılı arama, kullanıcıların belirli özelliklere veya "yönlere" (ör. marka, fiyat, boyut, müşteri puanı) göre birden fazla filtre uygulayarak sonuçları daraltmasına olanak tanır. Uygulamamız, bu yönleri vektör aramasıyla sorunsuz bir şekilde entegre eder. Tek bir sorgu artık doğal dili (bağlamsal arama) birden fazla yönlü seçimle birleştirebilir ve hem vektör hem de geleneksel dizinlerden dinamik olarak yararlanabilir. Bu sayede, kullanıcıların sonuçları tam olarak incelemesine olanak tanıyan, gerçekten dinamik bir karma arama özelliği sunulur.

Uygulamamızda tüm meta veri dizinlerini oluşturduğumuz için SQL sorgularını kullanarak doğrudan ele alarak web'de yönlü filtre kullanımına hazırız:

SELECT id, content, uri, category, sub_category,color,gender 
FROM apparels
WHERE category = ANY($1) and sub_Category = ANY($2) and color = ANY($3) and gender = ANY($4)
ORDER BY embedding <=> embedding('text-embedding-005',$5)::vector limit 10 ;

Bu sorguda, hem yoğun hem de seyrek yerleştirmeleri içeren karma arama yapıyoruz.

  1. WHERE koşulunda yönlü filtreleme ve
  2. ORDER BY ifadesinde kosinüs benzerliği yöntemi kullanılarak vektör araması.

1, 2, 3 ve 4 TL, bir dizideki yönlü filtre değerlerini, 5 TL ise kullanıcı arama metnini temsil eder. 1-4 ABD doları arasındaki değerleri, aşağıda gösterildiği gibi istediğiniz yönlü filtre değerleriyle değiştirin:

category = ANY([‘Apparel', ‘Footwear'])

5 ABD doları yerine istediğiniz bir arama metnini (ör. "Polo Yaka Tişörtler") girin.

ÖNEMLİ NOT: Eklediğiniz kayıtların sınırlı olması nedeniyle dizinleriniz yoksa performans etkisi görmezsiniz. Ancak tam bir üretim veri kümesinde, aynı vektör araması için yürütme süresinin önemli ölçüde kısaldığını gözlemlersiniz. Vektör aramasında satır içi filtreleme içeren ScaNN dizininin kullanılması bunu mümkün kılmıştır.

Şimdi de bu ScaNN özellikli vektör aramasının hatırlama oranını değerlendirelim.

Yeniden sıralama

Gelişmiş arama ile bile ilk sonuçların son bir düzenlemeye ihtiyacı olabilir. Bu, alaka düzeyini artırmak için ilk arama sonuçlarını yeniden sıralayan kritik bir adımdır. İlk karma arama, bir grup aday ürün sağladıktan sonra daha gelişmiş (ve genellikle hesaplama açısından daha ağır) bir model, daha ayrıntılı bir alaka düzeyi puanı uygular. Bu sayede, kullanıcıya sunulan en iyi sonuçlar en alakalı olanlar olur ve arama kalitesi önemli ölçüde artar. Sistemin belirli bir sorguyla ilgili tüm öğeleri ne kadar iyi aldığını ölçmek için geri çağırmayı sürekli olarak değerlendiririz. Modellerimizi, müşterinin ihtiyacı olanı bulma olasılığını en üst düzeye çıkaracak şekilde iyileştiririz.

Bunu uygulamanızda kullanmadan önce tüm ön koşulları karşıladığınızdan emin olun:

Ardından, karma arama sonuç kümesini yeniden sıralamak için uygulamamızda aşağıdaki sorguyu kullanabilirsiniz:

WITH initial_ranking AS (
SELECT id,content, pdt_desc, uri, category, sub_category,color,gender,
ROW_NUMBER() OVER () AS ref_number 
FROM apparels 
    order by embedding <=>embedding('text-embedding-005', 'Pink top')::vector),
reranked_results AS (
            SELECT index, score from 
            ai.rank(
              model_id => 'semantic-ranker-default-003',
              search_string => 'Pink top',
              documents => (SELECT ARRAY_AGG(pdt_desc ORDER BY ref_number) FROM initial_ranking)
            )
)
SELECT id,content, pdt_desc, uri, category, sub_category,color,gender, score
FROM initial_ranking, reranked_results 
WHERE initial_ranking.ref_number = reranked_results.index
ORDER BY reranked_results.score DESC
limit 25;

Bu sorguda, ORDER BY ifadesinde belirtilen bağlamsal aramanın ürün sonuç kümesini kosinüs benzerliği yöntemiyle yeniden sıralıyoruz. "Pembe üst", kullanıcının aradığı metindir.

ÖNEMLİ NOT: Bazı kullanıcılar henüz yeniden sıralama özelliğine erişemeyebilir. Bu nedenle, yeniden sıralama özelliğini uygulama koduna dahil etmedim. Ancak bu özelliği eklemek isterseniz yukarıda ele aldığımız örneği takip edebilirsiniz.

Geri Çağırma Değerlendiricisi

Benzerlik aramasında geri çağırma, bir aramadan alınan alakalı örneklerin yüzdesidir. Diğer bir deyişle, doğru pozitiflerin sayısıdır. Bu metrik, arama kalitesini ölçmek için kullanılan en yaygın metriktir. Geri çağırma kaybının bir nedeni, yaklaşık en yakın komşu araması (aNN) ile k (tam) en yakın komşu araması (kNN) arasındaki farktır. AlloyDB'nin ScaNN'si gibi vektör dizinleri aNN algoritmalarını uygular. Bu sayede, hatırlama konusunda küçük bir ödün vererek büyük veri kümelerinde vektör aramasını hızlandırabilirsiniz. AlloyDB artık bu dengeyi doğrudan veritabanında tek tek sorgular için ölçmenize ve zaman içinde istikrarlı olmasını sağlamanıza olanak tanır. Daha iyi sonuçlar ve performans elde etmek için bu bilgilere yanıt olarak sorgu ve dizin parametrelerini güncelleyebilirsiniz.

Arama sonuçlarının geri çağrılmasının arkasındaki mantık nedir?

Vektör arama bağlamında hatırlama, dizinin döndürdüğü ve gerçek en yakın komşular olan vektörlerin yüzdesini ifade eder. Örneğin, en yakın 20 komşuya yönelik bir en yakın komşu sorgusu, gerçek en yakın komşulardan 19'unu döndürürse geri çağırma oranı 19/20x100 = %95 olur. Arama kalitesi için kullanılan metrik hatırlama'dır ve sorgu vektörlerine en yakın olan döndürülen sonuçların yüzdesi olarak tanımlanır.

evaluate_query_recall işlevini kullanarak belirli bir yapılandırma için vektör dizinindeki vektör sorgusunun geri çağırmasını bulabilirsiniz. Bu işlev, istediğiniz vektör sorgusu hatırlama sonuçlarını elde etmek için parametrelerinizi ayarlamanıza olanak tanır.

ÖNEMLİ NOT:

Aşağıdaki adımlarda HNSW dizininde "izin reddedildi" hatasıyla karşılaşırsanız bu hatırlama değerlendirmesi bölümünün tamamını şimdilik atlayın. Bu durum, bu codelab belgelendirilirken yeni yayınlandığı için erişim kısıtlamalarıyla ilgili olabilir.

  1. ScaNN dizininde ve HNSW dizininde dizin taramayı etkinleştirme işaretini ayarlayın:
SET scann.enable_indexscan = on
SET hnsw.enable_index_scan = on
  1. AlloyDB Studio'da aşağıdaki sorguyu çalıştırın:
SELECT
  *
FROM
  evaluate_query_recall($$
SELECT id,content, pdt_desc, uri, category, sub_category,color,gender
FROM 
apparels 
    order by embedding <=> embedding('text-embedding-005', 'skirts for women')::vector 
  LIMIT 25 $$,
    '{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
    ARRAY['scann']);

evaluate_query_recall işlevi, sorguyu parametre olarak alır ve geri çağırmasını döndürür. İşlev giriş sorgusu olarak performansı kontrol etmek için kullandığım sorguyu kullanıyorum. Dizin yöntemi olarak SCaNN'yi ekledim. Daha fazla parametre seçeneği için dokümanlara bakın.

Kullandığımız bu Vector Search sorgusunun hatırlama oranı:

4918ec4780156527.png

Geri çağırma oranının %96 olduğunu görüyorum. Bu durumda geri çağırma gerçekten iyi. Ancak bu değer kabul edilemez bir değerse dizin parametrelerini, yöntemlerini ve sorgu parametrelerini değiştirmek ve bu Vector Search için hatırlama oranımı artırmak üzere bu bilgileri kullanabilirsin.

Değiştirilmiş sorgu ve dizin parametreleriyle test etme

Şimdi, alınan geri çağırmaya göre sorgu parametrelerini değiştirerek sorguyu test edelim.

  1. Dizin parametrelerini değiştirme:

Bu test için "Kosinüs" benzerlik mesafesi işlevi yerine "L2 Mesafesi" işlevini kullanacağım.

Çok Önemli Not: "Bu sorgunun COSINE benzerliğini kullandığını nereden biliyoruz?" diye sorabilirsiniz. Kosinüs uzaklığını temsil etmek için "<=>" kullanılarak uzaklık işlevi tanımlanabilir.

Vector Search mesafe işlevleri için Dokümanlar bağlantısı.

Önceki sorguda kosinüs benzerliği uzaklığı işlevi kullanılıyordu. Şimdi ise L2 uzaklığını deneyeceğiz. Ancak bunun için temel ScaNN dizininin de L2 mesafe işlevini kullandığından emin olmamız gerekir. Şimdi farklı bir mesafe fonksiyonu sorgusuyla dizin oluşturalım: L2 mesafesi: <->

drop index apparels_index;

CREATE INDEX apparels_index ON apparels 
USING scann (embedding L2)
WITH (num_leaves=32);

DROP INDEX ifadesi, tabloda gereksiz dizin olmamasını sağlamak için kullanılır.

Artık Vector Search işlevimin mesafe işlevini değiştirdikten sonra RECALL'u değerlendirmek için aşağıdaki sorguyu yürütebiliyorum.

[SONRA] L2 mesafesi işlevini kullanan sorgu:

SELECT
  *
FROM
  evaluate_query_recall($$
SELECT id,content, pdt_desc, uri, category, sub_category,color,gender
FROM 
apparels 
    order by embedding <-> embedding('text-embedding-005', 'skirts for women')::vector 
  LIMIT 25 $$,
    '{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
    ARRAY['scann']);

Güncellenen dizinin hatırlama değerindeki farkı / dönüşümü görebilirsiniz.

İndekste değiştirebileceğiniz başka parametreler de vardır. Örneğin, istenen geri çağırma değerine ve uygulamanızın kullandığı veri kümesine bağlı olarak num_leaves gibi parametreleri değiştirebilirsiniz.

Vektör Arama Sonuçlarının LLM Doğrulaması

En yüksek kaliteli kontrollü aramayı elde etmek için isteğe bağlı bir LLM doğrulama katmanı ekledik. Büyük dil modelleri, özellikle karmaşık veya belirsiz sorgular için arama sonuçlarının alaka düzeyini ve tutarlılığını değerlendirmek amacıyla kullanılabilir. Bu işlem şunları içerebilir:

Anlamsal Doğrulama:

Sonuçları sorgu amacına göre çapraz referans veren bir LLM.

Mantıksal Filtreleme:

Geleneksel filtrelerde kodlanması zor olan karmaşık işletme mantığını veya kurallarını uygulamak için LLM kullanma, ürün listesini ayrıntılı ölçütlere göre daha da hassaslaştırma.

Kalite Güvencesi:

Daha az alakalı sonuçları otomatik olarak tanımlayıp işaretleyerek gerçek kişiler tarafından incelenmelerini veya modelin iyileştirilmesini sağlar.

AlloyDB AI özelliklerinde bunu şu şekilde gerçekleştirdik:

WITH 
          apparels_temp as (
                  SELECT id,content, pdt_desc, uri, category, sub_category,color,gender 
                  FROM apparels 
                 -- where category = ANY($1) and sub_category = ANY($2) and color = ANY($3) and gender = ANY($4)
                      order by embedding <=> embedding('text-embedding-005', $5)::vector
                  limit 25
          ),
          prompt AS (
          SELECT 'You are a friendly advisor helping to filter whether a product match' || pdt_desc || 'is reasonably (not necessarily 100% but contextually in agreement) related to the customer''s request: ' || $5 || '. Respond only in YES or NO. Do not add any other text.'
          AS prompt_text, *
          from apparels_temp
          )
          ,
          response AS (
          SELECT id,content,pdt_desc,uri,
                  json_array_elements(ml_predict_row('projects/abis-345004/locations/us-central1/publishers/google/models/gemini-1.5-pro:streamGenerateContent',
                  json_build_object('contents',
                  json_build_object('role',
                  'user',
                  'parts',
                  json_build_object('text', prompt_text)))))->'candidates'->0->'content'->'parts'->0->'text' AS resp
          FROM 
                  prompt)
          SELECT id, content,uri,replace(replace(resp::text,'\n',''),'"','') as result
          FROM
                  response where replace(replace(resp::text,'\n',''),'"','') in ('YES', 'NO')
                  limit 10;  

Temel sorgu, yönlendirilmiş arama, karma arama ve yeniden sıralama bölümlerinde gördüğümüz sorguyla aynıdır. Bu sorguya, ml_predict_row yapısıyla temsil edilen yeniden sıralanmış sonuç kümesinin GEMINI değerlendirmesi katmanını ekledik. Fasetli filtreleri yorum satırı yaptım ancak 1 ila 4 numaralı yer tutucular için istediğiniz öğeleri bir diziye ekleyebilirsiniz. 5 ABD doları yerine arama yapmak istediğiniz metni (ör. "Çiçek deseni olmayan pembe üst") girin.

7. Veritabanları ve Uygulama Katmanı için MCP Araç Kutusu

Arka planda, güçlü araçlar ve iyi yapılandırılmış bir uygulama sayesinde sorunsuz bir şekilde çalışır.

Veritabanları için MCP (Model Context Protocol) Toolbox, üretken yapay zeka ve asistan araçlarının AlloyDB ile entegrasyonunu kolaylaştırır. Bağlantı havuzunu, kimlik doğrulamayı ve veritabanı işlevlerinin yapay zeka aracılarına veya diğer uygulamalara güvenli bir şekilde sunulmasını kolaylaştıran açık kaynaklı bir sunucu görevi görür.

Uygulamamızda, tüm akıllı karma arama sorgularımız için bir soyutlama katmanı olarak MCP Toolbox for Databases'i kullandık.

Kullanım alanımız için Toolbox'ı kurmak ve dağıtmak üzere aşağıdaki adımları uygulayın:

MCP Toolbox for Databases tarafından desteklenen veritabanlarından birinin AlloyDB olduğunu görebilirsiniz. Önceki bölümde bu veritabanını zaten sağladığımız için Toolbox'ı kurmaya devam edelim.

  1. Cloud Shell Terminalinize gidin ve projenizin seçili olduğundan ve terminalin isteminde gösterildiğinden emin olun. Proje dizininize gitmek için Cloud Shell terminalinizde aşağıdaki komutu çalıştırın:
mkdir toolbox-tools

cd toolbox-tools
  1. Araç kutusunu indirip yeni klasörünüze yüklemek için aşağıdaki komutu çalıştırın:
# see releases page for other versions
export VERSION=0.7.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox
  1. Cloud Shell Düzenleyici'ye (kod düzenleme modu için) gidin ve proje kök klasörüne "tools.yaml" adlı bir dosya ekleyin.
sources:
    alloydb:
        kind: "alloydb-postgres"
        project: "<<YOUR_PROJECT_ID>>"
        region: "us-central1"
        cluster: "vector-cluster"
        instance: "vector-instance"
        database: "postgres"
        user: "postgres"
        password: "alloydb"


tools:
        <<tools go here... Refer to the github repo file>>

Tools.yaml komut dosyasını bu repo dosyasındaki kodla değiştirdiğinizden emin olun.

tools.yaml dosyasını inceleyelim:

Kaynaklar, bir aracın etkileşimde bulunabileceği farklı veri kaynaklarınızı temsil eder. Kaynak, bir aracın etkileşimde bulunabileceği bir veri kaynağını temsil eder. Kaynakları, tools.yaml dosyanızın kaynaklar bölümünde harita olarak tanımlayabilirsiniz. Genellikle bir kaynak yapılandırması, veritabanına bağlanmak ve veritabanıyla etkileşim kurmak için gereken tüm bilgileri içerir.

Araçlar, bir aracının gerçekleştirebileceği işlemleri (ör. bir kaynağa okuma ve yazma) tanımlar. Araç, aracınızın gerçekleştirebileceği bir işlemi (ör. SQL ifadesi çalıştırma) temsil eder. Araçlar'ı tools.yaml dosyanızın araçlar bölümünde harita olarak tanımlayabilirsiniz. Genellikle bir aracın işlem yapması için kaynak gerekir.

tools.yaml dosyanızı yapılandırma hakkında daha fazla bilgi için bu belgeye bakın.

  1. Sunucuyu başlatmak için aşağıdaki komutu (mcp-toolbox klasöründen) çalıştırın:
./toolbox --tools-file "tools.yaml"

Artık sunucuyu bulutta web önizleme modunda açarsanız get-order-data adlı yeni aracınızla birlikte Toolbox sunucusunun çalışır durumda olduğunu görebilirsiniz.

MCP Toolbox Server varsayılan olarak 5000 numaralı bağlantı noktasında çalışır. Bunu test etmek için Cloud Shell'i kullanalım.

Aşağıda gösterildiği gibi Cloud Shell'de Web Önizlemesi'ni tıklayın:

52f1a9646b55eeb2.png

Bağlantı noktasını değiştir'i tıklayın ve bağlantı noktasını aşağıda gösterildiği gibi 5000 olarak ayarlayıp Değiştir ve Önizle'yi tıklayın.

71c8c4659a947acd.png

Bu işlem sonucunda şu çıkış elde edilir:

261efdaf0019a65.png

  1. Araç kutumuzu Cloud Run'a dağıtalım:

İlk olarak MCP Toolbox sunucusuyla başlayıp Cloud Run'da barındırabiliriz. Bu durumda, diğer uygulamalar ve/veya aracı uygulamalarıyla entegre edebileceğimiz herkese açık bir uç nokta elde ederiz. Bunu Cloud Run'da barındırma talimatları burada verilmiştir. Şimdi temel adımları inceleyelim.

  1. Yeni bir Cloud Shell terminali başlatın veya mevcut bir Cloud Shell terminalini kullanın. Araç kutusu ikilisinin ve tools.yaml dosyasının bulunduğu proje klasörüne gidin (bu örnekte toolbox-tools). Henüz klasörün içinde değilseniz aşağıdaki komutu kullanın:
cd toolbox-tools
  1. PROJECT_ID değişkenini Google Cloud proje kimliğinizi gösterecek şekilde ayarlayın.
export PROJECT_ID="<<YOUR_GOOGLE_CLOUD_PROJECT_ID>>"
  1. Bu Google Cloud hizmetlerini etkinleştirin
gcloud services enable run.googleapis.com \
                       cloudbuild.googleapis.com \
                       artifactregistry.googleapis.com \
                       iam.googleapis.com \
                       secretmanager.googleapis.com
  1. Google Cloud Run'da dağıtacağımız Toolbox hizmetinin kimliği olarak hareket edecek ayrı bir hizmet hesabı oluşturalım.
gcloud iam service-accounts create toolbox-identity
  1. Ayrıca, bu hizmet hesabının doğru rollere (ör.Secret Manager'a erişme ve AlloyDB ile iletişim kurma) sahip olmasını sağlıyoruz.
gcloud projects add-iam-policy-binding $PROJECT_ID \
   --member serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com \
   --role roles/secretmanager.secretAccessor

gcloud projects add-iam-policy-binding $PROJECT_ID \
   --member serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com \
   --role roles/alloydb.client

gcloud projects add-iam-policy-binding $PROJECT_ID \
   --member serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com \
   --role roles/serviceusage.serviceUsageConsumer
  1. tools.yaml dosyasını gizli olarak yükleyeceğiz:
gcloud secrets create tools --data-file=tools.yaml

Zaten bir gizli anahtarınız varsa ve gizli anahtar sürümünü güncellemek istiyorsanız aşağıdakileri yürütün:

gcloud secrets versions add tools --data-file=tools.yaml
  1. Cloud Run için kullanmak istediğiniz container görüntüsüne bir ortam değişkeni ayarlayın:
export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
  1. Cloud Run'a dağıtım için kullanılan komutun son adımı:
gcloud run deploy toolbox \
--image $IMAGE \
--service-account toolbox-identity \
--region us-central1 \
--set-secrets "/app/tools.yaml=tools:latest" \
--args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
--allow-unauthenticated \
--labels dev-tutorial=codelab-alloydb-search-toolbox

Bu işlem, yapılandırılmış tools.yaml dosyamızla birlikte Toolbox sunucusunu Cloud Run'a dağıtma sürecini başlatır. Dağıtım başarılı olduğunda aşağıdaki gibi bir mesaj görürsünüz:

Deploying container to Cloud Run service [toolbox] in project [YOUR_PROJECT_ID] region [us-central1]
OK Deploying new service... Done.                                                                                                                                                                                     
  OK Creating Revision...                                                                                                                                                                                             
  OK Routing traffic...                                                                                                                                                                                               
  OK Setting IAM Policy...                                                                                                                                                                                            
Done.                                                                                                                                                                                                                 
Service [toolbox] revision [toolbox-00001-zsk] has been deployed and is serving 100 percent of traffic.
Service URL: https://toolbox-<SOME_ID>.us-central1.run.app

Yeni dağıtılan aracınızı agentic uygulamanızda kullanmaya hazırsınız.

Toolbox sunucusundaki araçlara erişme

Araç kutusu dağıtıldıktan sonra, dağıtılan araç kutusu sunucusuyla etkileşim kurmak için bir Python Cloud Run Functions ara katmanı oluştururuz. Bunun nedeni, Toolbox'ın şu anda Java SDK'sının olmamasıdır. Bu nedenle, sunucuyla etkileşim kurmak için Python ara katmanı oluşturduk. İlgili Cloud Run işlevinin kaynak kodunu burada bulabilirsiniz.

Az önce oluşturduğumuz ve önceki adımlarda dağıttığımız araç kutusu araçlarına erişebilmek için bu Cloud Run işlevini oluşturup dağıtmanız gerekir:

  1. Google Cloud Console'da Cloud Run sayfasına gidin.
  2. İşlev yaz'ı tıklayın.
  3. Hizmet adı alanına, işlevinizi açıklayan bir ad girin. Hizmet adları yalnızca harfle başlamalı ve harf, sayı ya da kısa çizgi dahil en fazla 49 karakter içermelidir. Hizmet adları tireyle bitemez ve bölge ile proje başına benzersiz olmalıdır. Hizmet adı daha sonra değiştirilemez ve herkese görünür durumdadır. (Enter retail-product-search-quality)
  4. Bölge listesinde varsayılan değeri kullanın veya işlevinizi dağıtmak istediğiniz bölgeyi seçin. (us-central1'i seçin)
  5. Çalışma zamanı listesinde varsayılan değeri kullanın veya bir çalışma zamanı sürümü seçin. (Python 3.11'i seçin)
  6. Kimlik doğrulama bölümünde "Herkese açık erişime izin ver"i seçin.
  7. "Oluştur" düğmesini tıklayın.
  8. İşlev oluşturulur ve main.py ile requirements.txt şablonuyla yüklenir.
  9. Bu dosyaları, projenin deposundaki main.py ve requirements.txt dosyalarıyla değiştirin.
  10. İşlevi dağıtın. Cloud Run işleviniz için bir uç nokta alırsınız.

Uç noktanız aşağıdaki gibi (veya benzer şekilde) görünmelidir:

Araç kutusuna erişmek için Cloud Run Function Endpoint: "https://retail-product-search-quality-<<YOUR_PROJECT_NUMBER>>.us-central1.run.app"

Zaman çizelgesi içinde tamamlamayı kolaylaştırmak için (uygulamalı eğitmen liderliğindeki oturumlar için) bitiş noktasının proje numarası, uygulamalı oturum sırasında paylaşılacaktır.

ÖNEMLİ NOT:

Alternatif olarak, veritabanı bölümünü doğrudan uygulama kodunuzun veya Cloud Run işlevinin bir parçası olarak da uygulayabilirsiniz.

8. Özelliklere Göre Arama ile Uygulama Geliştirme (Java)

Son olarak, tüm bu güçlü arka uç bileşenleri uygulama katmanı aracılığıyla hayata geçirilir. Java ile geliştirilen uygulama, arama sistemiyle etkileşim kurmak için kullanıcı arayüzü sağlar. AlloyDB'ye yönelik sorguları düzenler, ayrıntılı filtrelerin gösterilmesini sağlar, kullanıcı seçimlerini yönetir ve yeniden sıralanmış, doğrulanmış arama sonuçlarını sorunsuz ve sezgisel bir şekilde sunar.

  1. Cloud Shell Terminal'inize gidip depoyu klonlayarak başlayabilirsiniz:
git clone https://github.com/AbiramiSukumaran/faceted_searching_retail
  1. Yeni oluşturulan faceted_searching_retail klasörünü görebileceğiniz Cloud Shell Düzenleyici'ye gidin.
  2. Aşağıdaki adımları silin. Bu adımlar önceki bölümlerde zaten tamamlanmıştır:
  3. Cloud_Run_Function klasörünü silin.
  4. db_script.sql dosyasını silin.
  5. file_tools.yaml dosyasını silin.
  6. Proje klasörü retail-faceted-search'e gidin. Proje yapısını görmeniz gerekir:

1d736dfa45583f52.png

  1. ProductRepository.java dosyasında TOOLBOX_ENDPOINT değişkenini Cloud Run işlevinizdeki (dağıtılmış) uç nokta ile değiştirmeniz veya uç noktayı uygulamalı oturumdaki konuşmacıdan almanız gerekir.

Aşağıdaki kod satırını arayın ve uç noktanızla değiştirin:

public static final String TOOLBOX_ENDPOINT = "https://retail-product-search-quality-<<YOUR_PROJECT_NUMBER>>.us-central1.run.app";
  1. Dockerfile ve pom.xml dosyalarının proje yapılandırmanıza uygun olduğundan emin olun (herhangi bir sürümü veya yapılandırmayı açıkça değiştirmediyseniz değişiklik yapmanız gerekmez).
  2. Cloud Shell terminalinde ana klasörünüzün ve proje klasörünün (faceted_searching_retail / retail-faceted-search) içinde olduğunuzdan emin olun. Terminalde doğru klasörde değilseniz aşağıdaki komutları kullanarak doğru klasöre gidin:
cd faceted_searching_retail

cd retail-faceted-search
  1. Uygulamanızı paketleyin, derleyin ve yerel olarak test edin:
mvn package

mvn spring-boot:run

Aşağıda gösterildiği gibi Cloud Shell terminalinde "8080 numaralı bağlantı noktasında önizle"yi tıklayarak uygulamanızı görüntüleyebilirsiniz:

52f1a9646b55eeb2.png

9. Cloud Run'a dağıtma: ***ÖNEMLİ ADIM

Cloud Shell terminalinde ana klasörünüzün ve proje klasörünün içinde olduğunuzdan emin olun (faceted_searching_retail / retail-faceted-search). Terminalde doğru klasörde değilseniz aşağıdaki komutları kullanarak doğru klasöre gidin:

cd faceted_searching_retail

cd retail-faceted-search

Proje klasöründe olduğunuzdan emin olduktan sonra aşağıdaki komutu çalıştırın:

gcloud run deploy retail-search --source . \
--region us-central1 \
--allow-unauthenticated \
--labels dev-tutorial=codelab-alloydb-hybrid-search

Dağıtım tamamlandıktan sonra aşağıdaki gibi bir dağıtılmış Cloud Run uç noktası alırsınız:

https://retail-search-**********-uc.a.run.app/

10. Demo

Tüm bu özellikleri uygulamalı olarak görelim:

80b59305a9a7b068.png

Yukarıdaki resimde, dinamik karma arama uygulamasının açılış sayfası gösterilmektedir.

264bc437cd5c3ae9.png

Yukarıdaki resimde "Bağcıksız ten rengi" aramasının sonuçları gösterilmektedir. Seçilen yönlü filtreler: Ayakkabı, Sandalet.

aff5849c73fe743c.png

Yukarıdaki resimde "yakasız tişört" arama sonuçları gösterilmektedir. Fasetli filtreler: Giyim

Artık bu uygulamayı uygulanabilir hale getirmek için daha fazla üretken ve temsilci özelliği ekleyebilirsiniz.

Deneyin ve kendi projelerinizi oluşturmak için ilham alın.

11. 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 Kaynak Yöneticisi sayfasına gidin.
  2. Proje listesinde silmek istediğiniz projeyi seçin ve Sil'i tıklayın.
  3. İletişim kutusunda proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.
  4. Alternatif olarak, KÜMEYİ SİL düğmesini tıklayarak bu proje için yeni oluşturduğumuz AlloyDB kümesini silebilirsiniz (yapılandırma sırasında küme için us-central1'i seçmediyseniz bu köprüdeki konumu değiştirin).

12. Tebrikler

Tebrikler! CLOUD RUN'da ALLOYDB ile başarıyla bir HİBRİT ARAMA UYGULAMASI oluşturup dağıttınız.

Bu durum işletmeler için neden önemli?

AlloyDB AI tarafından desteklenen bu dinamik hibrit arama uygulaması, kurumsal perakende ve diğer işletmeler için önemli avantajlar sunar:

Üstün Alaka Düzeyi: Bağlamsal (vektör) arama, hassas yönlü filtreleme ve akıllı yeniden sıralama birleştirilerek müşterilere son derece alakalı sonuçlar sunulur. Bu da memnuniyetin ve dönüşümlerin artmasını sağlar.

Ölçeklenebilirlik: AlloyDB'nin mimarisi ve scaNN dizin oluşturma özelliği, e-ticaret işletmelerinin büyümesi için çok önemli olan büyük ürün kataloglarını ve yüksek sorgu hacimlerini işlemek üzere tasarlanmıştır.

Performans: Karmaşık karma aramalarda bile daha hızlı sorgu yanıtları, sorunsuz bir kullanıcı deneyimi sağlar ve terk etme oranlarını en aza indirir.

Geleceğe Hazırlık: Yapay zeka özelliklerinin (gömme, LLM doğrulama) entegrasyonu, uygulamayı kişiselleştirilmiş öneriler, sohbetli ticaret ve akıllı ürün keşfi alanlarındaki gelecekteki gelişmeler için hazır hale getirir.

Basitleştirilmiş mimari: Vektör aramanın doğrudan AlloyDB'ye entegre edilmesi, ayrı vektör veritabanlarına veya karmaşık senkronizasyona gerek kalmadan geliştirme ve bakımı basitleştirir.

Bir kullanıcının "Yüksek ayak kemeri desteği sunan, çevre dostu kadın koşu ayakkabıları" gibi doğal dilde bir sorgu yazdığını varsayalım.

9e27fc58aea9a081.png

Aynı anda kullanıcı "Kategori: <<>>", "Renk: <<>>" için yönlü filtreler uygularken "Fiyat: 100-150 ABD doları" diyor:

  • Sistem, doğal dil ile anlamsal olarak uyumlu ve seçilen filtrelerle tam olarak eşleşen, iyileştirilmiş bir ürün listesini anında döndürür.
  • Arka planda, ScaNN dizini vektör aramasını hızlandırır, satır içi ve uyarlanabilir filtreleme, birleştirilmiş ölçütlerle performansı sağlar ve yeniden sıralama, en uygun sonuçları en üstte gösterir.
  • Sonuçların hızı ve doğruluğu, bu teknolojileri birleştirmenin perakende arama deneyimini gerçekten akıllı hale getirme gücünü açıkça gösteriyor.

Yeni nesil bir perakende arama uygulaması oluşturmak için geleneksel yöntemlerin ötesine geçmek gerekir. AlloyDB, Vertex AI, scaNN dizine ekleme ile Vector Search, dinamik yönlü filtreleme, yeniden sıralama ve LLM doğrulama özelliklerinin gücünü kullanarak etkileşimi artıran ve satışları yükselten benzersiz bir müşteri deneyimi sunabiliriz. Bu sağlam, ölçeklenebilir ve akıllı çözüm, yapay zeka ile desteklenen modern veritabanı özelliklerinin perakendenin geleceğini nasıl yeniden şekillendirdiğini gösteriyor.

Bugün Başlayın!