Vector Search do Edge SQL
Vector Search é um recurso do Edge SQL da Azion que permite aos clientes implementar mecanismos de busca semântica. Enquanto os modelos de busca tradicionais visam encontrar correspondências exatas, como correspondências de palavras-chave, os modelos de busca vetorial usam algoritmos especializados para identificar itens semelhantes com base em suas representações matemáticas, ou embeddings vetoriais.
Ao usar o Vector Search, você pode implementar vários casos de uso:
- Melhorar sistemas de busca e oferecer recomendações personalizadas, encontrando itens com características semelhantes ou com base nas preferências dos usuários, como produtos relacionados em e-commerce ou conteúdo em plataformas de streaming.
- Criar embeddings de texto para buscar texto semanticamente semelhante, onde palavras ou frases são representadas como vetores.
- Construir aplicações baseadas em IA, aproveitando o Processamento de Linguagem Natural (NLP) para assistentes de voz e chatbots.
Distribuído pela rede global de edge da Azion, esse recurso permite resultados de busca mais relevantes, recomendações em tempo real e insights, reduzindo drasticamente a latência e melhorando a satisfação do usuário. Tudo isso enquanto mantém a localidade dos dados e reduz a dependência do banco de dados centralizado.
Implementação
Escopo | Recurso |
---|---|
Implemente o Vector Search | Guia explicando os fundamentos da implementação do Vector Search |
Conheça o Edge SQL da Azion e suas funcionalidades | Referência do Edge SQL |
Bancos de dados e armazenamento
Ao aproveitar o Edge SQL, os bancos de dados de busca vetorial são otimizados para lidar com dados vetoriais de alta dimensão no edge. Isso permite processamento rápido e localizado, bem como redução de latência, permitindo que tarefas complexas para aplicações avançadas e intensivas em dados sejam executadas de forma eficiente.
O Edge SQL implementa Main/Replicas, distribuídos dentro da Edge Network da Azion, para permitir consultas de ultra-baixa latência no edge. Essa abordagem permite que seja acessado de qualquer edge location, facilitando o processamento em tempo real e a análise de dados, garantindo disponibilidade e tolerância a falhas. O Edge SQL usa o dialeto do SQLite.
Colunas
Para armazenar vetores em um banco de dados de busca vetorial, você pode adicionar uma coluna especificamente para os dados vetoriais.
Por exemplo, usando o modelo text-embedding-3-small
e uma dimensão de 1536
, essa coluna deve ser declarada para conter um array de números de ponto flutuante de 32 bits como um tipo de objeto binário grande (BLOB). O (3) no exemplo especifica o número de elementos de ponto flutuante de 32 bits (F32) no vetor, indicando um vetor de 3 dimensões:
Em seguida, você pode inserir dados na tabela, incluindo embeddings vetoriais (neste exemplo, representando as estatísticas da equipe para a temporada de 2023):
Embeddings
Embeddings são representações vetoriais numéricas de dados complexos (como palavras ou imagens) que capturam características essenciais, permitindo buscas baseadas em similaridade. No exemplo, dado um embedding de [80, 30, 60] para uma equipe, uma consulta pode recuperar outras equipes com embeddings semelhantes, ajudando a identificar equipes com estatísticas de desempenho comparáveis.
Usando embeddings, você pode consultar para encontrar informações semelhantes entre as equipes. Por exemplo, equipes com estatísticas semelhantes a 82 gols marcados, 25 gols sofridos e 63% de posse de bola:
Indexação
Considerando que o Vector Search usa bancos de dados e conjuntos de dados maiores, ele suporta indexação através de Vizinhos Aproximados Mais Próximos (ANN), usando SQL, envolvendo a coluna vetorial na função libsql_vector_idx
.
Para usar adequadamente o índice, você pode modificar sua consulta para garantir que o índice seja consultado. Usar o índice não é automático, uma vez que ele é representado internamente como uma tabela diferente. Para a consulta do exemplo anterior, podemos modificá-la ligeiramente para garantir que o índice seja consultado:
Limites e considerações
- O Vector Search utiliza libSQL.
- O LibSQL usa a classe de armazenamento BLOB nativa do SQLite para colunas vetoriais, definida de acordo com o número de bits usados para representar cada número de ponto flutuante no vetor.
- Tipos de vetor suportados:
FLOAT1BIT | F1BIT_BLOB
,FLOAT8 | F8_BLOB
,FLOATB16 | FB16_BLOB
,FLOAT16 | F16_BLOB
,FLOAT32 | F32_BLOB
eFLOAT64 | F64_BLOB
. OFLOAT32
é recomendado como ponto de partida. - A função vector_distance_cos calcula a distância cosseno, que é definida como:
Distância Cosseno = 1 — Similaridade Cosseno
.- A distância cosseno varia de 0 a 2, onde:
- Uma distância próxima de
0
indica que os vetores são quase idênticos ou exatamente correspondentes. - Uma distância próxima de
1
indica que os vetores são ortogonais (perpendiculares). - Uma distância próxima de
2
indica que os vetores estão apontando em direções opostas.
- Uma distância próxima de
- A distância cosseno varia de 0 a 2, onde:
- A distância euclidiana não é suportada para vetores
FLOAT1BIT de 1 bit
. - O LibSQL só pode operar em vetores com no máximo 65536 dimensões.
- O LibSQL implementa o algoritmo DiskANN para acelerar consultas de vizinhos mais próximos aproximados para tabelas com colunas vetoriais. Consulte a seção Indexação para mais informações.
- Para consultar um índice vetorial, você deve usar a função vector_top_k(idx_name, q_vector, k), que encontra os k vizinhos mais próximos e retorna seu ROWID ou PRIMARY KEY (chave primária).
- O índice vetorial funciona apenas para tabelas com ROWID ou com CHAVE PRIMARY KEY singular. Chaves primárias compostas sem ROWID não são suportadas.