1. Einführung
In diesem Codelab erfahren Sie, wie Sie die KI-Integration von Cloud SQL for PostgreSQL nutzen, indem Sie die Vektorsuche mit Einbettungen der Gemini Enterprise Agent Platform kombinieren.

Vorbereitung
- Grundlegende Kenntnisse von Google Cloud und der Google Cloud Console
- Grundkenntnisse der Befehlszeilenschnittstelle und Cloud Shell
Aufgaben
- Cloud SQL for PostgreSQL-Instanz bereitstellen
- Datenbank erstellen und Cloud SQL AI-Integration aktivieren
- Daten in die Datenbank laden
- Cloud SQL Studio verwenden
- Einbettungen mit der Gemini Enterprise Agent Platform in Cloud SQL generieren
- Agent Platform Studio verwenden
- Suchergebnisse mit einem generativen Modell der Gemini Enterprise Agent Platform anreichern
- Abfrageleistung mit einem HNSW-Vektorindex verbessern
Voraussetzungen
- Ein Google Cloud-Konto und ein Google Cloud-Projekt
- Ein Webbrowser wie Chrome
2. Einrichtung und Anforderungen
Projekt einrichten
- Melden Sie sich in der Google Cloud Console an. Wenn Sie noch kein Google-Konto (Gmail oder Google Workspace) haben, müssen Sie ein Google-Konto erstellen.
Verwenden Sie stattdessen ein privates Konto.
- Erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie ein neues Projekt in der Google Cloud Console erstellen möchten, klicken Sie in der Symbolleiste auf Projekt auswählen.

Klicken Sie im Dialogfeld Projekt auswählen auf Neues Projekt.

Geben Sie im Dialogfeld einen Projektnamen ein und wählen Sie den Speicherort aus.

- Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Der Projektname wird von Google APIs nicht verwendet und kann jederzeit geändert werden.
- Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich. Sie kann also nicht mehr geändert werden, nachdem sie festgelegt wurde. In der Google Cloud Console wird automatisch eine eindeutige ID generiert, die Sie aber anpassen können. Wenn Ihnen die generierte ID nicht gefällt, können Sie eine weitere zufällige ID generieren oder eine eigene ID angeben, um die Verfügbarkeit zu prüfen. In den meisten Codelabs verweisen Sie auf Ihre Projekt-ID, die in der Regel mit dem Platzhalter
angegeben wird. - Ein dritter Wert, die Projektnummer, wird von einigen APIs verwendet. Weitere Informationen zu diesen drei Werten finden Sie in der Dokumentation Projekte erstellen und verwalten.
Abrechnung aktivieren
Privates Rechnungskonto einrichten
Wenn Sie die Abrechnung mit Google Cloud-Guthaben einrichten, können Sie diesen Schritt überspringen.
Wenn Sie ein privates Rechnungskonto einrichten möchten, aktivieren Sie die Abrechnung in der Google Cloud Billing Console.
Hinweise:
- Die für dieses Lab anfallenden Kosten für Google Cloud-Ressourcen betragen weniger als 5 $.
- Folgen Sie der Anleitung am Ende dieses Labs, um Ressourcen zu löschen und weitere Kosten zu vermeiden.
- Neue Nutzer haben Anspruch auf den kostenlosen Testzeitraum mit einem Guthaben von 300 $.
Cloud Shell starten
Sie können Google Cloud zwar per Fernzugriff von Ihrem Computer aus bedienen, in diesem Codelab verwenden Sie jedoch Google Cloud Shell, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.
Klicken Sie in der Symbolleiste der Google Cloud Console auf Cloud Shell aktivieren:

Alternativ können Sie in der Google Cloud Console die Tasten „g“ und dann „s“ drücken oder Cloud Shell öffnen.
Die Bereitstellung und Verbindung mit der Umgebung dauert nur wenige Augenblicke. Wenn sie fertig ist, sollten Sie das verbundene Terminal sehen:

Auf dieser virtuellen Maschine sind alle erforderlichen Entwicklungstools installiert. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung verbessert. Alle Aufgaben in diesem Codelab können in einem Browser ausgeführt werden.
3. APIs aktivieren
Wenn Sie Cloud SQL, Compute Engine, Service Networking und Gemini Enterprise Agent Platform verwenden möchten, aktivieren Sie die entsprechenden APIs in Ihrem Google Cloud-Projekt.
Prüfen Sie im Cloud Shell-Terminal, ob Ihre Projekt-ID festgelegt ist:
gcloud config set project <PROJECT_ID>
Legen Sie die Umgebungsvariable PROJECT_ID fest:
PROJECT_ID=$(gcloud config get-value project)
Aktivieren Sie alle erforderlichen Dienste:
gcloud services enable sqladmin.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
aiplatform.googleapis.com
Erwartete Ausgabe:
student@cloudshell:~ (test-project-001-402417)$ gcloud config set project test-project-001-402417
Updated property [core/project].
student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-14650]
student@cloudshell:~ (test-project-001-402417)$
student@cloudshell:~ (test-project-001-402417)$ gcloud services enable sqladmin.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
aiplatform.googleapis.com
Operation "operations/acat.p2-4470404856-1f44ebd8-894e-4356-bea7-b84165a57442" finished successfully.
Informationen zu den einzelnen aktivierten APIs finden Sie in der Dokumentation.
4. Cloud SQL-Instanz erstellen
Erstellen Sie eine Cloud SQL-Instanz mit Gemini Enterprise Agent Platform-Datenbankintegration.
Datenbankpasswort erstellen
Legen Sie ein Passwort für den Standarddatenbanknutzer fest. Sie können ein eigenes Passwort definieren oder eine Zufallsfunktion verwenden, um eines zu generieren:
export CLOUDSQL_PASSWORD=$(openssl rand -hex 16)
Generierten Passwortwert anzeigen:
echo $CLOUDSQL_PASSWORD
Notieren Sie sich das generierte Passwort, um es später zu verwenden.
Cloud SQL for PostgreSQL-Instanz erstellen
Cloud SQL-Instanzen können mit verschiedenen Methoden erstellt werden, z. B. mit der Google Cloud Console, Terraform oder der Google Cloud CLI (gcloud). In diesem Codelab verwenden Sie gcloud. Informationen zum Erstellen einer Instanz mit anderen Tools finden Sie in der Dokumentation unter Instanzen erstellen.
Führen Sie in Cloud Shell den folgenden Befehl aus, um die Instanz zu erstellen:
gcloud sql instances create my-cloudsql-instance \
--database-version=POSTGRES_18 \
--tier=db-custom-1-3840 \
--region=us-central1 \
--edition=ENTERPRISE \
--enable-google-ml-integration \
--database-flags cloudsql.enable_google_ml_integration=on
Nachdem Sie die Instanz erstellt haben, legen Sie ein Passwort für den Standardnutzer (postgres) fest und prüfen Sie, ob Sie eine Verbindung herstellen können:
gcloud sql users set-password postgres \
--instance=my-cloudsql-instance \
--password=$CLOUDSQL_PASSWORD
Stellen Sie mit gcloud sql connect eine Verbindung zur Instanz her. Geben Sie bei Aufforderung das Passwort ein:
gcloud sql connect my-cloudsql-instance --user=postgres
Beenden Sie die psql-Sitzung, indem Sie Strg + D drücken oder exit eingeben:
exit
Integration der Gemini Enterprise Agent Platform aktivieren
Weisen Sie dem Cloud SQL-Dienstkonto die erforderliche IAM-Rolle zu, um die Integration der Gemini Enterprise Agent Platform zu ermöglichen.
Rufen Sie die E‑Mail-Adresse des Cloud SQL-Dienstkontos ab und exportieren Sie sie als Umgebungsvariable:
SERVICE_ACCOUNT_EMAIL=$(gcloud sql instances describe my-cloudsql-instance --format="value(serviceAccountEmailAddress)")
echo $SERVICE_ACCOUNT_EMAIL
Weisen Sie dem Cloud SQL-Dienstkonto die Rolle roles/aiplatform.user zu:
PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \
--role="roles/aiplatform.user"
Weitere Informationen zum Erstellen und Konfigurieren von Instanzen finden Sie unter Cloud SQL in die Gemini Enterprise Agent Platform einbinden.
5. Datenbank vorbereiten
Erstellen Sie eine Datenbank und aktivieren Sie die Vektorunterstützung.
Datenbank erstellen
Erstellen Sie eine Datenbank mit dem Namen quickstart_db. Sie können Datenbanken mit Datenbankclients wie psql, der Google Cloud CLI oder Cloud SQL Studio erstellen. Verwenden Sie in diesem Schritt gcloud.
Führen Sie in Cloud Shell den folgenden Befehl aus, um die Datenbank zu erstellen:
gcloud sql databases create quickstart_db --instance=my-cloudsql-instance
Erweiterungen aktivieren
Wenn Sie mit der Gemini Enterprise Agent Platform und Vektoren arbeiten möchten, müssen Sie zwei Erweiterungen in der quickstart_db-Datenbank aktivieren: google_ml_integration und vector.
Stellen Sie in Cloud Shell eine Verbindung zur Datenbank her:
gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres
Geben Sie bei entsprechender Aufforderung Ihr Datenbankpasswort ein.
Führen Sie in der SQL-Sitzung die folgenden Befehle aus:
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector CASCADE;
Beenden Sie die SQL-Sitzung:
exit;
6. Daten laden
Erstellen Sie Tabellen in der Datenbank und laden Sie Daten mit fiktiven Dataset-Dateien des Cymbal Store, die in einem öffentlichen Cloud Storage-Bucket im CSV-Format gespeichert sind.
Erstellen Sie zuerst die erforderlichen Schemaobjekte. Führen Sie gcloud sql connect und gcloud storage aus, um das Schema herunterzuladen und zu importieren:
Führen Sie in Cloud Shell den folgenden Befehl aus. Geben Sie bei Aufforderung das für die Instanz erstellte Passwort ein:
gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql | gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres
Mit diesem Befehl wird eine Verbindung zur Datenbank hergestellt und der heruntergeladene SQL-Code ausgeführt, um Tabellen, Indexe und Sequenzen zu erstellen.
Laden Sie als Nächstes die CSV-Datendateien aus Cloud Storage herunter:
gcloud storage cp gs://cloud-training/gcc/gcc-tech-004/cymbal_products.csv .
gcloud storage cp gs://cloud-training/gcc/gcc-tech-004/cymbal_inventory.csv .
gcloud storage cp gs://cloud-training/gcc/gcc-tech-004/cymbal_stores.csv .
Stellen Sie eine Verbindung zur Datenbank her:
gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres
Daten aus den CSV-Dateien importieren:
\copy cymbal_products from 'cymbal_products.csv' csv header
\copy cymbal_inventory from 'cymbal_inventory.csv' csv header
\copy cymbal_stores from 'cymbal_stores.csv' csv header
Wenn Sie Ihre eigenen Daten verwenden und die CSV-Dateien mit dem Cloud SQL-Importtool in der Google Cloud Console kompatibel sind, können Sie die Console anstelle der Befehlszeile verwenden.
7. Einbettungen erstellen
Erstellen Sie mit dem text-embedding-005-Modell aus der Gemini Enterprise Agent Platform Einbettungen für die Produktbeschreibungen und speichern Sie sie als Vektordaten.
Wenn die Verbindung zu Ihrer Sitzung unterbrochen wurde, stellen Sie eine Verbindung zur Datenbank her:
gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres
Erstellen Sie in der Tabelle cymbal_products mithilfe der Funktion embedding eine generierte Spalte mit dem Namen embedding. Mit diesem Befehl wird eine gespeicherte generierte Spalte erstellt, die die aus der Spalte product_description generierten Vektoreinbettungen für alle Zeilen in der Tabelle enthält. Das Modell wird als erster Parameter und die Quelltextspalte als zweiter Parameter angegeben:
ALTER TABLE cymbal_products ADD COLUMN embedding vector(768) GENERATED ALWAYS AS (google_ml.embedding('text-embedding-005', product_description)) STORED;
Bei 900 bis 1.000 Zeilen dauert dieser Vorgang in der Regel 1 bis 5 Minuten.
Wenn Sie eine neue Zeile in die Tabelle einfügen oder product_description in einer vorhandenen Zeile aktualisieren, wird die Spalte embedding automatisch aktualisiert.
8. Ähnlichkeitssuche ausführen
Führen Sie eine Ähnlichkeitssuche durch, indem Sie die für Produktbeschreibungen berechneten Vektoreinbettungen mit der Einbettung für eine Suchanfrage vergleichen.
Sie können SQL-Abfragen über die Befehlszeile mit gcloud sql connect oder über Cloud SQL Studio ausführen. Cloud SQL Studio bietet eine bequemere Möglichkeit, lange SQL-Anweisungen mit mehreren Ausgaberow zu bearbeiten und auszuführen.
Cloud SQL Studio starten
- Rufen Sie in der Google Cloud Console Cloud SQL-Instanzen auf und klicken Sie auf
my-cloudsql-instance.

- Klicken Sie im Navigationsmenü auf Cloud SQL Studio.

- Geben Sie im Authentifizierungsdialogfeld den Datenbanknamen und die Anmeldedaten ein:
- Datenbank:
quickstart_db - Nutzer:
postgres - Passwort:
- Datenbank:
- Klicken Sie auf Authentifizieren.

- Klicken Sie auf den Tab Editor, um den SQL-Editor zu öffnen.

Abfrage ausführen
Führen Sie eine Anfrage aus, um die zehn Produkte abzurufen, die für die Kundenanfrage Welche Obstbäume wachsen hier gut? am relevantesten sind.
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
(cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) as distance
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
distance ASC
LIMIT 10;
Geben Sie die Abfrage in Cloud SQL Studio ein und klicken Sie auf Ausführen (oder führen Sie die Abfrage in Ihrer psql-Sitzung aus):

Die Abfrage gibt übereinstimmende Produkte zurück, die nach Kosinus-Distanz sortiert sind:
product_name | description | sale_price | zip_code | distance -------------------------+----------------------------------------------------------------------------------+------------+----------+--------------------- Cherry Tree | This is a beautiful cherry tree that will produce delicious cherries. It is an d | 75.00 | 93230 | 0.43922018972266397 Meyer Lemon Tree | Meyer Lemon trees are California's favorite lemon tree! Grow your own lemons by | 34 | 93230 | 0.4685112926118228 Toyon | This is a beautiful toyon tree that can grow to be over 20 feet tall. It is an e | 10.00 | 93230 | 0.4835677149651668 California Lilac | This is a beautiful lilac tree that can grow to be over 10 feet tall. It is an d | 5.00 | 93230 | 0.4947204525907498 California Peppertree | This is a beautiful peppertree that can grow to be over 30 feet tall. It is an e | 25.00 | 93230 | 0.5054166905547247 California Black Walnut | This is a beautiful walnut tree that can grow to be over 80 feet tall. It is a d | 100.00 | 93230 | 0.5084219510932597 California Sycamore | This is a beautiful sycamore tree that can grow to be over 100 feet tall. It is | 300.00 | 93230 | 0.5140519790508755 Coast Live Oak | This is a beautiful oak tree that can grow to be over 100 feet tall. It is an ev | 500.00 | 93230 | 0.5143126438081371 Fremont Cottonwood | This is a beautiful cottonwood tree that can grow to be over 100 feet tall. It i | 200.00 | 93230 | 0.5174774727252058 Madrone | This is a beautiful madrona tree that can grow to be over 80 feet tall. It is an | 50.00 | 93230 | 0.5227400803389093 (10 rows)
9. LLM-Antwort mit abgerufenen Daten verbessern
Die Antwort der generativen KI auf eine Clientanwendung verbessern, indem Sie Abfrageergebnisse als fundierten Kontext in einem Prompt an ein Foundation-Language Model der Gemini Enterprise Agent Platform übergeben.
Gehen Sie dazu wie folgt vor:
- JSON-Nutzlast aus dem Vektorsuchergebnis in Cloud SQL generieren
- Testen Sie den Prompt in Agent Platform Studio.
- Führen Sie den End-to-End-Prompt direkt über SQL mit der
google_ml-Integration aus.
Ausgabe im JSON-Format generieren
Ändern Sie die Abfrage, um das Ergebnis als JSON zu formatieren und eine Zeile zurückzugeben:
WITH trees as (
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
cp.uniq_id as product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;
Erwartete JSON-Ausgabe:
[{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}]
Prompt in Agent Platform Studio ausführen
Stellen Sie das generierte JSON als Kontext in einem Prompt für ein generatives Modell in Agent Platform Studio bereit.
- Öffnen Sie in der Google Cloud Console Agent Platform Studio.

- Geben Sie den folgenden Prompt in Agent Platform Studio ein:

You are a friendly advisor helping to find a product based on the customer's needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","description":"some description","sale_price":10,"zip_code": 10234, "product_id": "02056727942aeb714dc9a2313654e1b0"}
Here is the list of products:
<JSON_OUTPUT>
The customer asked "What tree is growing the best here?"
You should give information about the product, price and some supplemental information.
Do not ask any additional questions and assume location based on the zip code provided in the list of products.
Ersetzen Sie durch die JSON-Antwort auf Ihre Anfrage:
You are a friendly advisor helping to find a product based on the customer's needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","description":"some description","sale_price":10,"zip_code": 10234, "product_id": "02056727942aeb714dc9a2313654e1b0"}
Here is the list of products:
[{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}]
The customer asked "What tree is growing the best here?"
You should give information about the product, price and some supplemental information.
Do not ask any additional questions and assume location based on the zip code provided in the list of products.

- Führen Sie den Prompt aus.

Die Antwort enthält den Preis, die Beschreibung und zusätzliche Informationen, die das Modell aus externen Quellen auf Grundlage von Informationen zum Baum und zum Standort abruft.
Prompt in psql ausführen
Sie können die Cloud SQL-KI-Integration auch mit der Gemini Enterprise Agent Platform verwenden, um Antworten von einem generativen Modell direkt in SQL zu erhalten. Registrieren Sie zuerst das Modell.
- Aktualisieren Sie die Erweiterung bei Bedarf auf Version 1.4.3 oder höher. Stellen Sie eine Verbindung zu
quickstart_dbher und führen Sie Folgendes aus:
SELECT extversion from pg_extension where extname='google_ml_integration';
Wenn die zurückgegebene Version niedriger als 1.4.3 ist, führen Sie Folgendes aus:
ALTER EXTENSION google_ml_integration UPDATE TO '1.4.3';
- Prüfen Sie das Datenbank-Flag
google_ml_integration.enable_model_support:
SHOW google_ml_integration.enable_model_support;
Wenn das Flag off ist, aktualisieren Sie das Datenbank-Flag in Cloud Shell:
gcloud sql instances patch my-cloudsql-instance \
--database-flags google_ml_integration.enable_model_support=on,cloudsql.enable_google_ml_integration=on
Dieser Vorgang dauert 1 bis 3 Minuten. Prüfen Sie die Einstellung noch einmal:
SHOW google_ml_integration.enable_model_support;
- Registrieren Sie das Modell
gemini-3.5-flashzum Generieren von Antworten. Ersetzen Siedurch Ihre Projekt-ID:
CALL
google_ml.create_model(
model_id => 'gemini-3.5-flash',
model_request_url => 'https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-3.6-flash:generateContent',
model_provider => 'google',
model_auth_type => 'cloudsql_service_agent_iam');
Registrierte Modelle prüfen:
SELECT model_id, model_type FROM google_ml.model_info_view WHERE model_id='gemini-3.5-flash';
- Führen Sie die vollständige SQL-Abfrage aus, um Vektorsuchergebnisse abzurufen und direkt an
gemini-3.5-flashzu übergeben:
WITH trees AS (
SELECT
cp.product_name,
cp.product_description AS description,
cp.sale_price,
cs.zip_code,
cp.uniq_id AS product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci ON
ci.uniq_id = cp.uniq_id
JOIN cymbal_stores cs ON
cs.store_id = ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(cp.embedding <=> embedding('text-embedding-005',
'What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1),
prompt AS (
SELECT
'You are a friendly advisor helping to find a product based on the customer''s needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","product_description":"some description","sale_price":10}
Here is the list of products:' || json_agg(trees) || 'The customer asked "What kind of fruit trees grow well here?"
You should give information about the product, price and some supplemental information' AS prompt_text
FROM
trees),
response AS (
SELECT
google_ml.predict_row( model_id =>'gemini-3.5-flash',
request_body => json_build_object('contents',
json_build_object('role',
'user',
'parts',
json_build_object('text',
prompt_text))))->'candidates'->0->'content'->'parts'->0->'text' AS resp
FROM
prompt)
SELECT
REPLACE(resp::text, '\n', CHR(10))
FROM
response;
Erwartete Ausgabe:
"Hello there! If you're looking for a wonderful fruit tree to plant, I have a fantastic option for you: ### **Cherry Tree** * **Price:** $75.00 * **Product ID:** `d536e9e823296a2eba198e52dd23e712` --- ### **Why it's a great choice:** * **Fruit & Shade:** Not only will it produce delicious, sweet cherries, but it also grows into a beautiful 15-foot deciduous tree that provides excellent shade and privacy for your yard. * **Seasonal Beauty:** Its leaves are a lovely dark green throughout the summer and transition into a striking red during the fall. * **Ideal Growing Conditions:** Cherry trees thrive best in cool, moist climates with sandy soil and are suitable for **USDA hardiness zones 4–9**. If your local climate matches these conditions, this Cherry Tree would make a beautiful and tasty addition to your garden! Let me know if you'd like more details or help placing an order."
10. Index für die nächsten Nachbarn erstellen
Bei großen Datasets mit Millionen von Vektoren kann die Vektorsuche erhebliche Rechenressourcen erfordern. Um die Abfrageleistung zu verbessern, erstellen Sie einen Index für die Vektoreinbettungen.
HNSW-Index erstellen
HNSW (Hierarchical Navigable Small World) ist ein auf Grafiken basierender Vektorindex.
Wenn Sie einen HNSW-Index für die Spalte embedding erstellen möchten, geben Sie die Distanzfunktion (vector_cosine_ops) und optionale Parameter wie m und ef_construction an. Weitere Informationen finden Sie unter Mit Vektoreinbettungen arbeiten.
CREATE INDEX cymbal_products_embeddings_hnsw ON cymbal_products
USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 64);
Erwartete Ausgabe:
quickstart_db=> CREATE INDEX cymbal_products_embeddings_hnsw ON cymbal_products USING hnsw (embedding vector_cosine_ops) WITH (m = 16, ef_construction = 64); CREATE INDEX quickstart_db=>
Abfrageleistung vergleichen
Führen Sie die Vektorsuchabfrage mit EXPLAIN (ANALYZE) aus, um zu prüfen, ob der Abfrageplaner den Index verwendet:
EXPLAIN (ANALYZE)
WITH trees as (
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
cp.uniq_id as product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;
Erwartete Ausgabe:
Aggregate (cost=779.12..779.13 rows=1 width=32) (actual time=1.066..1.069 rows=1 loops=1)
-> Subquery Scan on trees (cost=769.05..779.12 rows=1 width=142) (actual time=1.038..1.041 rows=1 loops=1)
-> Limit (cost=769.05..779.11 rows=1 width=158) (actual time=1.022..1.024 rows=1 loops=1)
-> Nested Loop (cost=769.05..9339.69 rows=852 width=158) (actual time=1.020..1.021 rows=1 loops=1)
-> Nested Loop (cost=768.77..9316.48 rows=852 width=945) (actual time=0.858..0.859 rows=1 loops=1)
-> Index Scan using cymbal_products_embeddings_hnsw on cymbal_products cp (cost=768.34..2572.47 rows=941 width=941) (actual time=0.532..0.539 rows=3 loops=1)
...
Planning Time: 112.398 ms
Execution Time: 1.221 ms
Im Ausführungsplan wird Index Scan using cymbal_products_embeddings_hnsw angezeigt.
Führen Sie die Abfrage ohne EXPLAIN aus:
WITH trees as (
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
cp.uniq_id as product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;
Erwartete Ausgabe:
[{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}]
Weitere Informationen und Beispiele mit LangChain und Vektorindexen finden Sie in der Dokumentation Cloud SQL AI – Übersicht.
11. Ressourcen bereinigen
Löschen Sie die Cloud SQL-Instanz, wenn Sie das Codelab abgeschlossen haben.
Legen Sie in Cloud Shell das Projekt und die Umgebungsvariablen fest, wenn die Verbindung zu Ihrer Sitzung getrennt wurde:
export INSTANCE_NAME=my-cloudsql-instance
export PROJECT_ID=$(gcloud config get-value project)
Löschen Sie die Instanz:
gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID
Erwartete Ausgabe:
student@cloudshell:~$ gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID All of the instance data will be lost when the instance is deleted. Do you want to continue (Y/n)? y Deleting Cloud SQL instance...done. Deleted [https://sandbox.googleapis.com/v1beta4/projects/test-project-001-402417/instances/my-cloudsql-instance].
12. Glückwunsch
Glückwunsch! Sie haben das Codelab abgeschlossen.
Dieses Lab ist Teil des Lernpfads „Produktionsreife KI mit Google Cloud“.
- Gesamten Lehrplan ansehen
- Teile deinen Fortschritt mit dem Hashtag
#ProductionReadyAI.
Zusammenfassung
Sie haben Folgendes gelernt:
- Cloud SQL for PostgreSQL-Instanz bereitstellen
- Datenbank erstellen und Cloud SQL AI-Integration aktivieren
- Daten in die Datenbank laden
- Cloud SQL Studio verwenden
- Ein Gemini Enterprise Agent Platform-Embedding-Modell in Cloud SQL verwenden
- Agent Platform Studio verwenden
- Suchergebnisse mit einem generativen Modell der Gemini Enterprise Agent Platform anreichern
- Abfrageleistung mit einem Vektorindex verbessern
Probieren Sie das Codelab zu Vektoreinbettungen in AlloyDB AI mit einem ScaNN-Index anstelle von HNSW aus.