Intermedio 11 minStack

Qdrant: la base vectorial de un RAG local

Respuesta directa

Qdrant es una base de datos vectorial de código abierto escrita en Rust, publicada bajo la licencia Apache 2.0 (más de 34.000 estrellas en GitHub a finales de septiembre de 2026, versión 1.19.1), que se inicia con un único comando de Docker. En un sistema local de búsqueda documental, es el componente que almacena los vectores de tus documentos, filtra por sus metadatos durante la propia búsqueda en lugar de hacerlo después y recupera los pasajes más cercanos a una pregunta planteada por el usuario.

Qdrant es una base de datos vectorial escrita en Rust, publicada bajo licencia Apache 2.0, que se instala con un solo comando y maneja sin problemas corpus que las bibliotecas en memoria ya no pueden soportar. El proyecto contaba con más de 34 000 estrellas en GitHub a finales de septiembre de 2026, en la versión 1.19.1. En una cadena de búsqueda documental local, es el componente que almacena los vectores de tus documentos y encuentra, para cada pregunta, los pasajes más cercanos. A continuación explicamos qué hace bien y cuándo basta con una solución más sencilla.

Por Mohamed Meguedmi·Actualización 2026-09-28·Probado en Windows, macOS y Linux

#¿Para qué sirve una base vectorial?

Un modelo de embedding convierte un texto en una lista de números —un vector— de manera que dos textos de significado similar generan dos vectores cercanos. Encontrar los pasajes pertinentes para una pregunta consiste entonces en buscar los vectores más cercanos al de la pregunta. Para mil pasajes, basta con un simple cálculo sobre todo el conjunto. Para un millón, se necesita una estructura de índice, y esa es la función de una base de datos vectorial: construir y mantener esa estructura, responder en unos pocos milisegundos en lugar de comparar cada vector uno por uno y seguir dando resultados correctos mientras el corpus continúa recibiendo nuevos documentos.

Este paso condiciona todo lo demás: un modelo excelente que recibe los pasajes equivocados responde mal, y ninguna instrucción en el prompt compensa una recuperación deficiente. Por esta razón, la elección de la base de datos vectorial, durante mucho tiempo tratada como un detalle de infraestructura intercambiable, merece el mismo cuidado que la elección del propio modelo de lenguaje.

#Lo que aporta Qdrant

El kit RAG Local

Tus documentos, tu IA: un RAG local fiable sobre tus PDF, notas y correos — sin enviar nada a la nube.

  • Espacio en línea de por vida
  • PDF + archivos
  • Actualizaciones de por vida

El proyecto se describe a sí mismo como un motor de búsqueda y una base de datos vectorial «de alto rendimiento y a gran escala», diseñado para un filtrado amplio, lo que lo diferencia de las bibliotecas que se limitan a buscar el vecino más cercano sin condiciones. Está escrito en Rust, lo que sus autores presentan como la razón de su rapidez y fiabilidad bajo una carga elevada. En cuanto a la robustez operativa, el proyecto también documenta un registro de escritura anticipada (write-ahead logging) que garantiza la persistencia de los datos con confirmación de actualización, incluso en caso de corte del suministro eléctrico, así como métricas, telemetría y registros de auditoría para supervisar y depurar un despliegue en producción.

Un servidor autónomo
Un contenedor, una API HTTP y gRPC, clientes oficiales en Python, Go, Rust, JavaScript/TypeScript, .NET y Java. Funciona independientemente de tu aplicación, que puede reiniciarse sin perder nunca el índice construido.
Filtrado por payload
Cada vector lleva metadatos —autor, fecha, servicio, tipo de documento— que se usan para filtrar durante la búsqueda con cláusulas should, must y must_not, no después. Es la diferencia entre una búsqueda utilizable en una empresa y una demostración.
La cuantización de los vectores
Comprimir los vectores para reducir considerablemente la huella de memoria (4× con cuantización escalar, hasta 32× con cuantización binaria), a costa de una pérdida de precisión controlada y compensable.
Los vectores dispersos y los multivectores
Además de los vectores densos clásicos, Qdrant admite vectores dispersos para la búsqueda de texto completo y objetos con varios embeddings, útiles para modelos de interacción tardía como ColBERT.
Búsqueda híbrida
Combinar varios vectores en una misma consulta para aprovechar al mismo tiempo la comprensión semántica y la precisión por palabra clave, con un resultado fusionado mediante estrategias configurables como la fusión por rangos recíprocos (RRF) o la fusión de puntuaciones por distribución (DBSF).
Instantáneas y recuperación
Hacer una copia de seguridad de una colección y restaurarla en otro lugar, algo importante cuando reindexarla supondría horas de GPU.
Despliegue distribuido
Distribuir una colección entre varios nodos mediante sharding y replicación, con redimensionamiento sin interrupción del servicio — pertinente más allá de un uso estrictamente local, pero conviene conocer esta posibilidad si el proyecto crece, para no tener que reconstruirlo todo desde cero el día en que una sola máquina ya no sea suficiente.

#Arrancar localmente

La vía más rápida es el contenedor oficial, con un volumen para que los datos se conserven tras el reinicio. Una interfaz web integrada, descrita por el proyecto como «una forma visual de interactuar con tus datos y supervisar el estado de tu despliegue», permite después explorar las colecciones, gestionar los datos y consultar la API REST sin escribir una línea de código. Es la mejor herramienta de diagnóstico cuando una respuesta es incorrecta: se examina lo que realmente se ha recuperado, en lugar de intentar adivinarlo releyendo el código de recuperación.

Arrancar Qdrant con persistencia
docker run -p 6333:6333 -p 6334:6334 \
  -v "$(pwd)/qdrant_storage:/qdrant/storage" \
  qdrant/qdrant

El cliente de Python también puede funcionar sin ningún servidor: QdrantClient(":memory:") para una prueba desechable, o QdrantClient(path="chemin/vers/db") para un almacenamiento local persistente. Esto resulta muy útil para un prototipo o para pruebas automatizadas: el mismo código puede pasar después a usar el servidor cambiando una sola línea de conexión. Desde 2026, el proyecto documenta una segunda vía de integración, Qdrant Edge: una versión ligera diseñada para dispositivos con recursos limitados, que se ejecuta directamente en el proceso de la aplicación en lugar de utilizar una arquitectura cliente-servidor, con la posibilidad de sincronizarse con un servidor Qdrant completo.

#El mínimo en Python

  1. 01
    Conectarse
    from qdrant_client import QdrantClient y, a continuación, client = QdrantClient(url="http://localhost:6333") para apuntar al contenedor iniciado anteriormente.
  2. 02
    Crear una colección
    client.create_collection(collection_name="docs", vectors_config=VectorParams(size=1024, distance=Distance.COSINE)) — el tamaño debe coincidir exactamente con la dimensión de tu modelo de embedding.
  3. 03
    Insertar puntos
    client.upsert(collection_name="docs", points=[PointStruct(id=1, vector=[...], payload={"service": "support"})]) asocia a cada vector un identificador y metadatos filtrables.
  4. 04
    Consultar
    client.query_points(collection_name="docs", query=vecteur_question, limit=5).points devuelve los cinco pasajes más cercanos, con su puntuación y su payload.
i
La dimensión del vector no es un detalle
Una colección se crea para un tamaño de vector y una medida de distancia determinados, que dependen del modelo de embedding elegido. Cambiar de modelo de embedding obliga a recrear la colección y reindexarlo todo: esta decisión se toma al inicio, no durante el proceso, y documentar la versión exacta del modelo utilizado evita sorpresas desagradables cuando otra persona retoma el proyecto.

#El filtrado por metadatos, la función que lamentamos haber descuidado.

En la práctica, una pregunta casi nunca se formula sobre todo el corpus. Se busca en los documentos de un servicio, posteriores a una fecha, de un tipo determinado o accesibles al usuario que plantea la pregunta. Qdrant aplica estas condiciones durante la búsqueda vectorial, con una amplia variedad de filtros —coincidencia de palabras clave, búsqueda de texto completo, intervalos numéricos y geolocalización— combinados mediante las cláusulas lógicas should, must y must_not. Así se obtiene siempre el número adecuado de resultados pertinentes, mientras que un filtrado posterior puede dejarte sin ninguno.

El control de acceso merece una mención aparte: si varias personas consultan el mismo índice, el filtro de permisos impide que un modelo cite a una persona un documento que esa persona no tiene derecho a leer. Ninguna instrucción del prompt sustituye a este filtro, e implementarlo en la base de datos en lugar de en el código de la aplicación evita que un nuevo punto de acceso a la misma colección olvide volver a aplicarlo.

#Caber en memoria: la cuantización de los vectores

Orden de magnitud para 1 millón de pasajes, vectores de 1.024 dimensiones
Almacenamiento de vectoresEspacio ocupado aproximadoEfecto en la calidad
Flotantes de 32 bits, en bruto≈ 4 GBReferencia
Cuantización escalar de 8 bits≈ 1 GB (÷4, documentado por Qdrant)Pérdida casi siempre insignificante
Cuantización binaria≈ 128 MB (÷32, documentado por Qdrant)Pérdida real, que debe compensarse verificando los mejores candidatos

La práctica documentada consiste en buscar en los vectores comprimidos y luego reordenar (rescoring) los mejores candidatos con los vectores originales. Qdrant ofrece un parámetro de sobremuestreo (oversampling) para ajustar este equilibrio: con un valor de 2,4 y un límite de 100 resultados, se preseleccionan 240 candidatos en el índice cuantizado antes del reordenamiento final. Se conserva la mayor parte de la precisión al reducir el uso de memoria a una cuarta parte o menos, lo que, en una máquina que también aloja un modelo, no es un lujo. La documentación oficial también señala una aceleración de hasta 40 veces con la cuantización binaria respecto a los vectores originales, una cifra que conviene verificar con tu propio conjunto de datos en lugar de darla por sentada. El proyecto resume todas estas opciones de compresión, combinadas con el almacenamiento en disco, anunciando una reducción del uso de memoria de hasta el 97 %: un orden de magnitud que explica por qué la cuantización se presenta como una funcionalidad central y no como un ajuste marginal.

#Qdrant u otra

La pregunta que debes plantearte no es «cuál es la mejor base de datos vectorial», sino «qué necesita mi proyecto hoy». Un script de prueba no necesita más que una biblioteca en memoria. A una aplicación empresarial que ya consulta PostgreSQL le conviene añadirle una extensión vectorial en lugar de otro servicio. Qdrant se convierte en la opción adecuada precisamente cuando coinciden varias de estas necesidades: un servicio compartido por varias aplicaciones, un filtrado preciso de los metadatos, un corpus que sigue creciendo y el deseo de no tener que reescribir por tu cuenta la persistencia o las instantáneas. Revisar periódicamente esta elección, en lugar de fijarla en el primer prototipo, evita tanto complicar en exceso la arquitectura de un proyecto modesto como dimensionar por debajo de sus necesidades uno que ha acabado creciendo.

Elegir según la situación, no según la moda
SituaciónLo que conviene
Prototipo, unos pocos miles de pasajes, un solo scriptUna biblioteca en memoria o un archivo local basta
Ya tienes PostgreSQL y pocos vectoresUna extensión vectorial en tu base de datos existente
Servicio compartido, filtrado preciso, corpus en crecimientoQdrant
Aplicación embebida, sin servidor que administrarEl modo local del cliente Python, o Qdrant Edge

#FAQ

¿Es gratuito Qdrant?+
Sí, el motor es de código abierto bajo licencia Apache 2.0 y puede alojarse en infraestructura propia sin costo de licencia, con un repositorio de GitHub que tenía más de 34 000 estrellas a finales de septiembre de 2026. El desarrollador también ofrece un servicio de pago en la nube; no es necesario para el uso local.
¿Se necesita un GPU para Qdrant?+
No para el uso habitual: la búsqueda vectorial, escrita en Rust, supone una carga para el procesador y la memoria. Sin embargo, Qdrant documenta compatibilidad opcional con GPU (NVIDIA y AMD) para acelerar la construcción de índices con volúmenes muy grandes: una opción, no un requisito previo para un corpus local.
¿Qdrant o Chroma?+
Chroma se configura más rápido para un prototipo en Python. Qdrant soporta mejor la carga, permite un filtrado más preciso por metadatos con una amplia variedad de condiciones y se administra como un verdadero servicio con instantáneas, recuperación y observabilidad integrada. El punto de inflexión suele llegar con el uso por varios usuarios o con unos cientos de miles de fragmentos de texto.
¿Cuánta memoria RAM se necesita?+
Depende del número de vectores y de su dimensión. Un millón de vectores de 1.024 dimensiones ocupa aproximadamente 4 GB brutos según la aritmética estándar de los números de coma flotante de 32 bits, y aproximadamente cuatro veces menos con la cuantización escalar documentada por Qdrant, hasta 32 veces menos con la cuantización binaria. Añade el espacio del índice y de los metadatos, que siguen siendo modestos en comparación.
¿Se puede usar sin servidor?+
Sí, el cliente Python puede trabajar en memoria (":memory:") o en un directorio local, lo cual es adecuado para prototipos y pruebas. El proyecto también documenta Qdrant Edge, una versión que se ejecuta dentro del proceso de la aplicación para entornos con recursos limitados, con posibilidad de sincronización hacia un servidor completo.
¿La cuantización realmente hace perder calidad?+
Un poco, pero recuperable: la práctica documentada consiste en buscar en los vectores comprimidos y luego reordenar los mejores candidatos con los vectores originales (rescoring), mediante un parámetro de sobremuestreo ajustable. La cuantización escalar de 8 bits es generalmente la menos riesgosa; la binaria, más agresiva, exige verificar la calidad en tu propio corpus.
¿Qdrant es adecuado para varios clientes en una sola instancia?+
Sí, es uno de los usos que el proyecto documenta explícitamente con el nombre de multi-tenant: una partición escalable de los datos por cliente o por organización dentro de una misma colección, combinada con el filtrado por payload para aislar lo que cada usuario puede ver. Resulta más económico, tanto en costes operativos como en consumo de memoria, que abrir una colección separada por cliente cuando el número de clientes supera unas pocas decenas.
¿Esta guía te ha ayudado?

¿Un comentario, un error, una precisión? Avísanos, eso mejora la guía para todos.