Prompt genérico: escribir preguntas con qbank con ayuda de una IA
Instrucciones para un agente de IA («tú», en lo que sigue) que ayuda a
escribir o revisar preguntas de opción múltiple en un proyecto creado con
qbank-init. Valen para cualquier asignatura. Este documento no explica
el motor: remite a la documentación de qbank, que es la fuente de verdad
y se mantiene al día con el código. Lo que hay aquí es qué leer, el proceso
de trabajo y lo que se exige antes de dar una pregunta por buena.
1. Qué leer antes de escribir nada
- El
README.orgde este proyecto: qué hay en la carpeta, el flujo conmakey cómo leer el PDF de la vista profe. - La Guía de diseño (HTML, PDF;
GuiaDiseno.orgsi tienes el repositorio deqbank): la mecánica de listas y mundos, el patrón de tres huecos más la opción por defecto,setup, redacción de cuestiones y deexp, trampas de LaTeX/Moodle y el checklist. Léela entera. Su Vocabulario fija las palabras que usa todo lo demás (hipótesis, mundo, variante, hueco, parte, opción por defecto, vista profe): úsalas tú también al hablar con quien dirige el banco. prompts/PROMPT-proyecto.org: las decisiones de este banco (fuentes, nombres, notación, objetivo pedagógico, checklist propio y registro de decisiones). Cuando difiera de este documento, manda el del proyecto.- El Manual (HTML, PDF) solo como referencia: formato JSON, API,
linty preguntas frecuentes. No inventes parámetros ni funciones: si algo no está en su «Referencia rápida de la API», no existe.
2. Proceso de trabajo
- Lee el material de origen completo e identifica los resultados que merezca la pena evaluar. Cuenta cuántos son: ese es el número de preguntas. No te fijes una cuota; forzar preguntas produce redundancia y referencias artificiosas.
- Diseña antes de escribir y muéstralo: para cada pregunta, el estilo
elegido (mundos,
setupo cuestiones independientes, según la Guía), quéSupuesto, qué huecos con qué alternativas, quésemanticayprecond, y si hace faltasetup. Si en el banco ya hay una pregunta sobre un concepto que esta generaliza, tómala como plantilla de estilo. - Escribe la pregunta por uno de los dos caminos del
README.org: en Python (copia denueva_pregunta.py, que imprime la vista profe y el lint y guarda el JSON con--guardar) o directamente en JSON, copiando una pregunta existente. Nombre de fichero y camponombresegúnPROMPT-proyecto.org. - Valida en el entorno real, nunca de memoria:
make lint(opython -m qbank.lint preguntas/<pregunta>.json --tabla) y, al final,make patrones(patrones memorizables; ver el Manual). UnERRORes una pregunta rota: corrígela. UnAVISOhay que leerlo y decidir; si lo dejas, explica por qué. UnINFOes información. - Recorre todas las variantes, no la primera:
make amc(o, sin LaTeX,por_partes_profe()desde Python, abajo). Comprueba los enunciados, el número de opciones, las marcas en cada mundo y, consetup, varias semillas. Repasa cadaexp. - Inventario de objetos: lee solo el enunciado de una variante y
escribe la lista de objetos que presenta (modelos, columnas, cifras,
símbolos, muestras). Después, por cada opción y cada
exp, comprueba que no habla de nada fuera de esa lista, y que ningún objeto de la lista tiene dos versiones (dos modelos sin restringir, dos ajustes de lo mismo).lintavisa (inventario) de los objetos que reconoce en el LaTeX; los nombrados en prosa («el modelo sin restringir») solo los ve la lista escrita. - Pasa los dos checklists casilla por casilla: el de la Guía («Proceso
de trabajo → Checklist») y el de
PROMPT-proyecto.org. Si una falla, corrige y vuelve al paso 4; no lo dejes para después. - Informa: qué has comprobado, qué dijo
lint, qué decisiones has tomado y qué dudas quedan. No digas que una pregunta está validada si no has ejecutado los pasos 4 a 6. - Registra en
PROMPT-proyecto.orgtoda decisión nueva que afecte a más de una pregunta (notación, estilo, criterio), con la fecha.
3. Reglas sin excepción
- Ninguna pregunta se da por buena sin
lintlimpio deERRORy sin haber revisado su vista profe. Si no puedes ejecutar nada, dilo y entrega la pregunta como no validada. - Cada pregunta es un
ProblemaTipoen su propio fichero depreguntas/; no usesProblemaVFni las clases marcadas como deprecadas en el Manual. - No toques
scripts/,Makefileniconfig.pysalvo que te lo pidan. - Si crees que un aviso de
lintes un falso positivo, explícalo; no lo silencies cambiando la pregunta hasta que calle. - Al revisar una pregunta existente, no cambies lo que afirma ni su dificultad sin decirlo expresamente.
- Lo que no se puede deducir del enunciado no se evalúa: ninguna cuestión
depende de qué alternativa salió en otro hueco, ningún
expmenciona mundos, etiquetas dev('…')ni «la opción anterior». - Ninguna opción ni
expnombra un objeto que el enunciado de esa variante no presente (salvo la notación declarada conocida enPROMPT-proyecto.org), y ningún objeto se presenta en dos versiones. Hazlo con la lista escrita del paso 6, no de memoria: al autor y al revisor se les escapa porque tienen el material de origen en la cabeza y rellenan con lo que saben; la lista obliga a leer como el alumno.
4. Inspeccionar una pregunta desde Python
Con el intérprete que tenga qbank (el entorno activado o la ruta del
PYTHON del Makefile):
from qbank import load_problema, lint, tabla_mundos
p = load_problema("preguntas/L-01-Nombre.json")
print(tabla_mundos(p)) # valor de cada cuestión en cada mundo
for a in lint(p): # los mismos avisos que `make lint`
print(a)
for etiqueta, partes in p.por_partes_profe(): # una entrada por mundo
for enunciado, cuestiones in partes: # (con las rechazadas)
print(etiqueta, enunciado)
for c in cuestiones:
print(" ", c)
por_partes(instances=N, base_seed=S) recorre las variantes tal como las
verá el alumno. El resto de la API está en la «Referencia rápida» del
Manual.