In diesem Leitfaden wird beschrieben, wie Sie mit der Google Cloud Console eine Vektorsuche in AlloyDB for PostgreSQL einrichten und ausführen. Die Beispiele dienen nur der Veranschaulichung der Vektorsuchfunktionen.
Informationen zum Ausführen einer Vektorsuche mit Vertex AI-Einbettungen finden Sie unter Erste Schritte mit Vektoreinbettungen mit AlloyDB AI.
Lernziele
- Erstellen Sie einen AlloyDB-Cluster und eine primäre Instanz.
- Stellen Sie eine Verbindung zu Ihrer Datenbank her und installieren Sie die erforderlichen Erweiterungen.
- Erstellen Sie eine
product
- und eineproduct inventory
-Tabelle. - Fügen Sie Daten in die Tabellen
product
undproduct inventory
ein und führen Sie eine einfache Vektorsuche durch. - Erstellen Sie einen ScaNN-Index für die Tabelle „products“.
- Führen Sie eine einfache Vektorsuche durch.
- Komplexe Vektorsuche mit einem Filter und einem Join durchführen
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweise
Abrechnung und erforderliche APIs aktivieren
Rufen Sie in der Google Cloud Console die Seite Cluster auf.
Prüfen Sie, ob die Abrechnung für Ihr Google Cloud -Projekt aktiviert ist.
Aktivieren Sie die Cloud APIs, die zum Erstellen von AlloyDB for PostgreSQL und zum Herstellen einer Verbindung zu dieser Instanz erforderlich sind.
- Klicken Sie im Schritt Projekt bestätigen auf Weiter, um den Namen des Projekts zu bestätigen, an dem Sie Änderungen vornehmen möchten.
Klicken Sie im Schritt APIs aktivieren auf Aktivieren, um Folgendes zu aktivieren:
- AlloyDB API
- Compute Engine API
- Service Networking API
- Vertex AI API
AlloyDB-Cluster und primäre Instanz erstellen
Rufen Sie in der Google Cloud Console die Seite Cluster auf.
Klicken Sie auf Cluster erstellen.
Geben Sie unter Cluster-ID die Option
my-cluster
ein.Geben Sie ein Passwort ein. Notieren Sie sich dieses Passwort, da Sie es in dieser Anleitung verwenden.
Wählen Sie eine Region aus, z. B.
us-central1 (Iowa)
.Wählen Sie das Standardnetzwerk aus.
Wenn Sie eine Verbindung für den privaten Zugriff haben, fahren Sie mit dem nächsten Schritt fort. Andernfalls klicken Sie auf Verbindung einrichten und führen Sie die folgenden Schritte aus:
- Klicken Sie unter IP-Bereich zuweisen auf Automatisch zugewiesenen IP-Bereich verwenden.
- Klicken Sie auf Weiter und dann auf Verbindung erstellen.
Wählen Sie unter Zonenverfügbarkeit die Option Einzelne Zone aus.
Wählen Sie den Maschinentyp
2 vCPU,16 GB
aus.Wählen Sie unter Verbindung die Option Öffentliche IP-Adresse aktivieren aus.
Klicken Sie auf Cluster erstellen. Es kann einige Minuten dauern, bis AlloyDB den Cluster erstellt und auf der Seite Übersicht des primären Clusters anzeigt.
Maximieren Sie unter Instanzen im Cluster den Bereich Verbindung. Notieren Sie sich den Verbindungs-URI, da Sie ihn in dieser Anleitung verwenden.
Der Verbindungs-URI hat das Format
projects/<var>PROJECT_ID</var>/locations/<var>REGION_ID</var>/clusters/my-cluster/instances/my-cluster-primary
.
Vertex AI-Nutzerberechtigung für AlloyDB-Dienst-Agent erteilen
Damit AlloyDB Vertex AI-Text-Embedding-Modelle verwenden kann, müssen Sie dem AlloyDB-Dienst-Agent für das Projekt, in dem sich Ihr Cluster und Ihre Instanz befinden, Vertex AI-Nutzerberechtigungen hinzufügen.
Weitere Informationen zum Hinzufügen der Berechtigungen finden Sie unter AlloyDB-Dienst-Agent Vertex AI-Nutzerberechtigung gewähren.
Verbindung zur Datenbank über einen Webbrowser herstellen
Rufen Sie in der Google Cloud Console die Seite Cluster auf.
Klicken Sie in der Spalte Ressourcenname auf den Namen Ihres Clusters,
my-cluster
.Klicken Sie im Navigationsbereich auf AlloyDB Studio.
Führen Sie auf der Seite In AlloyDB Studio anmelden die folgenden Schritte aus:
- Wählen Sie die Datenbank
postgres
aus. - Wählen Sie den Nutzer
postgres
aus. - Geben Sie das Passwort ein, das Sie unter Cluster und primäre Instanz erstellen erstellt haben.
- Klicken Sie auf Authentifizieren. Im Bereich Explorer wird eine Liste der Objekte in der
postgres
-Datenbank angezeigt.
- Wählen Sie die Datenbank
Öffnen Sie einen neuen Tab, indem Sie auf + Neuer SQL-Editor-Tab oder + Neuer Tab klicken.
Erforderliche Erweiterungen installieren
Führen Sie die folgende Abfrage aus, um die Erweiterungen vector
, alloydb_scann
und google_ml_integration
zu installieren:
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
Produkt- und Produktinventardaten einfügen und eine grundlegende Vektorsuche ausführen
Führen Sie die folgende Anweisung aus, um eine
product
-Tabelle zu erstellen, die Folgendes tut:- Hier werden grundlegende Produktinformationen gespeichert.
- Enthält eine
embedding
-Vektorspalte, in der ein Einbettungsvektor für die Produktbeschreibung jedes Produkts berechnet und gespeichert wird.
CREATE TABLE product ( id INT PRIMARY KEY, name VARCHAR(255) NOT NULL, description TEXT, category VARCHAR(255), color VARCHAR(255), embedding vector(768) GENERATED ALWAYS AS (embedding('text-embedding-005', description)) STORED );
Führen Sie die folgende Abfrage aus, um eine
product_inventory
-Tabelle zu erstellen, in der Informationen zum verfügbaren Inventar und den entsprechenden Preisen gespeichert werden. In dieser Anleitung werden die Tabellenproduct_inventory
undproduct
verwendet, um komplexe Vektorsuchanfragen auszuführen.CREATE TABLE product_inventory ( id INT PRIMARY KEY, product_id INT REFERENCES product(id), inventory INT, price DECIMAL(10,2) );
Führen Sie die folgende Abfrage aus, um Produktdaten in die Tabelle
product
einzufügen:INSERT INTO product (id, name, description,category, color) VALUES (1, 'Stuffed Elephant', 'Soft plush elephant with floppy ears.', 'Plush Toys', 'Gray'), (2, 'Remote Control Airplane', 'Easy-to-fly remote control airplane.', 'Vehicles', 'Red'), (3, 'Wooden Train Set', 'Classic wooden train set with tracks and trains.', 'Vehicles', 'Multicolor'), (4, 'Kids Tool Set', 'Toy tool set with realistic tools.', 'Pretend Play', 'Multicolor'), (5, 'Play Food Set', 'Set of realistic play food items.', 'Pretend Play', 'Multicolor'), (6, 'Magnetic Tiles', 'Set of colorful magnetic tiles for building.', 'Construction Toys', 'Multicolor'), (7, 'Kids Microscope', 'Microscope for kids with different magnification levels.', 'Educational Toys', 'White'), (8, 'Telescope for Kids', 'Telescope designed for kids to explore the night sky.', 'Educational Toys', 'Blue'), (9, 'Coding Robot', 'Robot that teaches kids basic coding concepts.', 'Educational Toys', 'White'), (10, 'Kids Camera', 'Durable camera for kids to take pictures and videos.', 'Electronics', 'Pink'), (11, 'Walkie Talkies', 'Set of walkie talkies for kids to communicate.', 'Electronics', 'Blue'), (12, 'Karaoke Machine', 'Karaoke machine with built-in microphone and speaker.', 'Electronics', 'Black'), (13, 'Kids Drum Set', 'Drum set designed for kids with adjustable height.', 'Musical Instruments', 'Blue'), (14, 'Kids Guitar', 'Acoustic guitar for kids with nylon strings.', 'Musical Instruments', 'Brown'), (15, 'Kids Keyboard', 'Electronic keyboard with different instrument sounds.', 'Musical Instruments', 'Black'), (16, 'Art Easel', 'Double-sided art easel with chalkboard and whiteboard.', 'Arts & Crafts', 'White'), (17, 'Finger Paints', 'Set of non-toxic finger paints for kids.', 'Arts & Crafts', 'Multicolor'), (18, 'Modeling Clay', 'Set of colorful modeling clay.', 'Arts & Crafts', 'Multicolor'), (19, 'Watercolor Paint Set', 'Watercolor paint set with brushes and palette.', 'Arts & Crafts', 'Multicolor'), (20, 'Beading Kit', 'Kit for making bracelets and necklaces with beads.', 'Arts & Crafts', 'Multicolor'), (21, '3D Puzzle', '3D puzzle of a famous landmark.', 'Puzzles', 'Multicolor'), (22, 'Race Car Track Set', 'Race car track set with cars and accessories.', 'Vehicles', 'Multicolor'), (23, 'RC Monster Truck', 'Remote control monster truck with oversized tires.', 'Vehicles', 'Green'), (24, 'Train Track Expansion Set', 'Expansion set for wooden train tracks.', 'Vehicles', 'Multicolor');
Optional: Führen Sie die folgende Abfrage aus, um zu prüfen, ob die Daten in die Tabelle
product
eingefügt wurden:SELECT * FROM product;
Führen Sie die folgende Abfrage aus, um Inventardaten in die Tabelle
product_inventory
einzufügen:INSERT INTO product_inventory (id, product_id, inventory, price) VALUES (1, 1, 9, 13.09), (2, 2, 40, 79.82), (3, 3, 34, 52.49), (4, 4, 9, 12.03), (5, 5, 36, 71.29), (6, 6, 10, 51.49), (7, 7, 7, 37.35), (8, 8, 6, 10.87), (9, 9, 7, 42.47), (10, 10, 3, 24.35), (11, 11, 4, 10.20), (12, 12, 47, 74.57), (13, 13, 5, 28.54), (14, 14, 11, 25.58), (15, 15, 21, 69.84), (16, 16, 6, 47.73), (17, 17, 26, 81.00), (18, 18, 11, 91.60), (19, 19, 8, 78.53), (20, 20, 43, 84.33), (21, 21, 46, 90.01), (22, 22, 6, 49.82), (23, 23, 37, 50.20), (24, 24, 27, 99.27);
Führen Sie die folgende Vektorsuchabfrage aus, um Produkte zu finden, die dem Wort
music
ähneln. Das bedeutet, dass auch wenn das Wortmusic
in der Produktbeschreibung nicht explizit erwähnt wird, Produkte angezeigt werden, die für die Suchanfrage relevant sind:SELECT * FROM product ORDER BY embedding <=> embedding('text-embedding-005', 'music')::vector LIMIT 3;
Das Ergebnis der Abfrage sieht dann so aus:
Bei einer einfachen Vektorsuche ohne Index wird die Suche nach dem genauen nächsten Nachbarn (KNN) verwendet, was eine effiziente Abrufleistung ermöglicht. Bei einer großen Anzahl von Daten kann die Verwendung von KNN die Leistung beeinträchtigen. Für eine bessere Abfrageleistung empfehlen wir den ScaNN-Index für die Suche nach ungefähren nächsten Nachbarn (Approximate Nearest Neighbor, ANN). Dieser bietet eine hohe Trefferquote bei niedrigen Latenzen.
Ohne Index wird in AlloyDB standardmäßig die exakte Suche nach dem nächsten Nachbarn (KNN) verwendet.
Weitere Informationen zur Verwendung von ScaNN im großen Maßstab finden Sie unter Erste Schritte mit Vektoreinbettungen mit AlloyDB AI.
ScaNN-Index für die Tabelle „products“ erstellen
Führen Sie die folgende Abfrage aus, um einen product_index
-ScaNN-Index für die Tabelle product
zu erstellen:
CREATE INDEX product_index ON product
USING scann (embedding cosine)
WITH (num_leaves=5);
Der Parameter num_leaves
gibt die Anzahl der Blattknoten an, mit denen der Index erstellt wird. Weitere Informationen zur Optimierung dieses Parameters finden Sie unter Leistung von Vektorabfragen optimieren.
Vektorsuche ausführen
Führen Sie die folgende Vektorsuchabfrage aus, um Produkte zu finden, die der Suchanfrage in natürlicher Sprache music
ähneln. Auch wenn das Wort music
nicht in der Produktbeschreibung enthalten ist, werden im Ergebnis Produkte angezeigt, die für die Suchanfrage relevant sind:
SET LOCAL scann.num_leaves_to_search = 2;
SELECT * FROM product
ORDER BY embedding <=> embedding('text-embedding-005', 'music')::vector
LIMIT 3;
Die Abfrageergebnisse sehen in etwa so aus:
Mit dem Abfrageparameter scann.num_leaves_to_search
wird die Anzahl der Blattknoten gesteuert, die bei einer Ähnlichkeitssuche durchsucht werden. Mit den Parameterwerten num_leaves
und scann.num_leaves_to_search
lässt sich ein Gleichgewicht zwischen Leistung und Recall erzielen.
Vektorsuche mit einem Filter und einem Join durchführen
Sie können gefilterte Vektorsuchanfragen auch dann effizient ausführen, wenn Sie den ScaNN-Index verwenden. Führen Sie die folgende komplexe Vektorsuchabfrage aus, die auch bei Filtern relevante Ergebnisse zurückgibt, die die Abfragebedingungen erfüllen:
SET LOCAL scann.num_leaves_to_search = 2;
SELECT * FROM product p
JOIN product_inventory pi ON p.id = pi.product_id
WHERE pi.price < 80.00
ORDER BY embedding <=> embedding('text-embedding-005', 'music')::vector
LIMIT 3;
Bereinigen
Rufen Sie in der Google Cloud Console die Seite Cluster auf.
Klicken Sie in der Spalte Ressourcenname auf den Namen Ihres Clusters,
my-cluster
.Klicken Sie auf delete Cluster löschen.
Geben Sie unter Cluster „my-cluster“ löschen die Zahl
my-cluster
ein, um zu bestätigen, dass Sie den Cluster löschen möchten.Klicken Sie auf Löschen.
Wenn Sie beim Erstellen eines Clusters eine private Verbindung erstellt haben, rufen Sie in der Google Cloud Console die Seite „Networking“ auf und klicken Sie auf VPC-Netzwerk löschen.
Nächste Schritte
- Erste Schritte mit Vektoreinbettungen mit AlloyDB AI
- Weitere Informationen zum Erstellen generativer KI-Anwendungen mit AlloyDB AI
- Erstellen Sie einen ScaNN-Index.
- Stimmen Sie Ihre ScaNN-Indexe ab.
- Informationen zum Erstellen eines intelligenten Shopping-Assistenten mit AlloyDB, pgvector und der Modellendpunktverwaltung