Pierwsze kroki z wyszukiwaniem wektorowym w Spanner

1. Wprowadzenie

Spanner to w pełni zarządzana, skalowana w poziomie, rozmieszczona globalnie usługa baz danych, która doskonale sprawdza się w przypadku relacyjnych i nierelacyjnych obciążeń operacyjnych.

Spanner ma wbudowaną obsługę wyszukiwania wektorowego, co umożliwia przeprowadzanie wyszukiwania podobieństw lub semantycznego oraz wdrażanie generowania rozszerzonego przez wyszukiwanie w zapisanych informacjach (RAG) w aplikacjach GenAI na dużą skalę przy użyciu funkcji dokładnego wyszukiwania K najbliższych sąsiadów (KNN) lub przybliżonego wyszukiwania najbliższych sąsiadów (ANN).

Zapytania dotyczące wyszukiwania wektorowego w Spannerze zwracają aktualne dane w czasie rzeczywistym natychmiast po zatwierdzeniu transakcji, tak samo jak każde inne zapytanie dotyczące danych operacyjnych.

W tym laboratorium dowiesz się, jak skonfigurować podstawowe funkcje wymagane do korzystania ze Spannera w celu przeprowadzania wyszukiwania wektorowego oraz uzyskiwania dostępu do modeli osadzania i LLM z bazy modeli Vertex AI za pomocą SQL.

Architektura wyglądałaby tak:

d179a760add7adc0.png

Na tej podstawie dowiesz się, jak utworzyć indeks wektorowy oparty na algorytmie ScaNN i używać funkcji odległości APPROX, gdy Twoje obciążenia semantyczne wymagają skalowania.

Co utworzysz

W ramach tego modułu:

  • Tworzenie instancji usługi Spanner
  • Konfigurowanie schematu bazy danych Spanner na potrzeby integracji z modelami osadzania i LLM w Vertex AI
  • Wczytywanie zbioru danych o sprzedaży detalicznej
  • Wysyłanie do zbioru danych zapytań o podobne problemy
  • Przekaż modelowi LLM kontekst, aby generować rekomendacje dotyczące konkretnych produktów.
  • Zmodyfikuj schemat i utwórz indeks wektorowy.
  • Zmień zapytania, aby korzystać z nowo utworzonego indeksu wektorowego.

Czego się nauczysz

  • Konfigurowanie instancji usługi Spanner
  • Integracja z Vertex AI
  • Jak używać usługi Spanner do wyszukiwania wektorowego w celu znajdowania podobnych produktów w zbiorze danych dotyczących handlu detalicznego
  • Jak przygotować bazę danych do skalowania obciążeń związanych z wyszukiwaniem wektorowym za pomocą wyszukiwania ANN.

Czego potrzebujesz

  • Projekt Google Cloud połączony z kontem rozliczeniowym.
  • przeglądarka, np. Chrome lub Firefox;

2. Konfiguracja i wymagania

Utwórz projekt

Jeśli nie masz jeszcze konta Google (Gmail lub Google Apps), musisz je utworzyć. Zaloguj się w konsoli Google Cloud Platform ( console.cloud.google.com) i utwórz nowy projekt.

Jeśli masz już projekt, kliknij menu wyboru projektu w lewym górnym rogu konsoli:

6c9406d9b014760.png

i w wyświetlonym oknie kliknij przycisk „NOWY PROJEKT”, aby utworzyć nowy projekt:

949d83c8a4ee17d9.png

Jeśli nie masz jeszcze projektu, powinien wyświetlić się taki dialog, w którym możesz utworzyć pierwszy projekt:

870a3cbd6541ee86.png

W kolejnym oknie dialogowym tworzenia projektu możesz wpisać szczegóły nowego projektu:

6a92c57d3250a4b3.png

Zapamiętaj identyfikator projektu, który jest unikalną nazwą we wszystkich projektach Google Cloud (podana powyżej nazwa jest już zajęta i nie będzie działać w Twoim przypadku). W dalszej części tych ćwiczeń z programowania będzie on nazywany PROJECT_ID.

Następnie, jeśli jeszcze tego nie zrobisz, musisz włączyć płatności w Konsoli deweloperów, aby korzystać z zasobów Google Cloud i włączyć interfejs Spanner API.

15d0ef27a8fbab27.png

Wykonanie tego samouczka nie powinno kosztować więcej niż kilka dolarów, ale może okazać się droższe, jeśli zdecydujesz się wykorzystać więcej zasobów lub pozostawisz je uruchomione (patrz sekcja „Czyszczenie” na końcu tego dokumentu). Ceny Google Cloud Spanner są opisane tutaj.

Nowi użytkownicy Google Cloud Platform mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD, co powinno sprawić, że ten samouczek będzie całkowicie bezpłatny.

Konfiguracja Google Cloud Shell

Z Google Cloud i Spanner można korzystać zdalnie na laptopie, ale w tym ćwiczeniu programistycznym będziemy używać Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.

Ta maszyna wirtualna oparta na Debianie zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Oznacza to, że do ukończenia tego ćwiczenia potrzebujesz tylko przeglądarki (działa ona na Chromebooku).

  1. Aby aktywować Cloud Shell w konsoli Cloud, kliknij Aktywuj Cloud Shell gcLMt5IuEcJJNnMId-Bcz3sxCd0rZn7IzT_r95C8UZeqML68Y1efBG_B0VRp7hc7qiZTLAF-TXD7SsOadxn8uadgHhaLeASnVS3ZHK39eOlKJOgj9SJua_oeGhMxRrbOg3qigddS2A (udostępnienie środowiska i połączenie się z nim powinno zająć tylko kilka chwil).

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

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

Po połączeniu z Cloud Shell zobaczysz, że uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator PROJECT_ID.

gcloud auth list

Wynik polecenia

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

Wynik polecenia

[core]
project = <PROJECT_ID>

Jeśli z jakiegoś powodu projekt nie jest ustawiony, po prostu wydaj to polecenie:

gcloud config set project <PROJECT_ID>

Szukasz urządzenia PROJECT_ID? Sprawdź, jakiego identyfikatora użyto w krokach konfiguracji, lub wyszukaj go w panelu konsoli Cloud:

158fNPfwSxsFqz9YbtJVZes8viTS3d1bV4CVhij3XPxuzVFOtTObnwsphlm6lYGmgdMFwBJtc-FaLrZU7XHAg_ZYoCrgombMRR3h-eolLPcvO351c5iBv506B3ZwghZoiRg6cz23Qw

Cloud Shell domyślnie ustawia też niektóre zmienne środowiskowe, które mogą być przydatne podczas wykonywania kolejnych poleceń.

echo $GOOGLE_CLOUD_PROJECT

Wynik polecenia

<PROJECT_ID>

Włączanie interfejsu Spanner API

gcloud services enable spanner.googleapis.com

Podsumowanie

W tym kroku skonfigurowaliśmy projekt (jeśli nie był jeszcze utworzony), aktywowaliśmy Cloud Shell i włączyliśmy wymagane interfejsy API.

Następny

Następnie skonfigurujesz instancję i bazę danych Spanner.

3. Tworzenie instancji i bazy danych Spanner

Tworzenie instancji usługi Spanner

W tym kroku skonfigurujemy instancję Spannera na potrzeby ćwiczeń z programowania. Aby to zrobić, otwórz Cloud Shell i uruchom to polecenie:

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

Wynik polecenia:

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

Tworzenie bazy danych

Gdy instancja będzie działać, możesz utworzyć bazę danych. Spanner umożliwia korzystanie z wielu baz danych w jednej instancji.

W bazie danych definiujesz schemat. Możesz też kontrolować, kto ma dostęp do bazy danych, konfigurować niestandardowe szyfrowanie i optymalizator oraz ustawiać okres przechowywania.

Aby utworzyć bazę danych, ponownie użyj narzędzia wiersza poleceń gcloud:

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

Wynik polecenia:

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

Podsumowanie

W tym kroku utworzyliśmy instancję i bazę danych usługi Spanner.

Następny

Następnie skonfigurujesz schemat i dane Spanner.

4. Wczytywanie schematu i danych Cymbal

Tworzenie schematu Cymbal

Aby skonfigurować schemat, otwórz Spanner Studio:

3e1a0fed928b33cf.png

Schemat składa się z 2 części. Najpierw dodaj tabelę products. Skopiuj to oświadczenie i wklej je w pustej karcie.

W przypadku schematu skopiuj i wklej ten DDL w polu:

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);

Następnie kliknij przycisk run i poczekaj kilka sekund na utworzenie schematu.

Następnie utworzysz 2 modele i skonfigurujesz je w punktach końcowych modelu Vertex AI.

Pierwszy model to model osadzania, który służy do generowania osadzeń z tekstu, a drugi to model LLM, który służy do generowania odpowiedzi na podstawie danych w Spannerze.

Wklej ten schemat do nowej karty w Spanner Studio:

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
);

Następnie kliknij przycisk run i poczekaj kilka sekund na utworzenie modeli.

W panelu po lewej stronie Spanner Studio powinny być widoczne te tabele i modele:

62455aa4b0e839d9.png

Wczytywanie danych

Teraz musisz wstawić do bazy danych kilka produktów. Otwórz nową kartę w Spanner Studio, a następnie skopiuj i wklej te instrukcje wstawiania:

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);

Kliknij przycisk run, aby wstawić dane.

Podsumowanie

W tym kroku utworzyliśmy schemat i załadowaliśmy podstawowe dane do bazy danych cymbal-bikes.

Następny

Następnie zintegrujesz model wektorów dystrybucyjnych, aby generować wektory dystrybucyjne dla opisów produktów, a także przekształcać tekstowe żądanie wyszukiwania w wektor dystrybucyjny, aby wyszukiwać odpowiednie produkty.

5. Praca z wektorami dystrybucyjnymi

Generowanie wektorów dystrybucyjnych dla opisów produktów

Aby wyszukiwanie podobieństwa działało w przypadku produktów, musisz wygenerować wektory dystrybucyjne dla opisów produktów.

W przypadku EmbeddingsModel utworzonego w schemacie jest to prosta instrukcja UPDATE DML.

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;

Kliknij przycisk run, aby zaktualizować opisy produktów.

W tym przykładzie podasz żądanie wyszukiwania w języku naturalnym za pomocą zapytania SQL. To zapytanie przekształci żądanie wyszukiwania w wektor dystrybucyjny, a następnie wyszuka podobne wyniki na podstawie zapisanych wektorów dystrybucyjnych opisów produktów wygenerowanych w poprzednim kroku.

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

Aby znaleźć podobne produkty, kliknij przycisk run. Wyniki powinny wyglądać tak:

672e111753077fcf.png

Zwróć uwagę, że w zapytaniu używane są dodatkowe filtry, np. tylko produkty dostępne w magazynie (inventoryCount > 0).

Podsumowanie

W tym kroku utworzyliśmy wektory dystrybucyjne opisów produktów i wektor dystrybucyjny żądania wyszukiwania za pomocą SQL, wykorzystując integrację Spannera z modelami w Vertex AI. Przeprowadziliśmy też wyszukiwanie wektorowe, aby znaleźć podobne produkty pasujące do żądania wyszukiwania.

Następne kroki

Następnie wykorzystajmy wyniki wyszukiwania, aby przekazać je do LLM i wygenerować spersonalizowaną odpowiedź dla każdego produktu.

6. Praca z LLM

Spanner ułatwia integrację z modelami LLM udostępnianymi z Vertex AI. Dzięki temu deweloperzy mogą używać SQL do bezpośredniej interakcji z LLM, zamiast wymagać od aplikacji wykonywania logiki.

Na przykład mamy wyniki poprzedniego zapytania SQL od użytkownika "I'd like to buy a starter bike for my 3 year old child".

Deweloper chce podać odpowiedź dla każdego wyniku, aby określić, czy produkt jest odpowiedni dla użytkownika. W tym celu używa tego prompta:

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

Oto zapytanie, którego możesz użyć:

-- 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)
);

Aby wysłać zapytanie, kliknij przycisk run. Wyniki powinny wyglądać tak:

35878cd0f88f1470.png

Pierwszy produkt jest odpowiedni dla 3-latka ze względu na przedział wiekowy podany w opisie produktu (2–4 lata). Pozostałe produkty nie są odpowiednie.

Podsumowanie

W tym kroku pracujesz z modelem LLM, aby generować podstawowe odpowiedzi na prompty użytkownika.

Następne kroki

Następnie dowiedz się, jak używać ANN do skalowania wyszukiwania wektorowego.

7. Skalowanie wyszukiwania wektorowego

W poprzednich przykładach wyszukiwania wektorowego używaliśmy dokładnego wyszukiwania wektorowego KNN. Jest to przydatne, gdy możesz wysyłać zapytania do bardzo konkretnych podzbiorów danych Spanner. Takie zapytania są łatwe do podzielenia.

Jeśli nie masz zbiorów zadań, które można łatwo podzielić na partycje, a masz dużą ilość danych, warto użyć wyszukiwania wektorowego ANN z wykorzystaniem algorytmu ScaNN, aby zwiększyć wydajność wyszukiwania.

Aby to zrobić w Spannerze, musisz wykonać 2 czynności:

  • Tworzenie indeksu wektorowego
  • Zmodyfikuj zapytanie, aby używać funkcji odległości APPROX.

Tworzenie indeksu wektorowego

Aby utworzyć indeks wektorowy w tym zbiorze danych, musimy najpierw zmodyfikować kolumnę productDescriptionEmbeddings, aby określić długość każdego wektora. Aby dodać długość wektora do kolumny, musisz usunąć pierwotną kolumnę i utworzyć ją ponownie.

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

Następnie ponownie utwórz wektory z kroku Generate Vector embedding, który został wcześniej wykonany.

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;

Po utworzeniu kolumny utwórz indeks:

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

Korzystanie z nowego indeksu

Aby użyć nowego indeksu wektorowego, musisz nieznacznie zmodyfikować poprzednie zapytanie dotyczące osadzania.

Oto oryginalne zapytanie:

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;

Musisz wprowadzić te zmiany:

  • Użyj wskazówki dotyczącej indeksu w przypadku nowego indeksu wektorowego: @{force_index=ProductDescriptionEmbeddingIndex}
  • Zmień wywołanie funkcji COSINE_DISTANCE na APPROX_COSINE_DISTANCE. Pamiętaj, że opcje JSON w ostatecznym zapytaniu poniżej są również wymagane.
  • Wektory dystrybucyjne generuj osobno za pomocą funkcji ML.PREDICT.
  • Skopiuj wyniki osadzania do ostatecznego zapytania.

Generowanie wektorów dystrybucyjnych

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

Zaznacz wyniki zapytania i skopiuj je.

1b43c5ae4ef9ab68.png

Następnie w tym zapytaniu zastąp <VECTOR>, wklejając skopiowane wektory.

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

Powinna wyglądać mniej więcej tak:

12397107ec49c491.png

Podsumowanie

W tym kroku przekształcisz schemat, aby utworzyć indeks wektorowy. Następnie zmodyfikowano zapytanie o wektory dystrybucyjne, aby przeprowadzić wyszukiwanie ANN za pomocą indeksu wektorowego. Jest to ważny krok, ponieważ w miarę wzrostu ilości danych będzie można skalować zadania wyszukiwania wektorowego.

Następne kroki

Teraz czas na porządki.

8. Czyszczenie (opcjonalnie)

Aby zwolnić miejsce, otwórz sekcję Cloud Spanner w konsoli Cloud i usuń instancję 'retail-demo' utworzoną w ramach ćwiczenia.

41cbc1a84b3588d5.png

9. Gratulacje!

Gratulujemy! Udało Ci się przeprowadzić wyszukiwanie podobieństwa za pomocą wbudowanej w Spanner wyszukiwarki wektorowej. Pokazaliśmy też, jak łatwo można pracować z modelami osadzania i LLM, aby udostępniać funkcje generatywnej AI bezpośrednio za pomocą SQL.

Na koniec dowiedzieliśmy się, jak przeprowadzać wyszukiwanie ANN oparte na algorytmie ScaNN, aby skalować zadania wyszukiwania wektorowego.

Co dalej?

Więcej informacji o funkcji dokładnego wyszukiwania najbliższych sąsiadów (wyszukiwanie wektorowe KNN) w Spanner znajdziesz tutaj: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors

Więcej informacji o funkcji przybliżonego wyszukiwania najbliższych sąsiadów (wyszukiwanie wektorowe ANN) w Spanner znajdziesz tutaj: https://cloud.google.com/spanner/docs/find-approximate-nearest-neighbors

Więcej informacji o tym, jak wykonywać prognozy online za pomocą SQL przy użyciu integracji Spannera z Vertex AI, znajdziesz tutaj: https://cloud.google.com/spanner/docs/ml