Gerar e gerenciar embeddings de vetor

Esta página descreve como gerar e armazenar embeddings de vetor. Para uma visão geral, consulte Armazenamento de embeddings de vetor.

Antes de começar

Se você estiver usando o Cloud SQL para MySQL 8.4 ou versões anteriores, precisará de uma instância do Cloud SQL com a flag de banco de dados cloudsql_vector ativada para gerar e armazenar embeddings de vetor.

Se você estiver usando o Cloud SQL para MySQL 9.7 ou versões mais recentes, poderá gerar e armazenar embeddings de vetor sem definir a flag de banco de dados cloudsql_vector na instância do Cloud SQL. No entanto, não é possível criar índices de vetor ou realizar pesquisas de ANN nos dados de vetor.

Gerar embeddings de vetor com base nos dados das linhas

É possível gerar um embedding de vetor para os dados de uma determinada linha usando uma API de embedding de texto, como a Vertex AI ou a OpenAI. É possível usar qualquer API de embedding de texto com embeddings de vetor do Cloud SQL. No entanto, é necessário usar a mesma API de embedding de texto para gerar vetores de string de consulta. Não é possível combinar diferentes APIs para vetorização de consultas e dados de origem.

Por exemplo, é possível gerar um embedding de vetor da 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()

Armazenar embeddings de vetores

Esta seção fornece exemplos de instruções para armazenar embeddings de vetor no Cloud SQL.

Criar uma nova tabela com uma coluna de embeddings de vetor

Use a instrução CREATE TABLE com uma coluna que usa o tipo de dados VECTOR.

Use a sintaxe a seguir para criar a tabela.

Para o Cloud SQL para MySQL 8.4 e versões anteriores, use a seguinte sintaxe:

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

Substitua os seguintes parâmetros:

  • TABLE_NAME: o nome da tabela em que você quer armazenar os embeddings.
  • EMBEDDING_COLUMN_NAME: o nome da coluna que armazena o embedding.
  • VECTOR_DIMENSIONS: o número de dimensões a serem usadas para o embedding.

No exemplo a seguir, a coluna de embedding tem um vetor com três dimensões. Os dados armazenados nessa coluna têm o tipo de dados VARBINARY.

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

Para o Cloud SQL para MySQL 9.7 e versões mais recentes, declarar a palavra-chave VARBINARY é opcional e compatível com versões anteriores. Você também não precisa especificar as dimensões do vetor, que é definido como 2048 por padrão.

Para o Cloud SQL para MySQL 9.7 e versões mais recentes, é possível usar a seguinte sintaxe:

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

Para mais informações, consulte O tipo VECTOR na documentação do MySQL.

Adicionar uma coluna de embeddings de vetor a uma tabela já existente

Use a instrução ALTER TABLE para adicionar uma coluna de embeddings de vetor a uma tabela já existente. A coluna precisa usar o tipo de dados VECTOR para armazenar o embedding.

No exemplo a seguir, uma coluna de embedding que tem um vetor com três dimensões é inserida na tabela.

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

Para o MySQL 9.7:

ALTER TABLE books
ADD COLUMN embedding
  VECTOR(3);

Inserir um embedding de vetor

Use INSERT com a função string_to_vector para inserir valores de embedding de vetor em uma tabela.

No exemplo a seguir, um vetor com três dimensões é inserido na coluna de embedding.

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

Inserir vários embeddings de vetor

Use INSERT com a string_to_vector função para inserir uma lista separada por vírgulas de embeddings de vetor.

Na instrução a seguir, dois embeddings, cada um contendo um vetor com três dimensões, são inseridos na coluna de embedding.

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

Fazer upsert de um embedding de vetor

Use uma operação INSERT ou UPDATE em uma tabela com a string_to_vector função para adicionar uma coluna de embedding de vetor, usando a seguinte sintaxe.

Na instrução a seguir, um upsert é usado para inserir ou atualizar a coluna de embedding com um embedding que contém um vetor com três dimensões.

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]');

Atualizar um embedding de vetor

Use UPDATE com a string_to_vector função para atualizar um embedding de vetor.

Na instrução a seguir, UPDATE é usado para atualizar a coluna de embedding com um vetor com três dimensões.

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

Recuperar embeddings de vetor

Para recuperar embeddings de vetor, use a função do Cloud SQL vector_to_stringjunto com o nome do embedding.

Na instrução a seguir, a coluna de embedding é recuperada para visualização.

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

Excluir um embedding de vetor

Use DELETE com a string_to_vector função para remover um embedding de vetor de uma tabela. Se houver um índice de vetor, primeiro exclua-o. Para mais informações, consulte Remover um índice de vetor.

Na instrução a seguir, DELETE é usado para excluir o valor na coluna de embedding.

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

A seguir