AlloyDB ve Vertex AI Agent Builder ile Akıllı Alışveriş Asistanı Oluşturma - 1. Bölüm

1. Genel Bakış

Günümüzde, hızlı tempolu perakende ortamında kişiselleştirilmiş alışveriş deneyimleri sunarken olağanüstü müşteri hizmetleri sunmak büyük önem taşıyor. Müşteri sorularını yanıtlamak, ürün keşfine rehberlik etmek ve arama sonuçlarını özelleştirmek için tasarlanmış, bilgiye dayalı bir sohbet uygulaması oluşturma konusunda sizi teknik bir yolculuğa çıkaracağız. Bu yenilikçi çözüm, veri depolama için AlloyDB'nin gücünü, bağlamsal anlama için şirket içi bir analiz motorunu, alaka düzeyi doğrulaması için Gemini'yi (Büyük Dil Modeli) ve akıllı bir sohbet asistanı oluşturmak için Google'ın Agent Builder'ını bir araya getirir.

Sorun: Modern perakende müşterileri, anında yanıtlar ve benzersiz tercihlerine uygun ürün önerileri bekliyor. Geleneksel arama yöntemleri genellikle bu düzeyde kişiselleştirme sunamaz.

Çözüm: Bilgi odaklı sohbet uygulamamız bu sorunun üstesinden gelir. Müşteri amacını anlamak, akıllıca yanıt vermek ve son derece alakalı sonuçlar sunmak için perakende verilerinizden elde edilen zengin bir bilgi tabanından yararlanır.

Ne oluşturacaksınız?

Bu laboratuvarın (1. Bölüm) bir parçası olarak ş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 modeli uzantılarını etkinleştirme
  3. Ürün açıklamasından yerleştirilmiş öğeler oluşturma
  4. Kullanıcı arama metni için gerçek zamanlı kosinüs benzerlik araması yapma
  5. Çözümü sunucusuz Cloud Run işlevlerinde dağıtma

Laboratuvarın ikinci bölümünde, Temsilci Oluşturucu adımları ele alınacaktır.

Şartlar

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

2. Mimari

Veri Akışları: Verilerin sistemimizde nasıl hareket ettiğini daha yakından inceleyelim:

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. Yerleştirme Oluşturma: Hem kullanıcının sorgusu hem de AlloyDB'de depolanan bilgiler için yerleştirmeler (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 Doğrulaması:

Bu olası yanıtlar, değerlendirme için Gemini'ye gönderilir. Gemini, bu bilgilerin gerçekten alakalı olup olmadığını ve kullanıcıyla paylaşmanın güvenli olup olmadığını belirler.

Yanıt 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.

Sohbet Etkileşimi:

Agent Builder, yanıtları kullanıcıya doğal dil biçiminde sunarak karşılıklı diyalog kurulmasını kolaylaştırır. Bu bölüm, bir sonraki laboratuvarda ele alınacaktır.

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 edeceğ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 tıklayın.

Cloud Shell'i etkinleştir düğmesi resmi

  1. Cloud Shell'e bağlandıktan sonra aşağıdaki komutu kullanarak kimliğinizin doğrulanıp doğrulanmadığını ve projenin proje kimliğinize ayarlanıp ayarlanmadığını kontrol edin:
gcloud auth list
  1. gcloud komutunun projeniz hakkında bilgi sahibi olduğunu onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın.
gcloud config list project
  1. Projeniz ayarlanmadıysa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>
  1. Gerekli API'leri etkinleştirin.
gcloud services enable alloydb.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       run.googleapis.com \
                       cloudbuild.googleapis.com \
                       cloudfunctions.googleapis.com \
                       aiplatform.googleapis.com

gcloud komutunun alternatifi, her ürünü arayarak veya bu bağlantıyı kullanarak konsoldan geçmektir.

Atlanan bir API varsa uygulama sırasında istediğiniz zaman etkinleştirebilirsiniz.

gcloud komutları ve kullanımı için belgelere bakın.

4. Veritabanı kurulumu

Bu laboratuvarda, perakende verilerini depolamak için veritabanı olarak AlloyDB'yi kullanacağız. Veritabanları ve günlükler gibi tüm kaynakları tutmak için kümeler kullanır. Her kümenin, verilere erişim noktası sağlayan bir birincil örneği vardır. 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ğıdakine benzer bir ekran görürsünüz. 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. Varsayılan ağı seçtiğinizde aşağıdaki gibi bir ekran görürsünüz. BAĞLANTIYI AYALA'yı seçin.
    7939bbb6802a91bf.png
  2. 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
  3. Ağınız oluşturulduktan sonra kümenizi oluşturmaya devam edebilirsiniz. Kümenin kurulumunu aşağıda gösterildiği gibi tamamlamak için KÜME OLUŞTUR'u tıklayın:

e06623e55195e16e.png

Örnek kimliğini "shopping-instance"" olarak değiştirdiğinizden emin olun.

Küme oluşturma işleminin yaklaşık 10 dakika süreceğini unutmayın. İşlem başarıyla tamamlandığında aşağıdakine benzer bir ekran görürsünüz:

24eec29fa5cfdb3e.png

5. Veri kullanımı

Şimdi, mağazayla ilgili verileri içeren 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ğrulama için aşağıdaki verileri kullanın:

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

AlloyDB Studio'da kimlik doğrulamayı başarıyla tamamladıktan sonra Düzenleyici'ye SQL komutları girilir. Son pencerenin 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 AlloyDB komutlarını düzenleyici pencerelerine 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;

Veritabanında etkinleştirilen uzantıları kontrol etmek istiyorsanız şu SQL komutunu çalıştırı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 çalıştırıldığında tabloyu veritabanında görüntüleyebilirsiniz. Aşağıda örnek bir ekran görüntüsü verilmiştir:

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.

Buradan 20 satırı/insert ifadesini kopyalayıp boş bir düzenleyici sekmesine yapıştırın ve ÇALIŞTIR'ı seçin.

Tablo içeriğini görmek için Gezgin bölümünü, giysiler adlı tabloyu görene kadar genişletin. Tabloyu sorgulama seçeneğini görmek için üç noktayı (⋮) seçin. Yeni bir Düzenleyici sekmesinde bir SELECT ifadesi açılır.

b31ece70e670ab89.png

İzin Ver

embedding işleviyle ilgili 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

Cloud Shell terminaline gidip aşağıdaki komutu verin:

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. Bağlam

AlloyDB örneği sayfasına dönün.

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, bir ürün açıklaması (pdt_desc olarak adlandıracağız) 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.

Yeni oluşturulan örneğinizin AlloyDB stüdyosunda aşağıdaki ifadeyi çalıştırın. Bu işlem, pdt_desc alanını bağlam verileriyle günceller:

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 yerleştirilmiş öğeler 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 tarif edebilirsiniz. Bu terimler "deniz kıyısında", "deniz kenarında", "odanızdan okyanusa yürüyüş mesafesinde", "sur la mer", "на берегу океана" vb. gibi farklı şekillerde 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ının yerleştirilmelerini embedding alanındaki tabloya eklemek için SQL'i çalıştıracağız. Kullanabileceğiniz çeşitli yerleştirme modelleri vardır. Vertex AI'dan text-embedding-004 kullanıyoruz. Proje boyunca aynı yerleştirme modelini kullandığınızdan emin olun.

Not: Bir süre önce oluşturulmuş mevcut bir Google Cloud projesi kullanıyorsanız textembedding-gecko gibi metin yerleştirme modelinin eski sürümlerini kullanmaya devam etmeniz gerekebilir.

UPDATE
 apparels
SET
 embedding = embedding( 'text-embedding-004',
   pdt_desc)
WHERE
 TRUE;

Bazı yerleştirmeleri görmek için apparels tablosuna tekrar bakın. Değişiklikleri görmek için SELECT ifadesini yeniden çalıştırdığınızdan emin olun.

SELECT
 id,
 category,
 sub_category,
 content,
 embedding
FROM
 apparels;

Bu işlem, sorguda bulunan örnek metin için aşağıda gösterildiği gibi bir kayan nokta dizisi gibi görünen embedding vektörünü döndürür:

c69c08d085389f74.png

Not: Ücretsiz katman kapsamında yeni oluşturulan Google Cloud projeleri, yerleştirme modellerine saniye başına izin verilen yerleşme isteği sayısıyla ilgili kota sorunlarıyla karşılaşabilir. Kimlik için bir filtre sorgusu kullanmanızı ve ardından yerleştirmeyi oluştururken 1-5 kayıt seçmenizi öneririz.

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ı gerçekleştirelim.

Kullanıcının şu soruyu sorduğunu varsayalım:

"Kadın üst giyim, pembe, gündelik, yalnızca saf pamuk istiyorum."

Aşağıdaki sorguyu çalıştırarak bu terimle eşleşen öğeleri bulabilirsiniz:

SELECT
id,
category,
sub_category,
content,
pdt_desc AS description
FROM
apparels
ORDER BY
embedding <=> embedding('text-embedding-004',
  'I want womens tops, pink casual only pure cotton.')::vector
LIMIT
5;

Bu sorguyu ayrıntılı olarak inceleyelim:

Bu sorguda,

  1. Kullanıcının arama metni: "Kadın üst giyim, pembe, günlük, yalnızca saf pamuk istiyorum."
  2. text-embedding-004 modelini kullanarak embedding() yönteminde 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 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.

Sonuç şu şekilde görünür:

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.

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

Öncelikle, Google ML entegrasyonunun kümeniz ve örneğiniz için etkinleştirilip etkinleştirilmediğini kontrol edin. AlloyDB Studio'da aşağıdaki komutu verin:

show google_ml_integration.enable_model_support;

Değer "açık" olarak gösteriliyorsa sonraki 2 adımı atlayabilir ve doğrudan AlloyDB ile Vertex AI Model entegrasyonunu ayarlamaya geçebilirsiniz.

  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'ndeki İşaretler bölümüne gidin. ve google_ml_integration.enable_model_support flag değerinin aşağıda gösterildiği gibi "on" olarak ayarlandığından emin olun:

6a59351fcd2a9d35.png

"Açık" olarak ayarlanmamışsa "Açık" olarak ayarlayın ve ardından ÖRNEK YENİLE düğmesini 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.

Öncelikle, aşağıdaki gibi Gemini 1.5 model bağlantısını oluştururuz. Aşağıdaki komuttaki $PROJECT_ID ifadesini Google Cloud proje kimliğinizle değiştirmeyi unutmayın.

CALL
 google_ml.create_model( model_id => 'gemini-1.5',
   model_request_url => 'https://us-central1-aiplatform.googleapis.com/v1/projects/$PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.5-pro:streamGenerateContent',
   model_provider => 'google',
   model_auth_type => 'alloydb_service_agent_iam');

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;        

Son olarak, veritabanı kullanıcılarının Google Vertex AI modelleri aracılığıyla tahmin yürütmek için ml_predict_row işlevini yürütmesine izin vermemiz gerekir. Aşağıdaki komutu çalıştırın:

GRANT EXECUTE ON FUNCTION ml_predict_row to postgres;

Not: Mevcut bir Google Cloud projesi ve bir süre önce oluşturulmuş mevcut bir AlloyDB kümesi/örneği kullanıyorsanız gemini-1.5 modelinin eski referanslarını bırakmanız ve yukarıdaki CALL ifadesiyle tekrar oluşturmanız, ardından gemini-1.5'in sonraki çağrılarında sorun yaşama ihtimaline karşı grant execute on function ml_predict_row komutunu tekrar çalıştırmanız gerekebilir.

Yanıtları değerlendirme

Sorgudan alınan yanıtların makul olmasını sağlamak için sonraki bölümde tek bir büyük sorgu kullanacağız ancak bu sorgunun anlaşılması zor olabilir. Şimdi parçalara bakacağız ve birkaç dakika içinde bunların nasıl bir araya geldiğini göreceğiz.

  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 iki yeni alan ekliyoruz: biri açıklamayı dizinle, diğeri de orijinal isteğiyle birleştiriyor. Tüm bunlar xyz adlı bir tabloya (geçici bir tablo adı) 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-004',
   'I want womens tops, pink casual only pure cotton.')::vector
LIMIT
 5;

Bu sorgunun sonucu, kullanıcı sorgusuyla en çok benzerlik gösteren 5 satır olacaktır. Yeni xyz tablosu, 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.
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 sonraki sorgu halinde birleştirilebilir.

Ara sonuçlara göz atmak için yukarıdaki sorguları çalıştırdıysanız bunu çalıştırmadan önce xyz ve x tablolarını AlloyDB veritabanından silmeniz/kaldırmanız gerekir.

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-004',
             'I want womens tops, pink casual only pure cotton.')::vector
         LIMIT
           5 ) AS xyz ) AS X;

Bu süreç yine de göz korkutucu görünse de umarım bu konuda biraz daha bilgi edinebilirsiniz. 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'e taşıma

Bu uygulamayı web'e taşımaya hazır mısınız? Bu Bilgi Motoru'nu Cloud Run Functions ile sunucusuz hale getirmek için aşağıdaki adımları uygulayın:

  1. Yeni bir Cloud Run işlevi OLUŞTURMAK için Google Cloud Console'daki Cloud Run işlevlerine gidin veya https://console.cloud.google.com/functions/add bağlantısını kullanın.
  2. Ortamı "Cloud Run işlevi" olarak seçin. "retail-engine" işlev adını girin ve Bölge olarak "us-central1"i seçin. Kimlik doğrulamayı "Kimliği doğrulanmayan çağrılara izin ver" olarak ayarlayın ve SONRAKİ'yi tıklayın. Çalışma zamanı olarak Java 17'yi, kaynak kod için de Satır İçi Düzenleyici'yi seçin.
  3. Varsayılan olarak giriş noktası "gcfv2.HelloHttpFunction" olarak ayarlanır. Cloud Run işlevinizin HelloHttpFunction.java ve pom.xml bölümündeki yer tutucu kodunu sırasıyla Java dosyasından ve XML'den alınan kodla değiştirin.
  4. Java dosyasındaki $PROJECT_ID yer tutucusunu ve AlloyDB bağlantı kimlik bilgilerini kendi değerlerinizle değiştirmeyi unutmayın. AlloyDB kimlik bilgileri, bu codelab'in başında kullandığımız kimlik bilgileridir. Farklı değerler kullandıysanız lütfen Java dosyasında da aynı değişiklikleri yapın.
  5. Dağıt'ı tıklayın.

Dağıtıldıktan sonra, Cloud Functions'in AlloyDB veritabanı örneğimize erişmesine izin vermek için VPC bağlayıcısını oluşturacağız.

ÖNEMLİ ADIM:

Dağıtımı başlattıktan sonra işlevleri Google Cloud Run Functions konsolunda görebilirsiniz. Yeni oluşturulan işlevi (retail-engine) arayın, tıklayın, ardından DÜZENLE'yi tıklayın ve aşağıdakileri değiştirin:

  1. Çalışma zamanı, derleme, bağlantılar ve güvenlik ayarlarına gidin
  2. Zaman aşım süresini 180 saniyeye yükseltin
  3. BAĞLANTILAR sekmesine gidin:

4e83ec8a339cda08.png

  1. Giriş ayarlarının altında "Tüm trafiğe izin ver" seçeneğinin seçili olduğundan emin olun.
  2. Çıkış ayarları bölümünde Ağ açılır listesini tıklayın ve "Yeni VPC Bağlantısı Ekle" seçeneğini belirleyin. Açılan iletişim kutusunda gördüğünüz talimatları uygulayın:

8126ec78c343f199.png

  1. VPC bağlayıcısı için bir ad girin ve bölgenin örneğinizle aynı olduğundan emin olun. Ağ değerini varsayılan olarak bırakın ve Alt Ağ'ı, 10.8.0.0 IP aralığı veya kullanılabilir benzer bir değerle Özel IP Aralığı olarak ayarlayın.
  2. YÜKSEK ÇÖZÜNÜRLÜKLÜ AYARLARI GÖSTER'i genişletin ve yapılandırmayı tam olarak aşağıdaki şekilde ayarladığınızdan emin olun:

7baf980463a86a5c.png

  1. OLUŞTUR'u tıklayın. Bu bağlayıcı artık çıkış ayarlarında listelenir.
  2. Yeni oluşturulan bağlayıcıyı seçin
  3. Tüm trafiğin bu VPC bağlayıcısı üzerinden yönlendirilmesini tercih edin.
  4. SONRAKİ'yi ve ardından DAĞIT'ı tıklayın.

11. Uygulamayı test etme

Güncellenen Cloud Functions dağıtıldıktan sonra uç noktayı aşağıdaki biçimde görürsünüz:

https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/retail-engine

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://us-central1-$PROJECT_ID.cloudfunctions.net/retail-engine \
  -H 'Content-Type: application/json' \
  -d '{"search":"I want some kids clothes themed on Disney"}' \
  | jq .

Sonuç:

88bc1ddfb5644a28.png

İşte bu kadar. AlloyDB verilerinde Embeddings modelini kullanarak benzerlik vektörü araması yapmak bu kadar basittir.

Sohbet aracısını oluşturma

Temsilci, bu laboratuvarın 2. bölümünde oluşturulur.

12. Temizleme

Bu laboratuvarın 2. bölümünü tamamlamayı planlıyorsanız mevcut proje silineceği için bu adımı atlayın.

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.

13. Tebrikler

Tebrikler! AlloyDB, pgvector ve Vector Search'i kullanarak başarıyla bir benzerlik araması yaptınız. AlloyDB, Vertex AI ve Vector Search'in özelliklerini birleştirerek bağlamsal ve vektör aramalarını erişilebilir, verimli ve gerçekten anlam odaklı hale getirme konusunda dev bir adım attık. Bu laboratuvarın bir sonraki bölümünde, temsilci oluşturma adımları ele alınmaktadır.