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.