1. Einführung
Spanner ist ein vollständig verwalteter, horizontal skalierbarer, global verteilter Datenbankdienst, der sich hervorragend für relationale und nicht relationale operative Arbeitslasten eignet.
Spanner bietet eine integrierte Unterstützung für die Vektorsuche, sodass Sie Ähnlichkeiten oder semantische Suchen ausführen und Retrieval Augmented Generation (RAG) in Anwendungen mit generativer AI implementieren können. Dabei können Sie entweder die Features exakter K-nächstgelegener Nachbar (KNN) oder Annäherung an den nächsten Nachbarn (ANN) nutzen.
Die Vektorsuchabfragen von Spanner geben aktuelle Echtzeitdaten zurück, sobald Transaktionen festgeschrieben sind, genau wie bei jeder anderen Abfrage Ihrer Betriebsdaten.
In diesem Lab richten Sie die grundlegenden Funktionen ein, die erforderlich sind, um mithilfe von Spanner eine Vektorsuche durchzuführen und mithilfe von SQL auf Einbettungen und LLM-Modelle im Modellgarten von VertexAI zuzugreifen.
Die Architektur würde so aussehen:
Auf dieser Grundlage lernen Sie, wie Sie einen Vektorindex basierend auf dem ScaNN-Algorithmus erstellen und die APPROX-Entfernungsfunktionen verwenden, wenn Ihre semantischen Arbeitslasten skaliert werden müssen.
Aufgaben
Aufgaben in diesem Lab:
- Spanner-Instanz erstellen
- Datenbankschema von Spanner für die Einbindung in Einbettungs- und LLM-Modelle in Vertex AI einrichten
- Dataset für den Einzelhandel laden
- Ähnlichkeitssuchanfragen für das Dataset stellen
- Stellen Sie dem LLM-Modell Kontext bereit, um produktspezifische Empfehlungen zu generieren.
- Das Schema ändern und einen Vektorindex erstellen
- Ändern Sie die Abfragen so, dass der neu erstellte Vektorindex verwendet wird.
Lerninhalte
- Spanner-Instanz einrichten
- In Vertex AI einbinden
- Mit Spanner eine Vektorsuche durchführen, um ähnliche Artikel in einem Einzelhandels-Dataset zu finden
- So bereiten Sie Ihre Datenbank auf die Skalierung von Arbeitslasten für die Vektorsuche mit der ANN-Suche vor.
Voraussetzungen
2. Einrichtung und Anforderungen
Projekt erstellen
Wenn Sie noch kein Google-Konto (Gmail oder Google Apps) haben, müssen Sie eines erstellen. Melden Sie sich in der Google Cloud Platform Console ( console.cloud.google.com) an und erstellen Sie ein neues Projekt.
Wenn Sie bereits ein Projekt haben, klicken Sie auf das Drop-down-Menü für die Projektauswahl oben links in der Konsole:
und klicken Sie auf „NEUES PROJEKT“, Schaltfläche zum Erstellen eines neuen Projekts:
Wenn Sie noch kein Projekt haben, sollten Sie ein Dialogfeld wie dieses sehen, um Ihr erstes zu erstellen:
Im nachfolgenden Dialog zur Projekterstellung können Sie die Details Ihres neuen Projekts eingeben:
Denken Sie an die Projekt-ID. Dies ist ein eindeutiger Name, der in allen Google Cloud-Projekten eindeutig ist. Der oben angegebene Name ist bereits vergeben und funktioniert leider nicht für Sie. Sie wird in diesem Codelab später als PROJECT_ID bezeichnet.
Falls noch nicht geschehen, müssen Sie als Nächstes in der Developers Console die Abrechnung aktivieren, um Google Cloud-Ressourcen nutzen und die Spanner API aktivieren zu können.
Dieses Codelab sollte nicht mehr als ein paar Euro kosten. Wenn Sie sich jedoch dazu entschließen, mehr Ressourcen zu verwenden oder diese weiter auszuführen (siehe Abschnitt „Bereinigen“ am Ende dieses Dokuments), Die Preise für Google Cloud Spanner finden Sie hier.
Neue Google Cloud Platform-Nutzer haben Anspruch auf eine kostenlose Testversion mit 300$Guthaben, wodurch das Codelab in der Regel kostenlos sein sollte.
Google Cloud Shell einrichten
Sie können Google Cloud und Spanner per Fernzugriff von Ihrem Laptop aus bedienen. In diesem Codelab verwenden wir jedoch Google Cloud Shell, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.
Diese Debian-basierte virtuelle Maschine verfügt über alle erforderlichen Entwicklungstools. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und wird in Google Cloud ausgeführt. Dadurch werden die Netzwerkleistung und die Authentifizierung erheblich verbessert. Für dieses Codelab benötigen Sie also nur einen Browser – ja, er funktioniert auf Chromebooks.
- Klicken Sie einfach auf „Cloud Shell aktivieren“ , um Cloud Shell über die Cloud Console zu aktivieren. Es dauert nur einen Moment, bis die Umgebung bereitgestellt und eine Verbindung hergestellt werden kann.
Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie bereits authentifiziert sind und dass das Projekt bereits auf Ihre PROJECT_ID eingestellt ist.
gcloud auth list
Befehlsausgabe
Credentialed accounts:
- <myaccount>@<mydomain>.com (active)
gcloud config list project
Befehlsausgabe
[core]
project = <PROJECT_ID>
Sollte das Projekt aus irgendeinem Grund nicht eingerichtet sein, geben Sie einfach den folgenden Befehl ein:
gcloud config set project <PROJECT_ID>
Du suchst dein Gerät (PROJECT_ID
)? Sehen Sie nach, welche ID Sie bei den Einrichtungsschritten verwendet haben, oder rufen Sie sie im Dashboard der Cloud Console auf:
Cloud Shell legt außerdem standardmäßig einige Umgebungsvariablen fest, die bei der Ausführung zukünftiger Befehle nützlich sein können.
echo $GOOGLE_CLOUD_PROJECT
Befehlsausgabe
<PROJECT_ID>
Spanner API aktivieren
gcloud services enable spanner.googleapis.com
Zusammenfassung
In diesem Schritt haben Sie ein Projekt eingerichtet (falls noch nicht vorhanden) sowie Cloud Shell und die erforderlichen APIs aktiviert.
Nächstes Video
Als Nächstes richten Sie die Spanner-Instanz und -Datenbank ein.
3. Spanner-Instanz und -Datenbank erstellen
Spanner-Instanz erstellen
In diesem Schritt richten wir unsere Spanner-Instanz für das Codelab ein. Öffnen Sie dazu Cloud Shell und führen Sie den folgenden Befehl aus:
export SPANNER_INSTANCE_ID=retail-demo
gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=regional-us-central1 \
--description="spanner AI retail demo" \
--nodes=1
Befehlsausgabe:
$ gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=regional-us-central1 \
--description="spanner AI retail demo" \
--nodes=1
Creating instance...done.
Datenbank erstellen
Sobald die Instanz ausgeführt wird, können Sie die Datenbank erstellen. Spanner ermöglicht die Verwendung mehrerer Datenbanken in einer einzelnen Instanz.
In der Datenbank definieren Sie Ihr Schema. Sie können auch steuern, wer Zugriff auf die Datenbank hat, eine benutzerdefinierte Verschlüsselung einrichten, das Optimierungstool konfigurieren und die Aufbewahrungsdauer festlegen.
Verwenden Sie zum Erstellen der Datenbank wieder das gcloud-Befehlszeilentool:
export SPANNER_DATABASE=cymbal-bikes
gcloud spanner databases create $SPANNER_DATABASE \
--instance=$SPANNER_INSTANCE_ID
Befehlsausgabe:
$ gcloud spanner databases create $SPANNER_DATABASE \
--instance=$SPANNER_INSTANCE_ID
Creating database...done.
Zusammenfassung
In diesem Schritt haben Sie die Spanner-Instanz und -Datenbank erstellt.
Nächstes Video
Als Nächstes richten Sie das Spanner-Schema und die Spanner-Daten ein.
4. Cymbal-Schema und -Daten laden
Cymbal-Schema erstellen
Rufen Sie Spanner Studio auf, um das Schema einzurichten:
Das Schema besteht aus zwei Teilen. Zuerst möchten Sie die Tabelle products
hinzufügen. Kopieren Sie diese Anweisung und fügen Sie sie in den leeren Tab ein.
Kopieren Sie diese DDL für das Schema und fügen Sie sie in das Feld ein:
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);
Klicken Sie dann auf die Schaltfläche run
und warten Sie einige Sekunden, bis das Schema erstellt wurde.
Als Nächstes erstellen Sie die beiden Modelle und konfigurieren sie für Vertex AI-Modellendpunkte.
Das erste Modell ist ein Einbettungsmodell, mit dem Einbettungen aus Text generiert werden, und das zweite ein LLM-Modell, mit dem Antworten basierend auf den Daten in Spanner generiert werden.
Fügen Sie das folgende Schema in einen neuen Tab in Spanner Studio ein:
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
);
Klicken Sie dann auf die Schaltfläche run
und warten Sie ein paar Sekunden, bis Ihre Modelle erstellt sind.
Im linken Bereich von Spanner Studio sollten Sie die folgenden Tabellen und Modelle sehen:
Laden Sie die Daten:
Nun möchten Sie einige Produkte in Ihre Datenbank einfügen. Öffnen Sie in Spanner Studio einen neuen Tab. Kopieren Sie dann die folgenden Insert-Anweisungen und fügen Sie sie ein:
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);
Klicken Sie auf die Schaltfläche run
, um die Daten einzufügen.
Zusammenfassung
In diesem Schritt haben Sie das Schema erstellt und einige grundlegende Daten in die Datenbank cymbal-bikes
geladen.
Nächstes Video
Als Nächstes werden Sie das Einbettungsmodell integrieren, um Einbettungen für die Produktbeschreibungen zu generieren, und eine textbasierte Suchanfrage in eine Einbettung umwandeln, um nach relevanten Produkten zu suchen.
5. Mit Einbettungen arbeiten
Vektoreinbettungen für Produktbeschreibungen generieren
Damit die Ähnlichkeitssuche für die Produkte funktioniert, müssen Sie Einbettungen für die Produktbeschreibungen generieren.
Da die EmbeddingsModel
im Schema erstellt wurde, ist dies eine einfache UPDATE
-DML-Anweisung.
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;
Klicken Sie auf die Schaltfläche run
, um die Produktbeschreibungen zu aktualisieren.
Vektorsuche verwenden
In diesem Beispiel stellen Sie eine Suchanfrage in einer natürlichen Sprache über eine SQL-Abfrage bereit. Diese Abfrage verwandelt die Suchanfrage in eine Einbettung und sucht dann anhand der gespeicherten Einbettungen der Produktbeschreibungen, die im vorherigen Schritt generiert wurden, nach ähnlichen Ergebnissen.
-- 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;
Klicken Sie auf die Schaltfläche run
, um nach ähnlichen Produkten zu suchen. Die Ergebnisse sollten so aussehen:
Beachten Sie, dass für die Abfrage zusätzliche Filter verwendet werden, z. B. wenn Sie sich nur für Produkte interessieren, die auf Lager sind (inventoryCount > 0
).
Zusammenfassung
In diesem Schritt haben Sie Einbettungen von Produktbeschreibungen und eine Einbettung von Suchanfragen mithilfe von SQL erstellt und dabei die Einbindung von Spanner in Modelle in Vertex AI genutzt. Außerdem haben Sie eine Vektorsuche durchgeführt, um ähnliche Produkte zu finden, die der Suchanfrage entsprechen.
Nächste Schritte
Als Nächstes verwenden wir die Suchergebnisse, um Daten in ein LLM einzuspeisen, um eine benutzerdefinierte Antwort für jedes Produkt zu generieren.
6. Mit einem LLM arbeiten
Spanner erleichtert die Einbindung in LLM-Modelle, die von Vertex AI bereitgestellt werden. So können Entwickler SQL verwenden, um direkt mit LLMs zu interagieren, ohne dass die Anwendung die Logik ausführen muss.
Beispielsweise haben wir die Ergebnisse der vorherigen SQL-Abfrage vom Nutzer "I'd like to buy a starter bike for my 3 year old child".
.
Der Entwickler möchte zu jedem Ergebnis eine Antwort mit der folgenden Frage geben, ob das Produkt gut für den Nutzer geeignet ist:
"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"
Sie können folgende Abfrage verwenden:
-- 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)
);
Klicken Sie auf die Schaltfläche run
, um die Abfrage zu senden. Die Ergebnisse sollten so aussehen:
Das erste Produkt ist aufgrund der Altersgruppe in der Produktbeschreibung (2-4 Jahre) für ein dreijähriges Kind geeignet. Die anderen Produkte passen nicht so gut.
Zusammenfassung
In diesem Schritt haben Sie mit einem LLM gearbeitet, um grundlegende Antworten auf Prompts eines Nutzers zu generieren.
Nächste Schritte
Als Nächstes erfahren Sie, wie Sie ANN zur Skalierung der Vektorsuche verwenden.
7. Vektorsuche skalieren
Bei den vorherigen Beispielen für die Vektorsuche wurde die exakte KNN-Vektorsuche verwendet. Das ist praktisch, wenn Sie in der Lage sind, sehr spezifische Teilmengen Ihrer Spanner-Daten abzufragen. Diese Abfragetypen gelten als hochpartitionsfähig.
Wenn Sie keine Arbeitslasten haben, die hochpartitionierbar sind, und eine große Menge an Daten haben, sollten Sie die ANN-Vektorsuche mithilfe des ScaNN-Algorithmus verwenden, um die Lookup-Leistung zu erhöhen.
Dazu sind in Spanner zwei Schritte erforderlich:
- Vektorindex erstellen
- Ändern Sie Ihre Abfrage, um die APPROX-Entfernungsfunktionen zu verwenden.
Vektorindex erstellen
Um einen Vektorindex für dieses Dataset zu erstellen, müssen Sie zuerst die Spalte productDescriptionEmbeddings
ändern, um die Länge jedes Vektors zu definieren. Um die Vektorlänge zu einer Spalte hinzuzufügen, müssen Sie die ursprüngliche Spalte löschen und neu erstellen.
ALTER TABLE `products` DROP COLUMN `productDescriptionEmbedding`;
ALTER TABLE
`products` ADD COLUMN `productDescriptionEmbedding` ARRAY<FLOAT32>(vector_length=>768);
Erstellen Sie als Nächstes die Einbettungen noch einmal aus dem Schritt Generate Vector embedding
, den Sie zuvor ausgeführt haben.
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;
Nachdem die Spalte erstellt wurde, erstellen Sie den Index:
CREATE VECTOR INDEX ProductDescriptionEmbeddingIndex
ON products(productDescriptionEmbedding)
WHERE productDescriptionEmbedding IS NOT NULL
OPTIONS (
distance_type = 'COSINE'
);
Neuen Index verwenden
Um den neuen Vektorindex zu verwenden, müssen Sie die vorherige Einbettungsabfrage geringfügig modifizieren.
Dies ist die ursprüngliche Abfrage:
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;
Nehmen Sie die folgenden Änderungen vor:
- Verwenden Sie einen Indexhinweis für den neuen Vektorindex:
@{force_index=ProductDescriptionEmbeddingIndex}
- Ändern Sie den
COSINE_DISTANCE
-Funktionsaufruf inAPPROX_COSINE_DISTANCE
. Beachten Sie, dass die JSON-Optionen in der abschließenden Abfrage unten ebenfalls erforderlich sind. - Generieren Sie die Einbettungen aus der ML.PREDICT-Funktion separat.
- Kopieren Sie die Ergebnisse der Einbettungen in die endgültige Abfrage.
Einbettungen generieren
-- 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)
)
)
Markieren Sie die Ergebnisse der Abfrage und kopieren Sie sie.
Ersetzen Sie dann in der folgenden Abfrage <VECTOR>
durch Einfügen der kopierten Einbettungen.
-- 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;
Die Ausgabe sollte ungefähr so aussehen:
Zusammenfassung
In diesem Schritt haben Sie Ihr Schema konvertiert, um einen Vektorindex zu erstellen. Anschließend haben Sie die Einbettungsabfrage umgeschrieben, um eine ANN-Suche mit dem Vektorindex durchzuführen. Dies ist ein wichtiger Schritt, wenn Sie mit zunehmendem Datenvolumen anwachsen, um die Arbeitslasten für die Vektorsuche zu skalieren.
Nächste Schritte
Als Nächstes ist es an der Zeit, aufzuräumen!
8. Bereinigen (optional)
Wechseln Sie zum Bereinigen einfach zum Cloud Spanner-Bereich der Cloud Console und löschen Sie die Instanz „retail-demo
“, die wir im Codelab erstellt haben.
9. Glückwunsch!
Glückwunsch! Sie haben mit der integrierten Vektorsuche von Spanner erfolgreich eine Ähnlichkeitssuche durchgeführt. Außerdem haben Sie gesehen, wie einfach es ist, mit Einbettungs- und LLM-Modellen zu arbeiten, um Generative AI-Funktionen direkt mit SQL bereitzustellen.
Schließlich haben Sie gelernt, wie eine ANN-Suche mithilfe des ScaNN-Algorithmus zur Skalierung von Arbeitslasten für die Vektorsuche durchgeführt wird.
Nächste Schritte
Weitere Informationen zur genaueren Nachbarfunktion von Spanner (KNN-Vektorsuche) finden Sie hier: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
Weitere Informationen zur Spanner-Funktion für den ungefähren nächsten Nachbarn (ANN-Vektorsuche) finden Sie hier: https://cloud.google.com/spanner/docs/find-approximate-nearest-neighbors
Weitere Informationen zum Ausführen von Onlinevorhersagen mit SQL mithilfe der VertexAI-Einbindung von Spanner finden Sie hier: https://cloud.google.com/spanner/docs/ml