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 embedding() funciona com os dados armazenados nas suas tabelas e a pgvectorfuncionalidade 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);
Este exemplo converte o valor de retorno 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;

O que se segue?