Compreenda um exemplo de um fluxo de trabalho de incorporação

Esta página oferece um exemplo de um fluxo de trabalho que demonstra como a função mysql.ml_embedding() funciona com os dados armazenados nas suas tabelas e a funcionalidade de consulta mysql vector. O exemplo usa a entrada de texto simples para obter um resultado de uma base de dados que se baseia na análise semântica do significado do texto orientada por um modelo de linguagem (conteúdo extenso).

Um cenário de exemplo de um fluxo de trabalho de incorporação

Imagine uma base de dados executada no Cloud SQL para MySQL com os seguintes aspetos:

  • A base de dados contém uma tabela: items. Cada linha nesta tabela descreve um item que a sua empresa vende.

  • A tabela items contém uma coluna: complaints. Esta coluna armazena as queixas dos compradores registadas sobre cada item como texto simples.

  • A base de dados integra-se com o Model Garden do Vertex AI, o que lhe dá acesso ao textembedding-gecko GML.

Apesar de esta base de dados armazenar queixas sobre artigos, estas queixas são armazenadas como texto simples, o que dificulta a consulta. Por exemplo, se quiser ver que artigos têm o maior número de reclamações de clientes que receberam a cor errada da mercadoria, pode executar consultas SQL normais na tabela, procurando várias correspondências de palavras-chave. No entanto, esta abordagem só faz a correspondência com as 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 devolve uma linha em que o campo complaints contenha apenas The picture shows a blue one, but the one I received was red.

As consultas SQL que usam incorporações com tecnologia de MDIs podem ajudar a colmatar esta lacuna. Ao aplicar incorporações, pode consultar a tabela neste exemplo para itens em que as reclamações têm semelhança semântica com um comando de texto específico, como "Era a cor errada".

Os passos seguintes mostram como ativar esta opção no cenário de exemplo descrito anteriormente.

Prepare a tabela

Antes de executar consultas baseadas em GML no conteúdo da tabela items, tem de preparar a tabela para armazenar e indexar incorporações com base nos seus dados existentes.

Crie uma coluna para armazenar incorporações

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 é o número de dimensões que o MDG textembedding-gecko suporta. Para mais informações, consulte o artigo Gere uma incorporação.

O exemplo aplica o tipo de dados vector à coluna para simplificar a utilização 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 incorporações baseadas no valor do texto de cada linha que aparece na coluna complaints. Neste exemplo, o Cloud SQL gera as incorporações através do MDG com o ID textembedding-gecko e a versão 004.

UPDATE items SET complaint_embedding = mysql.ml_embedding('text-embedding-005', complaints);
Este exemplo converte o valor de retorno binário de mysql.ml_embedding() num valor vector implicitamente para armazenar o valor na coluna vector que criou em Crie uma coluna para armazenar incorporações.

Crie 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 mais informações sobre como criar este tipo de índice, consulte o artigo Crie um índice de vizinhos mais próximos. Além disso, para mais informações sobre como otimizar o índice através da definição de parâmetros, consulte o artigo Consultar e incorporar índices.

Executar consultas com tecnologia de MDIs/CEs com texto fornecido

Agora, pode fazer consultas semânticas de vizinhos mais próximos na tabela items. A consulta seguinte usa a função approx_distance para concluir as seguintes ações:

  • Ordene as linhas da tabela por proximidade semântica com o texto de It was the wrong color.
  • Devolver as dez principais reclamações.

A consulta apresenta os valores id e name da primeira linha ordenada.

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;

O que se segue?