Vertex AI-Texteinbettungen abrufen

Auf dieser Seite wird beschrieben, wie Sie die Vertex AI Text Embeddings API verwenden, um Texteinbettungen für Daten zu generieren, zu speichern und zu aktualisieren, die in Spanner-Datenbanken mit GoogleSQL-Dialekt und PostgreSQL-Dialekt gespeichert sind.

Eine Texteinbettung ist eine Vektordarstellung von Textdaten, die auf vielfältige Weise verwendet werden, um ähnliche Elemente zu finden. Sie interagieren mit ihnen jedes Mal, wenn Sie eine Google Suche durchführen oder Empfehlungen beim Online-Shopping sehen. Wenn Sie Texteinbettungen erstellen, erhalten Sie Vektordarstellungen von natürlichem Text als Arrays von Gleitkommazahlen. Das bedeutet, dass Ihrem gesamten Eingabetext eine numerische Darstellung zugewiesen wird. Durch den Vergleich des numerischen Abstands zwischen den Vektordarstellungen von zwei Texten kann eine Anwendung die Ähnlichkeit zwischen dem Text oder den durch den Text dargestellten Objekten ermitteln.

Mit der Vertex AI-API für Texteinbettungen können Sie eine Texteinbettung mit generativer KI erstellen. In dieser Anleitung verwenden Sie das Vertex AI-Modell text-embedding, um Texteinbettungen für die in Spanner gespeicherten Daten zu generieren.

Weitere Informationen zu Einbettungen finden Sie unter Texteinbettungen abrufen.

Ziel

In dieser Anleitung erfahren Sie mehr über die folgenden Themen:

  • Registrieren Sie das Vertex AI-text-embedding-Modell in einem Spanner-Schema mit DDL-Anweisungen.
  • Verweisen Sie mit SQL-Abfragen auf das registrierte Modell, um Einbettungen aus Daten zu generieren, die in Spanner gespeichert sind.

Preise

In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloudverwendet, darunter:

  • Spanner
  • Vertex AI

Weitere Informationen zu Spanner-Kosten finden Sie auf der Seite Spanner-Preise.

Weitere Informationen zu den Kosten für Vertex AI finden Sie auf der Seite Vertex AI-Preise.

Texteinbettungen generieren und speichern

Je nach verwendetem Modell kann das Generieren von Einbettungen einige Zeit in Anspruch nehmen. Bei Arbeitslasten, bei denen die Leistung eine wichtige Rolle spielt, sollten Sie keine Einbettungen in Lese-Schreib-Transaktionen generieren. Generieren Sie die Einbettungen stattdessen in einer schreibgeschützten Transaktion mit den folgenden SQL-Beispielen.

GoogleSQL

Texteinbettungsmodell in Spanner registrieren

In GoogleSQL müssen Sie ein Modell registrieren, bevor Sie es mit der Funktion ML.PREDICT verwenden können. Um das text-embedding-Modell in einer Spanner-Datenbank zu registrieren, führen Sie die folgende DDL-Anweisung aus:

CREATE MODEL MODEL_NAME
INPUT(content STRING(MAX))
OUTPUT(
  embeddings
    STRUCT<
      statistics STRUCT<truncated BOOL, token_count FLOAT64>,
      values ARRAY<FLOAT64>>
)
REMOTE OPTIONS (
  endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/publishers/google/models/text-embedding$MODEL_VERSION'
);

Ersetzen Sie Folgendes:

  • MODEL_NAME: der Name des Einbettungsmodells
  • PROJECT: das Projekt, in dem der Vertex AI-Endpunkt gehostet wird
  • LOCATION: der Standort des Vertex AI-Endpunkts
  • MODEL_VERSION: Die Version des text-embedding-Einbettungsmodells

Spanner gewährt automatisch die entsprechenden Berechtigungen. Wenn nicht, sehen Sie sich die Zugriffssteuerung für Modellendpunkte an.

Die Schemaerkennung und ‑validierung ist für generative KI-Modelle nicht verfügbar. Sie müssen INPUT- und OUTPUT-Klauseln angeben, die dem Schema des Modells entsprechen. Das vollständige Schema des Texteinbettungsmodells finden Sie unter Texteinbettungen abrufen.

Texteinbettungen generieren

Um Einbettungen zu generieren, übergeben Sie einen Text direkt an die Funktion ML.PREDICT. Verwenden Sie dazu den folgenden SQL-Code:

SELECT embeddings.values
FROM ML.PREDICT(
  MODEL MODEL_NAME,
  (SELECT "A product description" as content)
);

Verwenden Sie den folgenden SQL-Code, um Einbettungen für Daten zu generieren, die in einer Tabelle gespeichert sind:

SELECT id, embeddings.values
FROM ML.PREDICT(
  MODEL MODEL_NAME,
  (SELECT id, description as content FROM Products)
);

Texteinbettungen speichern

Nachdem Sie die Einbettungen in einer schreibgeschützten Transaktion generiert haben, speichern Sie sie in Spanner, damit sie mit Ihren Betriebsdaten verwaltet werden können. Verwenden Sie eine Lese-Schreib-Transaktion, um die Einbettungen zu speichern.

Für Arbeitslasten, die weniger leistungsabhängig sind, können Sie Einbettungen mit dem folgenden SQL in einer Lese-/Schreibtransaktion generieren und einfügen:

CREATE TABLE Products(
  id INT64 NOT NULL,
  description STRING(MAX),
  embeddings ARRAY<FLOAT32>,
) PRIMARY KEY(id);
INSERT INTO Products (id, description, embeddings)
SELECT @Id, @Description, embeddings.values
FROM ML.PREDICT(
  MODEL MODEL_NAME,
  (SELECT @Description as content)
);

PostgreSQL

Texteinbettungen generieren

Um Einbettungen zu generieren, übergeben Sie einen Text direkt an die Funktion spanner.ML_PREDICT_ROW. Verwenden Sie dazu den folgenden SQL-Code:

SELECT
  spanner.ML_PREDICT_ROW(
    'projects/PROJECT/locations/LOCATION/publishers/google/models/text-embedding$MODEL_VERSION',
    '{"instances": [{"content": "A product description"}]}'::jsonb
  ) ->'predictions'->0->'embeddings'->'values';

Ersetzen Sie Folgendes:

  • PROJECT: das Projekt, in dem der Vertex AI-Endpunkt gehostet wird
  • LOCATION: der Standort des Vertex AI-Endpunkts
  • MODEL_VERSION: Die Version des text-embedding-Einbettungsmodells

Verwenden Sie den folgenden SQL-Code, um Einbettungen für Daten zu generieren, die in einer Tabelle gespeichert sind:

SELECT id, spanner.ML_PREDICT_ROW(
    'projects/PROJECT/locations/LOCATION/publishers/google/models/text-embedding$MODEL_VERSION',
    JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', description))))
  ) -> `predictions`->0->`embeddings`->`values``
FROM Products;

Ersetzen Sie Folgendes:

  • PROJECT: das Projekt, in dem der Vertex AI-Endpunkt gehostet wird
  • LOCATION: der Standort des Vertex AI-Endpunkts
  • MODEL_VERSION: Die Version des text-embedding-Einbettungsmodells

Texteinbettungen speichern

Nachdem Sie die Einbettungen in einer schreibgeschützten Transaktion generiert haben, speichern Sie sie in Spanner, damit sie mit Ihren Betriebsdaten verwaltet werden können. Verwenden Sie eine Lese-Schreib-Transaktion, um die Einbettungen zu speichern.

Für Arbeitslasten, die weniger leistungsabhängig sind, können Sie Einbettungen mit dem folgenden SQL in einer Lese-/Schreibtransaktion generieren und einfügen:

CREATE TABLE Products (
  id INT8 NOT NULL,
  description TEXT,
  embeddings REAL[],
  PRIMARY KEY(id)
);
INSERT INTO Products (id, description, embeddings)
SELECT @Id, @Description, spanner.FLOAT32_ARRAY(spanner.ML_PREDICT_ROW(
    'projects/PROJECT/locations/LOCATION/publishers/google/models/text-embedding$MODEL_VERSION',
    JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', @Description)))
  ) -> 'predictions'->0->'embeddings'->'values'
));

Ersetzen Sie Folgendes:

  • PROJECT: das Projekt, in dem der Vertex AI-Endpunkt gehostet wird
  • LOCATION: der Standort des Vertex AI-Endpunkts
  • MODEL_VERSION: Die Version des text-embedding-Einbettungsmodells

Texteinbettungen aktualisieren

Verwenden Sie die UPDATE-Anweisung (GoogleSQL und PostgreSQL), um Ihre Einbettungen zu aktualisieren oder Daten in Echtzeit aufzunehmen.

Verwenden Sie den folgenden SQL-Code, um die Tabelle Products im vorherigen Beispiel zu aktualisieren:

GoogleSQL

UPDATE Products
SET
  description = @description,
  embeddings = (SELECT embeddings.values
                  FROM ML.PREDICT(MODEL MODEL_NAME, (SELECT @description as content))
              )
WHERE id = @id;

Ersetzen Sie Folgendes:

  • MODEL_NAME: der Name des Einbettungsmodells

PostgreSQL

UPDATE
  Products
SET
  description = $1,
  embeddings = spanner.FLOAT32_ARRAY(
    spanner.ML_PREDICT_ROW(
      'projects/PROJECT/locations/LOCATION/publishers/google/models/text-embedding$MODEL_VERSION',
      JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', $1)))
    ) -> 'predictions'->0->'embeddings'->'values')
WHERE
  id = $2;

Ersetzen Sie Folgendes:

  • PROJECT: das Projekt, in dem der Vertex AI-Endpunkt gehostet wird
  • LOCATION: der Standort des Vertex AI-Endpunkts
  • MODEL_VERSION: Die Version des text-embedding-Einbettungsmodells

Nächste Schritte