精选案例 · Agent / 实践案例
用 AI 词元复现 CodePDE 论文——LLM 驱动的 PDE 求解器生成
这个案例围绕「用 AI 词元复现 CodePDE 论文——LLM 驱动的 PDE 求解器生成」记录了一条真实 AI 实践线索,正文重点集中在「背景」「为什么需要 AI 词元」,适合先按任务意图阅读再判断复用。
案例速读
README 标题「用 AI 词元复现 CodePDE 论文——LLM 驱动的 PDE 求解器生成」下已经出现运行/配置路径、脚本或接口线索、结果证据,正文重点集中在「背景」「为什么需要 AI 词元」,比纯概念介绍更适合进入精选阅读流。 这篇案例的阅读价值在于,它把真实任务、模型辅助过程和可迁移做法放在同一个上下文里,读者可以从 「用 AI 词元复现 CodePDE 论文——LLM 驱动的 PDE 求解器生成」、「背景」、「为什么需要 AI 词元」、「使用的 AI 工具」 进入正文。
- 建议重点看 可参考其中的运行与配置路径、包含可迁移的命令、脚本或接口线索、已有结果或观测证据可用于判断复用价值。结合 Agent / 实践案例 和「任务驱动用户、AI 实践者」这一受众定位,它更适合作为任务检索后的精读材料,而不是只看一句短摘要后快速跳过。
- 正文目录和原始材料仍然是判断依据;导读只帮助你更快定位阅读重点。
- 看点
- 用 AI 词元复现 CodePDE 论文——LLM 驱动的 PDE 求解器生成
- 读者
- 任务驱动用户、AI 实践者
- 复用
- 可参考其中的运行与配置路径
- 结构
- 12 个目录入口
原文内容
用 AI 词元复现 CodePDE 论文——LLM 驱动的 PDE 求解器生成
背景
我在科研工作中需要复现论文 CodePDE: An Inference Framework for LLM-driven PDE Solver Generation 的 baseline 方法。这篇论文来自 CMU,提出了一个用大语言模型自动生成偏微分方程(PDE)数值求解器的推理框架。
论文的核心思路是:让 LLM 根据 PDE 的数学描述和初始条件,自动生成 Python 求解代码,然后通过实际运行求解器来评估效果,最后用进化搜索(FunSearch)不断改进代码。三个核心方法:
- Repeated Sample:让 LLM 从零开始独立生成多个求解器
- Refine:给 LLM 已有的种子求解器作为参考,让它改进
- FunSearch:用进化算法维护求解器"种群",通过交叉变异持续优化
为什么需要 AI 词元
复现这个项目需要大量调用不同的大语言模型。论文官方支持 OpenAI(GPT 系列)、Anthropic(Claude)、Google(Gemini)、DeepSeek、Qwen 等。正好「词元计划」提供了 DeepSeek-v4 和 Qwen 系列的 API 接口,我利用词元计划的 token 额度,完整跑通了 5 个 PDE × 3 种方法 × 4 个模型的轻量级复现实验。
使用的 AI 工具
| 模型 | 来源 | 用途 |
|---|---|---|
| deepseek-v4-pro | 词元计划 | 代码生成、debug、funsearch 搜索 |
| deepseek-v4-flash-ascend | 词元计划 | 快速代码生成(轻量模型) |
| qwen3.6-chat | 词元计划 | 代码生成、debug(最稳定的模型) |
| qwen3.6-reasoner | 词元计划 | 代码生成(推理模型,但格式不兼容) |
| Claude Code | Anthropic | 辅助理解代码、调试实验配置、写文档 |
复现过程
1. 理解项目结构(AI 辅助)
项目代码量约 1000+ 行 Python,包含 Hydra 配置文件体系、多模型 API 调用层、代码生成与 debug 循环、进化程序数据库等多个模块。我把代码喂给 Claude,让它帮我梳理了完整的架构和数据流:
main.py→ 路由到三种方法之一code_generation.py→ 构建 prompt → 调 LLM → 提取代码 → 执行 → 出错则 debugllm_api.py→ 统一封装 OpenAI / Anthropic / Gemini / DeepSeek / Qwen 接口funsearch.py→ 进化搜索主循环program_database.py→ 岛屿模型 + 聚类采样的程序数据库
2. 配置词元计划 API(AI 辅助)
项目需要配置 configs/api.jsonl 和 configs/model.jsonl 来指定 API 端点和模型。在 Claude 的帮助下,将词元计划的 API 信息填入 openai-compatible 格式的配置文件:
{"api_id": "2", "api_key": "sk-xxx", "base_url": "https://llm.ustc.edu.cn/v1"}
3. 准备数据集(手动)
从 HuggingFace 下载 CodePDE 数据集,包含 5 个 PDE 的开发集和测试集:Advection(对流)、Burgers(粘性 Burgers)、Reaction-Diffusion(反应扩散)、Compressible Navier-Stokes(可压 N-S)、Darcy Flow(达西渗流)。
4. 批量运行实验(AI 辅助调试)
实验规模:5 PDE × 4 模型 × 3 方法 = 60 个实验任务(另有 20 个 warm-start 任务),整体耗时约 19.5 小时。
跑实验过程中遇到的几个问题,都由 Claude 帮我排查修复:
- Parser 过于严格:
code_generation.py用正则r'```python(.*?)```'提取代码,但有些模型返回的代码块没有闭合。Claude 帮我定位到具体位置并提出修复方案。 - FunSearch seed 缺失导致崩溃:部分 warm-start seed 不完整时,funsearch 在访问
result_sheet时直接 IndexError。Claude 帮我加了保护逻辑。 - API 超时处理:部分 PDE(CNS、Darcy)求解耗时很长,需要调整超时参数。
5. 结果汇总(AI 辅助生成报告)
Claude Code 帮我写了结果汇总脚本,自动从 80 个任务的 test_results.csv 中提取数据,生成了 Markdown/LaTeX 格式的 nRMSE 对比表、debug 成功率表、best-of-light 表。
复现结果
各 PDE 最佳结果
| PDE | 方法 | 模型 | nRMSE | 求解耗时 |
|---|---|---|---|---|
| Advection(对流方程) | refine | deepseek-v4-flash-ascend | 1.01e-03 | 0.30s |
| Burgers(粘性 Burgers) | repeated_sample | qwen3.6-chat | 3.08e-04 | 26.45s |
| Reaction-Diffusion(反应扩散) | funsearch | deepseek-v4-flash-ascend | 3.51e-08 | 551.85s |
| CNS(可压 Navier-Stokes) | funsearch | qwen3.6-chat | 6.91e-02 | 694.41s |
| Darcy(达西渗流) | funsearch | qwen3.6-chat | 4.80e-03 | 4.72s |
关键发现
- FunSearch 进化搜索确实有效:在 Reaction-Diffusion 上,FunSearch 比 Repeated Sample 的 nRMSE 提升了 4 个数量级(9.80e-04 → 3.51e-08),是最符合论文动机的成功案例
- qwen3.6-chat 最稳定:是所有模型中唯一在全部 15/15 个实验任务中都产出有效结果的
- 简单方法在部分 PDE 上已足够:Burgers 方程上 Repeated Sample 就是 best,不需要复杂的搜索
- 不同模型有互补优势:deepseek-v4 在 Reaction-Diffusion 上极其出色,qwen 在 Burgers/CNS 上更强
AI 在复现过程中帮了我什么
代码理解
- 把论文方法和代码实现逐模块对应,快速理解整体架构
- 解释 Hydra 配置体系(嵌套 default 覆盖)的工作方式
- 分析
program_database.py中岛屿模型和聚类采样算法
Bug 定位与修复
- Parser 代码提取失败 → 定位到正则太严格,部分模型代码块未闭合
- FunSearch IndexError → 定位到 seed 缺失时仍访问
result_sheet[0] - API 超时 → 分析日志确定合理的
pde.timeout参数
实验自动化
- 批量生成 Hydra 配置文件(80 个任务配置)
- 写结果汇总脚本,自动提取、清洗、表格化实验数据
- 生成 Markdown/LaTeX 格式的复现报告
数据整理
- 从混乱的任务日志中提取有效 nRMSE
- 区分 command_failed、parser_failure、numerical_disaster 等不同失败类型
- 生成 best-of-light 汇总表,选取每个 PDE 下效果最好的结果
心得与建议
- 词元计划的 API 质量很好:DeepSeek-v4 和 Qwen3.6 的代码生成能力出乎意料地强,尤其是 qwen3.6-chat 在代码格式合规性上表现最稳定
- AI 加速科研复现是真实可行的:从理解代码到跑通实验、修 bug、汇总结果,全程有 AI 辅助。原本可能需要 2-3 周的工作,一周内就完成了
- 不同模型搭配使用效果更好:推理任务用 deepseek-v4-pro(强推理),快速生成用 flash 版本,稳定性优先用 qwen3.6-chat
- 实验一定要加结果校验:本轮实验中多次出现 nRMSE 极高(1e+03)的"伪成功"结果——命令退出码为 0 但求解器实际已发散。AI 帮我写了自动检测异常值的逻辑
- 给想复现论文的同学:先用小规模(1 PDE × 1 方法 × 2 模型)跑通全流程,确认 pipeline 正确后再放大规模。AI 辅助批量脚本编写可以大幅减少配置工作量
附件:关键代码与实验数据
分享目录下附带了复现实验中的关键代码和结果数据:
代码文件 (code/)
| 文件 | 说明 |
|---|---|
llm_api.py |
多模型 API 统一封装,支持 OpenAI/Anthropic/Gemini/DeepSeek/Qwen |
code_generation.py |
核心循环:构建 prompt → 调 LLM → 提取代码 → 执行 → debug |
funsearch.py |
进化搜索主循环(岛屿模型 + 程序数据库) |
program_database.py |
聚类采样 + softmax 温度调度的程序数据库 |
prompt_template.py |
系统提示词、代码生成提示词、debug 提示词模板 |
pde_descriptions.py |
5 个 PDE 的数学描述(初始条件、边界条件、参数范围) |
sample_solver_burgers.py |
一个种子求解器示例(Fourier 谱方法 + RK4 时间积分) |
实验结果 (results/)
| 文件 | 说明 |
|---|---|
best_of_light.md |
各 PDE 最佳结果汇总 |
nrmse_funsearch.md |
FunSearch 方法的 nRMSE 对比表 |
nrmse_refine.md |
Refine 方法的 nRMSE 对比表 |
nrmse_repeated_sample.md |
Repeated Sample 方法的 nRMSE 对比表 |
debug_success_rate_*.md |
各方法的 debug 成功率 |
failures.csv |
失败任务详情分析 |
可视化 (visualizations/)
展示了 4 个 PDE 的参考解(种子求解器的数值解),这些是 LLM 生成求解器的"参考答案":
| 图片 | PDE | 物理含义 |
|---|---|---|
advection.png |
对流方程 | 波形以恒定速度传播 |
burgers.png |
粘性 Burgers 方程 | 激波形成与耗散 |
reaction_diffusion.png |
反应扩散方程 | 图灵斑图形成 |
cns.png |
可压 Navier-Stokes | 一维可压缩流动 |