Generar y gestionar incrustaciones de vectores

En esta página se describe cómo generar y almacenar inserciones vectoriales. Para obtener información general, consulta Almacenamiento de incrustaciones de vectores.

Antes de empezar

Debes tener una instancia de Cloud SQL con las marcas de base de datos de vectores habilitadas.

Generar incrustaciones de vectores a partir de datos de filas

Puedes generar una inserción de vector para los datos de una fila determinada mediante una API de inserción de texto, como Vertex AI o OpenAI. Puedes usar cualquier API de inserciones de texto con las inserciones de vectores de Cloud SQL. Sin embargo, debes usar la misma API de inserción de texto para generar el vector de la cadena de consulta. No puedes combinar diferentes APIs para los datos de origen y la vectorización de consultas.

Por ejemplo, puedes generar una incrustación vectorial a partir de Vertex AI:

from vertexai.language_models import TextEmbeddingModel

def text_embedding() -> list:
    """Text embedding with a Large Language Model."""
    model = TextEmbeddingModel.from_pretrained("text-embedding-004")
    embeddings = model.get_embeddings(["What is life?"])
    for embedding in embeddings:
        vector = embedding.values
        print(f"Length of Embedding Vector: {len(vector)}")
    return vector

if __name__ == "__main__":
    text_embedding()

Almacenar incrustaciones de vectores

En esta sección se proporcionan ejemplos de instrucciones para almacenar inserciones vectoriales en Cloud SQL.

Crear una tabla con una columna de inserción de vector

Usa la instrucción CREATE TABLE con una columna que utilice el tipo de datos VECTOR.

Usa la siguiente sintaxis para crear la tabla:

CREATE TABLE TABLE_NAME(
  id INTEGER
  PRIMARY KEY
    AUTO_INCREMENT,
    title VARCHAR(60),
    EMBEDDING_COLUMN_NAME
      VECTOR(VECTOR_DIMENSIONS)
  USING VARBINARY);

Sustituye los siguientes parámetros:

  • TABLE_NAME: el nombre de la tabla en la que quieras almacenar las inserciones.
  • EMBEDDING_COLUMN_NAME: el nombre de la columna que almacena la inserción.
  • VECTOR_DIMENSIONS: número de dimensiones que se van a usar en la inserción.

En el siguiente ejemplo, la columna de inserción tiene un vector con tres dimensiones. Los datos almacenados en esta columna tienen el tipo de datos VARBINARY.

CREATE TABLE books(
  id INTEGER PRIMARY KEY AUTO_INCREMENT, title VARCHAR(60), embedding VECTOR(3) USING VARBINARY);

Añadir una columna de inserciones vectoriales a una tabla

Usa la instrucción ALTER TABLE para añadir una columna de inserción de vector a una tabla. La columna debe usar el tipo de datos VECTOR para contener la inserción.

En el siguiente ejemplo, se inserta en la tabla una columna de inserción que tiene un vector con tres dimensiones. Los datos almacenados en esta columna tienen el tipo de datos VARBINARY.

ALTER TABLE books
ADD COLUMN embedding
  VECTOR(3)
USING VARBINARY;

Insertar una incrustación de vector

Usa INSERT con la función string_to_vector para insertar valores de inserción de vectores en una tabla.

En el siguiente ejemplo, se inserta un vector de tres dimensiones en la columna de inserciones.

INSERT INTO books
  (
    title,
    embedding)
VALUES (('book title', string_to_vector('[1,2,3]')));

Insertar varias incrustaciones de vectores

Usa INSERT con la función string_to_vector para insertar una lista de incrustaciones de vectores separadas por comas.

En la siguiente instrucción, se insertan dos inserciones, cada una de ellas con un vector de tres dimensiones, en la columna de inserciones.

INSERT INTO books
  (
    title,
    embedding)
VALUES
  (
    (
      'book title',
      string_to_vector('[1,2,3]')),
    ('book title', string_to_vector('[4,5,6]')));

Insertar o actualizar una incrustación de vector

Usa una operación INSERT o UPDATE en una tabla con la función string_to_vector para añadir una columna de inserción de vector con la siguiente sintaxis.

En la siguiente instrucción, se usa una inserción o actualización para insertar o actualizar la columna de inserción con una inserción que contiene un vector con tres dimensiones.

INSERT INTO books
  (
    id,
    title,
    embedding)
VALUES
  (
    (
      1,
      'book title',
      string_to_vector('[1,2,3]')))
ON DUPLICATE KEY UPDATE embedding = string_to_vector('[1,2,3]');

Actualizar una incrustación de vector

Usa UPDATE con la función string_to_vector para actualizar una incrustación de vector.

En la siguiente instrucción, UPDATE se usa para actualizar la columna de inserción con un vector de tres dimensiones.

UPDATE books
SET embedding = string_to_vector('[7,8,9]')
WHERE id = 1;

Recuperar incrustaciones de vectores

Para recuperar incrustaciones de vectores, usa la función vector_to_string de Cloud SQL junto con el nombre de la incrustación.

En la siguiente instrucción, se recupera la columna de inserción para verla.

SELECT vector_to_string(embedding) FROM books WHERE id = 1;

Eliminar una incrustación de vector

Usa DELETE con la función string_to_vector para quitar una incrustación de vector de una tabla. Si hay un índice vectorial, primero debes eliminarlo. Para obtener más información, consulta Eliminar un índice vectorial.

En la siguiente instrucción, se usa DELETE para eliminar el valor de la columna de inserción.

DELETE FROM books
WHERE embedding = string_to_vector('[1,2,3]');

Siguientes pasos