GitHub 如何借助 AI 以创纪录的速度将 Copilot 从 TypeScript 移植到 Rust

GitHub 如何借助 AI 以创纪录的速度将 Copilot 从 TypeScript 移植到 Rust

💡 原文英文,约2500词,阅读约需10分钟。
📝

内容提要

GitHub 借助 Copilot 自身,将 Copilot 运行时从 TypeScript 迁移到 Rust,涉及约 43 万行生产代码。原架构依赖 Node/V8,内存开销大且难以嵌入其他应用。团队采用增量就地替换策略,逐组件迁移并保留原有行为,借助 AI 代理集群并行处理任务,并由多模型代理逐行审查代码。迁移后单次会话耗时从 5.25 秒降至 292 毫秒,吞吐量大幅提升,内存显著下降。AI token 成本约 12 万美元,凸显清晰指令、完善端到端测试和人工监督的重要性。

🔎

延伸解读

增量迁移:降低风险的关键策略

GitHub没有选择一次性重写并切换,而是采用增量就地替换策略,逐组件迁移。每个组件的TypeScript实现被Rust替换后,通过临时包装器让依赖方调用新实现,同时删除旧代码,确保只维护一个活跃版本。这种策略将风险分散到多次小变更中,便于审查、测试和排查问题,也允许产品在迁移期间继续开发新功能。

AI代理集群的协作与瓶颈

迁移中使用了AI代理集群,协调代理可拆分任务并创建子会话并行工作。例如,一个3万行的文件被拆给15个子会话处理。但并行构建和测试会压垮开发机,团队调整流程,让子代理跳过昂贵构建,由父代理统一执行,并限制同时只允许一个构建。这表明AI代理虽能提升效率,但需合理设计工作流以避免资源争用。

行为保持与回归问题

迁移的核心目标是保持现有行为和算法不变,而非趁机重构。即便如此,仍出现了一些回归,如整数被改为小数导致SDK兼容问题、空字符串和时区处理差异、取消操作未彻底停止相关任务等。这些问题能通过编译,却影响系统其他部分。因此,强大的端到端测试至关重要,且需保护测试不被代理弱化。

性能提升与成本考量

迁移后性能显著改善:单次会话耗时从5.25秒降至292毫秒,吞吐量从每秒7.55次提升至120次,10客户端测试中峰值内存增量从1383MB降至126MB。AI token成本约12万美元,覆盖约1360亿token,大部分为缓存输入。此外还有多名开发者的时间投入。团队强调清晰指令、完善测试和人工监督是成功关键。

❓

Q&A

GitHub 为什么要把 Copilot 运行时从 TypeScript 迁移到 Rust?

原有 TypeScript 运行时依赖 Node/V8,每个客户端至少有约 100 MB 内存开销,进程间通信带来额外开销,且难以嵌入其他应用。Rust 具有低开销和可预测的资源使用,适合作为独立运行时库直接加载到应用进程中。

GitHub 采用了什么样的迁移策略来降低风险?

采用增量就地替换策略,逐组件将 TypeScript 替换为 Rust,每个组件的替换在一个 PR 中完成,并通过临时包装器让旧代码调用新实现。旧实现随同一变更删除,确保只维护一个活跃版本。迁移期间产品继续开发,每次变更更易审查和测试。

AI 代理集群在迁移中具体承担了哪些工作?

协调代理负责调查大组件、拆分任务并创建子代理。子代理在父会话工作区内调查代码并返回结果;子会话拥有独立 Git 分支和工作副本,可并行修改不同区域。代理还负责阅读代码、检查依赖、测试和审查结果,而不仅是编写 Rust 代码。

迁移后 Copilot 运行时的性能提升了多少?

单次会话(创建客户端、完成一轮、清理)耗时从 5.25 秒降至 292 毫秒,提升约 18 倍。多会话共享客户端时,吞吐量从每秒 7.55 个会话生命周期提升到 120 个。10 客户端测试中,私有内存峰值增量从 1383 MB 降至 126 MB。

这次迁移遇到了哪些典型问题或回归?

常见问题包括:整数被改为小数导致 SDK 兼容问题;空字符串、时区或替换库的错误处理差异;取消操作未停止所有相关工作;资源过早释放导致会话卡住;部分功能丢失或仅部分迁移;Rust 代码在 Node 主线程执行长任务导致界面冻结;Windows 上缺少进程启动设置出现多余控制台窗口。

从这次迁移中可以学到哪些关键经验?

需要给 AI 工具清晰指令,否则代理可能只翻译核心逻辑而遗漏周边代码;必须有强大的端到端测试来验证完整工作流行为,并防止代理削弱测试;应优先保持现有行为和算法,避免将迁移与重新设计混合,否则会增加问题、时间和 token 成本;人工监督至关重要。

这次迁移的成本大概是多少?

AI token 成本约 12 万美元,覆盖约 1360 亿 token,其中大部分为缓存输入以降低重复处理成本。此外还有主开发者及其他开发者在集成、打包、构建改进和审查上投入的时间。

🏷️

标签

➡️

继续阅读