Volver al inicio

Agente de IA para matemáticas en Mac mini

Se describe la creación de un laboratorio matemático autónomo en Mac mini usando Wolfram Engine, Qwen Code CLI y Delta Chat. El sistema acepta tareas del mensajero, genera y ejecuta código Wolfram localmente, devuelve resultados con gráficos y guarda el historial completo de la sesión.

Laboratorio matemático en Mac mini: IA + Wolfram
Advertisement 728x90

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:

Google AdInline article slot
  • 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_PREAMBLE y contexto de pasos anteriores;
  • Ejecuta qwen en 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 wolframscript a 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 qwen con --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:

Google AdInline article slot
  • 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 mediante subprocess.run(..., timeout=...).
  • Archivo: Todos los gráficos se guardan exclusivamente en /tmp/mrl_graphics/, y las sesiones se almacenan en PROJECT_DIR/sessions/. La ruta GRAPHICS_DIR se verifica para asegurar su validez absoluta y existencia mediante is_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, inicializa session_YYYYMMDD_HHMMSS.md y _assets/.
  • /continue—reanuda la última sesión activa.
  • /resume <id>—abre una sesión específica por ID.
  • /peek—muestra las últimas PEEK_LINES=40 líneas del registro actual.
  • /archive—mueve una sesión a archived/, eliminándola del índice.
  • /close—finaliza una sesión: copia solution.wl a algorithms/, genera summary.md y 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[...].

Google AdInline article slot

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 incluye description.md, reasoning.md y `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: especificar WHITELIST_EMAIL, PROJECT_DIR y QWEN_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

Advertisement 728x90

Leer después