Obtener las inserciones de texto de Vertex AI

En esta página se describe cómo usar la API Vertex AI Text Embedding para generar, almacenar y actualizar las representaciones de texto de los datos almacenados en bases de datos de Spanner con dialecto GoogleSQL y PostgreSQL.

Una incrustación de texto es una representación vectorial de datos de texto que se usa de muchas formas para encontrar elementos similares. Interactúas con ellos cada vez que completas una búsqueda en Google o ves recomendaciones al comprar online. Cuando creas incrustaciones de texto, obtienes representaciones vectoriales de texto natural como matrices de números de coma flotante. Esto significa que a todo el texto de entrada se le asigna una representación numérica. Al comparar la distancia numérica entre las representaciones vectoriales de dos fragmentos de texto, una aplicación puede determinar la similitud entre el texto o los objetos representados por el texto.

Con la API Vertex AI Text Embeddings, puedes crear una inserción de texto con IA generativa. En este tutorial, usarás el modelo de inserción de texto de Vertex AI para generar inserciones de texto de los datos almacenados en Spanner.

Para obtener más información sobre las inserciones de texto y los modelos admitidos, consulta Obtener inserciones de texto.

Objetivo

En este tutorial, aprenderás a hacer lo siguiente:

  • Registra un modelo de inserciones de texto de Vertex AI en un esquema de Spanner mediante instrucciones DDL.
  • Haga referencia al modelo registrado mediante consultas SQL para generar inserciones a partir de los datos almacenados en Spanner.

Precios

En este tutorial se usan componentes facturables de Google Cloud, como los siguientes:

  • Spanner
  • Vertex AI

Para obtener más información sobre los costes de Spanner, consulta la página Precios de Spanner.

Para obtener más información sobre los costes de Vertex AI, consulta la página Precios de Vertex AI.

Generar y almacenar incrustaciones de texto

En función del modelo que utilices, la generación de las inserciones puede tardar un poco. En el caso de las cargas de trabajo más sensibles al rendimiento, la práctica recomendada es evitar generar inserciones en transacciones de lectura y escritura. En su lugar, genera las inserciones en una transacción de solo lectura con los siguientes ejemplos de SQL.

GoogleSQL

Registrar un modelo de inserciones de texto en Spanner

En GoogleSQL, debe registrar un modelo antes de usarlo con la función ML.PREDICT. Para registrar el modelo de inserciones de texto de Vertex AI en una base de datos de Spanner, ejecuta la siguiente instrucción de DDL:

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/$MODEL_NAME'
);

Haz los cambios siguientes:

  • MODEL_NAME: el nombre del modelo de inserción de texto de Vertex AI
  • PROJECT: el proyecto que aloja el endpoint de Vertex AI
  • LOCATION: la ubicación del endpoint de Vertex AI

Spanner concede los permisos adecuados automáticamente. Si no es así, revisa el control de acceso al endpoint del modelo.

La detección y la validación de esquemas no están disponibles para los modelos de IA generativa. Debe proporcionar cláusulas INPUT y OUTPUT que coincidan con el esquema de los modelos. Para ver el esquema completo del modelo de inserción de texto, consulta Obtener inserciones de texto.

Generar embeddings de texto

Para generar incrustaciones, pasa un fragmento de texto directamente a la función ML.PREDICT con el siguiente código SQL:

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

Para generar inserciones de datos almacenados en una tabla, usa el siguiente SQL:

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

Embeddings de texto de tienda

Después de generar las inserciones en una transacción de solo lectura, almacénalas en Spanner para que se puedan gestionar con tus datos operativos. Para almacenar las inserciones, usa una transacción de lectura y escritura.

En el caso de las cargas de trabajo que no requieren un rendimiento tan alto, puedes generar e insertar las inserciones con el siguiente SQL en una transacción de lectura y escritura:

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

Generar embeddings de texto

Para generar incrustaciones, pasa un fragmento de texto directamente a la función spanner.ML_PREDICT_ROW con el siguiente código SQL:

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

Haz los cambios siguientes:

  • PROJECT: el proyecto que aloja el endpoint de Vertex AI
  • LOCATION: la ubicación del endpoint de Vertex AI
  • MODEL_NAME: el nombre del modelo de inserción de texto de Vertex AI

Para generar inserciones de datos almacenados en una tabla, usa el siguiente SQL:

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;

Haz los cambios siguientes:

  • PROJECT: el proyecto que aloja el endpoint de Vertex AI
  • LOCATION: la ubicación del endpoint de Vertex AI
  • MODEL_NAME: el nombre del modelo de inserción de texto de Vertex AI

Embeddings de texto de tienda

Después de generar las inserciones en una transacción de solo lectura, almacénalas en Spanner para que se puedan gestionar con tus datos operativos. Para almacenar las inserciones, usa una transacción de lectura y escritura.

En el caso de las cargas de trabajo que no requieren un rendimiento tan alto, puedes generar e insertar las inserciones con el siguiente SQL en una transacción de lectura y escritura:

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/$MODEL_NAME',
    JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', @Description)))
  ) -> 'predictions'->0->'embeddings'->'values'
));

Haz los cambios siguientes:

  • PROJECT: el proyecto que aloja el endpoint de Vertex AI
  • LOCATION: la ubicación del endpoint de Vertex AI
  • MODEL_NAME: el nombre del modelo de inserción de texto de Vertex AI

Actualizar embeddings de texto

Para actualizar tus embeddings o ingerir datos en tiempo real, usa la instrucción UPDATE (GoogleSQL y PostgreSQL) .

Para actualizar la tabla Products del ejemplo anterior, usa el siguiente código SQL:

GoogleSQL

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

Haz los cambios siguientes:

  • MODEL_NAME: el nombre del modelo de inserción de texto de Vertex AI

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;

Haz los cambios siguientes:

  • PROJECT: el proyecto que aloja el endpoint de Vertex AI
  • LOCATION: la ubicación del endpoint de Vertex AI
  • MODEL_NAME: el nombre del modelo de inserción de texto de Vertex AI

Siguientes pasos