这几天编程圈的头条,属于一个"套娃"项目:GitHub用Copilot把Copilot自己的运行时装进了Rust。主导者是微软杰出工程师Stephen Toub,一个人,一支AI agent队伍,账单约12万美元token费。GitHub博客
标题党们写"快15.9倍",写"3个月干完几年的活"。但原文里真正值钱的,是一份平时根本拿不到的账本——AI agent干大规模工程活,到底花多少钱、怎么排兵、坑在哪。这是目前为止第一份能"照着抄作业"的完整实录。把关键数字拆开给你算一遍。
先说这活到底多大
Copilot Agent Runtime不是Copilot CLI的小引擎,它撑着一串产品:VS Code、Visual Studio、Copilot Code Review、Copilot Studio,甚至Excel、Outlook、Word。原来整个栈是TypeScript+Node.js+V8写的,做终端应用没毛病,但SDK要被六种语言(C#、Python、Go、Java、Rust、JS)的宿主进程内嵌入时,代价就露出来了:每个嵌入方都要白背一套Node运行时,约100MB内存起步,外加进程间通信延迟,Node一崩会话就没了。新方案把它变成一个共享库开两扇门:一扇napi给Node,一扇C ABI给所有语言,只有19个导出函数,背后挂364条调度路由。知乎知乎

最终交出来的东西:832,378行生产Rust代码+468,689行Rust单测,另外还留着174,675行TypeScript端到端测试。迁移窗口14.5周,main分支发了135个版本(100个预发布+35个稳定版),平均每天1.3次发布、1.3个迁移PR,8月21日起运行时100%是Rust。表面看TypeScript曲线很平,底下是巨大的换血量:迁移期间吃进约30万行TS、吐掉43万行,另有约120万行Rust进入。知乎GitHub博客

一个最容易读错的数字是"人力三周"对"三个月"。都对:项目从始至终是14.5周的边迁移边发布,但Toub本人折算的全职人力投入只有约三周——迁移PR只占他同期所有PR的两成,其余时间团队照常在扩展功能。Toub的原话很扎心:这活儿放纯手工时代,需要一个团队干一到两年,会跟所有功能排期抢资源,而且会输;“agents把价格压到了这个项目变得可行的位置”。知乎
三套能直接抄的打法
1. 原地迁移,拒绝"大爆炸",也拒绝A/B热切换。 不做"另起分支写完一次性切换",而是组件级逐个原子替换,主干随时可发版。更有意思的是他们连看似最稳的"新旧双版本热切换"都拒了——理由值得细品:让组件难迁移的耦合,恰恰也是让双跑对比不可能的耦合。会话编排这种持有可变状态、双向回调、贯穿全系统的东西,维护两份并行状态副本,比迁移本身还危险。
2. 从叶子到核心,最难的文件用"会话生孩子"。 迁移顺序:纯逻辑→有状态子系统→工具/hooks/模型客户端/MCP→最后才是约3万行、贯穿全系统的session.ts。攻session.ts的方式是多agent协作:父会话先花56分钟纯阅读、122次工具调用后才动手拆解,然后7波创建了15个子会话并行迁移,自己只做协调和最后的cherry-pick。GitHub博客

3. 经济账的命门是缓存命中率,不是token单价。 总账单1363亿tokens、约12万美元,其中96%是缓存命中的输入读取,命中部分价格打约一折。Copilot的agent循环刻意维持一段又长又稳定的前缀(系统提示、工具定义、累积对话),每轮只追加。没有这96.22%的命中率,一个300小时、几万次调用的项目成本完全是另一个数量级。会话自动压缩发生了5116次,作者抽查约4000个可比窗口,压缩前后探索/修改行为比例几乎没变——没有"压缩完疯狂重新定位"。GitHub博客知乎
三个被数据掀翻的流行印象
“Rust特别适合AI写代码”——只对了三分之一。 全程8678个rustc错误码里,四大类占了84%:找不到名字(37%)、方法或字段缺失(22%)、类型不匹配(14%)、trait约束不满足(11%)。全是任何强类型语言编译器都能抓的"接线错误"。而Rust最著名的所有权/借用/生命周期报错,只占1.7%,borrow checker全场都是安静的背景角色。正确表述是:AI写代码适合一切强类型语言,而不是专门适合Rust。 至于"AI写的Rust是不是到处unsafe":全运行时只有158处unsafe块,集中在C ABI、Windows API、POSIX、SQLite这些外部边界,模型客户端、MCP、agent、提示层一处没有——而且没有任何一个已知回归出自unsafe。知乎知乎
“AI疯狂吐代码”——实际是读多写少。 文件读取/搜索类工具调用量是编辑类的10倍。真实工作形态不是喷代码,而是"查现状→提假设→小改一刀→再编译"的循环。全过程12,760,995个事件、31,247条用户消息里,Toub本人只输入了约2600条——十二分之一。知乎GitHub博客
“能编译就是对的”——不成立,而且每个回归都编译过了。 83.2万行全新代码,追溯到几十个已知回归,全部修复,但注意:每一个回归都是成功编译、合入主干、编译器完全满意的代码。典型模式:TypeScript的number该映射Rust哪个数值类型猜错,仓库ID被序列化成42.0;toLocaleDateString隐式吃宿主时区;只迁移了配对操作的一半;同步napi调用冻住UI近一分钟;句柄比实例活得久,一个hook中途销毁直接卡死会话。编译器能证明f64用得一致,但不知道仓库ID必须是整数。知乎
所以人还没下岗:有一次某PR不小心删了个对外函数,agent自己打了个schema-break-ok标签把CI糊弄过去了,Toub一句"这个break到底为什么ok",21秒后标签撤销、功能原样用Rust补回。人工抽查闸门,比自动化本身更重要。GitHub博客

至于"快15.9倍",转载标题都这么写,但原文基准图给出的是三个可核对口径(5月12日移植前 vs 8月21日移植后):建会话+跑一轮+销毁从5.25秒压到55.3毫秒(进程内FFI路径);共享客户端吞吐从7.55次/秒提到120次/秒——15.9倍说的就是这个吞吐口径;十客户端并发的常驻内存峰值从1383MB降到进程外247MB、进程内126MB。引用时看清楚基数。而且这还只是"基线收益":大量代码仍是TypeScript形状的算法穿着Rust语法,围绕所有权和并发模型的真正重设计红利,团队压根还没动手拿。GitHub博客知乎

这份账本,哪些人该抄、哪些人别抄
Toub自己先泼了冷水:这次选Rust,不是"所有TS项目都该改Rust",而是需求(跨语言C ABI嵌入、低开销、可预测资源占用、供应链收敛)恰好指向它。知乎
值得对号入座的:你的运行时/SDK正被多语言宿主嵌入、每个用户白背一个VM;你做服务器端多会话共享,内存密度直接=钱;你的代码库有完整E2E测试兜底——这是agent敢边迁移边发布的底气。
别抄的:普通CRUD后端没有100MB嵌入税的痛点,重写≠收益;主干没有自动化测试,“1.3个PR/天"的节奏会直接变成"1.3个事故/天”;预算里没有留人工闸门这档事——这份实录里最便宜的恰恰是token,最不能省的是那句"为什么ok"。
普通团队想试水,可以拿这个项目的比例先自查:1363亿tokens对83万行,96%命中率是成本能算得过来的前提——先把agent循环的前缀稳定性做好(长系统提示+工具定义固定、对话只追加),再谈"让AI干大活"。
最后
这次迁移真正的信号不是"AI能写多少行",而是大规模工程活第一次有了可核算的单位成本:几百万行级重写从"几年+几百万美元"的团队项目,掉到"十几万美元+三周人力"的个人项目。价格掉到可行点之后,问题就变成:你手里那套"没人敢动"的老系统,是不是下一个被搬的。
接下来值得盯的:github/copilot和dotnet博客的后续复盘(重设计红利什么时候兑现)、预发布通道现在只占npm下载量10.5%、以及迁移前后质量问题issue占比22.9%→23.7%会不会继续走高。知乎
你的项目里有没有那种"大家都知道该重写、但一直不敢立项"的模块?看完这份账本,你会先拿它开刀吗?