Nova extensão de busca vetorial para SQLite em desenvolvimento
- O sqlite-vec é uma nova extensão para busca vetorial no SQLite e deverá substituir o sqlite-vss existente.
- Será uma ferramenta de busca vetorial embutível e suficientemente rápida para rodar em todos os ambientes em que o SQLite é executado (incluindo WASM).
- Embora ainda esteja em desenvolvimento, recomendo conferir o repositório assim que ele estiver pronto.
Recursos do sqlite-vec
- Extensão SQLite sem dependências, escrita em C puro.
- Fornece funções SQL personalizadas e uma tabela virtual para busca vetorial rápida.
- Oferece outras ferramentas e utilitários para operações com vetores (quantização, conversão JSON/BLOB/numpy, operações de vetores etc.).
- Permite busca vetorial usando apenas SQL (usando CREATE VIRTUAL TABLE, INSERT INTO e SELECT).
Vantagens do sqlite-vec
- Escrito em C puro, pode ser executado em todas as plataformas (Linux/macOS/Windows), navegadores web (WebAssembly), celular, Raspberry Pi, entre outros.
- O binário é pequeno, na faixa de centenas de KB.
- Possibilita melhor controle de memória (armazena os vetores em chunks e os lê por chunk durante a busca KNN).
- É possível melhorar o desempenho em memória com o comando PRAGMA mmap_size.
- Suporta embeddings de comprimento variável, como Matryoshka, e vetores int8/bit, permitindo quantização binária e escalar.
- Permite maior controle sobre velocidade, precisão e espaço em disco.
- Inicialmente suporta apenas busca vetorial exaustiva, com planos de adicionar IVF + HNSW no futuro.
Demonstração
- O sqlite-vec pode ser executado diretamente no navegador (com o banco de dados SQLite movies.bit.db carregado).
- A tabela articles contém colunas como title, release_date e overview.
- A tabela virtual vec_movies armazena o embedding da coluna overview (vetor binário de 768 dimensões, 96 bytes).
- É possível buscar os 10 filmes mais semelhantes ao filme selecionado com busca no estilo KNN.
Problemas do sqlite-vss
- Funciona apenas no Linux e no macOS (sem suporte para Windows, WASM, dispositivos móveis etc.).
- Armazena todos os vetores inteiramente em memória.
- Possui diversos bugs e problemas relacionados a transações.
- A compilação é muito difícil e leva bastante tempo.
- Faltam operações vetoriais comuns, como quantização escalar e binária.
- Existem problemas causados pela dependência do Faiss.
Status de desenvolvimento do sqlite-vec
- As funcionalidades principais funcionam, mas ainda há pouco tratamento de erros e testes quase inexistentes.
- Há 246 TODOs no arquivo sqlite-vec.c.
- A previsão é lançar o sqlite-vec v0.1.0 com documentação, demonstrações e bindings, entre outros, após concluir todos os TODOs (meta de cerca de um mês).
Opinião da GN+
- É atraente ser uma ferramenta de busca vetorial embutível que roda em diversas plataformas e ambientes. Em especial, é interessante o fato de funcionar no navegador web via WASM.
- Também é um ponto positivo ter incorporado tecnologias recentes de busca vetorial, como controle de memória, embeddings de comprimento variável e quantização. Isso pode permitir controle flexível de velocidade, precisão e armazenamento.
- Por outro lado, o suporte apenas a busca exaustiva é uma limitação. Quando os dados crescem, o desempenho da busca pode se tornar um problema. O suporte a algoritmos ANN como IVF + HNSW parece urgente.
- Além disso, ainda está numa fase inicial e não parece pronto para uso em produção. Parece que ainda é preciso mais tempo até estabilizar.
- Também parece necessário comparar com benchmarks de outras bibliotecas de busca vetorial maduras, como a Faiss. Embora a vantagem de ser uma extensão SQLite pura seja clara, o desempenho ainda precisa ser validado.
1 comentários
Comentários do Hacker News