Esta página oferece um exemplo de um fluxo de trabalho que demonstra como a função
embedding()
funciona
com os dados armazenados nas suas tabelas e a
pgvector
funcionalidade de consulta.
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 em execução no Cloud SQL para PostgreSQL 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);
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 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 = embedding('text-embedding-005', complaints);
real[]
de
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 INDEX complaint_embed_idx ON items
USING hnsw (complaint_embedding vector_cosine_ops);
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 indexar incorporações com a API pgvector
.
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 o operador <->
que pgvector
fornece
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 id, name FROM items
ORDER BY complaint_embedding
<-> embedding('text-embedding-005', 'It was the wrong color')::vector LIMIT 10;