Spanner Vector Search'i kullanmaya başlama

1. Giriş

Spanner, hem ilişkisel hem de ilişkisel olmayan operasyonel iş yükleri için ideal olan, tümüyle yönetilen, yatay olarak ölçeklenebilir ve küresel olarak dağıtılmış bir veritabanı hizmetidir.

Spanner'da yerleşik vektör arama desteği bulunur. Bu destek sayesinde, tam K en yakın komşu (KNN) veya yaklaşık en yakın komşu (ANN) özelliklerinden yararlanarak benzerlik veya semantik arama yapabilir ve GenAI uygulamalarında veriyle artırılmış üretimi (RAG) ölçekli olarak uygulayabilirsiniz.

Spanner'ın vektör arama sorguları, işlemler onaylanır onaylanmaz operasyonel verilerinizdeki diğer sorgular gibi güncel ve gerçek zamanlı veriler döndürür.

Bu laboratuvarda, Spanner'dan yararlanarak vektör araması yapma ve SQL kullanarak Vertex AI'ın model bahçesindeki yerleştirme ve LLM modellerine erişme için gereken temel özellikleri ayarlama adımlarını inceleyeceksiniz.

Mimari şöyle görünür:

d179a760add7adc0.png

Bu temel bilgilerle, ScaNN algoritması tarafından desteklenen bir vektör dizini oluşturmayı ve semantik iş yüklerinizin ölçeklenmesi gerektiğinde APPROX mesafe işlevlerini kullanmayı öğreneceksiniz.

Ne oluşturacaksınız?

Bu laboratuvar kapsamında şunları yapacaksınız:

  • Spanner örneği oluşturma
  • Vertex AI'daki yerleştirme ve LLM modelleriyle entegre etmek için Spanner'ın veritabanı şemasını ayarlama
  • Perakende veri kümesi yükleme
  • Veri kümesine karşı benzerlik arama sorguları gönderme
  • Ürüne özel öneriler oluşturmak için LLM modeline bağlam sağlayın.
  • Şemayı değiştirin ve vektör dizini oluşturun.
  • Yeni oluşturulan vektör dizininden yararlanmak için sorguları değiştirin.

Neler öğreneceksiniz?

  • Spanner örneği oluşturma
  • Vertex AI ile entegrasyon
  • Perakende veri kümesinde benzer öğeleri bulmak için Spanner'ı kullanarak vektör araması yapma
  • ANN aramayı kullanarak vektör arama iş yüklerini ölçeklendirmek için veritabanınızı hazırlama

İhtiyacınız olanlar

  • Bir faturalandırma hesabına bağlı olan Google Cloud projesi.
  • Chrome veya Firefox gibi bir web tarayıcısı

2. Kurulum ve şartlar

Proje oluşturma

Google Hesabınız (Gmail veya Google Apps) yoksa hesap oluşturmanız gerekir. Google Cloud Platform Console'da ( console.cloud.google.com) oturum açın ve yeni bir proje oluşturun.

Önceden oluşturduğunuz bir projeniz varsa konsolun sol üst kısmındaki proje seçimi açılır menüsünü tıklayın:

6c9406d9b014760.png

ve yeni bir proje oluşturmak için açılan iletişim kutusunda "YENİ PROJE" düğmesini tıklayın:

949d83c8a4ee17d9.png

Henüz bir projeniz yoksa ilk projenizi oluşturmak için aşağıdaki gibi bir iletişim kutusu görürsünüz:

870a3cbd6541ee86.png

Sonraki proje oluşturma iletişim kutusunda yeni projenizin ayrıntılarını girebilirsiniz:

6a92c57d3250a4b3.png

Tüm Google Cloud projelerinde benzersiz bir ad olan proje kimliğini unutmayın (Yukarıdaki ad zaten alınmış olduğundan sizin için çalışmayacaktır). Bu codelab'in ilerleyen bölümlerinde PROJECT_ID olarak adlandırılacaktır.

Ardından, henüz yapmadıysanız Google Cloud kaynaklarını kullanmak için Developers Console'da faturalandırmayı etkinleştirmeniz ve Spanner API'yi etkinleştirmeniz gerekir.

15d0ef27a8fbab27.png

Bu codelab'i tamamlamak size birkaç dolardan fazla maliyet getirmemelidir. Ancak daha fazla kaynak kullanmaya veya kaynakları çalışır durumda bırakmaya karar verirseniz maliyet artabilir (bu belgenin sonundaki "temizleme" bölümüne bakın). Google Cloud Spanner fiyatlandırması burada belgelenmiştir.

Google Cloud Platform'un yeni kullanıcıları, bu codelab'i tamamen ücretsiz hale getirecek 300 ABD doları değerinde ücretsiz deneme sürümünden yararlanabilir.

Google Cloud Shell Kurulumu

Google Cloud ve Spanner, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir ancak bu codelab'de Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacağız.

Bu Debian tabanlı sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin bulunur ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu nedenle, bu codelab için ihtiyacınız olan tek şey bir tarayıcıdır (Chromebook'ta da çalışır).

  1. Cloud Shell'i Cloud Console'dan etkinleştirmek için Cloud Shell'i Etkinleştir'i gcLMt5IuEcJJNnMId-Bcz3sxCd0rZn7IzT_r95C8UZeqML68Y1efBG_B0VRp7hc7qiZTLAF-TXD7SsOadxn8uadgHhaLeASnVS3ZHK39eOlKJOgj9SJua_oeGhMxRrbOg3qigddS2A tıklamanız yeterlidir (ortamın sağlanması ve bağlantının kurulması yalnızca birkaç saniye sürer).

JjEuRXGg0AYYIY6QZ8d-66gx_Mtc-_jDE9ijmbXLJSAXFvJt-qUpNtsBsYjNpv2W6BQSrDc1D-ARINNQ-1EkwUhz-iUK-FUCZhJ-NtjvIEx9pIkE-246DomWuCfiGHK78DgoeWkHRw

Screen Shot 2017-06-14 at 10.13.43 PM.png

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin, PROJECT_ID'nize ayarlandığını görürsünüz.

gcloud auth list

Komut çıkışı

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Herhangi bir nedenle proje ayarlanmamışsa şu komutu verin:

gcloud config set project <PROJECT_ID>

PROJECT_ID cihazınızı mı arıyorsunuz? Kurulum adımlarında hangi kimliği kullandığınızı kontrol edin veya Cloud Console kontrol panelinde arayın:

158fNPfwSxsFqz9YbtJVZes8viTS3d1bV4CVhij3XPxuzVFOtTObnwsphlm6lYGmgdMFwBJtc-FaLrZU7XHAg_ZYoCrgombMRR3h-eolLPcvO351c5iBv506B3ZwghZoiRg6cz23Qw

Cloud Shell, gelecekteki komutları çalıştırırken faydalı olabilecek bazı ortam değişkenlerini de varsayılan olarak ayarlar.

echo $GOOGLE_CLOUD_PROJECT

Komut çıkışı

<PROJECT_ID>

Spanner API'yi etkinleştirme

gcloud services enable spanner.googleapis.com

Özet

Bu adımda, daha önce projeniz yoksa projenizi oluşturmuş, Cloud Shell'i etkinleştirmiş ve gerekli API'leri etkinleştirmiş olmanız gerekir.

Sıradaki

Ardından, Spanner örneğini ve veritabanını oluşturacaksınız.

3. Spanner örneği ve veritabanı oluşturma

Spanner örneğini oluşturma

Bu adımda, Spanner örneğimizi kod laboratuvarı için ayarlıyoruz. Bunu yapmak için Cloud Shell'i açıp şu komutu çalıştırın:

export SPANNER_INSTANCE_ID=retail-demo
gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=regional-us-central1 \
--description="spanner AI retail demo" \
--nodes=1
--edition=ENTERPRISE

Komut çıkışı:

$ gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=regional-us-central1 \
--description="spanner AI retail demo" \
--nodes=1
--edition=ENTERPRISE
Creating instance...done.

Veritabanını oluşturma

Örneğiniz çalıştıktan sonra veritabanını oluşturabilirsiniz. Spanner, tek bir örnekte birden fazla veritabanına izin verir.

Şemanızı tanımladığınız yer veritabanıdır. Ayrıca veritabanına kimlerin erişebileceğini kontrol edebilir, özel şifreleme ayarlayabilir, optimize ediciyi yapılandırabilir ve saklama süresini belirleyebilirsiniz.

Veritabanını oluşturmak için tekrar gcloud komut satırı aracını kullanın:

export SPANNER_DATABASE=cymbal-bikes
gcloud spanner databases create $SPANNER_DATABASE \
 --instance=$SPANNER_INSTANCE_ID

Komut çıkışı:

$ gcloud spanner databases create $SPANNER_DATABASE \
 --instance=$SPANNER_INSTANCE_ID
Creating database...done.

Özet

Bu adımda Spanner örneğini ve veritabanını oluşturdunuz.

Sıradaki

Ardından, Spanner şemasını ve verilerini ayarlayacaksınız.

4. Cymbal şemasını ve verilerini yükleme

Cymbal şemasını oluşturma

Şemayı ayarlamak için Spanner Studio'ya gidin:

3e1a0fed928b33cf.png

Şema iki bölümden oluşur. Öncelikle products tablosunu eklemek istersiniz. Bu ifadeyi kopyalayıp boş sekmeye yapıştırın.

Şema için bu DDL'yi kopyalayıp kutuya yapıştırın:

CREATE TABLE products (
categoryId INT64 NOT NULL,
productId INT64 NOT NULL,
productName STRING(MAX) NOT NULL,
productDescription STRING(MAX) NOT NULL,
productDescriptionEmbedding ARRAY<FLOAT32>,
createTime TIMESTAMP NOT NULL OPTIONS (
allow_commit_timestamp = true
),
inventoryCount INT64 NOT NULL,
priceInCents INT64,
) PRIMARY KEY(categoryId, productId);

Ardından, run düğmesini tıklayın ve şemanızın oluşturulması için birkaç saniye bekleyin.

Ardından, iki modeli oluşturacak ve bunları Vertex AI model uç noktaları için yapılandıracaksınız.

İlk model, metinden yerleştirmeler oluşturmak için kullanılan bir yerleştirme modelidir. İkincisi ise Spanner'daki verilere dayalı yanıtlar oluşturmak için kullanılan bir LLM modelidir.

Aşağıdaki şemayı Spanner Studio'da yeni bir sekmeye yapıştırın:

CREATE MODEL EmbeddingsModel INPUT(
content STRING(MAX),
) OUTPUT(
embeddings STRUCT<statistics STRUCT<truncated BOOL, token_count FLOAT32>, values ARRAY<FLOAT32>>,
) REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<PROJECT_ID>/locations/us-central1/publishers/google/models/text-embedding-004'
);


CREATE MODEL LLMModel INPUT(
prompt STRING(MAX),
) OUTPUT(
content STRING(MAX),
) REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<PROJECT_ID>/locations/us-central1/publishers/google/models/gemini-pro',
default_batch_size = 1
);

Ardından, run düğmesini tıklayın ve modellerinizin oluşturulması için birkaç saniye bekleyin.

Spanner Studio'nun sol bölmesinde aşağıdaki tabloları ve modelleri görmeniz gerekir:

62455aa4b0e839d9.png

Verileri yükleme

Şimdi veritabanınıza bazı ürünler eklemek isteyeceksiniz. Spanner Studio'da yeni bir sekme açın, ardından aşağıdaki ekleme ifadelerini kopyalayıp yapıştırın:

INSERT INTO products (categoryId, productId, productName, productDescription, createTime, inventoryCount, priceInCents)
VALUES (1, 1, "Cymbal Helios Helmet", "Safety meets style with the Cymbal children's bike helmet. Its lightweight design, superior ventilation, and adjustable fit ensure comfort and protection on every ride. Stay bright and keep your child safe under the sun with Cymbal Helios!", PENDING_COMMIT_TIMESTAMP(), 100, 10999),
(1, 2, "Cymbal Sprout", "Let their cycling journey begin with the Cymbal Sprout, the ideal balance bike for beginning riders ages 2-4 years. Its lightweight frame, low seat height, and puncture-proof tires promote stability and confidence as little ones learn to balance and steer. Watch them sprout into cycling enthusiasts with Cymbal Sprout!", PENDING_COMMIT_TIMESTAMP(), 10, 13999),
(1, 3, "Cymbal Spark Jr.", "Light, vibrant, and ready for adventure, the Spark Jr. is the perfect first bike for young riders (ages 5-8). Its sturdy frame, easy-to-use brakes, and puncture-resistant tires inspire confidence and endless playtime. Let the spark of cycling ignite with Cymbal!", PENDING_COMMIT_TIMESTAMP(), 34, 13900),
(1, 4, "Cymbal Summit", "Conquering trails is a breeze with the Summit mountain bike. Its lightweight aluminum frame, responsive suspension, and powerful disc brakes provide exceptional control and comfort for experienced bikers navigating rocky climbs or shredding downhill. Reach new heights with Cymbal Summit!", PENDING_COMMIT_TIMESTAMP(), 0, 79999),
(1, 5, "Cymbal Breeze", "Cruise in style and embrace effortless pedaling with the Breeze electric bike. Its whisper-quiet motor and long-lasting battery let you conquer hills and distances with ease. Enjoy scenic rides, commutes, or errands with a boost of confidence from Cymbal Breeze!", PENDING_COMMIT_TIMESTAMP(), 72, 129999),
(1, 6, "Cymbal Trailblazer Backpack", "Carry all your essentials in style with the Trailblazer backpack. Its water-resistant material, multiple compartments, and comfortable straps keep your gear organized and accessible, allowing you to focus on the adventure. Blaze new trails with Cymbal Trailblazer!", PENDING_COMMIT_TIMESTAMP(), 24, 7999),
(1, 7, "Cymbal Phoenix Lights", "See and be seen with the Phoenix bike lights. Powerful LEDs and multiple light modes ensure superior visibility, enhancing your safety and enjoyment during day or night rides. Light up your journey with Cymbal Phoenix!", PENDING_COMMIT_TIMESTAMP(), 87, 3999),
(1, 8, "Cymbal Windstar Pump", "Flat tires are no match for the Windstar pump. Its compact design, lightweight construction, and high-pressure capacity make inflating tires quick and effortless. Get back on the road in no time with Cymbal Windstar!", PENDING_COMMIT_TIMESTAMP(), 36, 24999),
(1, 9,"Cymbal Odyssey Multi-Tool","Be prepared for anything with the Odyssey multi-tool. This handy gadget features essential tools like screwdrivers, hex wrenches, and tire levers, keeping you ready for minor repairs and adjustments on the go. Conquer your journey with Cymbal Odyssey!", PENDING_COMMIT_TIMESTAMP(), 52, 999),
(1, 10,"Cymbal Nomad Water Bottle","Stay hydrated on every ride with the Nomad water bottle. Its sleek design, BPA-free construction, and secure lock lid make it the perfect companion for staying refreshed and motivated throughout your adventures. Hydrate and explore with Cymbal Nomad!", PENDING_COMMIT_TIMESTAMP(), 42, 1299);

Verileri eklemek için run düğmesini tıklayın.

Özet

Bu adımda şemayı oluşturdunuz ve cymbal-bikes veritabanına bazı temel verileri yüklediniz.

Sıradaki

Ardından, ürün açıklamaları için yerleştirmeler oluşturmak üzere yerleştirme modeliyle entegrasyon yapacak ve ilgili ürünleri aramak için metin biçimindeki arama isteğini yerleştirmeye dönüştüreceksiniz.

5. Yerleştirmelerle çalışma

Ürün açıklamaları için vektör yerleştirmeleri oluşturma

Benzerlik aramasının ürünlerde çalışması için ürün açıklamalarıyla ilgili yerleştirmeler oluşturmanız gerekir.

Şemada EmbeddingsModel oluşturulduğunda bu, basit bir UPDATE DML ifadesidir.

UPDATE products p1
SET productDescriptionEmbedding =
(SELECT embeddings.values from ML.PREDICT(MODEL EmbeddingsModel,
(SELECT productDescription as content FROM products p2 where p2.productId=p1.productId)))
WHERE categoryId=1;

Ürün açıklamalarını güncellemek için run düğmesini tıklayın.

Bu örnekte, SQL sorgusu aracılığıyla doğal dilde bir arama isteği göndereceksiniz. Bu sorgu, arama isteğini yerleştirmeye dönüştürür, ardından önceki adımda oluşturulan ürün açıklamalarının depolanmış yerleştirmelerine göre benzer sonuçları arar.

-- Use Spanner's vector search, and integration with embedding and LLM models to
-- return items that are semantically relevant and available in inventory based on
-- real-time data.


SELECT productName, productDescription, inventoryCount, COSINE_DISTANCE(
productDescriptionEmbedding,
(   SELECT embeddings.values
FROM ML.PREDICT(
MODEL EmbeddingsModel,
(SELECT "I'd like to buy a starter bike for my 3 year old child" as content)
)
)
) as distance
FROM products
WHERE inventoryCount > 0
ORDER BY distance
LIMIT 5;

Benzer ürünleri bulmak için run düğmesini tıklayın. Sonuçlar şu şekilde görünmelidir:

672e111753077fcf.png

Sorguda yalnızca stokta bulunan ürünlerle ilgilenme (inventoryCount > 0) gibi ek filtrelerin kullanıldığına dikkat edin.

Özet

Bu adımda, Spanner'ın Vertex AI'daki modellerle entegrasyonundan yararlanarak SQL kullanarak ürün açıklaması yerleştirmeleri ve arama isteği yerleştirmeleri oluşturdunuz. Arama isteğiyle eşleşen benzer ürünleri bulmak için vektör araması da yaptınız.

Sonraki Adımlar

Ardından, her ürün için özel bir yanıt oluşturmak üzere arama sonuçlarını bir LLM'ye aktaralım.

6. LLM ile çalışma

Spanner, Vertex AI'dan sunulan LLM modelleriyle entegrasyonu kolaylaştırır. Bu sayede geliştiriciler, uygulamanın mantığı yürütmesini gerektirmek yerine doğrudan LLM'lerle arayüz oluşturmak için SQL kullanabilir.

Örneğin, kullanıcıdan gelen önceki SQL sorgusunun sonuçları var. "I'd like to buy a starter bike for my 3 year old child".

Geliştirici, aşağıdaki istemi kullanarak ürünün kullanıcı için uygun olup olmadığına dair her sonuç için yanıt vermek istiyor:

"Answer with ‘Yes' or ‘No' and explain why: Is this a good fit for me? I'd like to buy a starter bike for my 3 year old child"

Kullanabileceğiniz sorgu:

-- Use an LLM to analyze this list and provide a recommendation on whether each
-- product is a good fit for the user. We use the vector search and real time
-- inventory data to first filter the products to reduce the size of the prompt to
-- the LLM.
SELECT productName, productDescription, inventoryCount, content AS LLMResponse
FROM ML.PREDICT(
MODEL LLMModel,
(   SELECT
inventoryCount,
productName,
productDescription,
CONCAT(
"Answer with ‘Yes' or ‘No' and explain why: Is this a good fit for me?",
"I'd like to buy a starter bike for my 3 year old child \n",
"Product Name: ", productName, "\n",
"Product Description:", productDescription) AS prompt,
FROM products
WHERE inventoryCount > 0
ORDER by COSINE_DISTANCE(
productDescriptionEmbedding,
(   SELECT embeddings.values
FROM ML.PREDICT(
MODEL EmbeddingsModel,
( SELECT "I'd like to buy a starter bike for my 3 year old child" as content)
)
)
) LIMIT 5
),
STRUCT(256 AS maxOutputTokens)
);

Sorguyu göndermek için run düğmesini tıklayın. Sonuçlar şu şekilde görünmelidir:

35878cd0f88f1470.png

İlk ürün, ürün açıklamasındaki yaş grubu (2-4 yaş) nedeniyle 3 yaşındaki bir çocuk için uygundur. Diğer ürünler uygun değildir.

Özet

Bu adımda, bir LLM ile çalışarak kullanıcılardan gelen istemlere temel yanıtlar oluşturmayı öğrendiniz.

Sonraki Adımlar

Ardından, vektör aramasını ölçeklendirmek için ANN'yi nasıl kullanacağımızı öğrenelim.

7. Vektör aramasını ölçeklendirme

Önceki vektör arama örneklerinde exact-KNN vektör arama kullanılıyordu. Bu özellik, Spanner verilerinizin çok spesifik alt kümelerini sorgulayabildiğinizde oldukça faydalıdır. Bu tür sorguların yüksek oranda bölümlenebilir olduğu söylenir.

Yüksek oranda bölümlenebilir iş yükleriniz yoksa ve büyük miktarda veriniz varsa arama performansını artırmak için ScaNN algoritmasından yararlanan ANN vektör aramasını kullanmak isteyebilirsiniz.

Bunu Spanner'da yapmak için iki şey yapmanız gerekir:

  • Vektör dizini oluşturma
  • Sorgunuzu, APPROX mesafe işlevlerini kullanacak şekilde değiştirin.

Vektör dizinini oluşturma

Bu veri kümesinde vektör dizini oluşturmak için öncelikle her vektörün uzunluğunu tanımlamak üzere productDescriptionEmbeddings sütununu değiştirmemiz gerekir. Vektör uzunluğunu bir sütuna eklemek için orijinal sütunu bırakıp yeniden oluşturmanız gerekir.

ALTER TABLE `products` DROP COLUMN `productDescriptionEmbedding`;
ALTER TABLE
  `products` ADD COLUMN `productDescriptionEmbedding` ARRAY<FLOAT32>(vector_length=>768);

Ardından, daha önce çalıştırdığınız Generate Vector embedding adımından yerleştirmeleri tekrar oluşturun.

UPDATE products p1
SET productDescriptionEmbedding =
(SELECT embeddings.values from ML.PREDICT(MODEL EmbeddingsModel,
(SELECT productDescription as content FROM products p2 where p2.productId=p1.productId)))
WHERE categoryId=1;

Sütun oluşturulduktan sonra dizini oluşturun:

CREATE VECTOR INDEX ProductDescriptionEmbeddingIndex
    ON products(productDescriptionEmbedding)
    WHERE productDescriptionEmbedding IS NOT NULL
OPTIONS (
 distance_type = 'COSINE'
);

Yeni dizini kullanma

Yeni vektör dizinini kullanmak için önceki yerleştirme sorgusunu biraz değiştirmeniz gerekir.

Orijinal sorgu:

SELECT productName, productDescription, inventoryCount, COSINE_DISTANCE(
productDescriptionEmbedding,
(   SELECT embeddings.values
FROM ML.PREDICT(
MODEL EmbeddingsModel,
(SELECT "I'd like to buy a starter bike for my 3 year old child" as content)
)
)
) as distance
FROM products
WHERE inventoryCount > 0
ORDER BY distance
LIMIT 5;

Aşağıdaki değişiklikleri yapmanız gerekir:

  • Yeni vektör dizini için bir dizin ipucu kullanın: @{force_index=ProductDescriptionEmbeddingIndex}
  • COSINE_DISTANCE işlev çağrısını APPROX_COSINE_DISTANCE olarak değiştirin. Aşağıdaki son sorgudaki JSON seçeneklerinin de gerekli olduğunu unutmayın.
  • Yerleştirmeleri ML.PREDICT işlevinden ayrı olarak oluşturun.
  • Yerleştirme sonuçlarını nihai sorguya kopyalayın.

Yerleştirilmiş öğeleri oluşturma

-- Generate the prompt embeddings
SELECT embeddings.values
FROM ML.PREDICT(
  MODEL EmbeddingsModel,
   (SELECT "I'd like to buy a starter bike for my 3 year old child" as content)
  )
)

Sorgudan elde edilen sonuçları vurgulayın ve kopyalayın.

1b43c5ae4ef9ab68.png

Ardından, aşağıdaki sorguda <VECTOR> yerine kopyaladığınız yerleştirmeleri yapıştırın.

-- Embedding query now using the vector index


SELECT productName, productDescription, inventoryCount, 
  APPROX_COSINE_DISTANCE(productDescriptionEmbedding, array<float32>[@VECTOR], options => JSON '{\"num_leaves_to_search\": 10}')
FROM products @{force_index=ProductDescriptionEmbeddingIndex}
WHERE productDescriptionEmbedding IS NOT NULL AND inventoryCount > 0
ORDER BY distance
LIMIT 5;

Şuna benzer bir görünümde olacaktır:

12397107ec49c491.png

Özet

Bu adımda, şemanızı dönüştürerek bir vektör dizini oluşturdunuz. Ardından, vektör dizinini kullanarak ANN araması yapmak için yerleştirme sorgusunu yeniden yazdınız. Verileriniz büyüdükçe vektör arama iş yüklerini ölçeklendirmek için bu adım önemlidir.

Sonraki Adımlar

Şimdi de temizleme işlemini yapın.

8. Temizleme (isteğe bağlı)

Temizlemek için Cloud Console'un Cloud Spanner bölümüne gidip codelab'de oluşturduğumuz 'retail-demo' örneğini silmeniz yeterlidir.

41cbc1a84b3588d5.png

9. Tebrikler!

Tebrikler, Spanner'ın yerleşik vektör arama özelliğini kullanarak benzerlik araması yapmayı başardınız. Ayrıca, üretken yapay zeka işlevini doğrudan SQL kullanarak sağlamak için yerleştirme ve LLM modelleriyle çalışmanın ne kadar kolay olduğunu da gördünüz.

Son olarak, vektör arama iş yüklerini ölçeklendirmek için ScaNN algoritması tarafından desteklenen ANN arama işlemini gerçekleştirmeyi öğrendiniz.

Sırada ne var?

Spanner'ın tam en yakın komşu (KNN vektör araması) özelliği hakkında daha fazla bilgiyi burada bulabilirsiniz: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors

Spanner'ın yaklaşık en yakın komşu (ANN vektör araması) özelliği hakkında daha fazla bilgiyi burada bulabilirsiniz: https://cloud.google.com/spanner/docs/find-approximate-nearest-neighbors

Spanner'ın Vertex AI entegrasyonunu kullanarak SQL ile online tahminler yapma hakkında daha fazla bilgiyi burada bulabilirsiniz: https://cloud.google.com/spanner/docs/ml