Gerar e gerenciar embeddings de vetor

Nesta página, descrevemos 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 anterior, vai 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 mais recente, 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.

Gere 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 pela 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

Nesta seção, você verá 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 use o tipo de dados VECTOR.

Use a seguinte sintaxe 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);

No Cloud SQL para MySQL 9.7 e versões mais recentes, a declaração da palavra-chave VARBINARY é opcional e compatível com versões anteriores. Também não é necessário especificar as dimensões do vetor, que assume como padrão 2048.

Para o Cloud SQL para MySQL 9.7 e versões mais recentes, 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]);

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 embedding de vetor a uma tabela 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 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 função string_to_vector 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 função string_to_vector para adicionar uma coluna de embedding de vetor, usando a sintaxe a seguir.

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 função string_to_vector para atualizar um embedding de vetor.

Na instrução a seguir, UPDATE é usado para atualizar a coluna de embedding com um vetor de 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 vector_to_string do Cloud SQL 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 função string_to_vector para remover um embedding de vetor de uma tabela. Se houver um índice vetorial, primeiro você precisará excluí-lo. Para mais informações, consulte Remover um índice vetorial.

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