Auf dieser Seite erfahren Sie, wie Sie mit Cloud SQL for PostgreSQL die folgenden Aktionen ausführen:
Vektoreinbettungen basierend auf einem Modell generieren und speichern
Indexieren und abfragen Sie Einbettungen mit der Erweiterung
pgvector
.
Weitere Informationen finden Sie unter Generative AI-Anwendungen mit Cloud SQL erstellen.
In Cloud SQL können Sie ein von Vertex AI gehostetes Einbettungsmodell verwenden, um einen Textstring in eine Einbettung umzuwandeln. Dabei handelt es sich um die Darstellung der semantischen Bedeutung des jeweiligen Textes als numerischer Vektor.
In Cloud SQL werden Einbettungen als Arrays von real
-Werten implementiert. So können Sie generierte Einbettungen als Eingaben für pgvector
-Erweiterungsfunktionen verwenden.
Hinweise
Einige Anforderungen unterscheiden sich je nachdem, ob Sie mit Cloud SQL Einbettungen generieren möchten oder nur mit Einbettungen arbeiten müssen, die aus einer anderen Quelle in Ihrer Datenbank gespeichert sind.
Regionale Einschränkungen
Wenn Sie Vertex AI-Einbettungen mit Cloud SQL generieren möchten, muss sich Ihre Instanz in einer Region befinden, in der generative AI foundational models are supported
.
Die Vertex AI-Modelle, die Cloud SQL für Einbettungen verwenden kann, text-embedding
und textembedding-gecko
, befinden sich in dieser Region.
Erforderliche Datenbankerweiterungen
Wenn Sie mit Einbettungen arbeiten möchten, installieren Sie die Erweiterung google_ml_integration
in Ihrer Cloud SQL-Instanz. Für Vertex AI-Modelle muss Version 1.2
oder höher installiert sein. Für Drittanbieter- oder benutzerdefinierte Modelle ist Version 1.4.2
oder höher erforderlich.
Wenn Sie diese Einbettungen speichern und Vektorfunktionen und ‑operatoren mit ihnen verwenden möchten, benötigen Sie außerdem die Erweiterung pgvector
.
Cloud SQL bietet beide Erweiterungen. Sie können sie in jeder Datenbank Ihrer Instanz installieren. Weitere Informationen finden Sie unter PostgreSQL-Erweiterungen konfigurieren.
Zugriff auf Modell einrichten
Bevor Sie Embeddings aus einer Cloud SQL-Instanz generieren können, müssen Sie Cloud SQL für die Verwendung eines Text-Embedding-Modells konfigurieren.
Wenn Sie mit dem cloudbasierten text-embedding
- oder textembedding-gecko
-Modell arbeiten möchten, müssen Sie Cloud SQL in Vertex AI einbinden.
Datenbanknutzern Zugriff zum Generieren von Einbettungen gewähren
Datenbankbenutzern die Berechtigung dazu erteilen, die embedding
-Funktion zur Ausführung von Vorhersagen zu verwenden:
Stellen Sie eine Verbindung von einem
psql
-Client zur primären Instanz her, wie unter Verbindung über einen psql-Client herstellen beschrieben.An der
psql
-Eingabeaufforderung eine Verbindung zur Datenbank herstellen und Berechtigungen gewähren:\c DB_NAME GRANT EXECUTE ON FUNCTION embedding TO USER_NAME;
Ersetzen Sie Folgendes:
DB_NAME: der Name der Datenbank, für die Sie Berechtigungen gewähren
USER_NAME: der Name des Nutzers, dem Sie die Berechtigungen erteilen
Einbettungen generieren
Cloud SQL bietet eine Funktion, mit der Sie Text in eine Vektoreinbettung umwandeln können. Sie können diese Einbettung dann in Ihrer Datenbank als Vektordaten speichern und optional pgvector
-Funktionen verwenden, um Abfragen darauf auszuführen.
Einbettung generieren
Wenn Sie eine Einbettung mit Cloud SQL generieren möchten, verwenden Sie die embedding()
-Funktion, die von der google_ml_integration
-Erweiterung bereitgestellt wird:
SELECT embedding( 'MODEL_IDVERSION_TAG', 'TEXT');
Ersetzen Sie die folgenden Werte:
MODEL_ID: Die ID des Modells, das abgefragt werden soll.
Wenn Sie Vertex AI Model Garden verwenden, geben Sie
text-embedding-004
odertext-multilingual-embedding-002
an. Dies sind die cloudbasierten Modelle, die in Cloud SQL für Texteinbettungen verwendet werden können. Weitere Informationen finden Sie unter Texteinbettungen.VERSION_TAG (optional): das Versions-Tag des Modells, das abgefragt werden soll. Bei Versionen von
textembedding-gecko
vortext-embedding-004
odertext-multilingual-embedding-002
:Prepend the tag with
@`.Wenn Sie eines der
textembedding-gecko
-Modelle mit Vertex AI verwenden, geben Sie eines der Versions-Tags an, die unter Modellversionen aufgeführt sind.TEXT: Der Text, der in eine Vektoreinbettung umgewandelt werden soll.
Im folgenden Beispiel wird das text-embedding-004
-Modell verwendet, um eine Einbettung basierend auf einem bereitgestellten Literalstring zu generieren:
SELECT embedding( 'text-embedding-004', 'Cloud SQL is a managed, cloud-hosted SQL database service.');
Generierte Einbettung speichern
Der Rückgabewert der Funktion embedding()
ist ein Array von real
-Werten.
Wenn Sie diesen Wert in einer Tabelle speichern möchten, fügen Sie eine real[]
-Spalte hinzu:
ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN real[DIMENSIONS];
Ersetzen Sie die folgenden Werte:
TABLE: den Tabellennamen
EMBEDDING_COLUMN: der Name der neuen Einbettungsspalte
DIMENSIONS: die Anzahl der Dimensionen, die das Modell unterstützt.
Wenn Sie eines der Modelle
text-embedding
odertextembedding-gecko
mit Vertex AI verwenden, geben Sie768
an.
Wenn Sie die pgvector
-Erweiterung installiert haben, können Sie Einbettungen optional als vector
-Werte speichern:
ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN vector(DIMENSIONS);
Nachdem Sie eine Spalte zum Speichern von Einbettungen erstellt haben, können Sie sie anhand der Werte füllen, die bereits in einer anderen Spalte in derselben Tabelle gespeichert sind:
UPDATE TABLE SET EMBEDDING_COLUMN = embedding('MODEL_IDVERSION_TAG', SOURCE_TEXT_COLUMN);
Ersetzen Sie die folgenden Werte:
TABLE: der Tabellenname.
EMBEDDING_COLUMN: Der Name der Spalte, in die eingebettet werden soll.
MODEL_ID: Die ID des Modells, das abgefragt werden soll.
Wenn Sie Vertex AI Model Garden verwenden, geben Sie
text-embedding-004
odertext-multilingual-embedding-002
an. Dies sind die cloudbasierten Modelle, die in Cloud SQL für Texteinbettungen verwendet werden können. Weitere Informationen finden Sie unter Texteinbettungen.VERSION_TAG (optional): das Versions-Tag des Modells, das abgefragt werden soll. Bei Versionen von
textembedding-gecko
vortext-embedding-004
odertext-multilingual-embedding-002
:Prepend the tag with
@`.Wenn Sie eines der
textembedding-gecko
-Modelle mit Vertex AI verwenden, geben Sie eines der Versions-Tags an, die unter Modellversionen aufgeführt sind.SOURCE_TEXT_COLUMN: Der Name der Spalte, in der der Text gespeichert ist. Sie übersetzen diesen Text in Einbettungen.
Der vorherige Befehl funktioniert sowohl für real[]
- als auch für vector
-Embedding-Spalten. Wenn die Einbettungsspalte den Typ vector
hat, wird der Rückgabewert von embedding()
in Cloud SQL implizit von einem real
-Array in einen vector
-Wert umgewandelt.
Im folgenden Beispiel wird das text-embedding-004
-Modell verwendet, um die Spalte messages.message_vector
mit Einbettungen zu füllen, die auf dem Inhalt der Spalte messages.message
basieren:
UPDATE messages SET message_vector = embedding( 'text-embedding-004', message);
Einbettungen mit pgvector
abfragen und indexieren
Mit der PostgreSQL-Erweiterung pgvector
können Sie vektorspezifische Operatoren und Funktionen verwenden, wenn Sie Text-Embeddings in Ihrer Datenbank speichern, indexieren und abfragen. Cloud SQL bietet eigene Optimierungen für die Arbeit mit pgvector
. So können Sie Indexe erstellen, mit denen Abfragen mit Einbettungen beschleunigt werden.
Index für nächsten Nachbarn erstellen
pgvector
unterstützt die ungefähre Suche nach dem nächsten Nachbarn durch Indexierung.
Im folgenden Beispiel wird gezeigt, wie Sie einen pgvector
-basierten Index mit hnsw
als Indexmethode erstellen:
CREATE INDEX ON TABLE
USING hnsw (EMBEDDING_COLUMN DISTANCE_FUNCTION)
WITH (m = M, ef_construction = EF_CONSTRUCTION);
Ersetzen Sie die folgenden Werte:
TABLE: die Tabelle, der Sie den Index hinzufügen.
EMBEDDING_COLUMN: Spalte, in der
vector
-Daten gespeichert werden.DISTANCE_FUNCTION: die Entfernungsfunktion, die mit diesem Index verwendet werden soll. Wählen Sie eine der folgenden Optionen aus:
L2-Distanz:
vector_l2_ops
Inneres Produkt:
vector_ip_ops
Kosinus-Distanz:
vector_cosine_ops
M (optional): Die maximale Anzahl von Verbindungen mit benachbarten Datenpunkten in einem Diagramm. Wir empfehlen einen Bereich von 5 bis 48, da 16 der Standardwert für
pgvector
ist.EF_CONSTRUCTION (optional): Die Größe der Liste, die die nächsten Kandidaten während der Graphendurchquerung beim Erstellen des Index enthält. Bei höheren Werten werden vom Algorithmus mehr Kandidaten berücksichtigt, sodass ein besserer Index erstellt werden kann. Die Standardgröße ist 64.
Wenn Sie diesen Index für eine Einbettungsspalte erstellen möchten, die den Datentyp real[]
anstelle von vector
verwendet, müssen Sie die Spalte in den Datentyp vector
umwandeln:
CREATE INDEX ON TABLE
USING hnsw ((CAST(EMBEDDING_COLUMN AS vector(DIMENSIONS))) DISTANCE_FUNCTION)
WITH (m = M, ef_construction = EF_CONSTRUCTION);
Ersetzen Sie DIMENSIONS durch die dimensionale Breite der Einbettungsspalte.
Im nächsten Abschnitt finden Sie ein Beispiel für diese Art von Index.
Abfrage nach dem nächsten Nachbarn mit angegebenem Text
Nachdem Sie Einbettungen in Ihrer Datenbank gespeichert und indexiert haben, steht Ihnen die gesamte Bandbreite der pgvector
-Abfragefunktionen zur Verfügung.
Wenn Sie die semantisch nächsten Nachbarn eines Texts finden möchten, verwenden Sie die Funktion embedding()
, um den Text in einen Vektor zu übersetzen. Wenden Sie in derselben Abfrage diesen Vektor auf den pgvector
Operator „Nächster Nachbar“, <->
, an, um die Datenbankzeilen mit den semantisch ähnlichsten Einbettungen zu finden.
Da embedding()
ein real
-Array zurückgibt, müssen Sie den embedding()
-Aufruf in vector
umwandeln, um diese Werte mit pgvector
-Operatoren zu verwenden.
SELECT RESULT_COLUMNS FROM TABLE
ORDER BY EMBEDDING_COLUMN
<-> embedding('MODEL_IDVERSION_TAG', 'TEXT')::vector
LIMIT ROW_COUNT
Ersetzen Sie die folgenden Werte:
RESULT_COLUMNS: die Spalten, die aus semantisch ähnlichen Zeilen angezeigt werden sollen.
TABLE: die Tabelle mit der Einbettung, mit der Sie den Text vergleichen.
EMBEDDING_COLUMN: die Spalte mit den gespeicherten Einbettungen.
MODEL_ID: Die ID des Modells, das abgefragt werden soll.
Wenn Sie Vertex AI Model Garden verwenden, geben Sie
text-embedding-004
odertext-embedding-multilingual-002
an. Dies sind die cloudbasierten Modelle, die in Cloud SQL für Texteinbettungen verwendet werden können. Weitere Informationen finden Sie unter Texteinbettungen.VERSION_TAG (optional): das Versions-Tag des Modells, das abgefragt werden soll. Stellen Sie dem Tag
@
voran.Wenn Sie eines der
textembedding-gecko
-Modelle mit Vertex AI verwenden, geben Sie eines der Versions-Tags an, die unter Modellversionen aufgeführt sind.TEXT: den gewünschten Text, damit Sie die nächsten gespeicherten semantischen Nachbarn finden können.
ROW_COUNT: die Anzahl der zurückzugebenden Zeilen. Wenn Sie nur die beste Übereinstimmung erhalten möchten, geben Sie
1
als Wert für diesen Parameter an.
Wenn Sie diese Abfrage mit einer gespeicherten Einbettungsspalte ausführen möchten, die anstelle von vector
den Datentyp real[]
verwendet, wandeln Sie die Spalte in den Datentyp vector
um:
SELECT RESULT_COLUMNS FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<-> embedding('MODEL_IDVERSION_TAG', 'TEXT')::vector
LIMIT ROW_COUNT
Tags für Modellversionen verwenden, um Fehler zu vermeiden
Google empfiehlt dringend, immer eine stabile Version des ausgewählten Embedding-Modells zu verwenden. Bei den meisten Modellen bedeutet das, dass Sie ein Versions-Tag explizit festlegen müssen.
Der Aufruf der embedding()
-Funktion ohne Angabe des Versionstags des Modells ist syntaktisch gültig, aber auch fehleranfällig.
Wenn Sie das Versions-Tag bei der Verwendung eines Modells im Vertex AI Model Garden weglassen, verwendet Vertex AI die neueste Version des Modells. Dies ist möglicherweise nicht die neueste stabile Version. Weitere Informationen zu verfügbaren Vertex AI-Modellversionen finden Sie unter Modellversionen.
Eine bestimmte Vertex AI-Modellversion gibt für eine bestimmte Texteingabe immer dieselbe embedding()
-Antwort zurück. Wenn Sie in Ihren Aufrufen von embedding()
keine Modellversionen angeben, kann eine neue veröffentlichte Modellversion den zurückgegebenen Vektor für eine bestimmte Eingabe abrupt ändern. Dies kann zu Fehlern oder anderem unerwarteten Verhalten in Ihren Anwendungen führen.
Geben Sie daher immer die Modellversion an, um diese Probleme zu vermeiden.