开源ByteByteGo·原文 2026年11月11日

GitHub用Copilot把80万行Copilot运行时从TypeScript迁到Rust,单开发者耗时数月

ByteByteGo汇总的公开信息显示,GitHub将Copilot运行时从TypeScript重写为Rust,约43万行生产代码经过迁移,AI token成本约12万美元;一次测试中客户端完整生命周期从5.25秒降到292毫秒。这是公司分享的迁移案例,效果数字来自其内部测试。

AI解读:GitHub把跨多个Copilot产品共享的运行时从TypeScript迁移到Rust,解决原架构强制附带Node/V8进程、每个客户端至少约100MB内存开销、进程间通信和双进程监控的问题。

迁移采用增量替换而非一次性重写:每个组件的TypeScript实现由一个PR换成Rust,依赖方通过临时包装层调用,旧实现同PR删除;先迁移有测试覆盖、不管理共享状态的小型辅助函数,会话编排留到最后。

AI代理以“代理舰队”方式参与:协调代理拆分任务,子代理在父会话工作区调查,子会话各有Git分支独立改代码;示例中一个约3万行的session.ts由协调代理先阅读一小时,再分给15个子会话。

审查环节用多个不同模型的审查代理逐行比对旧TypeScript与新Rust,检查行为变化、兼容性、临时包装层是否清除、端到端测试是否被改动;人工审查聚焦架构、接口契约和风险。

迁移出现回归:整数变小数影响部分SDK,空字符串、时区、替换库错误处理差异,取消操作未停掉相关工作、资源提前释放导致会话卡住,Rust在Node主线程做长任务导致界面冻结,Windows缺进程启动设置弹出控制台窗口。

GitHub内部测试称:创建客户端、完成一轮对话并清理从5.25秒降至292毫秒;多会话共享客户端吞吐从每秒7.55个完整会话生命周期升至120;10客户端测试峰值私有内存增量从1383MB降至126MB。token成本约12万美元、约1360亿token,另有多名开发者投入集成、打包和审查。

ByteByteGo汇总公开信息称,GitHub已将支撑多个Copilot产品的共享运行时从TypeScript重写为Rust,生产TypeScript代码约43万行经过迁移,整个过程由GitHub Copilot应用、Copilot CLI和AI代理参与,一名主要开发者在几个月内完成。

GitHub给出的动机是原运行时与命令行界面耦合过深:其他语言的应用接入SDK时也要携带Node和V8,每个客户端至少有约100MB内存开销,还要启动并监控额外进程,Node进程崩溃可能带走整个会话。

GitHub在内部测试中记录了一次客户端生命周期从5.25秒降到292毫秒,并称10客户端测试的峰值私有内存增量从1383MB降到126MB。这些是公司自述的测试结果,未见第三方复现。

迁移对象与原架构的限制

Copilot运行时是跨多个产品复用的代理行为引擎,原本用TypeScript编写、运行在Node和V8上。SDK启动时会拉起一个由命令行应用及其运行时组成的后台进程,消费方应用与它通过进程通信交换请求和响应。

ByteByteGo称,当运行时被嵌入对速度、内存和规模要求更高的应用时,这种设计难以维持:Python、Java或C#应用也要带上Node和V8,每个客户端至少约100MB内存开销,双进程还增加监控负担。GitHub因此想要一个独立于界面的运行时库,可直接加载进应用自己的进程,并选择资源开销低且可预测的Rust。

最初估计需迁移约13万行生产TypeScript,后来部分逻辑从界面层移入运行时,加上新功能持续加入,最终约43万行经过迁移。该数字来自ByteByteGo的整理,并非GitHub官方发布。

增量替换与代理舰队的实际用法

GitHub没有先完整重写再一次性切换,而是逐个组件替换:一个组件的TypeScript实现由一个PR换成Rust,依赖它的代码通过临时包装层调用新实现,旧实现在同一PR中删除,避免同时维护两版。迁移先从小型、独立、已有较强测试且不管理共享状态的辅助函数开始,用来验证构建、打包和跨语言通信,再推进到状态管理、工具、模型客户端等相互关联的部分,会话编排留到最后。

代理舰队承担了拆分和并行工作。子代理在父会话工作区内调查并回传结果;子会话各自有Git分支和独立工作副本,可独立改代码。以约3万行的session.ts为例,协调代理先花一小时阅读检查,再拆给15个子会话并选择各自模型,最后把完成改动合回自己的分支。

15个子会话同时构建和测试压垮了开发者的笔记本电脑,流程随后改为子代理不做昂贵构建和测试,由父会话统一执行,另设一个聊天会话控制构建访问,一次只允许一个构建。

  • 每个组件的替换放在单个PR中,便于审查、测试和排查
  • 迁移期间保持原有行为和算法,性能重设计推迟到迁移之后
  • 端到端测试保持不改动,作为预期行为的参照;测试失败则不合并

审查、回归与成本

代码审查用多个不同模型的审查代理逐行比对旧TypeScript和新Rust,重点看行为或兼容性变化、Rust实现是否高效、废弃代码和临时包装层是否删除,以及端到端测试是否被改动。发现的问题由协调代理核实并修复,循环到审查干净;Copilot Code Review和其他审查机器人也检查每次提交。人工审查者聚焦架构、接口契约和风险。

回归问题包括:整数被改成小数导致部分SDK出问题,空字符串、时区和替换库的错误处理存在差异,代码能编译但下游无法处理结果;取消操作未停掉相关工作、资源过早释放导致会话卡住、部分功能只迁移了一部分;Rust代码在Node主线程执行长任务导致界面冻结,Windows上缺进程启动设置而弹出多余控制台窗口。

成本方面,ByteByteGo称整个迁移消耗约1360亿token、约12万美元AI token费用,大部分为缓存输入;除主要开发者外,还有其他开发者投入集成、打包、构建改进和审查。

GitHub总结的经验包括:给AI工具的指令要足够明确,否则代理可能只翻译核心逻辑而把周边留在TypeScript;需要强的端到端测试并防止代理削弱测试;迁移阶段先保持原有行为,不要同时做重设计,否则问题、时间和token成本都会上升。这些是GitHub一方的经验陈述,不是独立验证的普适结论。

信息来源

ByteByteGo原始来源

更多

新闻专题
外观