3 pontos por GN⁺ 2024-05-04 | 1 comentários | Compartilhar no WhatsApp

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

 
GN⁺ 2024-05-04
Comentários do Hacker News
  • O autor participa diretamente da discussão e está apresentando seu novo projeto, o sqlite-vec. Embora ainda esteja em desenvolvimento, ele mira a versão v0.1.0 para as próximas semanas. É um projeto com caráter de sucessor do sqlite-vss, que ele havia desenvolvido antes.
  • O sqlite-vec é uma biblioteca otimizada para busca vetorial embarcada, compatível com vários sistemas operacionais, dispositivos móveis, Raspberry Pi etc. O autor está testando o sqlite-vec em um app de busca semântica chamado Beepy.
  • Houve uma pergunta sobre como ele consegue armazenar vetores de 768 dimensões em apenas 96 bytes. Como normalmente seriam necessários 6.144 bytes com float64, houve interesse em técnicas de compressão ou armazenamento aproximado.
  • Um desenvolvedor que já usou sqlite-vss agradeceu dizendo que ajudou no desenvolvimento de um modelo RAG. Comentou que funcionou bem no ambiente Ubuntu.
  • O DuckDB também lançou recentemente uma extensão semelhante para busca de similaridade vetorial.
  • Alguém compartilhou experiência desenvolvendo um app de IA com banco de dados vetorial Qdrant para RAG e expressou expectativa de uso para o sqlite-vec.
  • Perguntou se ele vai usar apenas a API pública do SQLite ou integrar diretamente na amalgamation. Também comentou preocupação sobre o formato de distribuição do ponto de vista de bindings de WebAssembly.
  • Um comentário diz que gosta de projetos OSS que atendem a uma necessidade específica. Ele está pensando em ideias aproveitáveis no ecossistema TypeScript.
  • Houve reação de que isso pode ser uma solução para um problema do sqlite-vss de alguns meses atrás.
  • Ficou a dúvida de como casar a dimensionalidade de todos os feature vectors. Como parece que converte string para float ao armazenar, é preciso checar se, no cálculo da distância de Hamming, vetores de tamanho diferente também entram em conta.
  • Há a percepção de que o desenvolvimento foi iniciado com base em README/documentação; perguntou se começou escrevendo a documentação primeiro.