Módulo 8: Document Analyzer Multimodal

1. Introducción: Proyecto Integrador

Descripción

Este es el Módulo 8 de la Guía de IA Multimodal: el proyecto integrador final. Los módulos 1-7 enseñaron las piezas individuales — vision, documentos, generación de imágenes, audio, RAG y patrones de uso. Este módulo las combina en un sistema completo y funcional: Document Analyzer Multimodal. Un sistema que recibe documentos (PDF, imágenes escaneadas), los procesa automáticamente, extrae información estructurada con vision, indexa el contenido para preguntas y respuestas, y opcionalmente genera un resumen en audio.

Por qué un proyecto integrador: Dominar APIs individuales es necesario pero no suficiente. La diferencia entre un developer que "sabe usar GPT-4 Vision" y uno que "construye sistemas multimodales" está en la integración: cómo conectar procesamiento de documentos con vision, vision con RAG, RAG con audio, y todo empaquetado en una API REST lista para producción. Este módulo cierra esa brecha.

Qué hace el Document Analyzer: Imagina que trabajas en una empresa que recibe cientos de documentos diarios — facturas, contratos, manuales técnicos, informes. El Document Analyzer automatiza su procesamiento completo:

  1. Recibe un PDF o imagen
  2. Detecta si tiene texto extraíble o es escaneado (necesita OCR/vision)
  3. Clasifica el tipo de documento (factura, contrato, manual, otro)
  4. Extrae datos estructurados según el tipo (fecha, total, proveedor para facturas)
  5. Genera un resumen ejecutivo
  6. Indexa el contenido para Q&A posterior
  7. Responde preguntas específicas sobre el documento
  8. Opcionalmente genera el resumen en audio (TTS)
  9. Expone todo como API REST con FastAPI

Resultado: Al terminar el módulo, tendrás un sistema portfolio-worthy y production-ready que demuestra dominio real de IA multimodal.


¿Dónde Estamos en la Guía?

Contexto

Esta guía tiene 8 módulos organizados en 3 fases:

Phase 1: Fundamentos Multimodales (Módulos 1-3)
├── Módulo 1: Introducción a IA Multimodal         ✅ Completado
├── Módulo 2: Vision + LLMs                        ✅ Completado
└── Módulo 3: Comprensión de Documentos            ✅ Completado

Phase 2: Generación y Audio (Módulos 4-5)
├── Módulo 4: Generación de Imágenes               ✅ Completado
└── Módulo 5: Procesamiento de Audio               ✅ Completado

Phase 3: RAG, Casos de Uso y Proyecto (Módulos 6-8)
├── Módulo 6: RAG Multimodal                       ✅ Completado
├── Módulo 7: Casos de Uso                         ✅ Completado
└── Módulo 8: Proyecto Final — Document Analyzer   ← ESTÁS AQUÍ

Duración total de la guía: 6-7 horas. Duración de este módulo: ~90 minutos (el más largo, por ser integrador).

Cómo se conecta todo

Cada módulo anterior aportó una capacidad que ahora integras:

Módulo 1 (Fundamentos)      → Clasificador de input: detectar tipo de archivo
Módulo 2 (Vision)           → Extracción estructurada: analizar imágenes de documentos
Módulo 3 (Documentos)       → Procesamiento PDF: extraer texto e imágenes
Módulo 4 (Gen. Imágenes)    → [No se usa directamente en este proyecto]
Módulo 5 (Audio)            → TTS: generar resumen hablado
Módulo 6 (RAG)              → Indexación y Q&A: responder preguntas sobre documentos
Módulo 7 (Casos de Uso)     → Patrones: selector de caso de uso, fallbacks, costos

El Módulo 4 (generación de imágenes) no se integra directamente — el Document Analyzer consume imágenes, no las genera. Pero el conocimiento de formatos, resolución y encoding que aprendiste allí sí aplica al procesamiento de imágenes de documentos.


Arquitectura del Document Analyzer

Diagrama de flujo completo

                         ┌──────────────────────────────────┐
                         │     API REST (FastAPI)           │
                         │     POST /analyze                │
                         │     POST /ask                    │
                         │     GET  /health                 │
                         └──────────┬───────────────────────┘
                                    │
                                    ▼
                    ┌───────────────────────────────┐
                    │     Input Validator            │
                    │  - Tipo de archivo (PDF/img)   │
                    │  - Tamaño máximo               │
                    │  - Formato válido              │
                    └───────────┬───────────────────┘
                                │
                                ▼
                    ┌───────────────────────────────┐
                    │     DocumentProcessor (M3)     │
                    │  - Extraer texto de PDF        │
                    │  - Detectar págs. escaneadas   │
                    │  - Convertir a imágenes        │
                    │  - Chunking para RAG           │
                    └───────────┬───────────────────┘
                                │
                    ┌───────────┴───────────┐
                    ▼                       ▼
        ┌───────────────────┐   ┌───────────────────┐
        │  VisionAnalyzer   │   │   RAGModule (M6)   │
        │  (M2)             │   │  - Indexar chunks   │
        │  - Clasificar doc │   │  - Embeddings       │
        │  - Extraer datos  │   │  - Retrieval        │
        │  - Fallback multi │   │  - Q&A generation   │
        └────────┬──────────┘   └────────┬──────────┘
                 │                        │
                 ▼                        ▼
        ┌───────────────────┐   ┌───────────────────┐
        │  Summarizer       │   │   AudioModule (M5) │
        │  - Resumen texto  │   │  - TTS del resumen │
        │  - Puntos clave   │   │  - Voz configurable│
        └───────────────────┘   └───────────────────┘

Flujo de datos simplificado

PDF/Imagen → Validar → Procesar documento → ┬→ Clasificar tipo (Vision)
                                             ├→ Extraer datos estructurados (Vision)
                                             ├→ Generar resumen (LLM)
                                             ├→ Indexar para Q&A (RAG + ChromaDB)
                                             ├→ Responder pregunta (si se envió)
                                             └→ Generar audio del resumen (TTS, opcional)

Componentes y su Origen

Mapa de reutilización

ComponenteClase/FunciónMódulo de origenQué aporta
Input Validatorvalidate_input()Módulo 1Detectar tipo de archivo, validar formato y tamaño
DocumentProcessorDocumentProcessorMódulo 3Extraer texto/imágenes de PDFs, detectar páginas escaneadas
VisionAnalyzerVisionAnalyzerMódulo 2Clasificar documentos, extraer datos estructurados de imágenes
RAGModuleRAGModuleMódulo 6Indexar chunks en ChromaDB, buscar y generar respuestas
AudioModuleAudioModuleMódulo 5Generar audio del resumen con TTS de OpenAI
UseCaseSelectorclassify_document()Módulo 7Determinar tipo de documento para aplicar schema correcto
API RouterFastAPI endpointsMódulo 7REST API para integración externa

Adaptaciones respecto a los módulos originales

No es "copiar y pegar" de módulos anteriores. Cada componente se adapta:

  • DocumentProcessor ahora detecta páginas mixtas (texto + escaneadas) dentro del mismo PDF
  • VisionAnalyzer incluye fallback multi-proveedor (OpenAI → Anthropic → Google)
  • RAGModule indexa tanto texto como descripciones de imágenes (multimodal RAG)
  • AudioModule maneja resúmenes largos dividiendo en chunks de audio
  • API integra todo en un solo endpoint con opciones configurables

Roadmap del Módulo 8

Mapa de cápsulas

#CápsulaQué construirásDuración
01Introducción (esta)Contexto, arquitectura, setup10 min
02Especificaciones técnicasInputs, outputs, modelos de datos, endpoints10 min
03Procesamiento de documentosDocumentProcessor completo15 min
04Análisis con visionVisionAnalyzer con fallback15 min
05RAG y Q&ARAGModule con indexación y respuestas15 min
06Integración de audioAudioModule con TTS10 min
07Deployment y optimizaciónDocker, FastAPI, monitoring, costos10 min
08Proyecto: Document AnalyzerSistema completo integrado, tests, demo15 min

Flujo de construcción

Cápsula 02: Defines QUÉ va a hacer el sistema (especificaciones)
    ↓
Cápsulas 03-06: Construyes CADA módulo individualmente
    ↓
Cápsula 07: Preparas el DEPLOYMENT (Docker, API, monitoring)
    ↓
Cápsula 08: INTEGRAS todo en DocumentAnalyzer y ejecutas el demo completo

Cada cápsula es independiente: puedes construir y probar cada módulo por separado antes de integrar. Esto es deliberado — en sistemas reales, primero construyes y validas componentes, luego los conectas.

Duración total estimada: 90 minutos.


Objetivos del Módulo

Al terminar este módulo serás capaz de:

  • ✅ Diseñar la arquitectura de un sistema multimodal de múltiples componentes
  • ✅ Implementar procesamiento de documentos con detección de páginas escaneadas vs texto
  • ✅ Integrar vision APIs con fallback multi-proveedor para extracción estructurada
  • ✅ Construir un pipeline RAG que indexa texto y descripciones de imágenes
  • ✅ Agregar generación de audio (TTS) como output opcional
  • ✅ Desplegar el sistema como API REST con FastAPI y Docker
  • ✅ Aplicar patrones de producción: logging, validación, manejo de errores, costos
  • ✅ Tener un proyecto portfolio-worthy que demuestra dominio de IA multimodal

Objetivo profesional

Cuando alguien te pregunte "¿puedes construir un sistema que procese documentos con IA?", tu respuesta no será "sí, puedo llamar a la API de OpenAI". Será "sí, aquí está el sistema: procesa PDFs y imágenes, extrae datos estructurados, responde preguntas, genera resúmenes en audio, tiene API REST, fallbacks por proveedor, y está listo para Docker". Ese es el nivel que este módulo te da.


Prerrequisitos

Conocimientos necesarios (de módulos anteriores)

MóduloConcepto claveNecesitas saber
Módulo 1Clasificación de inputsDetectar tipo de archivo, modalidad
Módulo 2Vision APIsEnviar imágenes a GPT-4o/Claude, obtener análisis
Módulo 3Procesamiento de documentosExtraer texto/imágenes de PDFs con PyMuPDF
Módulo 5Audio/TTSGenerar audio desde texto con OpenAI TTS
Módulo 6RAGIndexar en ChromaDB, embeddings, retrieval
Módulo 7Patrones de usoSelección de caso de uso, fallbacks

Si no completaste módulos anteriores

Puedes seguir este módulo, pero te recomendamos al menos haber leído:

  • Módulo 3 (documentos) — La base del procesamiento de input
  • Módulo 2 (vision) — La extracción con modelos de visión
  • Módulo 6 (RAG) — El sistema de preguntas y respuestas

Los demás módulos aportan funcionalidad opcional o patrones que puedes revisar después.

Herramientas necesarias

  • Python 3.11+
  • API key de OpenAI (obligatoria)
  • API key de Anthropic (opcional, para fallback de vision)
  • Editor con terminal (VS Code, Cursor, PyCharm)
  • Docker (opcional, para deployment)

Setup Técnico

Dependencias

python -m venv venv
source venv/bin/activate

pip install openai>=1.0.0 \
            pymupdf>=1.24.0 \
            pillow>=10.0.0 \
            pydantic>=2.0.0 \
            chromadb>=0.5.0 \
            langchain>=0.2.0 \
            langchain-openai>=0.1.0 \
            fastapi>=0.110.0 \
            uvicorn>=0.29.0 \
            python-multipart>=0.0.9 \
            python-dotenv>=1.0.0

Dependencias opcionales:

pip install anthropic>=0.25.0    # Fallback vision con Claude
pip install pydub>=0.25.0        # Concatenar audios largos
pip install slowapi>=0.1.9       # Rate limiting

Variables de entorno

Crea un archivo .env:

OPENAI_API_KEY=sk-...

# Opcionales
ANTHROPIC_API_KEY=sk-ant-...
LOG_LEVEL=INFO
MAX_FILE_SIZE_MB=50
REQUEST_TIMEOUT=120

Carga en tu código:

from dotenv import load_dotenv
import os

load_dotenv()

assert os.getenv("OPENAI_API_KEY"), "Falta OPENAI_API_KEY en .env"

Verificación del setup

from openai import OpenAI
from dotenv import load_dotenv

load_dotenv()
client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "Responde solo 'OK'."}],
    max_tokens=5
)
print(response.choices[0].message.content)

Si ves OK, tu entorno está listo.

Estructura de archivos del proyecto

document-analyzer/
├── .env                         # API keys (NO commitear)
├── requirements.txt             # Dependencias
├── Dockerfile                   # Containerización
├── docker-compose.yml           # Orquestación
├── main.py                      # FastAPI app + endpoints
├── modules/
│   ├── __init__.py
│   ├── document_processor.py    # Cápsula 03
│   ├── vision_analyzer.py       # Cápsula 04
│   ├── rag_module.py            # Cápsula 05
│   └── audio_module.py          # Cápsula 06
├── models/
│   ├── __init__.py
│   └── schemas.py               # Modelos Pydantic (Cápsula 02)
├── tests/
│   ├── test_processor.py
│   ├── test_vision.py
│   └── test_integration.py
└── samples/
    ├── factura_ejemplo.pdf       # PDF de prueba
    ├── contrato_ejemplo.pdf      # PDF de prueba
    └── imagen_documento.png      # Imagen de prueba

Costos estimados del módulo

OperaciónModeloCosto por documento
Clasificacióngpt-4o-mini~$0.001
Extracción estructurada (texto)gpt-4o-mini~$0.003
Extracción estructurada (imagen)gpt-4o~$0.01-0.03
Resumengpt-4o-mini~$0.002
Embeddings (indexación)text-embedding-3-small~$0.001
Q&A (generación)gpt-4o~$0.01
TTS (resumen audio)tts-1~$0.015/1K chars
Total por documento (con audio)~$0.05-0.10

Para desarrollo y pruebas de este módulo: ~$1-3 USD total.


Evidencia de Éxito

Al terminar este módulo, sabrás que tuviste éxito si:

  • ✅ Tu DocumentProcessor procesa PDFs con páginas de texto y escaneadas correctamente
  • ✅ Tu VisionAnalyzer extrae datos estructurados y tiene fallback funcional
  • ✅ Tu RAGModule indexa documentos y responde preguntas con fuentes
  • ✅ Tu AudioModule genera audio del resumen
  • ✅ Tu API REST responde a POST /analyze con el resultado completo
  • ✅ Puedes ejecutar docker build y levantar el servicio en un contenedor
  • ✅ El sistema procesa un PDF de ejemplo end-to-end sin errores

Test rápido de autoevaluación

Si puedes responder estas preguntas antes de empezar, vas bien preparado:

  1. ¿Cómo extraes texto de un PDF con PyMuPDF?
  2. ¿Qué formato necesitas para enviar una imagen a GPT-4o Vision?
  3. ¿Qué hace ChromaDB y cómo indexas un documento?
  4. ¿Cómo generas audio desde texto con la API de OpenAI?
  5. ¿Qué es un endpoint POST en FastAPI y cómo recibe archivos?

Si alguna te cuesta, revisa el módulo correspondiente antes de continuar. O avanza y consulta el módulo relevante cuando llegues a esa cápsula.


Resumen

  • Módulo 8 es el proyecto integrador final de la Guía de IA Multimodal.
  • Construirás un Document Analyzer Multimodal que procesa PDFs/imágenes, extrae datos, hace Q&A y genera audio.
  • El sistema integra componentes de los 7 módulos anteriores: clasificación (M1), vision (M2), documentos (M3), audio (M5), RAG (M6), patrones (M7).
  • La arquitectura tiene 6 componentes principales: DocumentProcessor, VisionAnalyzer, RAGModule, AudioModule, Summarizer, API REST.
  • Cada cápsula construye un componente independiente; la cápsula 08 los integra.
  • Duración estimada: 90 minutos. Costo estimado: $1-3 USD.

Recursos Adicionales

  1. FastAPI — Framework para la API REST
  2. PyMuPDF — Procesamiento de PDFs
  3. ChromaDB — Base de datos vectorial para RAG
  4. OpenAI Vision — Análisis de imágenes
  5. OpenAI TTS — Text-to-speech
  6. Docker — Containerización