
AGLAIA: un regalo para que mi sobrina practique cómo piensa una médica
Mi sobrina Aglaia empieza este curso 1º de Bachillerato. Quiere ser médica, aunque todavía no tiene decidida la especialidad — y la verdad es que a esa edad no tendría por qué tenerla. Se me ocurrió que un regalo más interesante que el típico libro sería algo que le dejara practicar el proceso de pensar como médica: hacerle preguntas a un “paciente”, ir formándose una idea de qué le pasa, y recibir después una devolución honesta sobre cómo lo ha hecho. Así nació AGLAIA.
Como con PINSAPIA, esto ha sido un ejercicio de “programar hablando”, con Claude como arquitecto técnico y yo poniendo las decisiones de fondo — sobre todo las de qué no iba a hacer este proyecto, que en esto ha sido tan importante como decidir qué sí hacer.
Qué es, y sobre todo qué no es
Antes de escribir una sola línea dejé dos cosas fuera de la mesa, sin excepción:
- No analiza imágenes médicas de ningún tipo. Eso es software de diagnóstico, está regulado como producto sanitario, y un fallo tiene consecuencias reales. Fuera.
- No da consejo de salud sobre síntomas reales de una persona real, ni aunque siempre termine recomendando ir al médico. Los datos de salud son una categoría especial de datos personales, y un modelo de 3B corriendo en un ordenador de instituto (ROCKY, el mismo que usa PINSAPIA) no es una fuente fiable para que nadie tome decisiones de salud de verdad.
Lo que sí es AGLAIA: una herramienta de entrenamiento con casos 100% ficticios, pensada para practicar el proceso de una entrevista clínica (la anamnesis): qué preguntas hacer, qué no se debe pasar por alto, cómo irse formando una idea a partir de lo que cuenta el paciente. Nunca una fuente de conocimiento médico verificado, ni un sustituto de estudiar de verdad.
La decisión de arquitectura que sostiene todo lo demás
Esta es la pieza que de verdad importa, y viene del mismo principio que ya uso en PINSAPIA: cuando existe una forma determinista de hacer algo, se usa esa, no se le pide a un modelo de lenguaje que se lo invente.
Los hechos de cada caso clínico los escribo yo, a mano, en un archivo JSON, antes de que el modelo entre en juego. Motivo de consulta, antecedentes, síntomas, constantes, exploración física… todo cerrado de antemano. El modelo no inventa nada de esto: su único trabajo es interpretar al paciente dentro de ese guion — contestar como respondería esa persona, usando solo lo que el guion dice — y, al final, hacer un resumen de proceso comparando qué preguntas clave se han tocado y cuáles no. Nunca dictamina si el diagnóstico de mi sobrina es “correcto”: eso no le corresponde a un modelo de 3B, y tampoco es el objetivo del proyecto.
Ese resumen de cierre, además, ni siquiera lo calcula el modelo: es Python puro, comparando con reglas simples si las palabras clave de cada pregunta importante aparecen en lo que ha escrito la alumna. Es una heurística de texto, no comprensión real — y se lo digo también a ella dentro de la propia aplicación, no solo aquí.
Reutilizando PINSAPIA (sin copiar todo)
La API de AGLAIA arranca del mismo sitio que PINSAPIA: la llamada en streaming a LM Studio y el código de acceso mínimo por variable de entorno (nunca en el código fuente). Eso sí lo he reutilizado tal cual.
Lo que no he traído de PINSAPIA:
- El motor de búsqueda sobre documentos (RAG con BM25): ahí no hace falta, porque los hechos del caso no se buscan en una colección de documentos, van inyectados enteros como contexto fijo.
- El guardado de progreso entre sesiones en SQLite: el MVP de AGLAIA no lo necesita, es un regalo personal, no un aula con seguimiento por alumno.
- Todas las “herramientas” propias del asistente del instituto (calculadora, el tiempo, búsqueda en Wikipedia, modo repaso…): no pintan nada aquí.
Los tres casos, de momento
Empecé con tres especialidades distintas y deliberadamente “suaves” — nada que dé miedo o resulte pesado, es un regalo, no un examen de MIR:
- Traumatología — un esguince de tobillo jugando al fútbol.
- Alergología — unas ronchas después de comer en una boda.
- Digestivo — dolor de tripa y vómitos tras una barbacoa.
Cada uno tiene su guion cerrado y sus preguntas clave, con una explicación en lenguaje llano de por qué esa pregunta importa — la idea es que aprenda algo cada vez que ve el resumen, no solo que le digan si acertó o no.
Cómo se ve
Pantalla de acceso, con el mismo código compartido que usa PINSAPIA:
Mostrar imagen
Elegir caso — de momento tres reales más uno de prueba técnica que dejo marcado como tal:
Mostrar imagen
El chat con el “paciente”, atado a su guion:
Mostrar imagen
Y el resumen de proceso al final, con un aviso honesto sobre sus límites — en esta captura, de hecho, se ve el propio límite en acción: pregunté “¿cómo te hiciste daño en el tobillo?” y no lo detectó como la pregunta clave de “cuándo y cómo pasó”, porque busca coincidencias de texto, no significado. Lo dejo tal cual porque es justo lo que advierte el aviso de debajo:
Mostrar imagen
Cómo instalarlo y arrancarlo
Todo el código son 4 archivos de Python (main.py, casos.py, cierre.py), una interfaz web de un único archivo HTML (static/index.html) y una carpeta casos/ con los guiones en JSON. Nada de base de datos, nada de cuentas de usuario.
1. Instalar las dependencias (una sola vez), desde la carpeta del proyecto:
pip install -r requirements.txt
2. Definir el código de acceso. No va escrito en ningún archivo — se define como variable de entorno antes de arrancar. En cmd:
set AGLAIA_TOKEN=el-codigo-que-elijas
En PowerShell:
$env:AGLAIA_TOKEN="el-codigo-que-elijas"
Solo dura mientras esa ventana esté abierta: si la cierras, hay que volver a definirla la próxima vez.
3. Tener LM Studio abierto, con el servidor local activado en el puerto 1234 y el modelo llama-3.2-3b-instruct cargado (el mismo que usa PINSAPIA). Si cambia el nombre del modelo, se ajusta en MODEL_NAME dentro de main.py.
4. Arrancar la API, en la misma terminal donde se definió el token:
uvicorn main:app --host 0.0.0.0 --port 8008 --reload
Uso el puerto 8008 a propósito, distinto al de PINSAPIA, para que las dos convivan en ROCKY sin chocar.
5. Abrirla desde el navegador, en ROCKY o en cualquier dispositivo de la misma red:
http://<ip-de-rocky>:8008/
Para saber la IP de ROCKY: ipconfig en cmd, y mirar la “Dirección IPv4” del adaptador conectado. Puede cambiar si el router la reasigna, así que si un día deja de cargar, lo primero es volver a mirarla. Y si desde otro dispositivo no conecta aunque la API esté corriendo, es probable que haga falta abrir una regla de entrada para el puerto 8008 en el Firewall de Windows Defender, igual que ya tengo hecho para el puerto de PINSAPIA.
Lo que queda pendiente
- Probarlo de verdad en ROCKY con LM Studio real (todo el desarrollo se ha hecho y probado en un entorno sin LM Studio disponible, simulando las respuestas).
- Más casos, de más especialidades, según cómo lo reciba Aglaia.
- Está pensado como un regalo de un único uso, no como una herramienta de aula con varios alumnos a la vez — si algún día quiero llevarlo a clase de verdad con 1º o 2º de Bachillerato, hay algunas cosas del acceso compartido que convendría repensar antes.
Por ahora, es justo lo que quería: algo pequeño, honesto sobre lo que es y lo que no es, y que le enseñe a mi sobrina, sin fingir ninguna autoridad médica, que la parte más importante de ser médica empieza mucho antes del diagnóstico — en las preguntas que se te ocurre hacer.





Etiqueta:AGLAIA, AIDARAC, anamnesis, casos clínicos ficticios, fastapi, ia local, ies monterroso, lm studio, Medicina, montesteam, PINSAPIA, python

