Texteinbettungen für die Agent Platform abrufen

Auf dieser Seite wird beschrieben, wie Sie die Gemini Enterprise Agent Platform-API für Texteinbettungen verwenden, um Texteinbettungen für Daten zu generieren, zu speichern und zu aktualisieren, die in Cloud Spanner für Datenbanken im GoogleSQL-Dialekt und im PostgreSQL-Dialekt gespeichert sind.

Eine Texteinbettung ist eine Vektordarstellung von Textdaten, die auf vielfältige Weise verwendet wird, 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 den Texten oder den durch den Text dargestellten Objekten bestimmen.

Mit der Agent Platform API für Texteinbettungen können Sie eine Texteinbettung mit generativer KI erstellen. In dieser Anleitung verwenden Sie das Texteinbettungsmodell der Agent Platform, um Texteinbettungen für die in Cloud Spanner gespeicherten Daten zu generieren.

Weitere Informationen zu Texteinbettungen und unterstützten Modellen finden Sie unter Texteinbettungen abrufen.

Ziel

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

  • Registrieren Sie ein Agent Platform-Modell zur Texteinbettung in einem Spanner-Schema mithilfe von DDL-Anweisungen.
  • Verweisen Sie mit SQL-Abfragen auf das registrierte Modell, um Einbettungen aus in Spanner gespeicherten Daten zu generieren.

Preise

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

  • Spanner
  • Agent Platform

Weitere Informationen zu den Kosten für Cloud Spanner finden Sie auf der Seite Cloud Spanner – Preise.

Weitere Informationen zu den Kosten für die Agent Platform finden Sie auf der Seite Agent Platform – Preise.

Texteinbettungen generieren und speichern

Je nach verwendetem Modell kann das Generieren von Einbettungen einige Zeit dauern. Bei leistungsempfindlicheren Arbeitslasten empfiehlt es sich, das Generieren von Einbettungen in Lese-/Schreibtransaktionen zu vermeiden. Generieren Sie die Einbettungen stattdessen in einer schreibgeschützten Transaktion mithilfe der folgenden SQL-Beispiele.

GoogleSQL

Texteinbettungsmodell in Spanner registrieren

In GoogleSQL müssen Sie ein Modell registrieren, bevor Sie es mit der Funktion ML.PREDICT verwenden können. Wenn Sie das Text einbettungsmodell der Agent Platform in einer Spanner-Datenbank registrieren möchten, führen Sie die folgende DDL-Anweisung aus:

CREATE MODEL MODEL_NAME
INPUT(
  content STRING(MAX),
  -- Optional: For models that support specifying task type.
  task_type 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/$MODEL_NAME'
);

Ersetzen Sie Folgendes:

  • MODEL_NAME: der Name des Agent Platform-Modells zur Texteinbettung
  • PROJECT: das Projekt, in dem der Agent Platform-Endpunkt gehostet wird
  • LOCATION: der Standort des Agent Platform-Endpunkts

Cloud Spanner gewährt automatisch die entsprechenden Berechtigungen. Wenn dies nicht der Fall ist, prüfen Sie die Zugriffssteuerung für Modellendpunkte.

Schemaerkennung und -validierung sind für generative KI-Modelle nicht verfügbar. Sie müssen die Klauseln INPUT und OUTPUT angeben, die mit dem Modellschema übereinstimmen. Das vollständige Schema des Texteinbettungsmodells finden Sie unter Texteinbettungen abrufen.

Texteinbettungen generieren

Wenn Sie Einbettungen generieren möchten, übergeben Sie einen Textabschnitt mit der folgenden SQL-Anweisung direkt an die Funktion ML.PREDICT:

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

Verwenden Sie die folgende SQL-Anweisung, 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)
);

So geben Sie den Aufgabentyp und die Ausgabedimensionen an:

UPDATE Products p
SET description_embedding = (
  SELECT embeddings.values
  FROM ML.PREDICT(
    MODEL MODEL_NAME,
    (SELECT p.description as content, "RETRIEVAL_DOCUMENT" as task_type),
    STRUCT(768 AS outputDimensionality)
  ));

SELECT p.product_id, p.name, p.description, COSINE_DISTANCE(
    p.description_embedding,
    (
      SELECT embeddings.values 
      FROM ML.PREDICT(
        MODEL MODEL_NAME,
        (SELECT @user_query as content, "RETRIEVAL_QUERY" as task_type),
        STRUCT(768 AS outputDimensionality)
      ) 
    )
  ) AS distance
FROM Products p
ORDER BY distance
LIMIT 5;

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 zum Speichern der Einbettungen eine Lese-/Schreibtransaktion.

Für Arbeitslasten, die weniger leistungsempfindlich sind, können Sie Einbettungen mit dem folgenden SQL-Code in einer Lese-/Schreibtransaktion generieren und einfügen. Die Angabe von vector_length ist optional für das Speichern von Einbettungen, wird für die KNN-Suche empfohlen und ist für Vektorindexe erforderlich. Ersetzen Sie VECTOR_LENGTH durch die Ausgabedimension Ihres Modells, z. B. 3072 oder 768, oder lassen Sie vector_length weg, wenn die Spalte Vektoren mit unterschiedlichen Dimensionen speichert:

CREATE TABLE Products(
  id INT64 NOT NULL,
  description STRING(MAX),
  embeddings ARRAY<FLOAT32>(vector_length=>VECTOR_LENGTH),
) 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

Wenn Sie Einbettungen generieren möchten, übergeben Sie einen Textabschnitt mit der folgenden SQL-Anweisung direkt an die Funktion spanner.ML_PREDICT_ROW:

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

Ersetzen Sie Folgendes:

  • PROJECT: das Projekt, in dem der Agent Platform-Endpunkt gehostet wird
  • LOCATION: der Standort des Agent Platform-Endpunkts
  • MODEL_NAME: der Name des Agent Platform-Modells zur Texteinbettung

Verwenden Sie die folgende SQL-Anweisung, 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/$MODEL_NAME',
    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 Agent Platform-Endpunkt gehostet wird
  • LOCATION: der Standort des Agent Platform-Endpunkts
  • MODEL_NAME: der Name des Agent Platform-Modells zur Texteinbettung

So geben Sie den Aufgabentyp und die Ausgabedimensionen an:

UPDATE Products p
SET description_embedding = spanner.float64_array(
  spanner.ML_PREDICT_ROW(
   'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
    JSONB_BUILD_OBJECT(
      'instances', JSONB_BUILD_ARRAY(
        JSONB_BUILD_OBJECT(
          'content', p.description,
          'task_type', 'RETRIEVAL_DOCUMENT'
        )
      ),
      'parameters', JSONB_BUILD_OBJECT('outputDimensionality', 768)
    )
  )->'predictions'->0->'embeddings'->'values'
);

SELECT p.product_id, p.name, p.description, spanner.COSINE_DISTANCE(
    p.description_embedding,
    spanner.float64_array(
      spanner.ML_PREDICT_ROW(
        'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
        JSONB_BUILD_OBJECT(
          'instances', JSONB_BUILD_ARRAY(
            JSONB_BUILD_OBJECT(
              'content', $1,
              'task_type', 'RETRIEVAL_QUERY'
            )
          ),
          'parameters', JSONB_BUILD_OBJECT('outputDimensionality', 768)
        )
      )->'predictions'->0->'embeddings'->'values'
    )
  ) AS distance
FROM Products p
ORDER BY distance
LIMIT 5;

Ersetzen Sie Folgendes:

  • PROJECT: das Projekt, in dem der Agent Platform-Endpunkt gehostet wird
  • LOCATION: der Standort des Agent Platform-Endpunkts
  • MODEL_NAME: der Name des Agent Platform-Modells zur Texteinbettung

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 zum Speichern der Einbettungen eine Lese-/Schreibtransaktion.

Für Arbeitslasten, die weniger leistungsempfindlich sind, können Sie Einbettungen mit dem folgenden SQL-Code in einer Lese-/Schreibtransaktion generieren und einfügen. Die Angabe von VECTOR LENGTH ist optional für das Speichern von Einbettungen, wird für die KNN-Suche empfohlen und ist für Vektorindexe erforderlich. Ersetzen Sie VECTOR_LENGTH durch die Ausgabedimension Ihres Modells, z. B. 3072 oder 768, oder lassen Sie VECTOR LENGTH weg, wenn die Spalte Vektoren mit unterschiedlichen Dimensionen speichert:

CREATE TABLE Products (
  id INT8 NOT NULL,
  description TEXT,
  embeddings REAL[] VECTOR LENGTH VECTOR_LENGTH,
  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/$MODEL_NAME',
    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 Agent Platform-Endpunkt gehostet wird
  • LOCATION: der Standort des Agent Platform-Endpunkts
  • MODEL_NAME: der Name des Agent Platform-Modells zur Texteinbettung

Texteinbettungen aktualisieren

Wenn Sie Ihre Einbettungen aktualisieren oder Daten in Echtzeit aufnehmen möchten, verwenden Sie die Anweisung UPDATE (GoogleSQL und PostgreSQL).

Verwenden Sie die folgende SQL-Anweisung, 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 Agent Platform-Modells zur Texteinbettung

PostgreSQL

UPDATE
  Products
SET
  description = $1,
  embeddings = spanner.FLOAT32_ARRAY(
    spanner.ML_PREDICT_ROW(
      'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
      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 Agent Platform-Endpunkt gehostet wird
  • LOCATION: der Standort des Agent Platform-Endpunkts
  • MODEL_NAME: der Name des Agent Platform-Modells zur Texteinbettung

Nächste Schritte