Agente de IA para investigación matemática: Wolfram Engine + Qwen Code CLI en Mac mini
Se ha creado un laboratorio completamente autónomo para la investigación matemática, accesible a través de una aplicación de mensajería—sin API en la nube, sin servidores externos y sin pérdida de control sobre el código y los datos. El sistema se ejecuta localmente en un Mac mini, recibe tareas desde Delta Chat, genera algoritmos en Wolfram Language utilizando Qwen Code CLI, los ejecuta mediante Wolfram Engine y devuelve los resultados con gráficos directamente al chat. Esto no es una interfaz a una solución preconstruida; es un entorno de investigación que captura todo el proceso de pensamiento, desde la formulación del problema hasta su verificación.
Arquitectura sin servicios intermedios
Toda la cadena de procesamiento de mensajes se implementa como un flujo de trabajo local sin dependencias de APIs de terceros ni plataformas SaaS. La principal ventaja es el control total sobre las instrucciones de entrada, el código ejecutado y los ciclos de vida de los datos. No hay llamadas ocultas a la nube, ni envío automático de código a servicios de LLM, ni recopilación de métricas fuera de la máquina del usuario.
Un mensaje de Delta Chat (a través de IMAP/SMTP) entra en el bot Python math_bot.py, que:
- Valida al remitente contra una
WHITELIST_EMAIL; - Inicia una nueva sesión o reanuda una existente;
- Construye una instrucción atómica que incluye un preámbulo del sistema proveniente de
QWEN_PREAMBLEy contexto de pasos anteriores; - Ejecuta
qwenen modo headless con las banderas--yolo --continue; - Captura stdout en formato JSON;
- Analiza archivos gráficos desde
/tmp/mrl_graphics/por extensiones.png,.jpg,.svg,.pdf; - Envía el resultado de vuelta al chat mientras guarda el historial en
sessions/.
Es importante destacar que Qwen Code CLI no se utiliza como una “caja negra”. Se lanza como un subproceso local, y todos los comandos wolframscript se ejecutan en un directorio estrictamente definido con especificaciones de ruta explícitas. Los gráficos se exportan únicamente a una carpeta temporal dedicada—no se escriben efectos secundarios en el directorio personal ni en ~/Downloads.
Requisitos del entorno y seguridad de ejecución
El sistema está diseñado para macOS 14+, pero también es compatible con Linux y Windows gracias a componentes multiplataforma. Las dependencias críticas incluyen:
- Wolfram Engine 14.1+—la versión gratuita del motor disponible para uso personal. Se instala mediante pkg, añadiendo el binario
wolframscripta PATH. Todos los cálculos se realizan localmente; ninguna expresión se envía a Wolfram Cloud. - Qwen Code CLI v3.5 Plus—una versión headless del modelo que se ejecuta en Node.js. No requiere clave API. El modelo se carga localmente, pesa aproximadamente 2,1 GB (GGUF cuantizado) y se inicia mediante la CLI
qwencon--model qwen3.5-plus.Q4_K_M.gguf. - Delta Chat RPC Server—un binario nativo (
deltachat-rpc-server) que gestiona la conexión con el buzón. Opera en modo--no-verify-sslúnicamente cuando se usa localmente; se recomienda cifrado PGP mediante código QR para protección de extremo a extremo.
La configuración de seguridad se implementa en tres niveles:
- Red: Delta Chat utiliza puertos IMAP/SMTP estándar sin reenvío de puertos, VPN ni IPs permitidas. El tráfico está cifrado con TLS 1.3.
- Proceso: Qwen se lanza con un tiempo límite de
QWEN_TIMEOUT=600, limitando la ejecución de tareas complejas. Si se supera el límite, el proceso se termina forzosamente mediantesubprocess.run(..., timeout=...). - Archivo: Todos los gráficos se guardan exclusivamente en
/tmp/mrl_graphics/, y las sesiones se almacenan enPROJECT_DIR/sessions/. La rutaGRAPHICS_DIRse verifica para asegurar su validez absoluta y existencia medianteis_dir()antes de su uso.
Implementación del ciclo de vida de la sesión
El bot admite siete comandos de gestión de sesiones, cada uno de los cuales modifica el estado en SESSIONS_DIR:
/start—crea una nueva sesión con un UUID único, inicializasession_YYYYMMDD_HHMMSS.mdy_assets/./continue—reanuda la última sesión activa./resume <id>—abre una sesión específica por ID./peek—muestra las últimasPEEK_LINES=40líneas del registro actual./archive—mueve una sesión aarchived/, eliminándola del índice./close—finaliza una sesión: copiasolution.wlaalgorithms/, generasummary.mdy limpia_assets/./help—muestra ayuda sin acceso a rutas internas.
Cada sesión es un archivo Markdown que documenta el diálogo cronológicamente, con cada paso conteniendo cuatro bloques obligatorios:
- Algoritmo verbal (pasos numerados);
- Código en Wolfram Language (texto exacto listo para ejecutar);
- Salida real de
wolframscript(stdout/stderr); - Interpretación del resultado (1–2 frases).
Esto garantiza la reproducibilidad: cualquier paso puede repetirse manualmente mediante wolframscript -code "...", y todos los gráficos pueden regenerarse a partir de Export[...].
Ejemplo de interacción funcional
Un usuario envía el siguiente mensaje al chat:
Encuentra los puntos de intersección de y = x^2 y y = 2x + 3. Traza la gráfica.
El bot reenvía la solicitud a Qwen Code CLI con el preámbulo:
Usa solo wolframscript (no Python). Guarda los gráficos en /tmp/mrl_graphics/. Las etiquetas en los gráficos deben estar en caracteres latinos.
Encuentra los puntos de intersección de y = x^2 y y = 2x + 3. Traza la gráfica.
Qwen devuelve una respuesta estructurada:
- Algoritmo verbal
1. Iguala las funciones: x^2 == 2x + 3
2. Reordena a forma estándar: x^2 - 2x - 3 == 0
3. Resuelve la ecuación cuadrática
4. Traza ambas funciones en la misma gráfica
- Código Wolfram
---wl---
eq = x^2 == 2 x + 3;
solutions = Solve[eq, x];
Plot[{x^2, 2 x + 3}, {x, -3, 5},
Epilog -> {Red, PointSize[Large],
Point[{x, x^2} /. solutions]},
PlotLabel -> "Intersección de y=x^2 y y=2x+3",
AxesLabel -> {"x", "y"}]
Export["/tmp/mrl_graphics/intersection.png", %]
---wl---
- Resultado de Wolframscript
{{x -> -1}, {x -> 3}}
$Graphics$
- Interpretación del resultado
Puntos de intersección: (-1, 1) y (3, 9). La gráfica se guarda como intersection.png.
El bot extrae el PNG de /tmp/mrl_graphics/, lo envía al chat y añade este bloque al registro de la sesión.
Qué importa
- La ejecución local garantiza la privacidad: ningún objeto matemático, fórmula ni gráfico sale nunca de la máquina del usuario.
- Wolfram Engine no sustituye a Python—es una calculadora especializada: proporciona álgebra simbólica precisa, visualización y métodos numéricos sin necesidad de escribir solvers personalizados.
- Qwen Code CLI actúa como generador de código, no como solucionador: el modelo nunca entrega una “respuesta final” sino que solo genera código ejecutable y espera la salida real de
wolframscript. - Delta Chat ofrece cifrado de extremo a extremo sin servidores: las claves PGP se intercambian mediante código QR, y los mensajes se cifran en el dispositivo.
- La estructura
algorithms/crea un repositorio de soluciones reproducibles: cada algoritmo incluyedescription.md,reasoning.mdy `solution.wl”—listo para integrarse en pipelines CI/CD o documentación.
Configuración y despliegue
Para desplegar, necesitarás:
- Instalar Wolfram Engine desde el sitio oficial y ejecutar
wolframscript --install. - Instalar Node.js 20+ y ejecutar
npm install -g qwen-cli. - Crear un entorno conda:
conda create -n mathbot python=3.12 && conda activate mathbot. - Instalar dependencias:
pip install -r requirements.txt. - Configurar
config.py: especificarWHITELIST_EMAIL,PROJECT_DIRyQWEN_CMD. - Ejecutar la inicialización:
bash init.sh—esto crearásessions/,algorithms/y_index.md. - Iniciar el bot:
python math_bot.py.
Tras el arranque, el bot comienza a consultar el buzón cada 30 segundos. Para pruebas, simplemente envía /start desde un correo electrónico autorizado. Las sesiones se registran en tiempo real, y los errores se anotan en math_bot.log.
— Editorial Team
Aún no hay comentarios.