Desarrollé un asistente conversacional inteligente para EMMA que permite a los usuarios consultar documentación técnica en tiempo real utilizando Retrieval-Augmented Generation (RAG). El sistema combina embeddings semánticos, búsqueda vectorial y generación de lenguaje natural para ofrecer respuestas precisas y contextualizadas en español e inglés.
Impacto en el usuario
- Reducción del tiempo de búsqueda: los usuarios obtienen respuestas instantáneas sin navegar manualmente por las páginas de la documentación.
- Respuestas contextuales: el sistema mantiene el historial de conversación, permitiendo preguntas de seguimiento naturales.
- Soporte multiidioma: funciona en español e inglés con la misma precisión.
- Disponibilidad 24/7: asistencia inmediata sin depender de horarios de soporte técnico.
Arquitectura Técnica
Pipeline RAG
1. Ingesta y procesamiento de la documentación
- Extracción automática desde Wiki.js (GraphQL).
- Conversión HTML → Markdown normalizado.
- Limpieza de tablas, código y metadatos.
- Segmentación jerárquica por secciones.
2. Chunking
- Fragmentación (tamaño: 512 tokens, overlap: 100 tokens).
- Preservación del contexto jerárquico (títulos + subtítulos).
- Tokenización con tiktoken para optimizar límites del modelo.
3. Generación de embeddings
- Modelo: text-embedding-3-small (OpenAI).
- Procesamiento por lotes (batch size: 100) para eficiencia.
- Almacenamiento en CSV con pandas para acceso rápido.
4. Almacenamiento en S3
- Subida automática de embeddings a AWS S3.
- Descarga lazy al inicio del servicio.
- Cache local con
@functools.lru_cache()para reducir latencia.
5. Búsqueda semántica con fallback inteligente
- Nivel 1: búsqueda directa (threshold: 0.48).
- Nivel 2: búsqueda con historial de conversación (threshold: 0.50).
- Nivel 3: reformulación de consulta con GPT-4 (basado en la técnica HyDE).
6. Generación de respuestas
- Modelo: gpt-4.1-mini (OpenAI) con streaming (FastAPI StreamingResponse).
- Budget de contexto: 5000 tokens (15 fragmentos más relevantes).
- Persistencia de sesiones en Redis con límite de almacenamiento.
Decisiones técnicas clave
Escalabilidad
- Redis para sesiones: manejo de múltiples usuarios concurrentes.
- Embeddings precalculados: generación offline (tarea programada) para no generar latencia en producción.
- S3: desacoplamiento entre generación y consumo de embeddings.
Precisión
- Cosine similarity: métrica estándar para comparación vectorial.
- Estrategia de fallback progresivo: 3 niveles de búsqueda garantizan siempre respuestas relevantes.
- Limpieza exhaustiva de markdown: eliminación de ruido que afecta calidad de embeddings.
Experiencia de usuario
- Streaming de respuestas: feedback inmediato sin esperar la respuesta completa.
- Persistencia de sesiones: continuidad entre conversaciones.
- Manejo de referencias contextuales: el sistema entiende "¿y cómo lo hago en iOS?" después de preguntar sobre Android, por ejemplo.