
Proyecto IA Monterroso (XVIII): añadir un corpus nuevo al RAG, en tres líneas
Esta entrada es corta a propósito. No hay ninguna decisión de arquitectura nueva que contar — al contrario, es la prueba de que una decisión de arquitectura tomada hace unas entradas (el RAG multi-corpus) funciona como se pensó.
De dónde sale esto
Con la idea de “modo repaso” aparcada por falta de apuntes suficientes, y mientras se hacía en paralelo una copia de seguridad con httrack del Moodle de un curso (para sacarle contenido al RAG, con mucho cuidado de no tocar nada de alumnado), surgió una fuente de contenido mucho más sencilla y con cero riesgo de privacidad: las programaciones didácticas de las asignaturas, en PDF, que ya existen y ya están revisadas por normativa.
Antes de meterlas en nada, conviene ser preciso sobre qué son. Una programación didáctica no es “apuntes de clase” — es el documento de planificación de la asignatura: marco legal, objetivos, contenidos por bloque, criterios de evaluación, temporización, atención a la diversidad. No sirve para generar preguntas de repaso sobre la materia, pero sí para responder cosas como “¿qué se evalúa en Computación y Robótica?” o “¿cuántas Situaciones de Aprendizaje tiene Programación y Computación de 2º de Bachillerato?” — preguntas que hoy solo se pueden responder abriendo el PDF correspondiente.
Comprobación antes de meter nada
Con cinco programaciones (Computación y Robótica en ESO, Programación y Computación de 2º de Bachillerato en sus dos modalidades, TICO y Creación Digital y Pensamiento Computacional en 1º de Bachillerato), lo primero fue comprobar, documento por documento, que la extracción de texto funcionaba bien y que no había datos personales de alumnado. Las cinco son PDF de texto nativo, nada escaneado, extracción limpia. Sobre privacidad: lo único identificable en estos documentos son los nombres del profesorado que imparte cada asignatura, que ya es información pública del departamento — nada de alumnado.
La parte que importa: qué hizo falta tocar
Aquí está el motivo real de esta entrada. Cuando se diseñó el RAG multi-corpus (ver la entrada donde se añadió el piloto de Computación y Robótica), la idea era que cada corpus nuevo fuera solo una carpeta más y una línea de configuración, sin tocar nada de la lógica de troceado, indexado o búsqueda. Esta vez tocaba comprobar si eso era verdad o solo una buena intención sobre el papel.
Era verdad. Todo el cambio, en dos archivos:
# rag.py — un corpus más en el diccionario
CORPUS_DISPONIBLES = {
"centro": "aptorag",
"cyr1eso": "cyr1eso",
"programaciones": "programacionesdidacticas",
}
# main.py — su descripción, para que el modelo sepa qué está citando
DESCRIPCION_FRAGMENTOS = {
...
"programaciones": "Fragmentos de las programaciones didácticas del departamento "
"(marco legal, contenidos, criterios de evaluación, temporización)",
}
<!-- main.py — la opción correspondiente en el desplegable de la web -->
<option value="programaciones">Programaciones didácticas (todas las asignaturas)</option>
Nada de tocar _construir_indice, _extraer_paginas, ni el troceado en fragmentos: eso ya sirve para cualquier corpus, PDF o no, sin cambios. La carpeta programacionesdidacticas/ con los cinco PDF dentro ya existía; en el próximo arranque de la API, rag.py la encuentra sola y construye su índice BM25 igual que hace con los otros dos corpus.
Cómo se comprobó
Los tres cambios se aplicaron directamente sobre los archivos de ROCKY y se comprobó que compilan (python3 -m py_compile) antes de dar el aviso de que estaba listo. Queda pendiente el reinicio real de la API en ROCKY y una prueba con una pregunta real sobre alguna de las programaciones, que es responsabilidad de la siguiente sesión de uso.
Instalación
Sin dependencias nuevas. Solo hace falta reiniciar la API para que el nuevo corpus se indexe.
Cómo comprobarlo
En la web, seleccionar el corpus “Programaciones didácticas” y preguntar algo concreto de una asignatura, por ejemplo “¿qué criterios de evaluación tiene Computación y Robótica?”. La respuesta debería citar la programación correspondiente como fuente.
Qué queda pendiente
Añadir más programaciones en el futuro no debería requerir tocar código en absoluto: basta con copiar el PDF a la misma carpeta y reiniciar la API. Si con el tiempo el corpus crece mucho y conviene separar por asignatura en vez de tenerlas todas juntas, ese es un cambio de una línea más, no una reforma.





