Neste documento, explicamos como realizar pesquisas de similaridade de vetores no AlloyDB para PostgreSQL
usando a extensão pgvector
. A pesquisa de similaridade de vetores, também conhecida como pesquisa de vizinho
mais próximo, permite encontrar os pontos de dados mais
semelhantes a determinado vetor de consulta.
É possível consultar seu banco de dados do AlloyDB em busca de vetores semanticamente parecidos depois
de armazenar e indexar embeddings. Use recursos de consulta pgvector
para encontrar os
vizinhos mais próximos de um vetor de embedding.
Para mais informações sobre como armazenar embeddings de vetor e criar um índice, consulte Armazenar embeddings de vetor e Criar índices, respectivamente.
Fazer uma pesquisa de similaridade com uma entrada de vetor
Para fazer uma pesquisa de similaridade, especifique a tabela, a coluna de embedding,
a função de distância, o embedding de destino e o número de linhas a serem retornadas. Você também
pode usar a função embedding()
para traduzir um texto em um vetor e
comparar o vetor com embeddings armazenados usando operadores pgvector
.
Para encontrar os vizinhos semânticos mais próximos de um vetor de embedding, execute a consulta de exemplo a seguir, em que você define a mesma função de distância usada durante a criação do índice.
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY ['EMBEDDING']
LIMIT ROW_COUNT
Substitua o seguinte:
TABLE
: a tabela que contém o embedding com o qual você vai comparar o texto.EMBEDDING_COLUMN
: a coluna que contém os embeddings armazenados.DISTANCE_FUNCTION_QUERY
: a função de distância a ser usada com essa consulta. Escolha uma das seguintes opções com base na função de distância usada ao criar o índice:Distância de L2:
<->
Produto interno:
<#>
Distância do cosseno:
<=>
EMBEDDING
: o vetor de embedding para encontrar os vizinhos semânticos armazenados mais próximos.ROW_COUNT
: o número de linhas que serão retornadas.Especifique
1
se você quiser apenas a melhor correspondência.
Para mais exemplos de consultas, consulte Consultas.
Fazer uma pesquisa de similaridade usando pgvector
com uma entrada de texto
Você também pode usar a função embedding()
para
traduzir o texto em um vetor e encontrar as linhas do banco de dados com os embeddings mais semanticamente
parecidas. A extensão pgvector
do PostgreSQL é
personalizada para o AlloyDB e é chamada de vector
. Você aplica
o vetor a um dos operadores de vizinho mais próximo do pgvector
, por exemplo
, <=>
para a distância do cosseno.
Como embedding()
retorna uma matriz real
, é necessário transmitir explicitamente a
chamada embedding()
para vector
para usar esses valores com
operadores pgvector
.
CREATE EXTENSION IF NOT EXISTS vector;
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<=> google_ml.embedding('MODEL_IDVERSION_TAG', 'TEXT')
LIMIT ROW_COUNT
Substitua o seguinte:
MODEL_ID
: o ID do modelo a ser consultado.Se você estiver usando o Model Garden da Vertex AI, especifique
text-embedding-005
como o ID do modelo. Esses são os modelos baseados na nuvem que o AlloyDB pode usar para embeddings de texto. Para mais informações, consulte Embeddings de texto.Opcional:
VERSION_TAG
: a tag da versão do modelo a ser consultada. Adicione@
ao início da tag.Se você estiver usando um dos modelos em inglês
text-embedding-005
com a Vertex AI, especifique uma das tags de versão, por exemplo,text-embedding-005
, listadas em Versões de modelo.O Google recomenda que você especifique a tag de versão. Se você não especificar a tag de versão, o AlloyDB usará a versão mais recente do modelo, o que pode gerar resultados inesperados.
TEXT
: o texto a ser traduzido em um embedding de vetor.
Para acelerar sua pesquisa de KNN filtrada, use o mecanismo colunar do AlloyDB. Para mais informações, consulte Acelerar a pesquisa de vetor filtrada (Pré-lançamento) e Configurar o mecanismo colunar.
A seguir
- Tutorial sobre como fazer uma pesquisa vetorial
- Ajustar o desempenho da consulta de vetores
- Métricas de índice vetorial
- Aprenda a criar um assistente de compras inteligente com o AlloyDB, o pgvector e o gerenciamento de endpoints de modelo.