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

EscopoRecurso
Implemente o Vector SearchGuia explicando os fundamentos da implementação do Vector Search
Conheça o Edge SQL da Azion e suas funcionalidadesReferê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. O Vector Search do Edge SQL suporta modelos de embedding, sem restrições de dimensão.

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:

CREATE TABLE teams (
name TEXT,
year INT,
stats_embedding F32_BLOB(3)
);

Em seguida, você pode inserir dados na tabela, incluindo embeddings vetoriais (neste exemplo, representando as estatísticas da equipe para a temporada de 2023):

INSERT INTO teams (name, year, stats_embedding)
VALUES
(
'Red',
2023,
vector('[80, 30, 60]')
),
(
'Blue',
2023,
vector('[85, 25, 65]')
),
(
'Yellow',
2023,
vector('[78, 28, 62]')
),
(
'Green',
2023,
vector('[90, 20, 70]')
);

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:

SELECT name,
vector_extract(stats_embedding),
vector_distance_cos(stats_embedding, vector('[82, 25, 63]')) AS similarity
FROM teams
ORDER BY similarity ASC
LIMIT 3;

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.

CREATE INDEX teams_idx ON teams ( libsql_vector_idx(embedding) );

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:

SELECT
name,
year,
similarity
FROM
teams
JOIN
vector_top_k('teams_idx', '[4,5,6]', 3)
ON
teams.rowid = id
WHERE
year >= 2023;

Contribuidores