¡Hola a todos! Hoy dejamos un poco de lado los Themes y el CSS para meternos en las tripas de nuestro último proyecto: Normatia.
Como sabéis, en SiloCreativo nos encanta meternos en charcos técnicos. Cuando empezamos a desarrollar Normatia, teníamos claro un problema: la normativa técnica de construcción es estricta. Si le preguntas a un LLM genérico (como ChatGPT) sobre el Código Técnico, a veces alucina. Y en arquitectura, una alucinación puede significar una demanda.
Así que no bastaba con una API básica. Necesitábamos un sistema que entendiera el contexto, las referencias cruzadas y que fuera rápido. Hoy os explicamos cómo hemos montado un sistema RAG (Retrieval-Augmented Generation) de 3 niveles con Guardrails híbridos.
El Stack Tecnológico: Velocidad y Memoria
Antes de explicar la lógica, hablemos de las herramientas. Para este proyecto, hemos buscado un equilibrio entre rendimiento y coste. Este es el Stack que mueve la IA de Normatia:
- FastAPI: Nuestro Framework backend favorito. Asíncrono, rápido y perfecto para Python.
- LlamaIndex: La pieza clave para orquestar todo el pipeline del RAG y el reranking.
- Google Gemini: Usamos una combinación de modelos. Gemini Embedding para vectorizar, Gemini Flash para tareas rápidas y Gemini Pro para la respuesta final.
- Supabase: Usamos su extensión
pgvectorcomo Vector Store. Separamos el esquema de IA para mantener todo ordenado. - Redis: Fundamental para el Rate Limiting distribuido.
¡Manos a la obra! Vamos a ver cómo conectamos todo esto.

¿Por qué un RAG de 3 niveles?
El problema central de cualquier RAG de normativa es que un artículo en solitario rara vez basta.
Imaginad que buscáis sobre «seguridad en escaleras». El artículo recuperado puede decir: «Las escaleras deben cumplir la tabla 2.1». Si la IA solo lee ese párrafo, no puede responderte porque le falta la tabla.
Por eso, hemos diseñado una arquitectura de recuperación jerárquica:
Nivel 1: Búsqueda Vectorial (Lo estándar)
Aquí hacemos lo típico. Buscamos los bloques de texto que más se parecen a tu Query por similitud vectorial. Recuperamos varios candidatos, aplicamos un Rerank con LlamaIndex y nos quedamos con los mejores.
Nivel 2: Referencias Directas
Aquí empieza la magia. Si el bloque del Nivel 1 menciona un término técnico o hace referencia a otro artículo (ej: «ver definición en Art. 4»), nuestro sistema va a la base de datos y trae ese artículo extra. Como tenemos digitalizada y conectada la normativa, podemos realizar esas consultas cruzadas.
Nivel 3: Referencias Indirectas
Vamos un paso más allá. Repetimos el proceso para las referencias de las referencias.
Dicho esto, al final le entregamos al LLM un prompt súper estructurado (NIVEL 1 / NIVEL 2 / NIVEL 3). Así, el modelo tiene todo el contexto necesario para responder sin inventarse nada.
Guardrails Híbridos: Ahorrando Tokens y Tiempo
Uno de los mayores retos en producción es el coste y la latencia. No podemos enviar todas las preguntas al modelo más potente, porque nos arruinaríamos y el usuario esperaría demasiado.
Por ello, hemos implementado un sistema de 4 niveles de validación (Guardrails) que actúan como un embudo:
- Nivel 0 (Limpieza): Usamos Regex para limpiar saludos o frases vacías («Hola, buenos días…»). Esto es instantáneo (0ms).
- Nivel 1 (Rechazo Rápido): Si detectamos temas Off-Topic obvios (fútbol, cocina, política), cortamos la petición antes de gastar un solo token.
- Nivel 2 (Fast Pass): Si la Query contiene palabras clave técnicas (como «CTE», «transmitancia», «DB-HE»), asumimos que es válida y saltamos directamente al buscador. Esto ahorra muchísimo tiempo.
- Nivel 4 (Validación LLM): Solo si la duda es ambigua, usamos un modelo ligero (Gemini Flash) para decidir si la pregunta es pertinente o no.
Gracias a este sistema híbrido, cerca del 50% de las consultas se resuelven sin llamar al validador costoso. 😉
Bola extra: Configuración Externalizada
Para evitar tocar código cada vez que queremos ajustar la «sensibilidad» de la IA, usamos Pydantic Settings.
Todo está en variables de entorno: el número de bloques a recuperar, el umbral de similitud, los límites de caracteres para cada nivel de referencia… Así podemos «afinar» el cerebro de Normatia directamente desde el panel de control de Railway (donde hacemos el Deploy) sin redeployar el código.
Conclusión
Crear un producto propio como Normatia nos ha enseñado que la IA no es magia, es ingeniería de datos. El mayor reto no fue conectar la API de Google, sino diseñar el sistema de referencias para que la IA «pensara» como un arquitecto, consultando las fuentes relacionadas antes de hablar. Puedes verlo en acción aquí.
Si os interesa el mundo del Machine Learning aplicado a la web o queréis saber más sobre cómo integramos esto con el Frontend en Astro, en breve escribiremos sobre ello. Espramos que os haya sido de ayuda!


