让大模型算一个复杂积分,最危险的结果未必是明显报错,而是它给出一个很像答案的小数、公式或论文式解释。你很难知道其中哪些数字来自真实计算,哪些是模型根据上下文“补”出来的;即使让模型调用 Python,也只能证明代码运行过,不能证明计算路线、误差范围和验收标准可靠。
10 月 1 日公开的 BootLoops 1.0 采用了更克制的分工:大模型负责寻找方法、组合工具和修复程序,确定性的科学软件负责产生每一个数字,验收电池负责决定结果能不能被相信。 同日提交的论文把这条路线应用到费曼积分、贝叶斯证据、穷举证明和带严格误差界的数值计算;源码则把工具说明、自检命令和失败条件一起公开。
这不是“给 Agent 装更多工具”的普通项目。真正值得借鉴的是,它试图把一句开放的研究请求,变成一串可以拒绝、复跑和交叉验证的计算契约。
模型坐在控制台前,不坐在测量仪里
BootLoops 的论文给出了一条非常明确的边界:计算时不向模型索要任何数字,最终结果也不依赖模型对“看起来是否正确”的判断。模型像实验室里的研究助理,负责判断该拿哪台仪器、怎样接线、缺少哪个适配器;真正的读数来自精确算术、符号计算、数值积分和区间算法。
可以把一次任务分成三层:
| 层次 | 负责什么 | 不应该负责什么 |
|---|---|---|
| 大模型与 Agent | 阅读问题、选择计算路线、调用或扩展工具、解释结果 | 凭语言概率直接给出关键数字 |
| 确定性程序 | 约分、求解微分方程、穷举、积分、整数关系搜索 | 自己判断结果是否具有领域意义 |
| 验收协议 | 检查精度、来源、独立路线、正反对照和拒绝条件 | 因为结果“很合理”就放行 |
普通的“LLM + Python”往往只有前两层:模型写一段代码,看到输出后继续推理。BootLoops 多出的第三层,才决定一段代码是临时草稿,还是可重复使用的研究仪器。
仓库里的 49 个工具包各自声明验证类别和固定的 battery 命令。每份指南不只说明“怎么调用”,还写明什么时候应该使用、输出代表什么、必须通过哪些检查,以及缺少数据或外部引擎时应怎样拒绝。这使工具目录更像一间带校准记录的实验室,而不是一个脚本收藏夹。
一条答案要经过三道关
第一关:把“猜答案”改成“缩小候选空间”
以论文重点介绍的费曼积分为例,系统不会要求模型从头写出一个闭式公式。它先从积分可能出现的奇点和几何结构出发,确定答案可以属于哪类函数;再利用对称性、可积性等约束缩小候选空间;最后才用高精度样本确定少量尚未固定的系数。
这像解数独:不是看几个格子后猜整张答案,而是先用规则不断删去不可能选项。大模型的价值在于跨越物理、代数几何、数值分析和计算机代数,找到可以继续删选项的工具;最终留下哪个值,由程序计算。
这种设计也允许系统诚实地说“没有找到”。整数关系算法 PSLQ 或 LLL 可以搜索一个高精度数是否等于若干已知常数的整数线性组合,但必须先声明允许使用的常数集合和系数上限。搜索失败只表示在给定精度与范围内没有关系,不能被改写成“因此不存在任何闭式”。
第二关:拟合路线与验收路线分开
高精度样本既能帮助找到公式,也很容易让公式过拟合样本。BootLoops 的做法类似机器学习中的训练集与测试集分离:
- 用一组点和一条计算路线生成候选公式;
- 在没有参与拟合的运动学点上重新计算;
- 用另一套数值路线得到参考值;
- 比较两者在更高精度下是否仍一致。
关键不是“多算一次”,而是第二次计算不能偷偷复用第一次的错误。如果候选公式与参考值来自相同的约分表、相同的缓存或相同的中间数据,两边完全一致也可能只是共享了同一个 bug。因此仓库里的协议会记录参考值的来源、精度和是否参与过拟合,并把跨路线验证当成一等数据。
第三关:确认测试真的有能力失败
一个永远显示绿色的测试没有证明力。BootLoops 多处使用正向控制、负向控制和 mutation test:先放入一个已知正确的实例,确认流程能恢复它;再故意篡改系数、标签、精度或证书,确认验收器会拒绝。
这与烟雾报警器的测试按钮是同一个道理。看到绿灯,只能说明当前条件下没有发现问题;按下测试按钮后报警,才说明探测和报警链路至少还活着。
项目的 Gatekeeper 测试就覆盖了这种思路。它不只检查高精度拟合是否通过,还构造病态条件数、真假零值、重复样本和精度不足的球区间,验证系统会恢复可确认的关系,并隔离不能确认的结果。
为什么球算术比“多保留几位小数”更重要
普通浮点数只保存一个近似中心值。把精度从双精度提高到 100 位,可以减少舍入误差,却不能自动证明这 100 位中有多少位可信。算法不稳定、级数截断或多个相关误差相乘,仍可能产生一串很长但不可靠的小数。
球算术把数写成“中心值 ± 半径”。每次加减乘除都同时传播误差范围,最终得到的不是“我算出了 1.2345”,而是“真实值被证明落在这个区间内”。如果区间跨过决策阈值,程序就必须给出不确定,而不能靠四舍五入替用户做决定。
这项机制尤其适合两类任务:
- 需要确认两个高精度结果是否真正一致,而不只是显示位数相同;
- 一连串规定步骤最终要与法规、统计或实验阈值比较。
它不解决输入数据是否真实、模型假设是否合理,也不替代领域审查。它解决的是更窄但很关键的问题:在既定输入和算法下,数值误差有没有被完整地带到终点。
我实际跑了什么
我固定使用公开发布提交 66b680ce742e654cfe86da4f072a69061fe182b1,在 Python 3.12 环境安装仓库列出的核心依赖及常用扩展,然后执行:
PATH="$PWD/.venv/bin:$PATH" python3 run_selftests.py --par 8自检清单覆盖 49 个工具包。本次结果是:
| 结果 | 数量 | 含义 |
|---|---|---|
| 通过 | 42 | 对应 battery 在当前环境完成 |
| 按设计拒绝 | 3 | 缺少任务所需的受控数据,程序没有猜测或静默跳过 |
| 失败 | 4 | 两项缺少系统级依赖,两项命中当前容器的进程或 cgroup 环境差异 |
四个失败分别是:abacus 缺少 cypari2/PARI,counterweight 缺少 Julia;amflow-kit 和 seedling 的部分进程归属测试在当前只读 cgroup/共享进程环境中没有满足预期。它们不能被算作通过,也不能据此断言对应算法错误。更准确的结论是:安装 Python 依赖后,大部分公开 battery 可以在该环境运行,但项目所说的“冷克隆一条命令全绿”仍依赖另行安装的系统组件与更接近普通主机的进程隔离条件。
我还单独运行了不依赖外部科学引擎的精确采样自检:
PATH="$PWD/.venv/bin:$PATH" \
python3 tools/tropical-sampler/tropical_sampler.py --selftest2
输出为:
tropical_sampler selftest: base 4 cones, I^tr = 25/16;
refined 7 cones, I^tr = 25/16; tiling 500/500 exact x2 — PASS2
这里不是只看一个近似小数:基础划分与加密后的划分得到同一个精确分数,500 个铺分样本又经过两次精确检查。它展示了项目所谓“验收电池”的最小形态——同一结论要经受结构变化和独立检查,而不是运行一次没有报错就结束。
Gatekeeper 的公开测试也在本次环境中全部通过。它在留出点上得到至少 89.7 位一致性,并验证病态基底经过 LLL 处理后能恢复关系;随后把多种真假零值和球区间送入命令行流程,确认应拒绝的输入会以非零状态退出。这些是仓库自带的测试结果,不是对论文全部科学结论的独立复现。
怎样开始,而不先掉进 49 个工具里
如果只是想理解设计,不必先安装 Julia、PARI、FORM 或完整的物理计算栈。可以从固定提交和一个纯 Python battery 开始:
git clone https://github.com/BootLoops-ai/bootloops.git
cd bootloops
git checkout 66b680ce742e654cfe86da4f072a69061fe182b1
python3 -m venv .venv
.venv/bin/pip install mpmath sympy numpy python-flint pytest
PATH="$PWD/.venv/bin:$PATH" \
python3 tools/tropical-sampler/tropical_sampler.py --selftest2
3
4
5
6
7
8
9
准备解决真实问题时,更稳妥的顺序是:
- 先在
tools/README.md找到适用工具,并阅读对应GUIDE.md; - 在原始工具未修改时运行它的 battery,保存环境与提交号;
- 用已知答案或人工种植的答案做正向控制;
- 故意破坏一个关键量,确认检查会失败;
- 把生成候选与最终验收使用的数据、缓存和代码路径分开;
- 只有通过预先写明的门槛,才把输出交给领域专家解释。
这套顺序同样适用于普通工程 Agent。比如让模型优化 SQL 查询时,候选实现和验收基准不应共享同一套错误假设;让模型迁移财务计算时,测试既要有已知正确样本,也要有越过阈值和舍入边界的反例。
它适合什么,也不适合什么
BootLoops 最适合“答案可以被外部程序严格检查”的问题:精确代数、可重复的高精度数值计算、有限集合穷举、带误差界的积分,以及能明确划分拟合与留出的模型比较。问题越能写成输入、输出、证书和拒绝条件,它的思路越有效。
它不适合替代开放式科学判断。一个公式通过 100 位数值检验,不代表研究问题重要;一个统计模型算得完全精确,也不代表模型假设适合现实;一组代码和预印本同时公开,更不等于完成同行评审。作者在技术说明中也提到,模型跨领域找到的结果常常在技术上正确,却需要领域专家重新判断是否真正有科学价值。
安全边界同样需要单独处理。BootLoops 让 Agent 执行、修改并新增程序,因此验收电池解决的是结果可信度,不是主机隔离、依赖供应链或数据权限。把它接入生产数据前,仍需要最小权限、隔离环境、固定依赖和人工批准高风险操作。
BootLoops 的启发并不是“大模型已经能独立做科学”,而是更具体的一条工程原则:把模型放在可检查的程序之外,让它组织计算;把是否可信的决定,交给预先声明、能够失败的验证链。 当 Agent 越来越能写代码和调用工具时,这条边界比模型多答对几个题更值得复用。
💬 评论