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

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

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

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

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.

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).
- Cloud Shell'i Cloud Console'dan etkinleştirmek için Cloud Shell'i Etkinleştir'i
tıklamanız yeterlidir (ortamın sağlanması ve bağlantının kurulması yalnızca birkaç saniye sürer).


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:

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:

Ş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:

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.
Vektör aramasını kullanma
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:

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:

İ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_DISTANCEişlev çağrısınıAPPROX_COSINE_DISTANCEolarak 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.

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:

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

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
