RyanCodrai/turbovec es uno de los proyectos más visibles de GitHub Trending de hoy. Es un índice vectorial escrito en Rust con bindings para Python, pensado para hacer la recuperación vectorial local más eficiente en memoria, más rápida y más fácil de conectar a sistemas RAG.
El README lo posiciona claramente: usa el algoritmo TurboQuant de Google Research para comprimir vectores y buscar directamente sobre ellos. Afirma que un corpus de 10 million documentos necesitaría unos 31 GB de memoria con float32, mientras que turbovec puede bajarlo a unos 4 GB, y también afirma ser más rápido que FAISS en algunas pruebas.
Este tipo de proyecto importa porque el cuello de botella en RAG local muchas veces no es “puedo llamar a un modelo”, sino memoria del índice vectorial, latencia, filtros y despliegue. En un PC personal, NAS, servidor pequeño o entorno privado, que el índice quepa en memoria puede decidir toda la experiencia.
Qué problema resuelve
Muchos sistemas RAG empiezan con la forma más simple de almacenamiento vectorial: guardar embeddings como float32 y buscar con un índice en memoria o una base de datos. Es fácil de empezar, pero la presión de memoria aparece rápido cuando crecen los datos.
Con embeddings de 1536 dimensiones, un vector float32 ocupa 1536 × 4 bytes, es decir 6144 bytes. Un millón de entradas ya son varios GB; diez millones pueden ser demasiado para una máquina normal.
turbovec toma la ruta del índice vectorial comprimido. Normaliza vectores, aplica rotación aleatoria y luego usa cuantización de pocos bits con kernels SIMD para búsqueda aproximada. El README dice que un vector de 1536 dimensiones en modo 2-bit puede pasar de 6144 bytes a 384 bytes, una compresión de 16x.
Características principales
| Característica | Descripción |
|---|---|
| Núcleo en Rust | Núcleo de recuperación escrito en Rust, centrado en rendimiento y despliegue local |
| Bindings de Python | Se puede usar en proyectos RAG de Python con pip install turbovec |
| Sin paso de entrenamiento | El README indica que se puede indexar tras añadir vectores, sin entrenar un codebook aparte |
| Escritura online | Se pueden seguir añadiendo vectores con add, sin reconstruir todo el índice cada vez |
| Filtro en búsqueda | search() soporta allowlist para dense rerank dentro de IDs candidatos |
| Ejecución local | No depende de una base vectorial gestionada; los datos pueden quedarse en la máquina o LAN |
| Integración con frameworks | El README menciona LangChain, LlamaIndex, Haystack, Agno y otras integraciones |
No es una base de datos vectorial completa en el sentido tradicional. Es más bien una librería de índice vectorial de alto rendimiento que se puede incrustar en una aplicación. Aún debes manejar partición de documentos, generación de embeddings, metadatos, permisos, persistencia y lógica de aplicación.
Uso rápido en Python
El uso mínimo del README es sencillo:
|
|
|
|
Si quieres que los IDs externos sigan siendo estables tras borrar, puedes usar IdMapIndex:
|
|
Esto importa en sistemas reales. Los IDs de documentos suelen venir de una base de datos, sistema de archivos u object storage, no del número interno del índice vectorial.
Por qué el filtrado en búsqueda es útil
Un punto práctico de turbovec es el filtrado allowlist durante la búsqueda.
Muchos escenarios RAG no son “buscar en todo el corpus los 10 elementos más similares”. Primero se reduce el rango con condiciones de negocio y luego se ordenan los candidatos por similitud vectorial. Por ejemplo:
- buscar solo documentos a los que un usuario tiene permiso;
- buscar solo datos de un tenant;
- buscar solo contenido de los últimos 30 días;
- usar SQL/BM25 para candidatos y luego rerank vectorial;
- buscar dentro de un proyecto, etiqueta o base de conocimiento concreta.
La idea del README es que un sistema externo obtenga primero los IDs candidatos y los pase como allowlist a search(). turbovec procesa el filtro dentro del kernel SIMD, en lugar de buscar todo y descartar después los resultados no permitidos.
Esto encaja mejor con permisos estrictos o conjuntos de candidatos pequeños que “recuperar mucho primero y filtrar en la aplicación”.
Relación con FAISS
FAISS sigue siendo una biblioteca base muy madura para recuperación vectorial. El README de turbovec compara sobre todo con IndexPQ / IndexPQFastScan de FAISS.
El proyecto afirma que, en pruebas con embeddings de OpenAI de 1536 y 3072 dimensiones, TurboQuant mejora R@1 frente a FAISS entre 0.4 y 3.4 puntos porcentuales, y es entre 12% y 20% más rápido que FAISS FastScan en ARM. En x86 con configuración 4-bit, afirma ser entre 1% y 6% más rápido, mientras que algunas configuraciones 2-bit multihilo son algo más lentas.
Estos números sirven como señal de selección, no como conclusión de producción. La distribución vectorial, dimensión, bit width, conjunto de instrucciones de CPU, tamaño de batch, proporción de filtrado y objetivo de recall cambian los resultados. Si lo vas a usar en serio, conviene hacer benchmark con tus embeddings y logs de consulta.
Para quién encaja
turbovec encaja cuando:
- un índice RAG local empieza a consumir demasiada memoria;
- quieres guardar una base de conocimiento en un PC, NAS o servidor interno;
- no quieres enviar embeddings de documentos a una base vectorial gestionada;
- las consultas necesitan filtros de tenant, permisos o ventana temporal;
- el stack principal es Python, pero quieres rendimiento de recuperación más cercano a Rust/C++;
- usas LangChain, LlamaIndex, Haystack u otros frameworks y quieres un almacenamiento vectorial local más ligero.
Si tus datos son pequeños, o ya usas una base vectorial madura y su coste operativo es aceptable, turbovec quizá no aporte una mejora visible inmediata. Es una herramienta para escenarios RAG donde memoria, privacidad y latencia son sensibles.
Antes de usarlo
Primero, la recuperación comprimida suele intercambiar memoria por recall. Las configuraciones 2-bit y 4-bit afectan tanto a compresión como a precisión; no basta con mirar el factor de compresión.
Segundo, los benchmarks del README son útiles, pero los requisitos de recall en producción deben verificarse localmente. Bases de conocimiento en chino o español, embeddings de código, embeddings multilingües, textos cortos y chunks largos pueden tener distribuciones distintas.
Tercero, turbovec es una librería de índice, no una plataforma RAG completa. No parsea documentos, no sincroniza incrementos, no gestiona permisos, no reescribe consultas, no genera respuestas y no rastrea citas por ti.
Cuarto, el despliegue local mejora la privacidad, pero también te hace responsable de backups, monitorización, actualizaciones y reconstrucción del índice.
Conclusión
El valor de turbovec está en empujar la búsqueda vectorial local hacia algo más práctico: menor uso de memoria, integración más sencilla en proyectos Python/Rust, filtrado durante la búsqueda y menos dependencia de servicios gestionados.
No necesariamente reemplazará a FAISS o a las bases vectoriales, pero puede convertirse en una buena opción dentro de stacks RAG locales. Para bases de conocimiento personales, QA interno, búsqueda de documentos en NAS y entornos RAG offline, este tipo de índice ligero y rápido será cada vez más importante.
Referencias: GitHub Trending, RyanCodrai/turbovec