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 AIPROJECT
: el proyecto que aloja el endpoint de Vertex AILOCATION
: 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 AILOCATION
: la ubicación del endpoint de Vertex AIMODEL_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 AILOCATION
: la ubicación del endpoint de Vertex AIMODEL_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 AILOCATION
: la ubicación del endpoint de Vertex AIMODEL_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 AILOCATION
: la ubicación del endpoint de Vertex AIMODEL_NAME
: el nombre del modelo de inserción de texto de Vertex AI
Siguientes pasos
- Consulta cómo usar Vertex AI Vector Search para buscar elementos semánticamente similares.
- Consulta más información sobre el aprendizaje automático y las inserciones en nuestro curso intensivo sobre inserciones.
- Consulta más información sobre los modelos de inserción de texto de Vertex AI.