用于数学研究的AI代理:Mac mini上的Wolfram Engine + Qwen Code CLI
一个完全自主的数学研究实验室已诞生,可通过消息应用程序访问——无需云API、外部服务器,也无需担心代码与数据的失控。该系统在Mac mini本地运行,从Delta Chat接收任务,使用Qwen Code CLI以Wolfram语言生成算法,通过Wolfram Engine执行,并将带图表的结果直接返回聊天。这并非预构建解决方案的界面,而是一个能完整记录从问题提出到验证整个思考过程的研究环境。
无中间服务的架构
整个消息处理流水线都以本地工作流实现,不依赖任何第三方API或SaaS平台。其关键优势在于对输入提示、执行代码及数据生命周期的完全掌控。没有隐藏的云端调用,不会自动将代码发送至LLM服务,也不会在用户机器之外收集任何指标。
来自Delta Chat的消息(通过IMAP/SMTP)进入Python机器人math_bot.py,它会:
- 根据
WHITELIST_EMAIL验证发件人; - 启动新会话或恢复已有会话;
- 构建原子级提示,包含来自
QWEN_PREAMBLE的系统前缀以及先前步骤的上下文; - 以无头模式运行
qwen并添加--yolo --continue标志; - 将标准输出以JSON格式捕获;
- 按扩展名
.png、.jpg、.svg、.pdf解析/tmp/mrl_graphics/中的图形文件; - 将结果发回聊天,同时将历史保存在
sessions/中。
值得注意的是,Qwen Code CLI并未被当作“黑箱”使用。它作为本地子进程启动,所有wolframscript命令都在严格限定的目录下执行,并明确指定路径。图形仅导出至专用临时文件夹——不会向主目录或~/Downloads写入任何副作用。
环境要求与执行安全
该系统专为macOS 14+设计,但也可通过跨平台组件兼容Linux和Windows。关键依赖包括:
- Wolfram Engine 14.1+——个人使用的免费版引擎。通过pkg安装,将
wolframscript二进制文件加入PATH。所有计算均在本地完成,不会将任何表达式发送至Wolfram Cloud。 - Qwen Code CLI v3.5 Plus——在Node.js上运行的无头模型版本。无需API密钥。模型本地加载,约2.1GB(量化为GGUF),并通过
qwenCLI以--model qwen3.5-plus.Q4_K_M.gguf启动。 - Delta Chat RPC服务器——原生二进制程序(
deltachat-rpc-server)负责管理邮箱连接。仅在本地使用时启用--no-verify-ssl模式;建议采用QR码进行PGP加密以实现端到端保护。
安全配置分三个层面实施:
- 网络:Delta Chat使用标准IMAP/SMTP端口,不进行端口转发、VPN或白名单IP设置。流量采用TLS 1.3加密。
- 进程:Qwen启动时设置
QWEN_TIMEOUT=600超时限制,以约束复杂任务的执行。若超出时限,则通过subprocess.run(..., timeout=...)强制终止进程。 - 文件:所有图形仅保存在
/tmp/mrl_graphics/,会话则存于PROJECT_DIR/sessions/。GRAPHICS_DIR路径在使用前会通过is_dir()检查是否绝对有效且存在。
会话生命周期实现
该机器人支持七种会话管理命令,每条命令都会修改SESSIONS_DIR中的状态:
/start——创建带有唯一UUID的新会话,初始化session_YYYYMMDD_HHMMSS.md和_assets/。/continue——恢复上次活跃的会话。/resume <id>——按ID打开特定会话。/peek——显示当前日志的最后PEEK_LINES=40行。/archive——将会话移至archived/,从索引中删除。/close——结束会话:将solution.wl复制到algorithms/,生成summary.md,并清空_assets/。/help——输出帮助信息,但不访问内部路径。
每个会话都是一个Markdown文件,按时间顺序记录对话内容,每一步都包含四个必填区块:
- 口头算法(编号步骤);
- Wolfram语言代码(可直接执行的精确文本);
wolframscript的实际输出(stdout/stderr);- 结果解读(1–2句话)。
这确保了可重复性:任何一步均可通过wolframscript -code "..."手动重演,所有图形也可从Export[...]重新生成。
工作交互示例
用户向聊天发送如下消息:
求y = x^2与y = 2x + 3的交点,并绘制图形。
机器人将请求转发给Qwen Code CLI,并附上前缀:
仅使用wolframscript(而非Python)。图形保存在/tmp/mrl_graphics/。图形标签应使用拉丁字符。
求y = x^2与y = 2x + 3的交点,并绘制图形。
Qwen返回结构化响应:
- 口头算法
1. 将两函数设为相等:x^2 == 2x + 3
2. 转换为标准形式:x^2 - 2x - 3 == 0
3. 解二次方程
4. 在同一张图上绘制两函数
- 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 -> "y=x^2与y=2x+3的交点",
AxesLabel -> {"x", "y"}]
Export["/tmp/mrl_graphics/intersection.png", %]
---wl---
- Wolframscript结果
{{x -> -1}, {x -> 3}}
$Graphics$
- 结果解读
交点:(-1, 1)和(3, 9)。图形已保存为intersection.png。
机器人从/tmp/mrl_graphics/提取PNG,将其发送至聊天,并将此部分添加到会话日志中。
重要事项
- 本地执行保障隐私:任何数学对象、公式或图形都不会离开用户机器。
- Wolfram Engine并非Python的替代品——它是专用计算器:提供精确的符号代数、可视化及数值方法,无需编写自定义求解器。
- Qwen Code CLI充当代码生成器,而非求解器:模型从不输出“最终答案”,只生成可执行代码,并等待
wolframscript的实际输出。 - Delta Chat实现端到端加密,无需服务器:PGP密钥通过QR码交换,消息在设备上加密。
algorithms/结构打造可重复解决方案的仓库:每个算法都包含description.md、reasoning.md和solution.wl——可直接集成到CI/CD管道或文档中。
设置与部署
要部署,需:
- 从官网安装Wolfram Engine,并运行
wolframscript --install。 - 安装Node.js 20+,执行
npm install -g qwen-cli。 - 创建conda环境:
conda create -n mathbot python=3.12 && conda activate mathbot。 - 安装依赖:
pip install -r requirements.txt。 - 配置
config.py:指定WHITELIST_EMAIL、PROJECT_DIR和QWEN_CMD。 - 运行初始化脚本:
bash init.sh——这将创建sessions/、algorithms/和_index.md。 - 启动机器人:
python math_bot.py。
启动后,机器人每30秒轮询一次邮箱。测试时只需从授权邮箱发送/start即可。会话实时记录,错误则保存在math_bot.log中。
— Editorial Team
暂无评论。