Chatbot con RAG: solución de IA para soporte de documentación

PythonFastAPIOpenAI APIRAGAWS S3RedisDockerKubernetes

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.