Módulo 6: Diseño de Sistemas de Búsqueda
2. Arquitectura General de un Sistema de Búsqueda
Descripción
Aquí diseñas la arquitectura completa de un sistema de búsqueda vectorial: componentes, flujos de datos, tecnologías típicas. Es el blueprint que guía todo el diseño.
Componentes principales
┌─────────────────────────────────────────────────┐
│ SISTEMA DE BÚSQUEDA │
├─────────────────────────────────────────────────┤
│ │
│ 1. INDEXACIÓN (Offline) │
│ └─ Documentos → Chunks → Embeddings → DB │
│ │
│ 2. QUERY PROCESSING (Online) │
│ └─ Query → Embedding → kNN → Resultados │
│ │
│ 3. RANKING & FILTERING │
│ └─ Reranking, metadata filters, score fusion│
│ │
│ 4. ALMACENAMIENTO │
│ └─ Vector DB (Pinecone, Weaviate) │
│ └─ Metadata DB (PostgreSQL, etc) │
│ │
└─────────────────────────────────────────────────┘
Flujo completo
Fase 1: Indexación (offline, una vez)
1. Ingestión de documentos
└─ PDF, TXT, HTML, Markdown
2. Chunking (dividir en partes)
└─ Por párrafos, tokens, ventana deslizante
3. Embedding (convertir a vectores)
└─ OpenAI API, Sentence-BERT
4. Almacenamiento
└─ Vector DB: embeddings + metadata
Fase 2: Query processing (online, cada búsqueda)
1. Query del usuario
└─ "cómo usar RAG con Pinecone"
2. Embedding de query
└─ OpenAI API → [0.23, -0.45, ...]
3. Búsqueda kNN
└─ Vector DB retorna top-K candidatos (k=100)
4. Reranking (opcional)
└─ Modelo cross-encoder reordena top-100 → top-10
5. Retornar resultados
└─ Top-10 chunks más relevantes
Diagrama de arquitectura
┌─────────────────┐
│ Documentos │ (PDF, TXT, HTML)
└────────┬────────┘
│
v
┌─────────────────┐
│ Chunking │ (Dividir en 500 tokens)
└────────┬────────┘
│
v
┌─────────────────┐
│ Embedding API │ (OpenAI, Cohere)
└────────┬────────┘
│
v
┌─────────────────┐
│ Vector DB │ (Pinecone, Weaviate)
│ + Metadata │
└────────┬────────┘
│
│ (Storage completo)
│
├──────────────────────────┐
│ │
v v
┌─────────────────┐ ┌─────────────────┐
│ User Query │ │ Embedding │
│ "RAG setup" │───────>│ de Query │
└─────────────────┘ └────────┬────────┘
│
v
┌─────────────────┐
│ kNN Search │
│ (HNSW/IVF) │
└────────┬────────┘
│
v
┌─────────────────┐
│ Reranking │
│ (opcional) │
└────────┬────────┘
│
v
┌─────────────────┐
│ Top-K │
│ Resultados │
└─────────────────┘
Tecnologías típicas por componente
Indexación:
- Chunking: LangChain, LlamaIndex (text splitters)
- Embeddings: OpenAI API, Cohere, Sentence-BERT
- Orquestación: Python scripts, Airflow, Prefect
Vector DB:
- Managed: Pinecone, Weaviate Cloud
- Self-hosted: Weaviate, Qdrant, Milvus
- Library: FAISS (no persistence nativa)
Query processing:
- API: FastAPI, Flask, Express.js
- Reranking: Cohere Rerank API, Cross-encoder (Sentence-BERT)
Metadata DB (opcional):
- Relacional: PostgreSQL, MySQL
- NoSQL: MongoDB, DynamoDB
Latencia esperada
Indexación:
1K documentos × 500 tokens promedio
→ Embedding: ~30 segundos (OpenAI API, batch)
→ Indexación en Pinecone: ~5 segundos
Total: ~35-45 segundos
Query:
Embedding de query: 50-200ms (OpenAI API)
kNN search (HNSW): 10-50ms (Pinecone)
Reranking (opcional): 100-300ms (Cohere Rerank)
Total: 160-550ms
Optimización: Cachear embeddings frecuentes (queries repetidas).
Escalabilidad
Dataset pequeño (< 10K docs):
- FAISS local (gratis)
- Embeddings generados una vez
Dataset mediano (10K-1M docs):
- Weaviate self-hosted o Pinecone Starter
- Índice HNSW
Dataset grande (> 1M docs):
- Pinecone Production o Weaviate Cloud
- Sharding (múltiples índices)
- IVF+HNSW híbrido
Resumen
Puntos clave:
- Arquitectura: Indexación (offline) + Query processing (online)
- Componentes: Chunking, embeddings, vector DB, kNN, reranking
- Tecnologías: OpenAI, Pinecone/Weaviate, FastAPI, Cohere
- Latencia: 160-550ms típica (con reranking)
Próxima cápsula: 03-the-indexing-pipeline.md — Chunking strategies, metadata.