长时间运行的 Claude:面向科学计算的多日智能体工作流¶
作者: Siddharth Mishra-Sharma(Discovery 团队研究员)
发布日期: 2026-03-23
核心前提¶
随着模型在长时间跨度任务上的能力显著提升,研究者现在可以指定高层目标,让智能体团队自主工作,将原本需要数天、数周甚至数月的项目压缩到数小时完成。
过去一年中,模型在长时间跨度任务上的表现有了质的飞跃。这意味着我们可以将多日智能体编码工作流应用于科学计算任务。
适合这种模式的科学任务类型包括:
| 任务类型 | 特征 |
|---|---|
| 重新实现数值求解器 | 范围明确,成功标准清晰 |
| 将遗留科学软件(如旧版 Fortran)转换为现代语言 | 人工监督可以是间歇性的 |
| 根据参考实现调试大型代码库 | 可持续自主推进 |
Anthropic 的 C 编译器项目证明了这一模式的可行性——Claude 跨越约 2,000 个会话构建了一个能编译 Linux 内核的 C 编译器。
具体案例¶
本文的核心示例是使用 Claude Opus 4.6 实现一个可微分的宇宙学 Boltzmann 求解器。 这段数值代码通过演化光子、重子、中微子和暗物质在早期宇宙中的耦合方程,预测宇宙微波背景辐射(CMB)的统计属性。
现有的 Boltzmann 求解器包括 CLASS 和 CAMB。可微分版本(基于 JAX)能够启用基于梯度的推断方法,大幅加速参数估计。JAX 提供自动微分和加速器兼容性(GPU),几乎无需额外开发成本。
作者指出这个任务"并不在我的核心科学领域"——他有高层面的了解但不具备在合理时间内完成的专业能力。拥有该专业知识的团队已经在 JAX 中构建了可微分求解器,通常需要数月到数年的研究者投入时间。
这个任务与 C 编译器项目在结构上不同。Boltzmann 求解器是"一个深度耦合的流水线——早期宇宙复合建模中一个微小的数值误差或不佳的近似,都可能微妙地影响下游的所有结果。"这需要"贯穿整个链条进行因果追踪,并借助领域知识"来调试。
计算环境使用运行 SLURM 任务调度器的 HPC 集群。
起草计划并在本地迭代¶
研究者应将大部分时间投入到编写根目录下的 CLAUDE.md 文件中——Claude 会特殊对待这个文件,始终保持在上下文中。
Claude 可以在工作过程中编辑这些指令。项目的早期 CLAUDE.md 展示了整体计划和设计决策。精度目标设定为与 CLASS 对比达到 0.1% 一致性——"这是两个经典 Boltzmann 代码 CLASS 和 CAMB 之间的典型一致性水平。"
跨会话的记忆¶
进度文件(按惯例为 CHANGELOG.md)是"智能体的便携式长期记忆,充当一种实验室笔记。"
一个好的进度文件应跟踪:
- 当前状态
- 已完成的任务
- 失败的方法及其失败原因
- 关键检查点的精度表
- 已知局限性
失败的方法尤为重要——"没有这些记录,后续会话会重新尝试相同的死胡同。"示例条目:"尝试对扰动 ODE 使用 Tsit5,系统太刚性。改用 Kvaerno5。"
测试预言机¶
长时间运行的自主科学工作"关键依赖于智能体有办法知道自己是否在取得进展。"
可选方案包括:
- 参考实现
- 明确的可量化目标
- 现有测试套件
在本示例中,Claude 被指示使用 CLASS C 源代码作为参考实现,构建并持续运行单元测试。
Git 作为协调机制¶
智能体应在每个有意义的工作单元完成后进行 commit 和 push。 这提供了:
- 可恢复的历史记录
- 本地可见的进度
- 防止工作丢失的保护(例如计算配额用完时)
示例 CLAUDE.md 指令:"在每个有意义的工作单元后进行 commit 和 push。每次 commit 前运行 pytest tests/ -x -q。永远不要 commit 破坏现有通过测试的代码。"
对于引导,你可以 SSH 到集群重新提示或更新指令,或者让本地的 Claude Code 实例 SSH 进去运行命令。
执行循环¶
在计算节点上的终端复用器(tmux)中启动 Claude Code 会话。 因为运行在 tmux 中,你可以分离、合上笔记本电脑,然后偶尔检查进度。
示例 SLURM 作业脚本:
#!/bin/bash
#SBATCH --job-name=claude-agent
#SBATCH --partition=GPU-shared
#SBATCH --gres=gpu:h100-32:1
#SBATCH --time=48:00:00
#SBATCH --output=agent_%j.log
cd $PROJECT/my-solver
source .venv/bin/activate
export TERM=xterm-256color
tmux new-session -d -s claude "claude; exec bash"
tmux wait-for claude
作业启动后,附加到 tmux 会话,给出方向(例如"读取 CHANGELOG.md 并接手下一个任务"),然后分离。重新附加:
srun --jobid=JOBID --overlap --pty tmux attach -t claude
Ralph 循环¶
当前模型可能出现"智能体惰性"——被要求完成复杂的多部分任务时,它们有时会找借口在完成前停下来。
Ralph 循环是一个 for 循环,当智能体声称完成时将其踢回上下文,询问是否真的完成了。类似模式还有 GSD 和领域特定的变体,以及 Claude Code 原生的 /loop 命令。
Ralph 可以通过 /plugin 安装。示例调用:
/ralph-loop:ralph-loop "Please keep working on the task until the success criterion of 0.1% accuracy across the entire parameter range is achieved." --max-iterations 20 --completion-promise "DONE"
Claude 最多迭代 20 次,直到以"DONE"咒语保证任务完成。
结果¶
Claude 从零开始在这个项目上工作了数天,达到了与参考 CLASS 实现的亚百分比一致性。

随着智能体在代码库上工作,精度随时间达到亚百分比水平的路径。
开发过程的观察:
- 轨迹"笨拙",测试覆盖有缺口(最初只在单个基准参数点测试)
- 犯了基础性错误,如"被规范约定绊倒,或花数小时追踪一个宇宙学家一眼就能发现的 bug"
- 持续朝着既定目标推进
学习副效应: 作者"通过观看 git commit 历史,出乎意料地学到了很多关于 Boltzmann 求解器的知识。"commit 日志"读起来像一个快速、超级字面化的博士后的实验室笔记。"
局限性: 生成的求解器"不是生产级别的","在每个参数区间都未能达到与参考 CLASS 实现的可接受精度。"
核心要点¶
| 指标 | 数值 |
|---|---|
| 使用模型 | Claude Opus 4.6 |
| 精度目标 | 与 CLASS 0.1% 一致性 |
| C 编译器项目会话数 | ~2,000 |
| SLURM 请求配额 | 48 小时,1x H100-32 GPU |
| Ralph 循环最大迭代 | 20 次 |
| 完成时间 | 数天 |
| 时间压缩比 | 数月/年 → 数天 |
核心结论: "智能体驱动的开发可以将数月甚至数年的研究者工作压缩到几天。"
文章以这一关于机会成本的观察作结:"你每一个没有让智能体为你工作的夜晚,都是白白浪费的潜在进展。"
致谢¶
Eric Kauderer-Abrams(同行评审),Xander Balwit、Ethan Dyer 和 Rebecca Hiscott(有益反馈)。
参考链接¶
| 资源 | 链接 |
|---|---|
| METR 时间跨度 | https://metr.org/time-horizons/ |
| C 编译器项目 | https://www.anthropic.com/engineering/building-c-compiler |
| Clax 代码库 | https://github.com/smsharma/clax |
| CLASS 代码 | http://class-code.net/ |
| CAMB | https://camb.info/ |
| 早期 CLAUDE.md | https://github.com/smsharma/clax/blob/6a6b2330cf25edded1bb31ec57a0091aa794a5d3/CLAUDE.md |
| CHANGELOG.md | https://github.com/smsharma/clax/blob/main/CHANGELOG.md |
| CLASS 源代码(GitHub) | https://github.com/lesgourg/class_public |
| 可微分求解器论文 1 | https://arxiv.org/abs/2311.03291 |
| 可微分求解器论文 2 | https://arxiv.org/abs/2602.15104 |
| Ralph 循环 | https://ghuntley.com/loop/ |
| GSD | https://github.com/gsd-build/get-shit-done |
| 领域特定变体(论文) | https://arxiv.org/abs/2603.20179 |
| Get Physics Done | https://github.com/psi-oss/get-physics-done |
| Commit 日志 | https://github.com/smsharma/clax/commits/main/ |