3 puntos por GN⁺ 2024-05-04 | 1 comentarios | Compartir por WhatsApp

En desarrollo: nueva extensión de SQLite para búsqueda vectorial

  • sqlite-vec es una nueva extensión para búsqueda vectorial en SQLite y reemplazará a sqlite-vss.
  • Será una herramienta de búsqueda vectorial embebible y "lo suficientemente rápida" que puede ejecutarse en todos los entornos donde se ejecute SQLite, incluyendo WASM.
  • Aunque aún está en desarrollo, se recomienda revisar el repositorio en cuanto esté listo.

Características de sqlite-vec

  • Extensión de SQLite escrita en C puro y sin dependencias.
  • Proporciona funciones SQL personalizadas y tablas virtuales para búsqueda vectorial rápida.
  • Proporciona herramientas y utilidades adicionales para trabajos de vectores (cuantización, conversión JSON/BLOB/numpy, operaciones vectoriales, etc.).
  • La búsqueda vectorial es posible usando solo SQL (con instrucciones CREATE VIRTUAL TABLE, INSERT INTO y SELECT).

Ventajas de sqlite-vec

  • Está escrita en C puro, por lo que puede ejecutarse en todas las plataformas (Linux/MacOS/Windows), navegador web (WebAssembly), teléfonos móviles, Raspberry Pi, etc.
  • El tamaño del binario es pequeño, del orden de cientos de KB.
  • Permite controlar mejor el uso de memoria (almacena los vectores por bloques y lee bloque por bloque durante la búsqueda KNN).
  • Posible mejora de rendimiento en memoria con el comando PRAGMA mmap_size.
  • Soporta embeddings de longitud variable como Matryoshka y vectores int8/bit, permitiendo cuantización binaria y escalar.
  • Mayor control sobre velocidad, precisión y espacio en disco.
  • Al principio solo admite búsqueda vectorial exhaustiva, pero se agregará IVF + HNSW más adelante.

Demostración

  • sqlite-vec puede ejecutarse directamente en el navegador (con la base de datos SQLite movies.bit.db cargada).
  • La tabla articles tiene columnas como title, release_date y overview.
  • La tabla virtual vec_movies guarda los vectores de embedding de la columna overview (vector binario de 768 dimensiones, 96 bytes).
  • Se pueden recuperar las 10 películas más similares a una película seleccionada con una búsqueda de estilo KNN.

Problemas de sqlite-vss

  • Solo funciona en Linux + MacOS (no soporta Windows, WASM ni dispositivos móviles).
  • Guarda todos los vectores en memoria.
  • Presenta varios fallos y problemas relacionados con transacciones.
  • Compilarlo es muy difícil y toma mucho tiempo.
  • Falta de operaciones vectoriales comunes (cuantización escalar/binaria).
  • Problemas derivados de su dependencia de Faiss.

Estado de desarrollo de sqlite-vec

  • La funcionalidad central funciona, pero hay casi sin manejo de errores ni pruebas.
  • El archivo sqlite-vec.c tiene 246 TODO.
  • Tras completar todos los TODO, se lanzará sqlite-vec v0.1.0 junto con documentación, demo y bindings (con objetivo de alrededor de un mes).

Opinión de GN⁺

  • Es atractivo como una herramienta de búsqueda vectorial embebible que funciona en distintas plataformas y entornos. En particular, me resulta interesante lo de su ejecución en navegadores vía WASM.
  • También es una ventaja que incorpore control de memoria, embeddings de longitud variable y cuantización, reflejando tecnologías modernas de búsqueda vectorial. Parece que permitirá ajustar de forma flexible velocidad, precisión y espacio de almacenamiento.
  • Sin embargo, solo soportar búsqueda exhaustiva es una limitación: si el tamaño de los datos crece, la velocidad de búsqueda podría convertirse en un problema. Parece urgente contar con soporte ANN como IVF+HNSW.
  • Además, sigue en una etapa temprana, por lo que parece poco práctico usarlo en producción hoy mismo. Aún necesita más tiempo para estabilizarse.
  • También parece necesario comparar su rendimiento con bibliotecas de búsqueda vectorial existentes como Faiss. Aunque su ventaja es ser una extensión SQLite pura, su desempeño aún debe validarse.

1 comentarios

 
GN⁺ 2024-05-04
Comentarios de Hacker News
  • El autor participa directamente en los comentarios y presenta su nuevo proyecto, sqlite-vec. Aunque todavía está en desarrollo, apunta a lanzar la versión v0.1.0 en las próximas semanas. Tiene el carácter de continuación del sqlite-vss que desarrolló antes.
  • sqlite-vec es una biblioteca optimizada para la búsqueda de vectores embebidos, y funciona en distintos sistemas operativos, dispositivos móviles y Raspberry Pi, entre otros. El autor está probándolo en Beepy, una app de búsqueda semántica.
  • Hubo una pregunta sobre cómo se almacena un vector de 768 dimensiones en 96 bytes. Normalmente se necesitarían 6144 bytes con float64, y hubo interés por técnicas de compresión o guardado aproximado.
  • Un desarrollador que había usado sqlite-vss compartió que le había ayudado a desarrollar un modelo RAG y agradeció el proyecto. También dijo que funcionaba bien en Ubuntu.
  • Recientemente también se lanzó una extensión similar de búsqueda por similitud de vectores en DuckDB.
  • Compartió su experiencia al desarrollar una app de IA con RAG usando Qdrant, y expresó su expectativa sobre sqlite-vec.
  • Se preguntó si solo se usará la API pública de SQLite o si se integrará directamente en el amalgamation. También se reflexionó sobre la estrategia de distribución desde la perspectiva de WebAssembly bindings.
  • Hay un comentario que dice que le gusta cuando un proyecto OSS encaja con una necesidad específica. Está pensando en ideas para usarlo en el ecosistema de TypeScript.
  • Alguien comentó que esto podría servir como solución al issue de sqlite-vss de hace unos meses.
  • Se preguntó cómo se igualan las dimensiones de todos los vectores de características. Pareciera que se convierten cadenas a float para guardarlas, así que conviene confirmar si el cálculo de distancia de Hamming considera vectores con longitudes distintas.
  • Se comentó que se percibe un enfoque de desarrollo basado en documentación de README y se preguntó si la escritura del README fue lo primero en empezar.