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
- Leia a visão geral sobre a pesquisa de vetor no Cloud SQL.
- Saiba como ativar e desativar embeddings de vetor na instância.
- Saiba como criar índices de vetor.
- Saiba como realizar pesquisas em embeddings de vetor.