🎯 El Desafío del Desarrollo Moderno
Imagina que estás comenzando un proyecto de IA complejo como nuestro sistema RAG. Necesitas:
- Múltiples entornos (desarrollo, testing, producción)
- Dependencias específicas para cada componente (API, procesamiento, notebooks)
- Versiones exactas de Python y paquetes para reproducibilidad
- Gestión eficiente de dependencias sin conflictos
- Colaboración fluida entre desarrolladores
El problema tradicional: pip + requirements.txt + virtualenv se vuelve un caos con proyectos complejos. Dependencias conflictivas, versiones inconsistentes, y tiempo perdido resolviendo problemas de compatibilidad.
📊 La Magnitud del Problema en Proyectos RAG
En un sistema RAG como el nuestro, manejamos múltiples componentes con dependencias muy diferentes:
Stack Tecnológico Complejo:
- FastAPI para la API REST
- Qdrant para la base de datos vectorial
- OpenAI/Gemini para modelos de lenguaje
- Sentence-Transformers para embeddings
- Google Cloud para infraestructura
- Terraform para IaC
- Docker para containerización
Los Problemas Específicos:
-
🔀 Conflictos de Dependencias: Diferentes versiones de
numpy
,torch
, otransformers
entre componentes - ⏱️ Tiempo de Resolución: Resolver dependencias puede tomar 10-15 minutos en proyectos complejos
- 🐍 Versiones de Python: Diferentes componentes requieren diferentes versiones de Python
- 📦 Gestión de Paquetes: Instalación, actualización y eliminación de paquetes es propensa a errores
- 🔄 Reproducibilidad: Dificultad para replicar exactamente el mismo entorno en diferentes máquinas
💡 La Solución: UV - El Gestor de Dependencias del Futuro
UV es un gestor de paquetes Python extremadamente rápido escrito en Rust que resuelve todos estos problemas:
¿Por Qué UV es Perfecto para Proyectos RAG?
- ⚡ Velocidad Extrema: 10-100x más rápido que pip
- 🔒 Resolución Determinística: Garantiza entornos idénticos
- 📦 Gestión Multi-Proyecto: Maneja múltiples componentes independientes
- 🐍 Gestión de Python: Instala y gestiona versiones de Python automáticamente
- 🔧 Compatibilidad Total: Funciona con pip, pip-tools, poetry, y más
La Arquitectura de la Solución:
📁 lus-laboris-py/
├── 📦 src/lus_laboris_api/pyproject.toml (API)
├── 📦 src/processing/pyproject.toml (Procesamiento)
├── 📦 notebooks/pyproject.toml (Jupyter)
├── 📦 utils/pyproject.toml (Utilidades)
└── 🔐 .env (variables de entorno)
🚀 Configuración Paso a Paso
1. Instalación de UV
# Instalación con curl (Linux/macOS)
curl -LsSf https://astral.sh/uv/install.sh | sh
# O con pip
pip install uv
# Verificar instalación
uv --version
2. Estructura del Proyecto Multi-Componente
Nuestro proyecto está organizado en 4 componentes independientes, cada uno con su propio pyproject.toml
:
Componente API (FastAPI)
# src/lus_laboris_api/pyproject.toml
[project]
name = "lus-laboris-api"
version = "0.1.0"
requires-python = ">=3.13"
dependencies = [
"fastapi>=0.116.2",
"qdrant-client>=1.15.1",
"openai>=1.109.1",
"sentence-transformers>=5.1.0",
"pydantic>=2.11.9",
"uvicorn>=0.35.0",
]
Componente Procesamiento
# src/processing/pyproject.toml
[project]
name = "processing"
version = "0.1.0"
requires-python = ">=3.13"
dependencies = [
"beautifulsoup4>=4.13.5",
"requests>=2.32.5",
"google-cloud-storage>=3.3.1",
"ftfy>=6.3.1",
]
3. Configuración de Variables de Entorno
El archivo .env
centraliza toda la configuración:
# ==========================================================
# Configuración Básica de Docker
# ==========================================================
DOCKER_HUB_USERNAME=tu_usuario
DOCKER_IMAGE_NAME_RAG_API=legal-rag-api
# ==========================================================
# Configuración GCP
# ==========================================================
GCP_PROJECT_ID=tu-proyecto-gcp
GCP_REGION=us-central1
GCP_BUCKET_NAME=tu-bucket-legal
# ==========================================================
# Configuración de Qdrant
# ==========================================================
QDRANT_URL=http://localhost:6333
QDRANT_API_KEY=tu_clave_api
# ==========================================================
# Credenciales de LLM
# ==========================================================
OPENAI_API_KEY=sk-tu-clave-openai
GEMINI_API_KEY=tu-clave-gemini
# ==========================================================
# Configuración de la API
# ==========================================================
API_HOST=0.0.0.0
API_PORT=8000
API_EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v2
API_LLM_PROVIDER=openai
4. Scripts de Automatización
Creamos scripts para automatizar tareas comunes:
Script de Desarrollo de la API
#!/bin/bash
# src/lus_laboris_api/start_api_dev.sh
echo "🚀 Iniciando API en modo desarrollo..."
# Activar entorno virtual
uv venv
source .venv/bin/activate
# Instalar dependencias
uv sync
# Iniciar servidor de desarrollo
uv run uvicorn api.main:app --host 0.0.0.0 --port 8000 --reload
Script de Procesamiento de Datos
#!/bin/bash
# src/processing/run_processing.sh
echo "📊 Procesando datos legales..."
# Activar entorno virtual
uv venv
source .venv/bin/activate
# Instalar dependencias
uv sync
# Ejecutar procesamiento
uv run python extract_law_text.py --mode gcs --bucket-name $GCP_BUCKET_NAME
🎯 Casos de Uso Reales
Para Desarrolladores:
"Necesito trabajar en la API pero también en el procesamiento de datos"
Solución UV: Cada componente tiene su entorno independiente
# Trabajar en la API
cd src/lus_laboris_api/
uv sync
uv run python -m api.main
# Trabajar en procesamiento
cd src/processing/
uv sync
uv run python extract_law_text.py
Para DevOps:
"Necesito desplegar solo la API en producción"
Solución UV: Construcción de imagen Docker optimizada
# Dockerfile para API
FROM python:3.13-slim
WORKDIR /app
COPY src/lus_laboris_api/pyproject.toml .
RUN uv sync --locked
COPY src/lus_laboris_api/ .
CMD ["uv", "run", "uvicorn", "api.main:app", "--host", "0.0.0.0"]
Para Colaboradores:
"¿Cómo configuro el proyecto en mi máquina?"
Solución UV: Un solo comando para todo
# Clonar repositorio
git clone https://github.com/jesusoviedo/lus-laboris-py.git
cd lus-laboris-py
# Configurar variables de entorno
cp .env_example .env
# Editar .env con tus credenciales
# Ir a la carpeta donde está pyproject.toml
# Instalar todos los componentes
uv sync --all
🚀 El Impacto Transformador
Antes de UV:
- ⏱️ 15 minutos para configurar el entorno
- 🔀 Conflictos frecuentes entre dependencias
- 🐍 Problemas de versiones de Python
- 📦 Gestión manual de paquetes
Después de UV:
- ⚡ 2 minutos para configurar el entorno
- 🔒 Resolución automática de conflictos
- 🐍 Gestión automática de Python
- 📦 Instalación determinística de paquetes
🔧 Características Técnicas Destacadas
Resolución de Dependencias Inteligente:
- Algoritmo SAT: Resuelve conflictos de dependencias de forma óptima
- Caché Global: Reutiliza paquetes entre proyectos
- Lock Files: Garantiza reproducción exacta de entornos
Gestión Multi-Proyecto:
- Workspaces: Múltiples proyectos en un repositorio
- Dependencias Compartidas: Evita duplicación de paquetes
- Configuración Centralizada: Un solo lugar para configurar todo
Integración con Herramientas Existentes:
- Docker: Construcción de imágenes optimizadas
- CI/CD: Integración con GitHub Actions
- IDEs: Soporte completo para VS Code, PyCharm, etc.
📊 Métricas de Rendimiento
Comparación de Velocidad:
- pip: 45 segundos para instalar dependencias
- uv: 3 segundos para instalar las mismas dependencias
- Mejora: 15x más rápido
Gestión de Memoria:
- pip: 200MB de RAM durante instalación
- uv: 50MB de RAM durante instalación
- Mejora: 4x menos memoria
🎯 El Propósito Más Grande
Esta configuración no es solo sobre herramientas - es sobre productividad del desarrollador. Al eliminar la fricción en la configuración del entorno, los desarrolladores pueden:
- Enfocarse en el código en lugar de resolver dependencias
- Colaborar eficientemente sin problemas de "funciona en mi máquina"
- Desplegar con confianza sabiendo que el entorno es idéntico
- Escalar el equipo sin perder tiempo en configuración
🚀 ¿Qué Viene Después?
Con nuestro entorno de desarrollo moderno configurado, estamos listos para el siguiente paso: extraer y procesar datos legales. En la próxima publicación exploraremos cómo automatizar la descarga y estructuración del Código del Trabajo paraguayo, transformando HTML crudo en datos estructurados listos para nuestro sistema RAG.
¿Estás listo para ver la magia del procesamiento de datos? El siguiente post mostrará cómo convertir 410 artículos legales en una base de datos vectorial inteligente.
Top comments (0)