En esta página, se describe cómo usar la API de Vertex AI text-embeddings para generar, almacenar y actualizar embeddings de texto para los datos almacenados en bases de datos de Spanner para el dialecto de GoogleSQL y bases de datos de dialecto de PostgreSQL.
Una incorporación de texto es una representación vectorial de datos de texto y se usa de muchas maneras para encontrar elementos similares. Interactúas con ellas cada vez que completas una Búsqueda de Google o ves recomendaciones cuando compras en línea. Cuando creas incorporaciones de texto, obtienes representaciones vectoriales de texto natural como arrays de números de punto flotante. Esto significa que todo tu texto de entrada tiene asignada una representación numérica. Mediante la comparación de la distancia numérica entre las representaciones vectoriales de dos textos, una aplicación puede determinar la similitud entre el texto o los objetos representados por este.
Con la API de incorporaciones de texto de Vertex AI, puedes crear una incorporación de texto con IA generativa. En este instructivo, usarás el modelo text-embedding
de Vertex AI para generar incorporaciones de texto para los datos almacenados en Spanner.
Para obtener más información sobre los embeddings, consulta Obtén incorporaciones de texto.
Objetivo
En este instructivo, aprenderás a realizar lo siguiente:
- Registra el modelo de Vertex AI
text-embedding
en un esquema de Spanner con instrucciones DDL. - Haz referencia al modelo registrado con consultas en SQL para generar embeddings a partir de los datos almacenados en Spanner.
Precios
En este instructivo, se usan los siguientes componentes facturables de Google Cloud:
- Spanner
- Vertex AI
Para obtener más información sobre los costos de Spanner, consulta la página Precios de Spanner.
Para obtener más información sobre los costos de Vertex AI, consulta la página Precios de Vertex AI.
Genera y almacena embeddings de texto
Según el modelo que uses, la generación de embeddings puede tardar un poco. En el caso de las cargas de trabajo más sensibles al rendimiento, la práctica recomendada es evitar generar incorporaciones en las transacciones de lectura y escritura. En su lugar, genera los embeddings en una transacción de solo lectura con los siguientes ejemplos de SQL.
GoogleSQL
Registra un modelo de embeddings de texto en Spanner
En GoogleSQL, debes registrar un modelo antes de usarlo con la función ML.PREDICT
. Para registrar el modelo text-embedding
en una base de datos de Spanner, ejecuta la siguiente instrucción 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/text-embedding$MODEL_VERSION'
);
Reemplaza lo siguiente:
MODEL_NAME
: El nombre del modelo de embeddingPROJECT
: Es el proyecto que aloja el extremo de Vertex AI.LOCATION
: Es la ubicación del extremo de Vertex AI.MODEL_VERSION
: Es la versión del modelo de incorporación detext-embedding
.
Spanner otorga los permisos adecuados automáticamente. Si no es así, revisa el control de acceso al extremo del modelo.
El descubrimiento y la validación de esquemas no están disponibles para los modelos de IA generativa. Debes proporcionar cláusulas INPUT
y OUTPUT
que coincidan con el esquema de los modelos. Para ver el esquema completo del modelo de incorporación de texto, consulta Obtén incorporaciones de texto.
Genera incorporaciones de texto
Para generar embeddings, 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 embeddings para los datos almacenados en una tabla, usa el siguiente código SQL:
SELECT id, embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT id, description as content FROM Products)
);
Almacena incorporaciones de texto
Después de generar las incorporaciones en una transacción de solo lectura, almacénalas en Spanner para que se puedan administrar con tus datos operativos. Para almacenar las incorporaciones, usa una transacción de lectura y escritura.
Para las cargas de trabajo que son menos sensibles al rendimiento, puedes generar e insertar incorporaciones con el siguiente código 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
Genera incorporaciones de texto
Para generar embeddings, 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/text-embedding$MODEL_VERSION',
'{"instances": [{"content": "A product description"}]}'::jsonb
) ->'predictions'->0->'embeddings'->'values';
Reemplaza lo siguiente:
PROJECT
: Es el proyecto que aloja el extremo de Vertex AI.LOCATION
: Es la ubicación del extremo de Vertex AI.MODEL_VERSION
: Es la versión del modelo de incorporación detext-embedding
.
Para generar embeddings para los datos almacenados en una tabla, usa el siguiente código SQL:
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;
Reemplaza lo siguiente:
PROJECT
: Es el proyecto que aloja el extremo de Vertex AI.LOCATION
: Es la ubicación del extremo de Vertex AI.MODEL_VERSION
: Es la versión del modelo de incorporación detext-embedding
.
Almacena incorporaciones de texto
Después de generar las incorporaciones en una transacción de solo lectura, almacénalas en Spanner para que se puedan administrar con tus datos operativos. Para almacenar las incorporaciones, usa una transacción de lectura y escritura.
Para las cargas de trabajo que son menos sensibles al rendimiento, puedes generar e insertar incorporaciones con el siguiente código 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/text-embedding$MODEL_VERSION',
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', @Description)))
) -> 'predictions'->0->'embeddings'->'values'
));
Reemplaza lo siguiente:
PROJECT
: Es el proyecto que aloja el extremo de Vertex AI.LOCATION
: Es la ubicación del extremo de Vertex AI.MODEL_VERSION
: Es la versión del modelo de incorporación detext-embedding
.
Actualiza las incorporaciones de texto
Para actualizar tus incorporaciones o transferir datos en tiempo real, usa la instrucción UPDATE
(GoogleSQL y PostgreSQL).
Para actualizar la tabla Products
en el ejemplo anterior, usa el siguiente SQL:
GoogleSQL
UPDATE Products
SET
description = @description,
embeddings = (SELECT embeddings.values
FROM ML.PREDICT(MODEL MODEL_NAME, (SELECT @description as content))
)
WHERE id = @id;
Reemplaza lo siguiente:
MODEL_NAME
: El nombre del modelo de embedding
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;
Reemplaza lo siguiente:
PROJECT
: Es el proyecto que aloja el extremo de Vertex AI.LOCATION
: Es la ubicación del extremo de Vertex AI.MODEL_VERSION
: Es la versión del modelo de incorporación detext-embedding
.
¿Qué sigue?
- Aprende cómo usar la Búsqueda de vectores de Vertex AI para buscar elementos similares de forma semántica.
- Obtén más información sobre el aprendizaje automático y las incorporaciones en nuestro curso intensivo sobre incorporaciones.