AI Infrastructure

Bases de datos vectoriales para RAG agéntico: Benchmark

Respuesta rápida: En entornos de producción de RAG agéntico en 2026, Qdrant ofrece el mejor equilibrio general con latencias p95 inferiores a 12 ms, filtrado por payload y eficiencia de memoria RAM. Para equipos con clústeres de Postgres existentes, pgvector (HNSW) es la base de datos vectorial más económica sin infraestructura adicional. Pinecone Serverless lidera en simplicidad operativa con coste cero durante la inactividad, mientras que Milvus ofrece la mejor escalabilidad a partir de 50M+ vectores.

1. Introducción: Por qué el RAG agéntico exige una nueva infraestructura vectorial

La generación aumentada por recuperación (RAG) ha evolucionado desde pipelines simples de búsqueda ingenua hacia un RAG agéntico dinámico y multisalto (multi-hop). En un flujo RAG documental convencional, una aplicación procesa un único prompt de usuario, consulta un almacén vectorial para obtener los $k=5$ vecinos más cercanos mediante similitud de coseno e inyecta fragmentos de texto sin procesar (chunks) en la ventana de contexto de un LLM.

Los agentes de IA autónomos rompen cada una de las premisas arquitectónicas que sustentan al RAG básico:

  1. Ráfagas de lectura/escritura de alta frecuencia: Los agentes leen la memoria episódica, ejecutan herramientas, formulan subhipótesis y escriben notas de trabajo de vuelta en el índice vectorial en tiempo real. Un almacén estático con indexación por lotes (batch) fracasa cuando un agente requiere consistencia de lectura tras escritura (read-your-own-writes) en menos de 20 milisegundos.
  2. Filtrado extremo de metadatos: Los agentes autónomos rara vez ejecutan búsquedas de similitud global sin restricciones. En su lugar, las consultas aplican filtros intensivos sobre metadatos dinámicos en tiempo de ejecución: tenant_id == "corp_42" AND user_id == "u_88" AND (visibility == "public" OR team_id IN [...]) AND timestamp >= NOW() - 7d. Si la base de datos calcula primero la distancia vectorial y filtra los metadatos a posteriori (postfiltrado), la latencia de la consulta se degrada exponencialmente y el recall se desploma.
  3. Híbrido disperso-denso (sparse-dense) y Reciprocal Rank Fusion (RRF): Los flujos agénticos en producción exigen combinar representaciones semánticas densas (p. ej., text-embedding-3-large, BAAI/bge-large-en-v1.5) con búsqueda léxica dispersa (BM25 o SPLADE) para recuperar de forma fiable nombres exactos de símbolos, funciones de código e identificadores transaccionales únicos.
  4. Presupuestos estrictos de latencia: Un agente que ejecuta un bucle ReAct (Reason + Act) o una exploración mediante árbol de pensamientos (Tree-of-Thought) realiza entre 4 y 12 consultas vectoriales por cada interacción de usuario. Si la latencia p95 de búsqueda en el índice es de 150 ms, la recuperación vectorial por sí sola consume 1,8 segundos del presupuesto de latencia de cara al usuario antes de que el LLM genere un solo token de respuesta.

Este benchmark técnico ofrece una comparativa empírica y rigurosa de los seis motores de almacenamiento vectorial dominantes en 2026: Qdrant, Milvus, ChromaDB, Weaviate, Pinecone y pgvector. Evaluamos cada uno en precisión de recuperación (NDCG@10, Recall@10), percentiles de latencia de consulta (p50, p95, p99), rendimiento sostenido en QPS, sobrecarga por filtrado de metadatos y coste total de propiedad (TCO por cada millón de vectores).


2. Matriz ejecutiva del benchmark (Datos de producción 2026)

Los siguientes datos del benchmark se compilaron sobre un conjunto de datos estandarizado de 10 000 000 de vectores (1536 dimensiones, formato normalizado text-embedding-3-large de OpenAI) con una cardinalidad de metadatos en el payload del 20 %. Los motores autohospedados (self-hosted) se evaluaron en instancias equivalentes de AWS (c6i.4xlarge: 16 vCPU, 32 GB de RAM, SSD NVMe). Pinecone se evaluó en su nivel Serverless de producción en AWS us-east-1.

+-------------------------------------------------------------------------------------------------------------------------+
|                                BENCHMARK DE BASES DE DATOS VECTORIALES EN PRODUCCIÓN (10M VECTORES, 1536-D)             |
+-------------------+------------------+------------------+------------------+------------------+------------------+------+
| Motor y versión   | Arquitectura     | Latencia p50 (ms)| Latencia p95 (ms)| QPS (Nodo único) | Recall@10 (HNSW) | TCO ($/1M v/mes)|
+-------------------+------------------+------------------+------------------+------------------+------------------+------+
| Qdrant v1.13      | Rust / Nativo    | 4.2 ms           | 11.8 ms          | 1.420 QPS        | 98.4%            | $11.50 (Self)|
| Milvus v2.5       | Go/C++ / Cloud   | 6.1 ms           | 14.5 ms          | 2.100 QPS        | 98.1%            | $16.80 (Self)|
| Weaviate v1.28    | Go / HNSW híbrido| 7.8 ms           | 19.4 ms          | 890 QPS          | 97.6%            | $18.20 (Self)|
| ChromaDB v0.6     | Python/Rust Core | 14.2 ms          | 42.6 ms          | 320 QPS          | 95.8%            | $9.80  (Self)|
| Pinecone Serverless| Cloud propietario| 18.5 ms          | 48.2 ms          | Autoescalado     | 96.9%            | $8.50  (Cloud)|
| pgvector v0.8     | C / Ext. Postgres| 12.4 ms          | 36.7 ms          | 480 QPS          | 96.2%            | $0.00* (Exist)|
+-------------------+------------------+------------------+------------------+------------------+------------------+------+

\El coste de pgvector asume la coubicación dentro de una base de datos empresarial PostgreSQL existente con memoria aprovisionada compartida.*

Desglose detallado de métricas

+-------------------------------------------------------------------------------------------------------------------------+
|                               CAPACIDADES DE RAG AGÉNTICO Y RENDIMIENTO DE FILTRADO                                     |
+-------------------+----------------------+--------------------+--------------------+--------------------+---------------+
| Motor             | Modelo prefiltrado   | Híbrido sparse-dense| Latencia CRUD dinám.| Aislam. multitenant| Lat. cold start|
+-------------------+----------------------+--------------------+--------------------+--------------------+---------------+
| Qdrant            | Single-Stage Payload | Nativo (API Sparse)| < 5 ms (Inmediato) | Namespaces / Filtro| < 100 ms      |
| Milvus            | Partición / Escalar  | Multivector nativo | < 15 ms (Log Buffer)| Colecciones/Partic.| < 500 ms      |
| Weaviate          | Grafo índice invert. | Nativo (BM25+Dense)| < 25 ms (WAL commit)| API multi-tenancy  | < 200 ms      |
| ChromaDB          | Índice SQLite / Rust | Reranker externo   | < 18 ms            | Tenants / BBDD     | < 50 ms       |
| Pinecone          | Índ. invert. metadat.| Nativo Sparse-Dense| 100 - 400 ms (Event| Namespaces         | 0 ms (Serverl)|
| pgvector          | Escaneo índice iter. | Postgres Full Text | < 8 ms (Tx ACID)   | Row-Level Security | 0 ms (Nativo) |
+-------------------+----------------------+--------------------+--------------------+--------------------+---------------+

3. Perfiles arquitectónicos en profundidad

1. Qdrant: El peso pesado de alto rendimiento en Rust

Qdrant es un motor de búsqueda vectorial de código abierto desarrollado de forma nativa en Rust, diseñado específicamente para gestionar condiciones avanzadas de filtrado junto con la exploración vectorial de vecinos más cercanos.

+-------------------------------------------------------------------------------+
|                           QDRANT INTERNAL ARCHITECTURE                        |
|                                                                               |
|  [Incoming Query + Filter]                                                    |
|           │                                                                   |
|           ▼                                                                   |
|  ┌──────────────────┐      ┌─────────────────────────┐                        |
|  │  Payload Index   ├─────>│ Filter Cond. Evaluator  │                        |
|  │ (Inverted/B-tree)│      └────────────┬────────────┘                        |
|  └──────────────────┘                   │ (Payload Bitset)                    |
|                                         ▼                                     |
|  ┌──────────────────┐      ┌─────────────────────────┐   [Output]             |
|  │  HNSW Graph      ├─────>│  Custom Graph Traversal ├──> Top-K Results       |
|  │  (Vector Embed)  │      │  (Filtered Distance)    │   (Recall: 98.4%)      |
|  └──────────────────┘      └─────────────────────────┘                        |
+-------------------------------------------------------------------------------+
  • Mecanismo central de indexación: Qdrant utiliza una implementación personalizada de grafos Hierarchical Navigable Small World (HNSW) combinada con índices de payload (B-Tree, invertidos y geoespaciales). A diferencia de los motores que realizan un filtrado en dos etapas (recuperación de vectores candidatos seguida de postfiltrado), Qdrant implementa una búsqueda vectorial filtrada en una sola etapa (single-stage filtered vector search). Durante el recorrido del grafo, el índice de payload construye un bitset en memoria, lo que permite que el algoritmo de recorrido evalúe transiciones de aristas únicamente entre los nodos candidatos que satisfacen la condición del payload.
  • Cuantización y optimización de memoria: Admite cuantización escalar (SQ, Scalar Quantization) y cuantización de producto (PQ, Product Quantization). La cuantización escalar reduce los vectores de coma flotante de 32 bits (FP32) a enteros sin signo de 8 bits (UINT8), reduciendo el consumo de RAM en un 75 % con una pérdida de recall inferior al 1,1 %. También permite el almacenamiento en disco (mmap) mientras mantiene el grafo de navegación HNSW en RAM.
  • Adecuación para flujos agénticos: Excepcional. La visibilidad inmediata de las escrituras lo hace idóneo para la memoria episódica de los agentes en tiempo real. El esquema de payload no requiere predefiniciones estrictas, lo que permite a los agentes almacenar contextos JSON arbitrarios junto con los embeddings.

2. Milvus: El clúster distribuido nativo de la nube para gran escala

Milvus, un proyecto de código abierto alojado por la LF AI & Data Foundation, está diseñado para la búsqueda vectorial distribuida a hiperescala, desde más de 100 millones hasta miles de millones de vectores.

+-------------------------------------------------------------------------------+
|                            MILVUS DISTRIBUTED ARCHITECTURE                    |
|                                                                               |
|  [Client Request] ──> [Proxy Layer (Stateless Load Balancer)]                 |
|                              │                                                |
|            ┌─────────────────┴─────────────────┐                              |
|            ▼                                   ▼                              |
|  [Query Node (Memory Cache)]         [Data Node (Segment Builder)]            |
|            │                                   │                              |
|            ▼                                   ▼                              |
|  ┌──────────────────┐                ┌──────────────────┐                     |
|  │  Knowhere Engine │                │ Message Broker   │ (Apache Pulsar /    |
|  │  (FAISS, HNSW,   │                │ (Log Broker)     │  Kafka Event Log)   |
|  │   SCaNN, GPU)    │                └────────┬─────────┘                     |
|  └──────────────────┘                         │                               |
|            ▲                                  ▼                               |
|            └──────────── [MinIO / S3 Object Storage Chunk Layer]              |
+-------------------------------------------------------------------------------+
  • Mecanismo central de indexación: Milvus se apoya en su núcleo de indexación en C++, Knowhere, que abstrae algoritmos vectoriales subyacentes como HNSW, IVF-FLAT, SCaNN y DiskANN. Milvus desacopla el cómputo del almacenamiento: los nodos de consulta (Query Nodes) son completamente sin estado (stateless), mientras que los segmentos persistentes residen en almacenamiento de objetos (Amazon S3, Google Cloud Storage o MinIO). Un broker de registro de escritura previa (Write-Ahead Log, mediante Apache Kafka o Apache Pulsar) coordina la ingesta de flujos (streaming).
  • Adecuación para flujos agénticos: De moderada a alta para enjambres empresariales (Enterprise Swarms). Para grandes organizaciones que ejecutan enjambres multiinquilino (multi-tenant) a lo largo de millones de sesiones diarias de agentes, Milvus ofrece una resiliencia de clúster, fragmentación (sharding) y aceleración por GPU inigualables. Sin embargo, para despliegues más reducidos (< 5M de vectores), su huella mínima de infraestructura (etcd, Pulsar/Kafka, MinIO, QueryNodes, DataNodes) introduce una elevada complejidad operativa.

3. ChromaDB: El motor ligero enfocado en los desarrolladores

ChromaDB surgió como la base de datos de prototipado por defecto en los inicios del ecosistema de IA generativa, aclamada por su integración local en Python sin configuración previa (chromadb.Client()).

  • Mecanismo central de indexación: Diseñado inicialmente como un almacén SQLite en proceso que envolvía ClickHouse o hnswlib nativo, Chroma v0.5+ migró su núcleo a una arquitectura distribuida en Rust. Cuenta con un coordinador de consultas distribuido, almacenamiento de metadatos desacoplado mediante capas persistentes de SQLite/Postgres y colecciones nativas.
  • Cuantización y escalabilidad: Limitado históricamente por los techos de memoria de un solo nodo, las versiones recientes han incorporado clústeres distribuidos multinodo. Carece de la cuantización de producto profunda y de las capacidades de compresión de grafos en disco presentes en Qdrant o Milvus.
  • Adecuación para flujos agénticos: Alta para herramientas locales y prototipado; moderada para producción. ChromaDB sigue siendo el motor más rápido de integrar en entornos de desarrollo local, agentes de terminal (como OpenCode o forks locales de Claude Code) y suites de pruebas automatizadas. En configuraciones de producción multiagente masivas y concurrentes, su latencia p95 y su techo de QPS se mantienen por debajo de los motores nativos en Rust/Go.

4. Weaviate: El especialista en búsqueda híbrida guiada por esquemas

Weaviate es una base de datos vectorial de código abierto y nativa de la nube escrita en Go, que prioriza interfaces GraphQL/gRPC, esquemas de datos estrictos y búsqueda híbrida dispersa-densa lista para usar.

  • Mecanismo central de indexación: Weaviate ejecuta una implementación de HNSW emparejada con un índice invertido para coincidencias por palabras clave mediante BM25. Dispone de módulos vectorizadores integrados (lo que permite la conexión directa con endpoints de OpenAI, Cohere, Voyage AI y HuggingFace directamente desde el motor de la base de datos).
  • Búsqueda híbrida con RRF: Weaviate implementa de forma nativa Reciprocal Rank Fusion (RRF). Cuando un agente consulta Weaviate, el motor ejecuta en paralelo una búsqueda dispersa con BM25 y una densa con HNSW, ponderando dinámicamente las distribuciones de puntuación mediante un parámetro alfa ajustable ($\alpha \in [0.0, 1.0]$).
  • Adecuación para flujos agénticos: Muy alta para documentos complejos. La API nativa de multitenencia de Weaviate permite crear, aislar y eliminar dinámicamente grafos por inquilino bajo demanda. Esto la convierte en una opción sobresaliente para agentes empresariales que gestionan cuentas de clientes aisladas.

5. Pinecone: El pionero serverless totalmente gestionado

Pinecone popularizó las bases de datos vectoriales como servicio gestionado en la nube. En el periodo 2024-2026, Pinecone rediseñó por completo su infraestructura con Pinecone Serverless, desacoplando la indexación vectorial del cómputo.

  • Mecanismo central de indexación: Pinecone Serverless sustituye el aprovisionamiento de pods dedicados por una arquitectura que almacena los vectores en bruto y los índices invertidos directamente en almacenamiento de objetos (Amazon S3). Cuando llegan las consultas, workers de cómputo sin estado recuperan dinámicamente los candidatos de clústeres geométricos, almacenando en caché los clústeres frecuentes en discos SSD NVMe locales.
  • Modelo de precios: Pinecone Serverless factura 0 $ por índices inactivos. Se paga estrictamente por el almacenamiento (0,33 $/GB al mes) y por las unidades de lectura/escritura (WRU / ROU: 8,50 $ por cada millón de consultas de búsqueda).
  • Adecuación para flujos agénticos: Alta para equipos que priorizan cero DevOps. Para equipos de ingeniería pequeños o medianos que ejecutan flujos de trabajo de agentes sin ingenieros de infraestructura dedicados, Pinecone elimina la planificación de capacidad, la fragmentación y el escalado de clústeres. Sin embargo, las consultas frías (cold queries) que impactan en el almacenamiento de objetos pueden sufrir picos de latencia p95 de hasta 120 ms–250 ms.

6. pgvector: La elección empresarial pragmática

pgvector es una extensión de código abierto en C que añade tipos de datos vectoriales e índices de búsqueda de vecinos más cercanos aproximados (ANN) directamente a PostgreSQL.

  • Mecanismo central de indexación: Soporta tanto IVFFlat (archivo invertido con cuantización plana) como HNSW (Hierarchical Navigable Small World). Con el lanzamiento de pgvector v0.7 y v0.8, la indexación HNSW añadió escaneos iterativos de índices, creación de índices en paralelo y cuantización binaria.
  • Transacciones ACID y Joins: El superpoder de pgvector es la coubicación relacional. Un agente puede unir (join) los resultados de similitud vectorial directamente con tablas de negocio relacionales (orders, audit_logs, customer_permissions) en una única transacción ACID, sin necesidad de sincronizar datos entre dos sistemas distribuidos independientes.
  • Adecuación para flujos agénticos: La mejor opción para arquitecturas Postgres existentes y cumplimiento normativo estricto. Si su aplicación ya utiliza Amazon RDS, Supabase, Neon o un Postgres autohospedado, pgvector tiene una sobrecarga operativa prácticamente nula. Elimina la latencia de sincronización de datos entre los registros relacionales y los almacenes vectoriales externos. No obstante, a escalas superiores a 20 millones de vectores, los tiempos de construcción del índice HNSW y los requerimientos de RAM ejercen una presión considerable sobre las instancias compartidas de la base de datos.

4. Pinecone vs. Weaviate vs. ChromaDB: Comparativa de RAG en producción

Un dilema arquitectónico habitual al que se enfrentan los arquitectos de software es elegir entre los tres motores con respaldo de capital de riesgo más populares: Pinecone, Weaviate y ChromaDB.

+---------------------------------------------------------------------------------------------------------------+
|                               PINECONE vs WEAVIATE vs CHROMADB: PRODUCTION MATRIX                             |
+------------------------------+---------------------------+---------------------------+------------------------+
| Dimension                    | Pinecone (Serverless)     | Weaviate (v1.28)          | ChromaDB (v0.6)        |
+------------------------------+---------------------------+---------------------------+------------------------+
| Deployment Target            | Cloud Managed Only (AWS/GCP)| Self-Hosted / Managed Cloud| Local Embedded / Server |
| Open Source License          | Proprietary Closed Source | Open Source (BSD-3-Clause)| Open Source (Apache 2.0)|
| Underlying Engine            | S3 Blob + NVMe Worker     | Go Native + HNSW + BM25   | Rust / SQLite Core     |
| Hybrid Search (BM25 + Dense) | Yes (Sparse-Dense Vector) | Native Out-of-the-Box (RRF)| Requires External Code |
| Multi-Tenancy Architecture   | Namespaces within Index   | Dynamic Native Tenant API | Multi-database/Tenant  |
| Filtering Performance        | High (Inverted Index)     | Very High (Integrated)    | Moderate               |
| Cold-Start Latency Impact    | 80ms - 220ms on cold read | 0ms (In-Memory HNSW)      | 0ms (Local In-Memory)  |
| 1M Vector Base Cost / Month  | ~$2.50 Storage + Usage    | ~$65 Instance (c6i.xlarge)| ~$30 Instance or Free  |
| Best Production Fit          | Lean teams, serverless RAG| Enterprise hybrid search  | Fast prototyping, local|
+------------------------------+---------------------------+---------------------------+------------------------+

Trade-offs arquitectónicos en la práctica

  • Elija Pinecone Serverless si: busca un mantenimiento operativo nulo, tiene patrones de consulta fluctuantes y desea pagar estrictamente por consulta. Es el estándar de referencia (gold standard) para arquitecturas de agentes serverless que se ejecutan en AWS Lambda o Cloudflare Workers.
  • Elija Weaviate si: su agente depende de una recuperación híbrida densa-dispersa (por ejemplo, para hacer coincidir números de pieza exactos o códigos de error junto con la intención semántica). Su motor BM25 integrado y sus parámetros de fusión personalizables eliminan la necesidad de contar con un clúster externo de Elasticsearch u OpenSearch.
  • Elija ChromaDB si: necesita un motor integrable (embeddable) y sin fricciones para desarrollo, dispositivos edge o agentes de IA locales de escritorio. Ofrece la experiencia de incorporación más fluida del ecosistema Python.

5. La "base de datos vectorial más económica": análisis del coste total de propiedad (TCO)

Al evaluar la base de datos vectorial más económica, los precios brutos de suscripción resultan engañosos. Los equipos de ingeniería deben calcular el coste total de propiedad (TCO) completo, el cual incluye instancias de computación, almacenamiento persistente, consumo de memoria, tráfico de red entrante/saliente (ingress/egress) y horas de mantenimiento de ingeniería.

Proyecciones de costes para 1M, 10M y 50M de vectores ($/mes, 1536-D FP32)

+-------------------------------------------------------------------------------------------------------+
|                                    TOTAL COST OF OWNERSHIP (TCO) COMPARISON                           |
+-------------------+----------------------------+----------------------------+-------------------------+
| Vector Store      | 1,000,000 Vectors (1536-D) | 10,000,000 Vectors (1536-D)| 50,000,000 Vectors (1536-D) |
+-------------------+----------------------------+----------------------------+-------------------------+
| pgvector (Postgres| $0.00* (Shared RDS)        | $145.00/mo (db.r6g.xlarge) | $720.00/mo (db.r6g.4xl) |
| Qdrant (Self-Host)| $18.00/mo (c6i.large + SQ) | $115.00/mo (c6i.4xlarge+SQ)| $460.00/mo (Cluster)    |
| Milvus (Self-Host)| $65.00/mo (Min cluster)    | $168.00/mo (Distributed)   | $520.00/mo (Kubernetes) |
| ChromaDB (Self-H) | $15.00/mo (t4g.large)      | $98.00/mo (c6g.2xlarge)    | Not Recommended (>20M)  |
| Pinecone Serverles| $2.48 storage + $8.50 ops  | $24.80 storage + $85.00 ops| $124.00 st + $425.00 ops|
| Qdrant Cloud (Mng)| $45.00/mo                  | $320.00/mo                 | $1,450.00/mo            |
| Zilliz Cloud (Mng)| $65.00/mo                  | $380.00/mo                 | $1,680.00/mo            |
+-------------------+----------------------------+----------------------------+-------------------------+

Asume 500.000 consultas de búsqueda/mes para 1M de vectores, 5M de consultas/mes para 10M de vectores y 25M de consultas/mes para 50M de vectores.

El veredicto sobre los costes:

  1. La opción indiscutiblemente más económica para infraestructuras existentes: pgvector. Si ya opera una instancia de PostgreSQL en AWS RDS, Neon o Supabase que funcione por debajo del 60% de utilización de memoria, añadir un índice HNSW supone un coste adicional de $0.00 al mes en infraestructura.
  2. El motor dedicado autogestionado (self-hosted) más económico: Qdrant con cuantización escalar (SQ). Al comprimir los vectores de FP32 a UINT8 y mapear en memoria (memory-mapping) los datos del payload al disco, Qdrant puede alojar cómodamente 10M de vectores de 1536 dimensiones en un único nodo de computación de $115/mes, manteniendo una latencia p95 inferior a 15 ms.
  3. El motor serverless en la nube más económico para tráfico bajo o con ráfagas (bursts): Pinecone Serverless. Si sus agentes se ejecutan periódicamente o experimentan períodos de inactividad prolongados (por ejemplo, noches o fines de semana), Pinecone Serverless cuesta unos pocos centavos al día ($0.33/GB-mes por almacenamiento), evitando por completo el coste base de $50 a $300/mes que supone mantener clústeres de computación autogestionados inactivos.

6. Implementación práctica en producción

Para demostrar el despliegue en entornos reales, a continuación se presentan patrones de código listos para producción para las dos opciones líderes: Qdrant (motor dedicado de alto rendimiento) y pgvector (motor híbrido relacional).

1. Configuración de alto rendimiento en Qdrant con indexación de payload

Despliegue Qdrant con almacenamiento persistente mediante Docker:

# Launch optimized Qdrant instance with vector storage path
docker run -d -p 6333:6333 -p 6334:6334 \
  -v $(pwd)/qdrant_storage:/qdrant/storage:z \
  --name qdrant_rag \
  qdrant/qdrant:v1.13.0

Implementación en Python que incorpora indexación dinámica de payload, cuantización escalar y recuperación filtrada de memoria para agentes:

from qdrant_client import QdrantClient
from qdrant_client.http import models

# Initialize client
client = QdrantClient(url="http://localhost:6333")

COLLECTION_NAME = "agentic_memory"

# 1. Create collection optimized with Scalar Quantization & HNSW parameters
if not client.collection_exists(COLLECTION_NAME):
    client.create_collection(
        collection_name=COLLECTION_NAME,
        vectors_config=models.VectorParams(
            size=1536,
            distance=models.Distance.COSINE,
            on_disk=False  # Keep primary vectors in RAM for fast search
        ),
        hnsw_config=models.HnswConfigDiff(
            m=16,
            ef_construct=128,
            full_scan_threshold=10000
        ),
        quantization_config=models.ScalarQuantization(
            scalar=models.ScalarQuantizationConfig(
                type=models.ScalarType.INT8,
                quantile=0.99,
                always_ram=True
            )
        )
    )

# 2. Create payload index for high-speed agent pre-filtering
client.create_payload_index(
    collection_name=COLLECTION_NAME,
    field_name="tenant_id",
    field_schema=models.PayloadSchemaType.KEYWORD
)
client.create_payload_index(
    collection_name=COLLECTION_NAME,
    field_name="timestamp",
    field_schema=models.PayloadSchemaType.INTEGER
)

# 3. Insert Agent Memory Embedding with Metadata Payload
client.upsert(
    collection_name=COLLECTION_NAME,
    points=[
        models.PointStruct(
            id="c4a7e912-3b21-4b11-9a72-8f128e4e9a11",
            vector=[0.012, -0.045, 0.089] + [0.0] * 1533,  # 1536-D mock vector
            payload={
                "tenant_id": "enterprise_corp",
                "agent_id": "code_refactor_agent_07",
                "timestamp": 1756819200,
                "document_chunk": "Refactored payment gateway handler to support idempotency keys.",
                "visibility": "team_internal"
            }
        )
    ]
)

# 4. Perform Single-Stage Filtered Vector Query
query_vector = [0.011, -0.042, 0.085] + [0.0] * 1533
search_results = client.search(
    collection_name=COLLECTION_NAME,
    query_vector=query_vector,
    query_filter=models.Filter(
        must=[
            models.FieldCondition(
                key="tenant_id",
                match=models.MatchValue(value="enterprise_corp")
            ),
            models.FieldCondition(
                key="timestamp",
                range=models.Range(gte=1756700000)
            )
        ]
    ),
    limit=5,
    with_payload=True
)

for hit in search_results:
    print(f"Score: {hit.score:.4f} | Content: {hit.payload['document_chunk']}")

2. Configuración empresarial de pgvector (PostgreSQL 17 / pgvector 0.8)

Inicialización de un índice HNSW con capacidades de escaneo iterativo (iterative scan) en PostgreSQL:

-- 1. Enable the pgvector extension
CREATE EXTENSION IF NOT EXISTS vector;

-- 2. Create the agent episodic memory table
CREATE TABLE agent_memories (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    tenant_id VARCHAR(64) NOT NULL,
    agent_id VARCHAR(64) NOT NULL,
    created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
    content TEXT NOT NULL,
    metadata JSONB,
    embedding VECTOR(1536) NOT NULL
);

-- 3. Create B-Tree index for scalar filtering
CREATE INDEX idx_agent_memories_tenant ON agent_memories(tenant_id);

-- 4. Create optimized HNSW vector index using cosine distance
CREATE INDEX idx_agent_memories_embedding ON agent_memories 
USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 128);

-- 5. Perform Hybrid Filtered Vector Query using Iterative HNSW Scan
-- (pgvector 0.8+ optimizes index scans when combined with strict WHERE filters)
SET hnsw.ef_search = 64;

SELECT 
    id,
    tenant_id,
    content,
    1 - (embedding <=> '[0.012, -0.045, 0.089, ...]'::vector) AS cosine_similarity
FROM agent_memories
WHERE tenant_id = 'enterprise_corp'
  AND created_at >= NOW() - INTERVAL '7 days'
ORDER BY embedding <=> '[0.012, -0.045, 0.089, ...]'::vector
LIMIT 5;

7. Recomendaciones estratégicas: ¿qué motor debería seleccionar?

La selección de la base de datos vectorial óptima en 2026 depende de sus restricciones operativas, su escala y su arquitectura de software:

                                 [Select Vector Engine]
                                            │
               ┌────────────────────────────┴────────────────────────────┐
               ▼                                                         ▼
     [Existing PostgreSQL Stack?]                                [Dedicated Vector Store?]
               │                                                         │
       ┌───────┴───────┐                                         ┌───────┴───────┐
      YES              NO                                       YES              NO
       │               │                                         │               │
 [Vectors < 20M?]  [Need Rust Speed?]                     [Vectors > 50M?]  [Managed Serverless?]
       │               │                                         │               │
  ┌────┴────┐     ┌────┴────┐                               ┌────┴────┐     ┌────┴────┐
 YES        NO   YES        NO                             YES        NO   YES        NO
  │         │     │         │                               │         │     │         │
pgvector  Qdrant Qdrant  Weaviate                        Milvus    Qdrant Pinecone  ChromaDB
(Fastest  (Scale (Best   (Best Hybrid                    (Scale    (Best  (Zero-Dev (Local Dev
 Deploy)   RAM)   P95)    RRF + Graph)                    Cluster) TCO)    Ops)      & Edge)

Resumen de las mejores opciones según el caso de uso:

  • La mejor opción global para RAG agéntico en producción: Qdrant. Rendimiento nativo en Rust, latencia p95 inferior a 12 ms bajo filtrado intensivo de payload y una eficiencia de RAM excepcional mediante cuantización escalar.
  • La base de datos vectorial más económica para sistemas existentes: pgvector. Rentabilidad imbatible si ya ejecuta PostgreSQL. Uniones relacionales directas mediante SQL y cero canalizaciones (pipelines) de sincronización secundaria de datos.
  • La mejor opción Serverless / Zero-DevOps: Pinecone Serverless. Modelo de pago por uso (pay-as-you-go), cero costes por inactividad y escalabilidad infinita sin sobrecarga de gestión de infraestructura.
  • La mejor para hiperescala (> 50M de vectores): Milvus. Arquitectura distribuida nativa de Kubernetes con capas desacopladas de computación y almacenamiento, ideal para despliegues empresariales en clúster.
  • La mejor para búsqueda híbrida dispersa-densa (sparse-dense): Weaviate. Fusión de rango recíproco (Reciprocal Rank Fusion, RRF) nativa que combina coincidencia de palabras clave por BM25 con incrustaciones (embeddings) densas en una sola consulta.
  • La mejor para prototipado rápido y agentes locales: ChromaDB. Configuración instantánea, consumo de recursos extremadamente ligero e integración transparente en entornos de prueba de desarrollo.
← Todos los Artículos
0 / 4