ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

大模型+智能体+形式化验证:AI攻克数学难题的工程链路拆解

大模型+智能体+形式化验证:AI攻克数学难题的工程链路拆解 最近GPT-5.6和Fable联手解决了一道悬了25年的数学难题话题很快冲上了技术圈热搜。比起“AI又刷了一个里程碑”这种结论我更关心的是另一层东西这条从大模型推理、智能体编排到形式化验证的技术链路到底能不能在自己的机器上跑通能不能被复用到其他数学问题、代码验证、研究自动化场景里。这一篇文章不讨论模型参数本身也不评价新闻真假只拆工程实现。我会把这次热点背后的完整链路拆成几个模块大模型负责猜想和生成Fable这类智能体编排框架负责调度和任务拆解Lean 4这类形式化验证器负责最终裁决。同时我会给出一套能直接落地的实验模板包括环境准备、模型服务启动、提示词构造、API调用、批量任务和常见排错。如果你最近在关注大模型数学推理、智能体编排、形式化验证或者只是想搞清楚“这种AI解题的工程路径到底怎么搭”这篇可以收藏起来慢慢看。1. 核心能力速览先把这套方案的关键信息放在前面方便快速判断值不值得折腾。能力项说明技术类型大模型数学推理 智能体编排 形式化验证主模型GPT 系列大模型接口本文以 OpenAI 兼容接口为例编排框架Fable负责任务拆解、模型调度、结果汇总与重试验证器Lean 4 / Mathlib处理最终证明的正确性校验启动方式命令行、Docker、API 服务均支持本地部署门槛中高取决于模型规模和上下文长度是否支持 API支持标准 OpenAI 风格接口是否支持批量任务支持可以通过任务队列批量处理数学命题典型场景数学公式证明、研究辅助、自动化推理流水线、代码生成验证合规提醒涉及学术引用、数据授权、模型输出的二次验证这里的核心不是说“一定要用 GPT-5.6”而是你可以把模型服务替换成任意支持 OpenAI 兼容接口的大模型。小规模实验用 7B 到 14B 的开源模型就够了真正跑复杂证明再考虑更大的模型。2. 这次“解题”背后的技术链路2.1 大模型负责什么数学难题求解之所以难往往不是因为“公式记不住”而是搜索空间太大。一个证明可能从某个公理出发需要连续变换几十步每一步都可能产生多个分支。传统计算机算法很难覆盖这种爆炸式分支。大模型在这里扮演的是“假设生成器”。它可以根据已有数学定义、历史定理、问题表述生成一组有希望的候选路径。换句话说它不是靠枚举而是靠训练过程中积累的数学语义来猜测哪些方向更值得尝试。这就是为什么这类新闻里总是提到“大模型 验证器”而不是“大模型直接做题”。大模型的最大价值不是保证正确而是把搜索范围急剧缩小让验证器能在一个可控的空间里做确定性检查。2.2 Fable 这类编排框架负责什么光有模型还不够。一个真实数学问题的求解流程是读取问题搜索相关定理生成候选证明调用验证器检查失败则反馈错误信息并重新生成。这个过程如果全部写死在 Python 脚本里每次换问题都要改代码而且错误恢复很难处理。Fable 这类智能体编排框架解决的问题就是把这些步骤抽象成节点每个节点是一个 agent负责一个独立能力。比如一个 agent 负责“读题与命题拆解”一个 agent 负责“搜索引用定理”一个 agent 负责“生成证明草稿”一个 agent 负责“调用 Lean 验证”一个 agent 负责“读取验证错误并返回修订意见”。这些 agent 之间通过消息传递协作。某个环节失败时框架会自动触发重试或调用备用策略。从工程角度看这就是一条标准的多智能体流水线。2.3 为什么最终要交给形式化验证器大模型生成的证明草稿不能直接信。原因很简单LLM 存在幻觉尤其是长链条推理中中间某一步出现逻辑跳跃时模型自己很难发现。形式化验证器则不同。Lean 4、Coq、Isabelle 这类工具把数学证明变成一种机器可检查的构造过程。如果证明有漏洞编译器会直接报错没有任何商量余地。所以最稳妥的工作流是大模型生成候选证明 ↓ Lean 4 形式化验证 ↓ 验证失败时把错误信息回传给大模型 ↓ 大模型根据错误信息修订 ↓ 重新验证这种“生成-验证-反馈”的循环才是这类数学 AI 系统能解决多年难题的关键。不是模型变聪明了而是整个系统有了闭环校验能力。3. 适用场景与使用边界3.1 适合什么场景这套技术链路最适合以下几类人数学专业研究者需要快速验证某个猜想是否有浅层反例计算机科学方向的学生做定理证明、程序验证相关课题算法工程师想用大模型自动生成代码不变量或验证逻辑自动化研究平台开发者想搭建一套“AI 实验助手”对 Agent 工作流感兴趣的技术人想跑通多智能体协作。对于数学研究来说它的最大价值不是“替人证明”而是“替人排除错误方向”。以前一个猜想可能要人工推导几周才发现死路现在可以先用大模型生成候选证明再用验证器快速排除节省大量时间。3.2 不适合什么场景这套方案不适合零基础快速出结果、不适合需要 100% 自动化保证的场景。原因也很直接形式化验证工具本身有学习成本Lean 4 的语法和数学库需要熟悉大模型的推理结果不稳定同一道题每次输出可能有差异复杂命题的证明搜索仍然可能超过当前硬件资源现有数学文献的数字化程度不一大模型的知识覆盖有限。如果是想“今天部署明天就证明一个世界级难题”那现实一点说不要抱这种预期。这个链路更适合作为研究辅助工具而不是自动解题机。3.3 合规与安全边界使用 AI 辅助数学研究和代码生成时有几个底线需要特别强调涉及未公开数据、论文手稿、私有资料时不要把敏感内容直接发送到云端模型服务生成的证明结论必须经过形式化验证和人工复核不能直接对外发布如果参考了已有数学文献引用来源要完整使用第三方 API 时要确认服务条款允许该用途并妥善管理 API Key在学术论文中使用了 AI 辅助工具要在方法部分如实说明。安全边界和学术诚信是这类工具能不能长期使用的关键别因为图快跳过这一步。4. 环境准备与前置条件4.1 基础环境先从最基础的开发环境开始。建议使用 Linux 或 macOS如果只有 Windows也可以用 WSL2 或 Docker 来跑。需要准备的工具包括Python 3.10 或更高版本 Git curl 或 wget Docker可选推荐 NVIDIA GPU 驱动 CUDA如果要在本地跑模型Python 环境建议用虚拟环境隔离python -m venv .venv source .venv/bin/activate pip install --upgrade pip如果后续要跑复杂验证任务本地至少有 32GB 内存会更从容。磁盘建议预留 50GB 左右主要用来缓存模型文件和验证依赖。4.2 模型服务这一步有两种选择直接调用云端大型模型 API或者在本地启动一个 OpenAI 兼容的模型服务。云端方式最简单需要准备一个 API Key。本地方式可以先用 Ollama 或 vLLM 拉起一个兼容服务方便做离线实验。无论选哪种最终对上层来说都是同一个 HTTP 接口。4.3 Lean 4 与验证工具形式化验证环节我推荐先从 Lean 4 开始因为它的数学库 Mathlib 内容非常丰富社区也活跃。安装 Lean 4 工具链通用命令如下# 安装 elanLean 4 的版本管理工具 curl -fsSL https://raw.githubusercontent.com/leanprover/elan/master/elan-init.sh | bash # 重新加载 shell 配置 source ~/.profile # 检查安装结果 lean --version安装完成后建议再安装 VS Code 的 Lean 插件编辑、编译、查看错误信息都会方便很多。如果你的项目需要完整 Mathlib会在第一次编译时下载依赖时间可能比较长属于正常现象。5. 安装部署与启动方式5.1 启动本地模型服务本地部署时我通常先用 Ollama 拉起一个模型服务方便调试提示词和验证流程。启动命令非常简单# 启动 Ollama 服务 ollama serve然后拉取一个适合数学推理的模型# 先拉一个 7B 模型做小规模测试 ollama pull qwen2.5:7b启动成功后本地就有了一个 OpenAI 兼容的 API 地址http://127.0.0.1:11434/v1这里要注意Ollama 的模型名和 OpenAI 的模型名不一样调用时 model 字段要填你实际拉取的名称例如 qwen2.5:7b。使用 OpenAI SDK 调用时需要自定义 base_url。5.2 配置 Fable 编排服务Fable 这类编排框架的配置思路是声明式定义 agent。下面是一个通用配置模板可以直接保存为 YAML 文件version: 1.0 model: provider: openai base_url: http://127.0.0.1:11434/v1 api_key: EMPTY model_name: qwen2.5:7b agents: - name: reader task: 读取数学问题提取目标和已知条件 - name: prover task: 生成证明草稿输出结构化Markdown格式 - name: validator task: 调用Lean 4执行形式化验证返回错误信息实际使用时字段名和 agent 类型需要按项目官方 README 调整。这里给的是思路配置中心化任务模块化agent 之间通过事件传递数据。5.3 验证服务连通服务启动后先用 curl 验证连通性curl http://127.0.0.1:11434/v1/models如果返回模型列表说明服务正常。接下来可以跑一次最简单的对话请求curl http://127.0.0.1:11434/v1/chat/completions \ -H Content-Type: application/json \ -d { model: qwen2.5:7b, messages: [ {role: user, content: 证明对任意自然数 n有以 0 为加法的右单位元即 n 0 n。} ] }这条请求能正常返回说明从模型服务到调用链路的网络端口都通了可以继续做更复杂的测试。6. 功能测试与效果验证6.1 命题生成测试第一个测试不是直接写证明而是让模型“理解问题并拆解目标”。输入一个数学命题要求输出格式化的目标信息问题证明任意两个自然数的加法满足交换律。 请输出 1. 已知条件 2. 待证目标 3. 可用的公理或引理 4. 可能的证明策略这一步的目的是确认模型是否真正理解了任务而不是凭记忆套结论。判断成功的标准是已知条件提取正确待证目标没有遗漏证明策略看起来可行而不是空话。常见失败原因是提示词写得过于开放。解决办法是明确要求模型输出 JSON 结构后续解析更方便。6.2 证明生成测试确认模型理解题目后让它生成逐步证明用自然语言生成 n 0 n 的证明草稿要求每一步都写明使用了哪条公理或定理。预期结果应该是基于 Peano 公理的归纳证明对 n 归纳0 的情况用加法定义后继的情况用归纳假设。判断标准是中间步骤的数量和引用规则是否清晰。如果模型直接跳过关键步骤或者引用不存在的定理这个阶段的输出就不能直接进入验证器。6.3 形式化验证测试自然语言证明草稿合格后把它转成 Lean 4 代码。下面是一个非常基础的 Lean 4 示例证明自然数加法右单位元example (n : Nat) : n 0 n : by induction n with | zero simp | succ n ih simp [Nat.add_succ, ih]如果文件在 VS Code 里显示没有错误说明证明已经被 Lean 验证通过。判断标准就是 Lean 编译器的反馈无错误即通过有错误就返回错误位置和类型。这一步是整个链路里“确定性”最强的一环。不需要依赖大模型判断只需要验证器执行结果。6.4 稳定性压力测试单次成功不代表可用。建议连续跑同一道题五次观察模型输出的一致性。记录以下指标每次是否生成可解析的结构化输出多少轮内能通过 Lean 验证失败时错误类型是否集中在某个环节平均耗时和 token 消耗。这组数据决定你后续是否值得把任务扩展到批量场景。如果五次有三四次成功说明流程可行如果五次只成功一次先别急着上批量任务优先回到提示词优化。7. 接口 API 与批量任务7.1 API 请求示例实际项目中我们通常不直接在主流程里写死模型调用而是封装成一个客户端方便批量循环调用。用 OpenAI SDK 写一个本地模型请求代码很简单from openai import OpenAI client OpenAI( base_urlhttp://127.0.0.1:11434/v1, api_keyEMPTY, timeout120, ) response client.chat.completions.create( modelqwen2.5:7b, messages[ {role: system, content: 你是数学推理助手输出必须使用中文。}, {role: user, content: 证明对任意自然数 nn 0 n。} ], temperature0.2, max_tokens2048, ) print(response.choices[0].message.content)注意 temperature 不要调太高。数学推理任务里温度过高会引入随机性导致证明步骤不稳定。建议设置在 0 到 0.3 之间。7.2 批量任务设计批量处理数学命题时建议使用 JSONL 格式存储输入方便断点续跑。输入文件格式如下{id: 001, problem: 证明自然数加法交换律, expected: commutative} {id: 002, problem: 证明加法结合律, expected: associative}Python 端用一个线程池并发处理import json from pathlib import Path from concurrent.futures import ThreadPoolExecutor, as_completed input_path Path(problems.jsonl) output_path Path(results.jsonl) with open(input_path, r, encodingutf-8) as f: tasks [json.loads(line) for line in f if line.strip()] def process(task): # 这里把 task[problem] 组装成提示词调用模型返回结果字典 # 实际项目里接入上面封装好的客户端 return { id: task[id], problem: task[problem], result: draft, } with ThreadPoolExecutor(max_workers4) as executor: futures [executor.submit(process, task) for task in tasks] with open(output_path, a, encodingutf-8) as out: for future in as_completed(futures): out.write(json.dumps(future.result(), ensure_asciiFalse) \n)这个模板可以直接用于批量验证少量数学命题。先跑几条确认输出格式稳定再放大任务量。7.3 失败重试策略批量任务常见的问题是单个请求超时或返回格式异常。建议做三层重试策略网络层单次请求设 120 秒超时超时后重试 1 次格式层解析失败时要求模型重新生成结构化 JSON验证层Lean 验证失败时把错误信息拼接回去让模型重新出证明草稿。第一层和第二层在脚本里处理第三层需要在 agent 编排逻辑里处理。重试次数不要无限放大最多 3 轮否则时间和成本都不可控。8. 资源占用与性能观察8.1 观察显存与 CPU如果你在本地跑模型显存是最需要关注的指标。观察命令如下nvidia-smi要实时监控就用 watch 每秒刷新watch -n 1 nvidia-smi注意看两个值显存占用和 GPU 利用率。显存占用决定当前模型能不能跑利用率决定你的机器是否在认真推理还是卡在显存交换上。如果显存不够优先尝试模型量化版。多数开源模型提供 fp16、int8、int4 等版本质量差异在数学推理任务里可能存在所以量化后要重新跑一遍测试集。8.2 如何降低资源占用有几个常见的降耗手段用较小模型做初步筛选只对难例调用大模型控制上下文长度不要一次把整个数学文档塞进去限制 max_tokens避免模型生成无意义的长篇内容使用流式输出提前终止明显跑偏的推理批量任务限制并发数避免模型服务内存被打满。并发数不是越高越好。本地模型服务在同一时刻能处理的并发取决于显存大小和批处理能力。先并发 2再慢慢往上加找到一个稳定点。8.3 端口与进程管理调试阶段最烦的就是端口被占用。确认端口状态的方法lsof -i :11434如果端口被占用换一个端口启动服务。比如ollama serve --host 127.0.0.1 --port 11435注意更换端口后所有客户端代码里的 base_url 都要同步改。另一个常见问题是上次启动的 Python 进程没退出导致端口被占ps aux | grep python确认是残留进程后用 kill 命令结束进程再重启。9. 常见问题与排查方法问题现象可能原因排查方式解决方案模型服务启动后无法访问端口被占用或监听地址不对lsof -i :11434换端口或检查绑定地址API 调用返回 404base_url 路径或模型名不对curl 查看实际接口调整 base_url模型名换成实际拉取名称请求一直超时模型太大或网络延迟检查日志和 max_tokens缩短输入长度换更快模型显存不足并发数过高或模型过大nvidia-smi 查看占用使用量化版本降低并发模型输出不是合法 JSON提示词约束不够查看原始返回在 content 中增加“必须输出严格JSON”说明Lean 验证报大量语法错误模型生成的 Lean 代码不符合语法复制错误信息回传模型在提示词中加入“先给出类型签名再写证明”批量任务中某条一直失败单条模型请求阻塞查看日志中是否有单条超时为每个请求设置 timeout失败自动跳过结果质量不稳定temperature 过高对比多次输出将 temperature 降到 0 到 0.3第一次编译 Mathlib 太慢依赖拉取时间长观察终端输出耐心等待或使用国内镜像源排查问题时不要一次性改多个参数。先只改一个变量确认能否复现或解决再动下一项。这个习惯在推理链调优里非常关键。10. 最佳实践与使用建议10.1 先小后大第一次跑通验证链路用最简单的问题比如“n 0 n”这类基础定理。先把模型服务、编排框架、验证器三者的数据流跑通再上复杂度更高的命题。直接拿难题做首次试验很容易因为多个环节同时出错而难以定位。10.2 大模型和验证器职责分离一定要明确大模型只负责“生成候选”验证器负责“判断真假”。不要让模型自己评价自己的证明这是最容易踩的坑。模型觉得“没问题”不叫没问题Lean 编译器说 okay 才叫没问题。10.3 输出结构化建议从一开始就强制模型输出结构化内容特别是 JSON 或 Markdown 分节。这样下游解析稳定调试时也方便定位问题。可以用提示词模板统一约束例如输出格式要求 { goal: 待证目标, steps: [每一步推理], lean_code: 对应的Lean 4代码 }10.4 批量任务加日志批量任务必须加日志。每条任务至少记录以下内容任务 ID开始时间结束时间模型服务响应状态验证器结果重试次数。没有日志的批量任务一旦出现某条数据失败排查成本会非常高。10.5 权限与访问控制接口服务如果需要对外开放必须限制访问范围。至少做到以下几点禁止使用弱口令使用 API Key 而不是裸 HTTP 请求绑定 127.0.0.1 或内网地址不要绑定 0.0.0.0在网关层限制请求频率和请求体大小。11. 总结与下一步这次热点事件最值得关注的其实不是某个具体模型版本而是“大模型生成候选、智能体编排任务、形式化验证器兜底”这套工作流的工程可行性。它说明 AI 数学推理已经从一个纯实验课题逐渐变成可以落地验证的自动化链路。如果你准备自己动手验证我的建议是最先验证“大模型 Lean 4”这条最小链路用最简单的基础定理跑通再做复杂命题特别注意 temperature 和输出结构化这两个问题的设置真正做复杂实验前先把批量任务和失败重试逻辑写好。最容易踩的坑就是让大模型自我评价证明结果这几乎一定会导致“看起来对了、实际错了”的假阳性。把验证权交给 Lean 这类形式化工具是最重要的设计决策。整体看下来这套链路适合研究辅助、自动化推演和数学教学场景但距离“全自动解决未知难题”还有明显距离。后续的改进方向也很明确增强模型对验证器错误信息的理解能力自动合并相似证明分支以及把更多数学库接入推理循环。建议先把今天的模板存下来。等你真的需要跑大模型数学推理、多智能体协作或形式化验证时直接按这套流程操作可以少踩很多坑。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进