Módulo 8: Proyecto Final Integrador

3. Etapa 2: Diseño de Arquitectura

Descripción

En esta etapa diseñas la arquitectura completa del sistema RAG: componentes, flujos de datos, tecnologías, y diagramas.


Componentes principales

Basándote en requisitos y restricciones, tu arquitectura debe incluir:

1. Ingestion Pipeline (offline)

PDFs/LaTeX/DOCX → Extracción de texto → Chunking → Embeddings → Vector DB

2. Query Processing (online)

User Query → Detección de tipo → Búsqueda (semantic/keyword/hybrid) → Resultados

3. RAG Pipeline (online, para Q&A)

Query → Retrieval → Augmentation → LLM → Response

Diagrama de arquitectura (solución sugerida)

┌─────────────────────────────────────────────────────────┐
│                   INGESTION (Offline)                   │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  [100K Docs] (PDF, LaTeX, DOCX)                        │
│       ↓                                                 │
│  [Text Extraction]                                      │
│    - PyPDF2 (PDFs)                                      │
│    - pandoc (LaTeX → text)                              │
│    - python-docx (DOCX)                                 │
│       ↓                                                 │
│  [Chunking]                                             │
│    Strategy: Hierarchical (por secciones)               │
│    Size: 600 tokens, overlap 100                        │
│       ↓                                                 │
│  [Embeddings]                                           │
│    Model: Sentence-BERT local (all-mpnet-base-v2)       │
│    Dimensions: 768D                                     │
│       ↓                                                 │
│  [Metadata Extraction]                                  │
│    - Author, year, department, type                     │
│       ↓                                                 │
│  [Vector Database]                                      │
│    - Weaviate (self-hosted)                             │
│    - HNSW index                                         │
│    - ~500K chunks (100K docs × 5 chunks avg)            │
│                                                         │
└─────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│               QUERY PROCESSING (Online)                 │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  [User Query]                                           │
│       ↓                                                 │
│  [Query Analysis]                                       │
│    ¿Contiene metadata exacta? (author, year, ID)       │
│     └─ YES: Exact match (keyword + filter)              │
│     └─ NO: Semantic search                              │
│       ↓                                                 │
│  ┌──────────────┬──────────────┐                       │
│  │   Keyword    │   Semantic   │                       │
│  │   (BM25)     │   (cosine)   │                       │
│  └──────┬───────┴──────┬───────┘                       │
│         │              │                                │
│         └──────┬───────┘                                │
│                │                                        │
│                v                                        │
│       [RRF Fusion] (k=60)                               │
│                ↓                                        │
│       [MMR] (λ=0.6, diversidad)                         │
│                ↓                                        │
│       [Metadata Boost]                                  │
│        - Papers < 2 años: 1.2x                          │
│                ↓                                        │
│       [Top-20 Results]                                  │
│                                                         │
└─────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│                  RAG PIPELINE (Q&A)                     │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  [User Question]                                        │
│   "¿Qué metodología usa el paper de Smith?"            │
│       ↓                                                 │
│  [Retrieval] (same as Query Processing)                 │
│       Top-5 chunks                                      │
│       ↓                                                 │
│  [Augmentation]                                         │
│       Build prompt:                                     │
│       "Contexto: [5 chunks]                             │
│        Pregunta: [user question]"                       │
│       ↓                                                 │
│  [LLM Generation]                                       │
│       Model: GPT-3.5 Turbo                              │
│       Temperature: 0.1                                  │
│       Max tokens: 500                                   │
│       ↓                                                 │
│  [Response + Sources]                                   │
│       "Según el paper de Smith (2023):                  │
│        La metodología consiste en..."                   │
│                                                         │
└─────────────────────────────────────────────────────────┘

Decisiones de arquitectura

Decisión 1: Embeddings locales (Sentence-BERT)

Justificación:

  • ✅ Restricción: Datos privados (no pueden salir)
  • ✅ Costo: $0 después de setup (GPU local)
  • ✅ Calidad: Sentence-BERT (all-mpnet-base-v2) es competitivo para textos académicos
  • ❌ Trade-off: 768D (vs 1536D OpenAI), menor calidad pero aceptable

Alternativa rechazada: OpenAI embeddings (viola restricción de privacidad)


Decisión 2: Weaviate self-hosted (vector DB)

Justificación:

  • ✅ Open-source (no costo de licencia)
  • ✅ HNSW nativo (rápido para 500K chunks)
  • ✅ Hybrid search nativo (keyword + semantic)
  • ✅ Metadata filtering (author, year, department)
  • ✅ Self-hosted (datos privados)

Alternativa rechazada: Pinecone (managed pero costo $70-200/mes, suma a presupuesto)


Decisión 3: GPT-3.5 Turbo para LLM

Justificación:

  • ✅ Costo: 20x más barato que GPT-4 ($0.0005 vs $0.01/1K tokens)
  • ✅ Latencia: 2x más rápido (1-2s vs 2-5s)
  • ⚠️ Trade-off: Menor calidad que GPT-4, pero suficiente para Q&A académico

Alternativa considerada: Llama 3 (self-hosted) → Ahorra costo pero requiere GPU dedicada adicional


Decisión 4: Hybrid search (RRF) + MMR

Justificación:

  • ✅ RF2 (búsqueda exacta): Keyword garantiza matches exactos (author, year)
  • ✅ RF1 (búsqueda conceptual): Semantic entiende sinónimos
  • ✅ RF4 (diversidad): MMR evita 20 papers similares

Implementación:

1. Ejecutar keyword (BM25) y semantic (cosine) en paralelo
2. Fusionar con RRF (k=60)
3. Aplicar MMR (λ=0.6) sobre top-100 → Diversificar a top-20
4. Boost temporal (papers recientes)

Decisión 5: Chunking hierarchical (por secciones)

Justificación:

  • ✅ Papers tienen estructura (Abstract, Methods, Results, Conclusion)
  • ✅ Chunks semánticamente coherentes (sección completa)
  • ✅ Metadata por chunk (ej: section="Methods")

Parámetros:

  • Tamaño: 600 tokens (balance contexto/precisión)
  • Overlap: 100 tokens (captura transiciones)
  • Estrategia: Dividir por headers Markdown (##, ###) o detectar secciones en PDFs

Stack tecnológico completo

Ingestion:

  • Text extraction: PyPDF2, pandoc, python-docx
  • Chunking: LangChain RecursiveCharacterTextSplitter
  • Embeddings: Sentence-BERT (all-mpnet-base-v2)
  • Orchestration: Python scripts + Airflow (para re-indexación periódica)

Storage:

  • Vector DB: Weaviate (self-hosted en GPU server)
  • Metadata DB (opcional): PostgreSQL (para queries complejas sobre metadata)

Query Processing:

  • API: FastAPI
  • Search: Weaviate hybrid search (BM25 + cosine)
  • Ranking: Custom (RRF + MMR en Python)

RAG:

  • LLM: OpenAI GPT-3.5 Turbo (API)
  • Prompting: Custom prompt templates
  • Streaming: OpenAI streaming API (mejor UX)

Infrastructure:

  • Embedding server: GPU server (NVIDIA T4, $0.35/hora = $250/mes)
  • Weaviate server: CPU + SSD (c5.2xlarge AWS, $0.34/hora = $245/mes)
  • API server: Serverless (AWS Lambda + API Gateway, ~$50/mes)

Flujos de datos

Flujo 1: Indexación inicial (una vez)

1. Extraer texto de 100K docs (paralelo, 24 horas)
2. Chunking hierarchical → 500K chunks
3. Generar embeddings (Sentence-BERT local):
   - Batch size: 32
   - Throughput: ~1000 chunks/minuto
   - Tiempo: 500K / 1000 = 500 minutos (~8 horas)
4. Upsert a Weaviate (batch 100):
   - Tiempo: ~2 horas

Total: ~34 horas (1.5 días)
Costo: $0 (hardware ya existe)

Flujo 2: Query de búsqueda (typical)

User: "papers sobre machine learning después de 2020"

1. Parse query:
   - Tema: "machine learning"
   - Filtro: year >= 2020

2. Embedding de query (Sentence-BERT local): 50ms

3. Weaviate hybrid search:
   - Keyword: "machine learning" (BM25)
   - Semantic: embedding coseno
   - Filtro: year >= 2020
   - Top-K: 100
   - Latencia: 80ms

4. RRF fusion + MMR (Python): 100ms

5. Retornar top-20 → Usuario

Total latency: 230ms ✅ (< 2s target)

Flujo 3: Query de Q&A (RAG)

User: "¿Qué dice el paper de Smith sobre NLP?"

1. Retrieval (same as Flujo 2):
   - Filtro: author = "Smith" AND topic ~ "NLP"
   - Top-5 chunks
   - Latency: 230ms

2. Build prompt (Python): 10ms

3. LLM generation (GPT-3.5 Turbo):
   - Input: 2500 tokens (query + 5 chunks)
   - Output: 300 tokens
   - Latency: 1200ms (streaming)

4. Return response + sources

Total latency: 1440ms ✅ (< 2s target)

Resumen de arquitectura

Componentes:

  • Sentence-BERT (embeddings locales)
  • Weaviate (vector DB self-hosted)
  • GPT-3.5 Turbo (LLM)
  • FastAPI (API)
  • Airflow (orchestration)

Flujos:

  • Indexación: 34 horas (una vez)
  • Búsqueda: 230ms
  • Q&A (RAG): 1440ms

Cumplimiento de requisitos:

  • ✅ Latencia < 2s
  • ✅ Datos privados (embeddings locales)
  • ✅ Búsqueda semántica + exacta
  • ✅ Q&A con LLM
  • ✅ Diversidad (MMR)

Próxima etapa: 04-technical-decisions.md — Justificar decisiones específicas (chunking, top-K, parámetros).