Beispiel für einen Einbettungsworkflow

Wählen Sie eine Dokumentationsversion aus:

Auf dieser Seite finden Sie ein Beispiel für einen Workflow, der zeigt, wie die Funktion embedding()pgvectorpgvector 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

Stellen Sie sich eine Datenbank vor, die auf AlloyDB 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 die Spalte complaints. In dieser TEXT-Spalte werden Käuferbeschwerden gespeichert, die zu den einzelnen Artikeln protokolliert werden.

  • Die Datenbank kann in den Vertex AI Model Garden eingebunden werden und ermöglicht so Zugriff auf die text-embedding-Modelle.

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“.

In den folgenden Schritten wird beschrieben, wie Sie dies in der oben beschriebenen Beispielkonfiguration aktivieren.

Hinweise

Sie müssen die folgenden Anforderungen erfüllen.

Erforderliche Datenbankerweiterung

  • Prüfen Sie, ob die folgenden Erweiterungen in Ihrer AlloyDB-Datenbank installiert sind.

    • google_ml_integration Erweiterung

    • vector-Erweiterung, Version 0.5.0.google-1 oder höher

Weitere Informationen zum Installieren und Verwalten von Erweiterungen finden Sie unter Datenbankerweiterungen konfigurieren.

  • Legen Sie das Datenbank-Flag google_ml_integration.enable_model_support auf off fest.

Modellzugriff einrichten

Bevor Sie Einbettungen aus einer AlloyDB-Datenbank generieren können, müssen Sie AlloyDB für die Verwendung mit einem Texteinbettungsmodell konfigurieren.

Wenn Sie mit dem cloudbasierten text-embedding-005-Modell arbeiten möchten, müssen Sie Ihre Datenbank in Vertex AI einbinden.

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.

ALTER TABLE items ADD COLUMN complaint_embedding vector(768);

In diesem Beispiel wird 768 als Argument angegeben, da dies die Anzahl der Dimensionen ist, die von den englischen text-embedding-005-Modellen unterstützt werden. 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 zugehörigen Werten zu vereinfachen.

Neue Spalte mit Daten füllen

Wenn Sie bereits Einbettungen im CSV-Format haben, folgen Sie der Anleitung unter Vektoreinbettungen speichern, um Ihre Einbettungen zu speichern.

Optional können Sie die Funktion embedding() verwenden, um diese neue Spalte mit Einbettungen zu füllen, wenn Sie Text in der Spalte complaints gespeichert haben. In dieser Beispielkonfiguration generiert AlloyDB die Einbettungen mit dem Modell text-embedding, Version 005.

UPDATE items SET complaint_embedding = embedding('text-embedding-005', complaints);

In diesem Beispiel wird der real[]-Rückgabewert von embedding() implizit in einen vector-Wert umgewandelt, um den Wert in der zuvor erstellten vector-Spalte zu speichern.

Index erstellen

Um die Leistung zu verbessern, fügen Sie items einen Index hinzu, der die Techniken der skalaren Quantisierung verwendet.

CREATE INDEX complaint_embed_idx ON items
  USING scann (complaint_embedding l2)
  WITH (num_leaves=20);

Weitere Informationen zum Erstellen eines ScaNN-Index finden Sie unter Indizes erstellen und Vektoren abfragen.

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 von pgvector bereitgestellte Operator <-> verwendet, um die Zeilen der Tabelle nach semantischer Nähe zum Text It was the wrong color zu sortieren und die zehn häufigsten Beschwerden zurückzugeben. In der Abfrage werden die Werte id und name der ersten sortierten Zeile angezeigt.

SELECT id, name FROM items
  ORDER BY complaint_embedding::vector
  <-> embedding('text-embedding-005', 'It was the wrong color') LIMIT 10;

Nächste Schritte