Beispiel für Einbettungsworkflows verstehen

Diese Seite enthält ein Beispiel für einen Workflow, der zeigt, wie embedding()-Funktion mit den Daten, die in Ihren Tabellen gespeichert sind, und der pgvector Abfragefunktionalität arbeiten. 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 eines Einbettungsworkflows

Stellen Sie sich eine Datenbank vor, die in Cloud SQL for PostgreSQL mit folgenden Aspekten ausgeführt wird:

  • Die Datenbank enthält eine Tabelle: items. In jeder Zeile dieser Tabelle wird ein Artikel beschrieben, 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.

Obwohl in dieser Datenbank Beschwerden über Elemente gespeichert werden, werden diese Beschwerden 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 dieser Vorgehensweise 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“.

In den folgenden Schritten wird gezeigt, wie diese Funktion im zuvor beschriebenen Beispielszenario aktiviert wird.

Tabelle vorbereiten

Bevor Sie LLM-basierte Abfragen für den Inhalt der Tabelle items ausführen, müssen Sie die Tabelle so vorbereiten, dass Einbettungen anhand Ihrer vorhandenen Daten gespeichert und indexiert werden.

Spalte zum Speichern von Einbettungen erstellen

Fügen Sie der Tabelle eine Spalte hinzu, um Einbettungen zu speichern.

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 Einbettung generieren.

In diesem Beispiel wird der Datentyp vector auf die Spalte angewendet, um die Verwendung von pgvector-Funktionen und -Operatoren mit den Spaltenwerten zu vereinfachen.

Neue Spalte ausfü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 mithilfe des LLM mit der ID textembedding-gecko, Version 001.

UPDATE items SET complaint_embedding = embedding('textembedding-gecko@001', complaints);

Dieses Beispiel überträgt den real[]-Rückgabewert embedding() implizit in einen vector-Wert, um den Wert in der vector-Spalte zu speichern, die Sie in Spalte zum Speichern von Einbettungen erstellen erstellt haben.

Index erstellen

Zur Verbesserung der Leistung fügen Sie der Tabelle items einen Index hinzu. Dieser Index verwendet Techniken zur skalaren Quantisierung, die unter Optimierten Index für nächste Nachbarn erstellen beschrieben werden.

CREATE INDEX complaint_embed_idx ON items
  USING ivf (complaint_embedding vector_l2_ops)
  WITH (lists = 20, quantizer = 'SQ8');

Weitere Informationen zum Erstellen der ungefähren nächsten Nachbar-Indexe finden Sie unter Indexierung.

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. Die folgende Abfrage verwendet den <->-Operator, den pgvector bereitstellt, um die folgenden Aktionen auszuführen:

  • Sortieren Sie die Zeilen der Tabelle nach der semantischen 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('textembedding-gecko@001', 'It was the wrong color')::vector LIMIT 10;

Nächste Schritte