Este documento explica como realizar pesquisas de similaridade de vetores no AlloyDB para PostgreSQL
usando a extensão pgvector
. A pesquisa de similaridade vetorial, também conhecida como pesquisa de vizinho mais próximo, permite encontrar os pontos de dados mais semelhantes a um determinado vetor de consulta.
Você pode consultar o banco de dados do AlloyDB em busca de vetores semanticamente semelhantes depois de armazenar e indexar os embeddings. Use os elementos de consulta pgvector
para encontrar os vizinhos mais próximos de um embedding de vetor.
Para mais informações sobre como armazenar embeddings de vetor e criar um índice, consulte Armazenar embeddings de vetor e Criar índices, respectivamente.
Executar uma pesquisa de similaridade com entrada vetorial
Para executar 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. Também é possível
usar a função embedding()
para traduzir texto em um vetor e, em seguida,
comparar o vetor com embeddings armazenados usando operadores pgvector
.
Para encontrar os vizinhos semânticos mais próximos de um vetor de incorporação, 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:
TABLE
: a tabela que contém o embedding para 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 quiser apenas a melhor correspondência.
Para mais informações sobre outros exemplos de consulta, consulte Como consultar.
Executar uma pesquisa de similaridade usando pgvector
com entrada de texto
Você também pode usar a função embedding()
para
converter o texto em um vetor. A extensão padrão pgvector
do PostgreSQL é
personalizada para o AlloyDB e é chamada de vector
. Você aplica
o vetor a um dos operadores vizinhos mais próximos pgvector
, por exemplo,
<->
para a distância L2, para encontrar as linhas do banco de dados com os embeddings mais semanticamente
semelhantes.
Como embedding()
retorna uma matriz real
, é necessário transmitir a chamada
embedding()
para vector
para usar esses valores com operadores
pgvector
.
CREATE EXTENSION IF NOT EXISTS google_ml_integration VERSION '1.2';
CREATE EXTENSION IF NOT EXISTS vector;
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<-> embedding('MODEL_IDVERSION_TAG', 'TEXT')
LIMIT ROW_COUNT
Substitua:
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
, listada em Versões de modelo.O Google recomenda que você sempre 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 levar a resultados inesperados.
TEXT
: o texto a ser traduzido em um embedding vetorial.
A seguir
- Tutorial de pesquisa vetorial
- Ajustar a performance da consulta de vetor
- Métricas do índice vetorial
- Aprenda a criar um assistente de compras inteligentes com o AlloyDB, o pgvector e o gerenciamento de endpoints do modelo.