用 AI 智能体重构遗留代码
Mistral 4 万行 Fortran 重写项目,揭示了智能体自主性的边界
Mistral 为一家未具名的能源客户将 4 万行 Fortran 77 迁移至 C++,并公开了工作流程。其首次尝试由全自主智能体执行,产出的是用 C++ 语法重写的 Fortran。数值一致性校验与人工介入解决了这一问题。

30 万行中的 4 万行,客户身份无从核实
Mistral 应用 AI 团队称,其为一家欧洲能源运营商将 4 万行 Fortran 77 代码迁移至 C++,这是一个共 30 万行、物理计算密集的油藏模拟器项目的第一轮冲刺。该公司在一篇博客文章中公开了方法,这篇文章同时也是为该团队招募人才的宣传。
关于客户的信息几乎全部缺席:没有名称、没有国别、没有代码、没有成本。文章确实提到的是,该模拟器既没有测试套件,也没有集中式文档,而客户方的油藏工程师参与了目标架构的评审。
Fortran 77 于 1977 年标准化,其种种限制决定了哪些东西必须改变。它没有模块,没有命名空间,也没有结构化类型。程序状态存放在 COMMON 块中, , 这是在整个程序范围内共享的全局内存。变量根据首字母隐式确定类型,因此一个拼错的名字会悄无声息地创建出一个新变量,而不是导致编译失败。变量名长度上限为 6 个字符。C++ 一侧还必须集成 PetSc 等现代科学计算框架。
第一次尝试产出的是用 C++ 重敲的 Fortran
这篇文章最有价值的部分,是它对第一次尝试失败之处的描述。Mistral 让每个智能体各负责一个 Fortran 子程序,让它们独立工作一周。产出的代码能跑,但这不是现代化重构。COMMON 块被一对一地转成了全局结构体,由 GOTO 驱动的控制流原封不动地保留下来,而没有重构为循环或提前返回。用 Mistral 自己的话说,结果看起来就像是用 C++ 语法把 Fortran 重敲了一遍。
第二次尝试加入了结构:规划者、编码者、测试者和代码质量审查者共同处理每一个模块。质量大幅提升。但随后源代码的复杂度追上了这些智能体, , 它们会碰到一个 bug,尝试几种修复方式,然后卡住,而周围没有人能帮它们解困。
最终交付的方案是折中路线:由一名人类操作编码、测试和审查智能体组成的工作流,逐模块迁移,并在循环卡死时介入。
真正的交付物是数值一致性
在编写迁移代码之前,Mistral 先搭建了它所谓的“一致性校验框架”(parity harness)。智能体对 Fortran 代码进行插桩,在客户油藏工程师标记为关键的节点导出状态快照,再由一个 C++ 测试框架加载这些检查点,与迁移后的模块逐一比对。Skill.md 文件则告诉智能体如何正确使用这套框架。
文章举了一个例子:在 Fortran 中插入一行代码,输出 RHOG 的值, , 那次运行中为 42.71834。这个数字随即成为 C++ 模块的参考检查点。检查两者是否相等成本极低,也几乎没有争辩余地,因此 Mistral 主张这套校验框架应当放在现代化项目的起点,而不是终点。
| 指标 | 数值 |
|---|---|
| 第一轮冲刺迁移的 Fortran 行数 | 40,000 |
| 模拟器总行数 | 300,000 |
| 工作流设定的模块规模上限 | 约 10,000 行 Fortran |
| 为编写文档而启动的智能体数量 | 超过 100 个 |
| Fortran 变量名长度上限 | 6 个字符 |
| 参考检查点数值(RHOG) | 42.71834 |
先建文档,再谈委派
第二个前置条件没那么光鲜,但据 Mistral 所述,这是该项目最大的附带收获之一。文档散落在旧 PDF 中,或埋没在 Fortran 注释里。由于过程式代码可以画成一棵完整的调用者, 被调用者树,团队用自研解析器解析代码库,随后用 Vibe CLI 启动 100 多个智能体为其编写文档,并通过文档库和 Mistral OCR 提取相关 PDF 内容。
工作从树的叶子节点开始,逐层向上推进。每个节点都会派生一个子智能体为其编写文档,并针对原始代码库提交一个拉取请求。一个审查智能体按 cron 定时循环运行,查找新的 PR、进行审查并安排修复任务。
剩下 26 万行不会是什么样子
Mistral 自己划出了边界。这 4 万行是核心功能,所在的代码库自成一体、可运行,物理逻辑多少还有些文档记载, , 不管写得多糟。而依赖外部系统、缺乏可运行基线,或所编码的物理逻辑无人记录在案的迁移项目,会带来这一轮冲刺无需解决的问题。
实际交付流程比“智能体完成迁移”要窄得多。模块被挑选为规模可控的独立子树,经验上不超过约 1 万行 Fortran。每个模块都走同一套流程:生成 C++ 架构,由油藏工程师评审,把获批的设计拆解为任务队列,按任务依次执行规划、实现和测试,然后由人工审查 PR 并提出修改意见,直到合并。
这篇文章可以归纳为三条规则:在编写迁移代码之前先建好一致性校验框架;在依赖智能体之前先把文档整理清楚;在流程中保留人工审查关卡,因为完全自主和纯手工操作都败给了这种混合模式。最后这条论断出自一家销售应用 AI 服务的厂商,而该文章既没有与其他迁移实践作对比,除一个被输出的变量外没有任何准确率数据,也没有给出剩余 26 万行的时间表或成本。
每天早晨用 3 分钟掌握科技要闻
每个工作日一封邮件,只讲真正重要的 AI 与科技动态。