Diese Seite enthält ein Beispiel für einen Workflow, der zeigt, wie die Funktion embedding()
mit den Daten, die in Ihren Tabellen gespeichert sind, und der pgvector
-Abfragefunktionalität funktioniert.
In diesem Beispiel wird eine Nur-Text-Eingabe verwendet, um ein Ergebnis aus einer Datenbank abzurufen, die auf dem semantischen Parsen der Textbedeutung Durch eine LLM (Large Language Model) basiert.
Beispielszenario für einen Einbettungsworkflow
Stellen Sie sich eine Datenbank vor, die in Cloud SQL for PostgreSQL ausgeführt wird und die folgenden Aspekte aufweist:
Die Datenbank enthält eine Tabelle:
items
. Jede Zeile in dieser Tabelle beschreibt einen Artikel, den Ihr Unternehmen verkauft.Die Tabelle
items
enthält eine Spalte:complaints
. In dieser Spalte werden Käuferbeschwerden gelogged, die zu den einzelnen Artikeln als Nur-Text protokolliert werden.Die Datenbank kann in den Vertex AI Model Garden eingebunden werden und ermöglicht so Zugriff auf das LLM
textembedding-gecko
.
In dieser Datenbank werden zwar Beschwerden zu Artikeln gespeichert, diese Beschwerden werden jedoch als Nur-Text gespeichert, was die Abfrage erschwert. Wenn Sie beispielsweise sehen möchten, welche Artikel die meisten Beschwerden von Kunden haben, die eine falsche Farbversion erhalten haben, können Sie normale SQL-Abfragen auf der Tabelle ausführen und nach verschiedenen Schlüsselwortübereinstimmungen suchen. Bei diesem Ansatz werden jedoch nur Zeilen berücksichtigt, die genau diese Keywords enthalten.
Eine einfache SQL-Abfrage wie SELECT * FROM item WHERE complaints LIKE
"%wrong color%"
gibt beispielsweise keine Zeile zurück, in der das Feld complaints
nur
The picture shows a blue one, but the one I received was red
enthält.
SQL-Abfragen mit LLM-basierten Einbettungen können diese Lücke schließen. Wenn Sie Einbettungen anwenden, können Sie die Tabelle in diesem Beispiel nach Elementen abfragen, in denen Beschwerden eine semantische Ähnlichkeit mit einem bestimmten Text-Prompt haben, beispielsweise: „Es hatte die falsche Farbe“.
Die folgenden Schritte zeigen, wie Sie dies im oben beschriebenen Beispielszenario aktivieren.
Tabelle vorbereiten
Bevor Sie LLM-basierte Abfragen für den Inhalt der Tabelle items
ausführen können, müssen Sie die Tabelle vorbereiten, um Einbettungen basierend auf Ihren vorhandenen Daten zu speichern und zu indexieren.
Spalte zum Speichern von Einbettungen erstellen
Fügen Sie der Tabelle eine Spalte zum Speichern von Einbettungen hinzu.
sql
ALTER TABLE items ADD COLUMN complaint_embedding vector(768);
In diesem Beispiel wird 768
als Argument angegeben, da das LLM textembedding-gecko
diese Anzahl an Dimensionen unterstützt. Weitere Informationen finden Sie unter Embedding generieren.
Im Beispiel wird der Datentyp vector
auf die Spalte angewendet, um die Verwendung von pgvector
-Funktionen und ‑Operatoren mit den Werten der Spalte zu vereinfachen.
Neue Spalte mit Daten füllen
Verwenden Sie die Funktion embedding()
, um diese neue Spalte mit Einbettungen zu füllen, die auf dem Textwert der einzelnen Zeilen basieren, der in der Spalte complaints
angezeigt werden. In diesem Beispiel generiert Cloud SQL die Einbettungen mit dem LLM mit der ID textembedding-gecko
, Version 004
.
UPDATE items SET complaint_embedding = embedding('text-embedding-005', complaints);
real[]
-Rückgabewert von embedding()
implizit in einen vector
-Wert umgewandelt, um den Wert in der vector
-Spalte zu speichern, die Sie in Spalte zum Speichern von Einbettungen erstellen erstellt haben.
Index erstellen
Fügen Sie der Tabelle items
einen Index hinzu, um die Leistung zu verbessern.
CREATE INDEX complaint_embed_idx ON items
USING hnsw (complaint_embedding vector_cosine_ops);
Weitere Informationen zum Erstellen dieses Index finden Sie unter Index für die Suche nach den nächsten Nachbarn erstellen. Weitere Informationen zum Optimieren des Index durch Festlegen von Parametern finden Sie unter Einbettungen mit pgvector
abfragen und indexieren.
LLM-gestützte Abfragen mit bereitgestelltem Text ausführen
Sie können jetzt semantische Abfragen nach nächsten Nachbarn für die Tabelle items
erstellen. In der folgenden Abfrage wird der Operator <->
verwendet, der von pgvector
bereitgestellt wird, um die folgenden Aktionen auszuführen:
- Sortieren Sie die Zeilen der Tabelle nach semantischer Nähe zum Text von
It was the wrong color
. - Gib die zehn häufigsten Beschwerden zurück.
In der Abfrage werden die Werte id
und name
der ersten sortierten Zeile angezeigt.
SELECT id, name FROM items
ORDER BY complaint_embedding
<-> embedding('text-embedding-005', 'It was the wrong color')::vector LIMIT 10;