最新消息:关注人工智能 AI赋能新媒体运营

Anthropic用Claude两周完成百万行代码迁移,耗时从数月压缩至一个周末

科技资讯 admin 浏览

Anthropic 披露 AI 驱动大规模代码迁移实践:两周内完成百万行级语言切换

传统意义上,更换一门编程语言往往意味着长达数年的工程周期与高昂的人力成本。Anthropic 在 7 月 16 日发布的一篇文章中展示了截然不同的图景:借助 Claude Fable 5、Opus 4.8 及动态工作流,其内部开发团队在过去一个月内完成了 10 个代码包的迁移工作,每个包的规模从数万到数十万行不等。

两个典型案例尤为引人注目。Bun 联合创始人 Jarred Sumner 使用 Claude Code 将 Bun 从 Zig 迁移至 Rust,不到两周时间产出约一百万行代码。合并入主分支前,整套 CI 测试链 100% 通过;合并后出现的 19 个回归问题已全部修复,Rust 版本已于 6 月随 Claude Code 发布。另一案例来自 Anthropic Labs 联合负责人 Mike Krieger,他仅用了一个周末便将一套 Python 代码库转换为 16.5 万行 TypeScript,整个流程包含数百个代理、8 道阶段闸门、3 轮对抗审查,最终通过奇偶校验将每条命令的输出与 Python 原版逐字比对。

Anthropic 将这套方法的核心概括为:修复的对象不是代码本身,而是生产代码的流程循环。一旦建立这一认知,长期搁置的迁移项目便不再是不可触碰的禁区。

迁移的必要性通常源于技术环境的演变:早期权衡逐渐变成瓶颈、出现更优技术路径、或原有生态萎缩。Jarred Sumner 最初选择 Zig 是看重其接近 C 的性能与极简设计,适合单人快速开发。但到 2026 年,Bun 命令行工具月下载量突破千万,Zig 带来的局限日益明显。此前,迁移语言虽能带来更小、更快、更安全的系统,但工程师需承担并行维护两套代码数年的风险,且可能只换来 90% 的等价性,得不偿失。

AI 的介入改变了这一成本结构。最坏情况不过是删除分支重新来过。以 Bun 的迁移为例,共消耗 59 亿个未缓存输入 token 及 6.9 亿个输出 token,按 API 定价约合 16.5 万美元;Mike Krieger 的项目则消耗 2700 万 token。驱动 Mike 下决心的是编译效率:原先 Python 工具链为各平台编译需约 8 分钟,完整构建矩阵耗时 30 分钟;迁移后编译仅需 2 秒,二进制启动速度提升 6 倍,同时淘汰了一条独立部署管线。

大规模代码迁移之所以适合 AI,在于其天然并行性——文件、crate 等成百上千的独立单元可同时处理;上下文清晰完整,旧代码本身就是最佳规格说明;且大型代码库中的测试套件可作为客观评判标准,模型能够据此自我验证、持续迭代。编译器或测试失败会自动生成待办事项,审查中的每一条发现都需引用规则,违规即转化为待办项,避免悄然分叉。

两场迁移中,Jarred 和 Mike 均在关键步骤使用了 Fable 的顾问模式,让多个不同档位的模型分工协作,将 token 消耗控制在最低水平。

基于实践,Anthropic 提炼出可泛化的六步法:

预备阶段:建立裁判机制。 需先构建能同时评判原代码与目标代码的测试基准。将现有测试分类,区分可通过外部调用表达的与依赖内部实现的;将前者改写为可同时运行于原始代码和移植版的断言,并用对抗代理验证改写未削弱断言力度。Mike 的 Python 转 TypeScript 项目中,建立了覆盖 7 个真实场景的奇偶校验台,任何行为变动均视为需修复的 bug。

第一步:立规则、画依赖图、列缺口清单。 规则手册先于缺口清单制定,因缺口由规则覆盖不到之处定义。若沿用老结构,手册主要是类型与惯用法对照表;若彻底重做,则是一份设计文档。依赖图用于识别文件间关系,实现有效切分与并行推进。缺口清单记录语言间的硬差距,如 Zig 转 Rust 时的手动内存管理、Python 转 TypeScript 时的接口声明要求。

第二步:压力测试。 通过迷你迁移验证规则。Jarred 派三个代理分别按手册翻译、按资深 Rust 工程师方式翻译、对比差异提炼规则,在此阶段发现两个致命问题,避免了在 1448 个文件上爆发。此步骤产出全部丢弃,目的仅为磨利规则。若为重设计型迁移,则以对抗审查炮轰设计文档,辅以可丢弃的端到端验证。

第三步:翻译与多代理循环。 实现交给小模型,审查留给大模型。任务队列通过检查磁盘文件存在与否判定完工状态,天然支持断点续跑。代理过于谨慎时,以带上下文的指令提醒其编译器会兜底。不确定处标记 // TODO(port)。对抗审查员各自评分,意见相左时交第三方仲裁。重复错误在规则手册中增补,受影响批次重新生成。

第四至六步:编译、冒烟测试、行为比对。 编译环节因语言和规模而异,Jarred 将编译器挡在循环外以节省 cargo 的数分钟耗时,Mike 则将 TypeScript 编译器嵌入每个循环。冒烟测试的崩溃与编译错误同样按根因归类修复。最终阶段用预备的测试套件逐项比对两套代码库行为,失败项由修复代理对照双版本审查,对抗审查员复核。构建守护进程是唯一允许重建二进制的角色,修复代理仅写补丁,守护进程批处理、重建、重跑测试、反馈结果,将最昂贵操作串行化。

Mike 在无现成测试套件时的做法值得借鉴:让 Claude 编写脚本,对 7 个真实场景同时运行新移植版与 Python 原版比对输出;进一步让 Claude 自主设计端到端测试套件,通宵运行四个晚上,捕获场景清单无法预测的边缘问题。

Anthropic 同时提醒,此指南应为起点而非教条。核心原则包括:关注规律而非单点失败;保持审查对抗性与验证机械性;合理分配模型资源,小模型负责高吞吐实现,大模型留给审查与规则制定;将人力密集环节前置,规则手册与压力测试最耗时间,之后基本为队列自动运行;确保任务队列机械且可续跑,以输出文件落盘为完工标准。

Jarred 的 Bun 迁移已上线生产。新代码库中约 4% 的 Rust 代码处于 unsafe 块,主要为 C/C++ 边界上的单行指针操作。改进效果包括:内存泄漏全部修复,重复构建 2000 次的基准测试内存占用从 6745 MB 降至 609 MB;Linux 和 Windows 二进制体积缩小 19%;HTTP 服务及 next build、tsc 等真实负载性能提升 2% 至 5%。