[控场AI]
· 8 分钟阅读· 4,365 字

每月2500个PR背后:AI编程的"米其林厨房"工作流

每月2500个PR背后:AI编程的"米其林厨房"工作流

前Meta工程师Lauren Tan分享如何用验证机制、环境约束与协调者agent,在一个月内规模化提交2500个生产PR。

本文记录了SpaceX AI工程师Lauren Tan(前Meta React团队成员)与Matt Pocock的深度对谈,核心议题是如何在一个月内向生产环境提交2500个PR。Lauren的方法论围绕三个支柱展开:第一,以"验证"为最重要技能,让agent能自我核验工作、形成真正的闭环,从而把人类从"肉身代理"角色中解放出来;第二,用类型约束、lint规则和约定式架构打磨"环境",让写出烂代码在结构上变得困难;第三,通过协调者agent连接内循环(agent写代码)与外循环(Slack/Linear等外部上下文),并用抽样审查代替逐一review实现规模化。她以"米其林厨房"而非"软件工厂"比喻这一转变,认为工程师的角色正在从亲自下厨转变为设计厨房本身。skill本质上是被物化的流程,可通过挖掘历史对话记录持续提炼和复用。

AI能写代码,但它能把活儿真正干完吗?在一场备受关注的对谈中,前Meta React团队成员、现SpaceX AI(即Cursor团队)工程师Lauren Tan(网名Potato)与Total TypeScript创始人Matt Pocock深入探讨了一个让社区炸裂的话题——如何在一个月内向生产环境提交2500个PR。这个数字在X上获得了约300万次观看,但真正的价值不在于数字本身,而在于背后那套可复用的工程方法论。

从"肉身代理"到信任阶梯

Lauren的故事始于她从Meta离职后的一段倦怠期。为了放松,她开始做副业项目,却发现自己陷入了一个怪圈:花大量时间去"微管理"单个AI agent。那是在社区痴迷于"编排"(orchestration)概念的早期阶段,人们还停留在终端里折腾自定义编排器。

加入Cursor后,她被安排优化agents窗口的性能问题。在翻看火焰图和堆快照时,她意识到自己成了瓶颈——"我是agent和Chrome DevTools之间的肉身代理(meat proxy)"。这种被困在手动操作中的挫败感,恰恰催生了她整套方法论的起点。

她提出了一个核心概念:信任阶梯(trust ladder)。随着你对agent的信任逐步提升,你能让它做越来越复杂的事,也能并行调度越来越多的agent。而攀爬这个阶梯的关键,不是写更多代码,而是构建让agent能够自我验证的环境。

信任阶梯的比喻

一个有趣的观点是,Lauren认为领域专长(domain expertise)在AI时代不是贬值,而是更加重要。当模型越来越聪明,瓶颈就从agent转移到了"你能否清晰表达意图"这件事上。"一个医生、律师,只要稍微懂点技术、会用agent,就能构建出很棒的产品——前提是他脑中有清晰的愿景,并能用agent理解的方式表达出来。"

验证:工具箱里最重要的技能

整场对谈中,Lauren反复强调一件事:验证(verification)是工具箱里最重要的技能。

她的比喻很形象——验证就是给agent"一双手和一双眼睛"。agent能够真正运行代码、像普通用户一样与之交互,还能调试、抓取trace和快照。没有验证,agent就无法形成真正的"循环"(loop)。

"人们总在谈论loop,但loop之所以成为loop,最重要的部分就是验证——因为agent能够核验自己的工作,这样就把我从等式里拿掉了。"

这让她得以实践labs常提到的"爬山法"(hill climbing):有了评分标准(rubric)和循环,agent就能持续尝试改进。她提到Andrej Karpathy发布的auto research也包含类似思路。如今,SpaceX AI团队的每个应用都有自动维护的验证skill,成了团队的关键基础设施。

确定性与非确定性的分工

Lauren还构建了一个自定义CLI来强化验证能力。这个CLI的本质是把skill中确定性的部分抽取出来编码成脚本。

她把agent的工作看作一条光谱:一端是完全依赖判断的部分(需要思考、整合多方上下文),另一端是机械的、确定性的部分(比如把代码从一种模式重构到另一种)。"你不需要让agent每次都用新颖的方式去想一遍。"

在没有CLI之前,每个agent验证工作时都会"重建整个世界",各做各的,极其低效——不仅浪费上下文,也拖慢速度。把这部分固化成CLI后,所有agent都能复用同一套工具。Matt精准地总结道:这实际上是在"向skill隐藏信息",让skill保持小巧,把复杂的确定性工作下放到脚本里。

这一思路同样适用于技术迁移——用code mod、遍历抽象语法树(AST)进行机械式代码转换,让脚本代替agent完成。

米其林厨房:比"软件工厂"更贴切的隐喻

Lauren坦言她并不喜欢"软件工厂"(software factory)这个流行词,因为"工厂"往往让人联想到与质量、工艺对立的东西。她更倾向于用米其林厨房来比喻。

这个比喻与信任阶梯完美呼应:作为"家庭厨师",你亲手切菜、备料、清洗,是独角戏;当家人越来越多涌入厨房,大多数人会被压力击垮。而一位主厨不再亲自做所有的菜,而是像厨房的"技术负责人"或"CEO"——思考何时订购食材、如何储存、何时备料。

"工程师写代码的方式正是如此:你不再亲自写代码,你有agent,但作为人类,你仍然对最终结果负责,你的名字和声誉依然挂在工作上。"于是,你如何布置厨房、设置skill、环境和代码库,就成了构建产品的"新食材"。

TypeScript与类型约束

用环境约束取代agent的记忆负担

Lauren花了大量精力在"环境"上,这与很多人"相信模型魔法、不敢改动环境"的态度截然不同。她认为新时代工程师的核心工作就是打磨环境。

两人都有TypeScript背景,Lauren特别提到她最爱的类型收窄(type narrowing)——从一个宽泛的类型,通过类型守卫和运行时检查,收窄到一个非常具体的类型。这与在代码库中设置约束异曲同工:你在收窄可能性的空间,让"做某件事只有一种方式"。

她团队内部构建了一个名为Dune的框架(类似于Electron应用的内部版Next.js),带有大量严格的lint规则和约定式模式——每个feature都放进独立目录,由registry自动发现。这样的环境"让写出烂代码变得很难",既解放了人类的心智负担,也让agent不必再去思考这些。

Grokbot的最初几个版本由8个"上帝文件"组成,每个至少上万行。Lauren正是通过观察agent如何失败,不断把问题转化为lint规则。"每次看到错误,就退一步想:如何让代码库让这个错误变得不可能?"

内循环与外循环:工厂如何自我运转

那2500个PR到底从哪来?Lauren澄清,她当然不是手动发起2500次对话。

关键在于连接内循环(inner loop)和外循环(outer loop)。内循环是她的agent工程师们在代码上工作;外循环是Slack、Linear、X、邮件等外部系统中不断涌现的上下文——bug报告、功能请求、基础设施限制等。过去她得亲自把这些信息摆渡给agent,现在Grokbot这类工具自动完成了外循环。

review环节的提问

具体运作上,她有多个Grokbot订阅各个Slack频道和消息源,一旦发现bug就转发给Cursor的"项目"(projects)功能。project本质是一个云端的协调者agent(coordinator agent),类似"参谋长"或"行政主厨"——它不亲自干活,而是委派、编排、管理子agent。当30个issue同时涌入时,协调者agent会判断最优拓扑,把任务高效分发下去。

她的管理哲学源自Netflix的"context, not control"(提供上下文,而非控制)——教会agent自给自足,而不是微管理。她始终在问自己:"我在这个流程里哪里成了瓶颈?为什么agent还需要我?"

值得一提的是,2500个PR中很大一部分是"园艺"(gardening)工作,而非新功能。她甚至设置了专门的agent持续扫描React的坑,但不急于修复,而是先追加到文档里。"有时候一个缓冲队列比直接派agent修复更有效,因为它逼你看到大局。"

从"品尝每道菜"到抽样与自主合并

面对"你怎么review这2500个PR"的质疑,Lauren的答案是:抽样,而非逐一品尝。就像质检主管不可能检查每一件产品,她每天抽查PR质量,重点不是修正单个agent,而是当发现多个agent犯同样错误、走同样捷径时,去修正环境本身。

Fuzzing验证机制

PSAC中有一个"全自动驾驶"(full autopilot)模式,会触发一个极其严格的验证循环,为每个PR生成一批验证者agent进行fuzzing——真正运行应用、模拟真人点击、寻找回归和bug,然后自我修复,直到PR达到可合并状态。这相当耗token,但可以调节(比如从10个验证者降到1个)。

正是验证加环境的组合,让她敢于让agent在她睡觉时自主合并代码。"第一天开启这个'黑灯工厂'时非常可怕,我担心会引发线上事故。但现在我睡得好多了,agent在我睡觉时合并自己的代码,我早上通过commit历史review,发现问题再去回滚或修正。"

不过她也诚实地指出局限:这高度依赖领域的可验证性。软件工程大多可验证,数学的某些部分(如形式化证明)也可以。但对于那些难以程序化验证、PR是"单向门"(会造成不可逆数据丢失)的场景——比如某些医疗、法律、金融应用——她坦言"没有答案",这是行业需要共同探索的问题。她期待未来出现更多面向agent的编程语言,并提到一个将编程与证明结合的语言Bend。

skill的本质:被物化的流程

当被问及PSAC与Matt的skill库如何结合时,两人达成共识:skill本质上就是流程,就是被转化成语言(Markdown)的过程。它们没有魔法,"如果有魔法,也只是选词、措辞和把抽象流程转化为语言时所做的思考"。

Lauren给出了一个极其实用的建议——挖掘你自己的历史对话记录:让agent翻看你过去所有的prompt、你不得不介入纠正的时刻,把这些高层学习转化为可复用的skill或lint规则。"过往的对话是上下文的宝库,因为它是物化的流程、真实的过程,而不是你脑中抽象的想法。"

她在PSAC中有个叫Re-Call的skill正是如此:把"去翻看之前所有对话、提取上下文"这个工作流压缩成一个skill,不必每次都写长篇说明。她还预测,随着模型能力提升,skill会越来越小、越来越紧凑——去年的skill充满实现细节(具体脚本命令),而如今可以删掉这些,只聚焦于工作流本身。

正如Matt所言:"每个厨师换工作时都会带上自己的刀具。"信任,归根结底是对自己工具的信任。花时间打磨它们、彻底理解它们,才能做出伟大的事。

#AI编程工作流#AI agent验证#软件工厂#Lauren Tan#Matt Pocock#Cursor agent#信任阶梯#AI代码审查
分享:

相关推荐