Autonome Generierung von Einbettungen
In diesem Dokument wird beschrieben, wie Sie die autonome Einbettungsgenerierung für Ihre Daten verwenden, damit BigQuery eine Spalte mit Einbettungen in einer Tabelle auf Grundlage einer Quellspalte verwalten kann. Wenn Sie Daten in der Quellspalte hinzufügen oder ändern, generiert oder aktualisiert BigQuery die Einbettungsspalte für diese Daten automatisch mit einem Vertex AI-Einbettungsmodell. Das ist hilfreich, wenn Sie möchten, dass BigQuery Ihre Einbettungen verwaltet, wenn Ihre Quelldaten regelmäßig aktualisiert werden.
Einbettungen sind nützlich für moderne Anwendungen mit generativer KI wie Retrieval Augmented Generation (RAG), können aber komplex zu erstellen, zu verwalten und abzufragen sein. Mit der autonomen Generierung von Einbettungen können Sie den Prozess des Erstellens, Verwaltens und Abfragens von Einbettungen für die Verwendung in Ähnlichkeitssuchen und anderen generativen KI-Anwendungen vereinfachen.
Sie können beispielsweise Abfragen ähnlich den folgenden verwenden, um eine Tabelle mit aktivierter autonomer Einbettungsgenerierung zu erstellen, Daten einzufügen und dann eine semantische Suche durchzuführen:
CREATE TABLE mydataset.products (
name STRING,
description STRING,
description_embedding STRUCT<result ARRAY<FLOAT64>, status STRING>
GENERATED ALWAYS AS (
AI.EMBED(description, connection_id => 'us.example_connection',
endpoint => 'text-embedding-005'))
STORED OPTIONS( asynchronous = TRUE ));
# Values in the description_embedding column are automatically generated.
INSERT INTO mydataset.products (name, description) VALUES
("Super slingers"), ("An exciting board game for the whole family"), ...;
SELECT * FROM AI.SEARCH(TABLE mydataset.products, 'description', "A really fun toy");
Hinweise
Damit autonome Einbettungen für eine Tabelle generiert werden können, benötigen Sie die erforderlichen Berechtigungen und eine entsprechende Verbindung.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Aktivieren der autonomen Einbettungserstellung benötigen:
-
So verwenden Sie eine Verbindungsressource:
BigQuery Connections User (
roles/bigquery.connectionUser) für die Verbindung -
So erstellen Sie eine Tabelle:
BigQuery Data Editor (
roles/bigquery.dataEditor) für die Tabelle -
Weisen Sie dem Dienstkonto der Verbindung die folgende Rolle zu, damit es auf Modelle zugreifen kann, die in Vertex AI-Endpunkten gehostet werden:
Vertex AI User (
roles/aiplatform.user) für das Projekt mit der Verbindung
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Verbindung erstellen und Berechtigung für ein Dienstkonto erteilen
Wenn Sie die autonome Einbettungsgenerierung für eine Tabelle aktivieren möchten, müssen Sie eine Cloud-Ressourcenverbindung erstellen.
Gewähren Sie dann dem Dienstkonto, das beim Erstellen der Verbindung erstellt wurde, die Rolle „Vertex AI-Nutzer“ (roles/aiplatform.user).
Tabelle mit autonomer Einbettungserstellung erstellen
Mit der autonomen Generierung von Einbettungen können Sie Einbettungen mit der AI.EMBED-Funktion in einer CREATE TABLE-Anweisung generieren.
CREATE TABLE DATASET_ID.TABLE (
[COLUMN, ...]
STRING_COL STRING,
EMBEDDING_COL_NAME STRUCT<result ARRAY<FLOAT64>, status STRING>
GENERATED ALWAYS AS (
AI.EMBED(
STRING_COL,
connection_id => CONNECTION_ID,
endpoint => ENDPOINT)
)
STORED OPTIONS (asynchronous = TRUE)
);
Ersetzen Sie Folgendes:
DATASET_ID: Der Name des Datasets, in dem Sie die Tabelle erstellen möchten.TABLE: Der Name der Tabelle, für die die autonome Einbettungsgenerierung erstellt werden soll.COLUMN, ...: Alle Spalten, die Ihre Tabelle zusätzlich zu der Spalte enthalten soll, die automatisch eingebettet werden soll.STRING_COL: Der Name der SpalteSTRING, die automatisch eingebettet werden soll.EMBEDDING_COL_NAME: Der Name der automatisch generierten Spalte für Einbettungen.CONNECTION_ID: EinSTRING-Wert, der den Namen einer zu verwendenden Verbindung enthält, z. B.my_project.us.example_connection. Sie müssen dem Dienstkonto der Verbindung in dem Projekt, in dem Sie die Tabelle erstellen, die Rolle Vertex AI-Nutzer zuweisen.ENDPOINT: einSTRING-Wert, der einen unterstützten Vertex AI-Endpunkt für das Texteinbettungsmodell angibt, der für das Texteinbettungsmodell verwendet werden soll. Der von Ihnen angegebene Endpunktwert muss die Modellversion enthalten, z. B.text-embedding-005. Wenn Sie den Modellnamen anstelle einer URL angeben, identifiziert BigQuery ML das Modell automatisch und verwendet den vollständigen Endpunkt des Modells.
Der Job zur Generierung von Hintergrund-Embeddings wird kurz nach dem Erstellen der Tabelle oder nach dem Aktualisieren von Daten in der Quellspalte gestartet.
Wenn Sie den Fortschritt der Einbettungsgenerierung verfolgen möchten, können Sie eine Abfrage wie die folgende verwenden:
SELECT
COUNT(*) AS total_num_rows,
COUNTIF(description_embedding IS NOT NULL
AND description_embedding.status = '') AS total_num_generated_embeddings
FROM
PROJECT_ID.DATASET_ID.TABLE;
Nachdem Sie die Tabelle mit den Einbettungen erstellt haben, können Sie einen Vektorindex für die Spalte STRUCT erstellen, die die automatisch generierte Einbettung enthält.
Beispiel
Angenommen, Sie sind ein großer Einzelhändler, der viele verschiedene Produkte verkauft. Sie haben eine Tabelle mit Produktnamen und ‑beschreibungen und möchten Ihren Kunden helfen, die gesuchten Produkte zu finden. Die folgenden Abfragen zeigen, wie Sie die automatische Einbettungserstellung einrichten, um die semantische Suche in Ihren Produktbeschreibungen zu unterstützen.
Erstellen Sie zuerst ein Dataset:
CREATE SCHEMA mydataset;
Erstellen Sie als Nächstes eine Tabelle mit aktivierter autonomer Einbettungserstellung, in der Ihre Produktinformationen gespeichert werden. Die automatisch generierte Spalte heißt description_embedding und basiert auf der Spalte description.
# Create a table of products and descriptions with a generated embedding column.
CREATE TABLE mydataset.products (
name STRING,
description STRING,
description_embedding STRUCT<result ARRAY<FLOAT64>, status STRING>
GENERATED ALWAYS AS (AI.EMBED(
description,
connection_id => 'us.example_connection',
endpoint => 'text-embedding-005'
))
STORED OPTIONS( asynchronous = TRUE )
);
Mit der folgenden Abfrage werden einige Produktnamen und ‑beschreibungen in die Tabelle eingefügt.
Sie geben keinen Wert für description_embedding an, da er automatisch generiert wird.
# Insert product descriptions into the table.
# The description_embedding column is automatically updated.
INSERT INTO mydataset.products (name, description) VALUES
("Lounger chair", "A comfortable chair for relaxing in."),
("Super slingers", "An exciting board game for the whole family."),
("Encyclopedia set", "A collection of informational books.");
Optional können Sie einen Vektorindex für die Tabelle erstellen, um die Suche zu beschleunigen.
Für einen Vektorindex sind mehr als drei Zeilen erforderlich. Bei der folgenden Abfrage wird davon ausgegangen, dass Sie zusätzliche Daten eingefügt haben. Jedes Mal, wenn Sie Daten einfügen, wird die Spalte description_embedding automatisch aktualisiert.
CREATE VECTOR INDEX my_index
ON mydataset.products(description_embedding)
OPTIONS(index_type = 'IVF');
Schließlich können Sie die Funktion AI.SEARCH verwenden, um eine semantische Suche nach einem lustigen Spielzeug für Ihre Produkte durchzuführen:
# Search for products that are fun to play with.
SELECT base.name, base.description, distance
FROM AI.SEARCH(TABLE mydataset.products, 'description', "A really fun toy");
/*------------------+----------------------------------------------+----------------------+
| name | description | distance |
+------------------+----------------------------------------------+----------------------+
| Super slingers | An exciting board game for the whole family. | 0.80954913893618929 |
| Lounger chair | A comfortable chair for relaxing in. | 0.938933930620146 |
| Encyclopedia set | A collection of informational books. | 1.1119297739353384 |
+------------------+----------------------------------------------+----------------------*/
Informationen zu automatisch generierten Spalten für Einbettungen
Wenn Sie prüfen möchten, ob eine Spalte eine automatisch generierte Einbettungsspalte ist, fragen Sie die INFORMATION_SCHEMA.COLUMNS-Ansicht ab.
Die folgende Abfrage enthält Informationen zu allen automatisch generierten Spalten für Einbettungen:
SELECT *
FROM PROJECT_ID.DATASET_ID.INFORMATION_SCHEMA.COLUMNS
WHERE is_generated = 'ALWAYS';
Im Feld generation_expression sehen Sie den Aufruf der Funktion AI.EMBED, mit der die Einbettungen für die Spalte generiert werden.
Eigene Reservierung verwenden
Standardmäßig verwendet BigQuery On-Demand-Slots für die Verarbeitung, die zum Verwalten der generierten Spalte mit Einbettungen erforderlich ist. Wenn Sie für eine vorhersehbare und konsistente Leistung sorgen möchten, können Sie optional eine Reservierung erstellen und job_type auf BACKGROUND festlegen. Wenn eine Hintergrundreservierung vorhanden ist, verwendet BigQuery diese, um die generierte Spalte für Einbettungen zu verwalten.
Fehlerbehebung
Die generierte Spalte für Einbettungen enthält zwei Felder: result und status.
Wenn beim Versuch von BigQuery, ein Embedding für eine bestimmte Zeile in Ihrer Tabelle zu generieren, ein Fehler auftritt, ist das Feld result auf NULL gesetzt und das Feld status beschreibt den Fehler. Wenn die Quellspalte beispielsweise NULL ist, ist die result-Einbettung ebenfalls NULL und der Status NULL value is not supported for embedding generation.
Ein schwerwiegenderer Fehler kann die Generierung von Einbettungen zum Stillstand bringen. In diesem Fall können Sie die Ansicht INFORMATION_SCHEMA.JOBS für den Hintergrundjob abfragen und sich die Informationen im Feld error_result ansehen.
Die Job-ID eines Hintergrund-Embedding-Jobs hat das Präfix gc_. Mit der folgenden Abfrage werden beispielsweise alle Hintergrundjobs extrahiert, deren Fehlerergebnis nicht NULL ist:
SELECT * FROM `region-REGION.INFORMATION_SCHEMA.JOBS` j
WHERE EXISTS (
SELECT 1
FROM unnest(j.referenced_tables) t
WHERE
j.project_id = 'PROJECT_ID'
AND t.dataset_id = 'DATASET_ID'
AND t.table_id = 'TABLE'
)
AND starts_with(job_id, 'gc')
AND error_result IS NOT NULL
ORDER BY j.creation_time DESC;
Kosten im Blick behalten
Beim automatischen Generieren von Einbettungen werden Anfragen an Vertex AI gesendet, was Kosten verursachen kann. So verfolgen Sie die Vertex AI-Kosten, die durch Hintergrund-Embedding-Jobs anfallen:
- Abrechnungsberichte in Cloud Billing ansehen
Verwenden Sie Filter, um die Ergebnisse einzugrenzen.
Wählen Sie für Dienste Vertex AI aus.
Wenn Sie die Gebühren für einen bestimmten Job sehen möchten, filtern Sie nach Label.
Legen Sie den Schlüssel auf
bigquery_ml_jobund den Wert auf die Job-ID des Einbettungsjobs fest. Hintergrundjobs zum Einbetten haben alle das Präfixgc_.
Es kann bis zu 24 Stunden dauern, bis einige Gebühren in Cloud Billing angezeigt werden.
Beschränkungen
- Jede Tabelle unterstützt maximal eine automatisch generierte Spalte für Einbettungen.
- Es gibt keinen Hinweis darauf, dass eine Spalte automatisch generiert wird, wenn Sie das Schema einer Tabelle über die Google Cloud Console, den
bq show-Befehl oder das Feldddlder AnsichtINFORMATION_SCHEMA.TABLESaufrufen. - Sie können einer vorhandenen Tabelle mit
ALTER TABLE ADD COLUMNkeine generierten Spalten für Einbettungen hinzufügen. - Wenn Sie eine Kopie, einen Klon oder einen Snapshot einer Tabelle mit einer generierten Spalte für Einbettungen erstellen, werden nur die Daten kopiert. Die Konfiguration für die Generierung wird nicht auf die neue Tabelle angewendet und Aktualisierungen der Quellspalte der neuen Tabelle führen nicht zu neuen Einbettungen.
- Wenn Sie eine Tabelle, für die die autonome Einbettungserstellung aktiviert war, aus einem Snapshot wiederherstellen, wird die Konfiguration für die Einbettungserstellung nicht wiederhergestellt.
- Sie können generierte Einbettungsspalten nur mit SQL erstellen. Sie können die Befehle
bq mkoderbq updatenicht verwenden, um Spalten mit generierten Einbettungen zu erstellen. - Die Quellspalte der generierten Spalte muss eine
STRING-Spalte sein. Nachdem Sie die generierte Spalte für Einbettungen erstellt haben, gelten die folgenden Einschränkungen:
- Sie können die Quellspalte nicht löschen oder umbenennen, aber die generierte Einbettungsspalte schon. Wenn Sie die Spalte mit den Einbettungen löschen, können Sie die Quellspalte löschen oder umbenennen.
- Sie können den Datentyp der Quellspalte oder der generierten Spalte mit Einbettungen nicht ändern.
Sie können keine Standardwerte für automatisch generierte Einbettungsspalten angeben.
Sie können mit diesen Methoden nicht direkt in generierte Spalten für Einbettungen schreiben:
- DML
- Streaming-Schreibvorgänge
bq insertbq copy -a
Tabellen mit generierten Spalten für Einbettungen unterstützen keine Sicherheitsrichtlinien auf Spaltenebene, z. B. Richtlinien-Tags.
Wenn Sie eine Suchfunktion wie
VECTOR_SEARCHoderAI.SEARCHaufrufen, werden Zeilen mit fehlenden Einbettungen in der Basistabelle bei der Suche übersprungen.Sie können keinen partitionierten Vektorindex für eine Tabelle erstellen, für die die autonome Einbettungsgenerierung aktiviert ist.
Wenn Sie einen Vektorindex für die automatisch generierte Spalte für Einbettungen erstellen, beginnt das Index-Training, nachdem für mindestens 80% der Zeilen Einbettungen generiert wurden. Mit der folgenden Abfrage können Sie prüfen, wie viel Prozent der Einbettungen in Ihrer Tabelle generiert wurden:
SELECT COUNTIF(description_embedding IS NOT NULL AND description_embedding.status = '') * 100.0 / COUNT(*) AS percent FROM PROJECT_ID.DATASET_ID.TABLE;
Nächste Schritte
- Weitere Informationen zum Erstellen und Verwalten von Vektorindexen
- Weitere Informationen finden Sie unter Einführung in die Vektorsuche.