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
Comentarios de Hacker News