RAG (Generación Aumentada por Recuperación) es el patrón más eficaz para que un modelo de lenguaje responda con precisión sobre tus datos privados. En lugar de un costoso ajuste fino (fine-tuning), inyectas contexto relevante en cada consulta. El modelo genera respuestas basadas en hechos reales de tu documentación, no en alucinaciones.
Pero un RAG que funciona en un cuaderno de Jupyter y un RAG que funciona en producción con miles de usuarios son sistemas muy diferentes. Esta guía cubre las decisiones de arquitectura que marcan la diferencia.
Paso 1: Ingesta y fragmentación inteligente
La fragmentación (chunking) es donde fallan la mayoría de las implementaciones. Dividir documentos por un número fijo de tokens hace que se pierda el contexto semántico. Utilizamos fragmentación recursiva que respeta la estructura del documento: encabezados, secciones, párrafos. Cada fragmento lleva metadatos del documento original, su posición relativa y enlaces a fragmentos adyacentes.
Para documentos técnicos, el tamaño óptimo suele estar entre 500 y 1000 tokens con un solapamiento del 10-15%. Pero no existe una regla universal: el tamaño adecuado depende del tipo de consultas que realicen tus usuarios y de la estructura de tus documentos.
Paso 2: Embeddings y almacenamiento vectorial
Convertimos cada fragmento en un vector de alta dimensión utilizando modelos de embedding. La elección del modelo es importante: los modelos más grandes capturan más matices semánticos, pero cuestan más y son más lentos.
El almacén de vectores (Pinecone, Weaviate, pgvector) es tu base de datos de conocimiento. Diseña el esquema de metadatos desde el principio: necesitarás filtrar por fuente, fecha, tipo de documento y permisos de acceso. Añadir metadatos más tarde es costoso.
Paso 3: Recuperación, reclasificación y generación
La búsqueda semántica por sí sola no es suficiente. Un reclasificador (como Cohere Rerank o un cross-encoder) evalúa la relevancia real de cada resultado en el contexto de la consulta específica. Esto mejora drásticamente la precisión, especialmente para consultas ambiguas.
Para la generación, utilizamos Claude con instrucciones explícitas para citar fuentes. Cada respuesta incluye referencias a los fragmentos específicos que la sustentan. Si el modelo no encuentra suficiente información en el contexto, debe decirlo: un honesto "no tengo datos para responder" es más valioso que una alucinación convincente.
Evaluación: Medir la calidad continuamente
Sin una evaluación cuantitativa, no sabes si tu RAG mejora o empeora con cada cambio. Medimos la precisión de la recuperación (¿son relevantes los fragmentos recuperados?), la exactitud de la respuesta (¿es correcta la respuesta?) y la fidelidad (¿se basa la respuesta en los fragmentos y no en el conocimiento del modelo?).
Automatizamos estas evaluaciones con conjuntos de preguntas seleccionadas y las ejecutamos en cada despliegue.