Esta página fornece um exemplo de fluxo de trabalho que demonstra como a função mysql.ml_embedding()
funciona com os dados armazenados em suas tabelas e a funcionalidade de consulta mysql vector
. O exemplo usa entrada de texto simples para buscar um resultado de um banco de dados que se baseia na análise semântica do significado do texto orientada por um modelo de linguagem de grande porte (LLM).
Um cenário de exemplo de um fluxo de trabalho de incorporação
Imagine um banco de dados rodando no Cloud SQL para MySQL com os seguintes aspectos:
O banco de dados contém uma tabela:
items
. Cada linha desta tabela descreve um item que sua empresa vende.A tabela
items
contém uma coluna:complaints
. Esta coluna armazena reclamações de compradores registradas sobre cada item como texto simples.O banco de dados se integra ao Vertex AI Model Garden , dando-lhe acesso ao
textembedding-gecko
LLM.
Embora este banco de dados armazene reclamações sobre itens, essas reclamações são armazenadas como texto simples, o que dificulta a consulta. Por exemplo, se você quiser ver quais itens têm mais reclamações de clientes que receberam a cor errada da mercadoria, você pode realizar consultas SQL comuns na tabela, procurando por várias correspondências de palavras-chave. No entanto, essa abordagem corresponde apenas às linhas que contêm essas palavras-chave exatas.
Por exemplo, uma consulta SQL básica como SELECT * FROM item WHERE complaints LIKE "%wrong color%"
não retorna uma linha onde o campo complaints
contém apenas The picture shows a blue one, but the one I received was red
.
Consultas SQL usando embeddings com tecnologia LLM podem ajudar a preencher essa lacuna. Ao aplicar embeddings, você pode consultar a tabela neste exemplo em busca de itens cujas reclamações tenham semelhança semântica com um determinado prompt de texto, como "Era a cor errada".
As etapas a seguir mostram como habilitar isso no cenário de exemplo descrito anteriormente.
Preparar a mesa
Antes de executar consultas baseadas em LLM no conteúdo da tabela items
, você deve preparar a tabela para armazenar e indexar embeddings com base nos seus dados existentes.
Crie uma coluna para armazenar embeddings
Adicione uma coluna à tabela para armazenar incorporações.
sql ALTER TABLE items ADD COLUMN complaint_embedding vector(768) using varbinary;
Este exemplo especifica 768
como argumento porque é esse o número de dimensões que o LLM textembedding-gecko
suporta. Para mais informações, consulte Gerar um arquivo .
O exemplo aplica o tipo de dados vector
à coluna para simplificar o uso de funções e operadores pgvector
com os valores da coluna.
Preencha a nova coluna
Use a função mysql.ml_embedding()
para preencher esta nova coluna com embeddings com base no valor do texto de cada linha que aparece na coluna complaints
. Neste exemplo, o Cloud SQL gera os embeddings usando o LLM com o ID textembedding-gecko
, versão 004
.
UPDATE items SET complaint_embedding = mysql.ml_embedding('text-embedding-005', complaints);
mysql.ml_embedding()
em um valor vector
implicitamente para armazenar o valor na coluna vector
que você criou em Criar uma coluna para armazenar embeddings .Criar um índice
Para melhorar o desempenho, adicione um índice à tabela items
.
CREATE VECTOR INDEX complaint_embed_idx ON items(complaint_embedding)
USING SCANN DISTANCE_MEASURE=COSINE;
Para obter mais informações sobre como criar esse tipo de índice, consulte Criar um índice de vizinho mais próximo . Além disso, para obter mais informações sobre como ajustar o índice definindo parâmetros, consulte Incorporações de consulta e índice .
Execute consultas com tecnologia LLM com o texto fornecido
Agora você pode realizar consultas semânticas de vizinho mais próximo na tabela items
. A consulta a seguir usa a função approx_distance
para concluir as seguintes ações:
- Classifique as linhas da tabela por proximidade semântica com o texto de
It was the wrong color
. - Retorne as dez principais reclamações.
A consulta exibe os valores de id
e name
da primeira linha classificada.
SELECT mysql.ML_EMBEDDING('text-embedding-005', 'It was the wrong color') into @query_vector;
select id, name from items order by approx_distance(complaint_embedding , @query_vector,'distance_measure=cosine') limit 10;