最近工程圈有个数据很扎眼:GrokBot 核心成员 Lauren Tan 一个月能交付 2000 个 PR。很多人第一反应是“这怕不是机器人”,第二反应是“PR 也算产出?是不是把什么都拆成 PR 刷量?”我把这话放到团队群里,几个老伙计倒是很冷静:如果把依赖升级、死代码清理、机械重构都算进去,再加上 AI 工具打辅助,一个月 2000 个 PR 并不是天方夜谭,这是完全不同的工作方式。
我花了半个月去拆解这类高产出工程师的用法,核心结论是:他们不是把 AI 当成“自动写代码的魔法棒”,而是把 PR 本身当成一种可规模化的交付单元。AI 负责的是把“从想法到 PR”这条流水线的中间环节全部吃掉,人只做判断和决策。这篇就聊聊 2000 个 PR 是怎么拆出来的,AI 具体在哪些环节真正提效,以及我复刻这套流程时踩过的坑。
1. 先拆解 2000 个 PR 这个数字背后的工程逻辑
想复刻这个产出,第一件事是忘记“PR 等于新功能”这个惯性。月交付 2000 个 PR,按一个月 20 个工作日算,每天就是 100 个;按 30 个自然日算,每天也接近 67 个。这个密度不可能来自人工一个文件一个文件地写,它一定来自大批量机械任务的自动化和极细的 PR 拆分。
1.1 PR 的粒度:小步提交是产出的底座
高产出团队普遍信奉“越小越好”的 PR 哲学。一个 PR 只做一件事:升级一个依赖包、修改一个函数签名、删掉一段废弃代码、给一个类型补上可空标记。这种粒度的 PR 单独看似乎价值不大,但合在一起就是巨大的技术债清偿效率。
我在自己的仓库里做过实验:一次全量依赖升级如果揉成一个大 PR,代码评审至少需要半天,冲突解决会更痛苦。但如果按模块拆成几十个小 PR,每个 PR 的 diff 只有几十行,CI 一两分钟跑完,Reviewer 扫一眼就能通过。Lauren 这类工程师的高产出,本质上就是把大重构拆成大量原子化变更,再交给自动化流水线持续不断地产出。
这里有个关键点:小 PR 不是给 AI 用的,是给人用的。PR 越小,人的认知负载越低,AI 的介入空间也越大。因为 AI 生成代码时,任务边界越清晰,出错率越低。你让 AI“重构整个模块”,它大概率给你产出一堆无法编译的幻代码;你让 AI“把 userService 里的 HttpURLConnection 换成 OkHttp”,它完成得又快又准。
1.2 哪些 PR 是 AI 真正能接手的
不是所有 PR 都适合 AI 批量生产。我梳理了适合规模化 PR 的场景,基本落在四个象限:
机械性变更:依赖升级、Apache 许可证头更新、代码格式化、import 排序。这类任务规则明确,AI 通过率极高。
模式化重构:把一个 API 的调用方式从 Callback 改成 Promise,把 lodash 的 _.map 替换成原生 map。同一个模式在仓库里出现 500 次,就能拆成 500 个 PR。
死代码与告警清理:删除未使用的变量、标记废弃接口、修复 lint 警告。AI 可以基于编译器的诊断信息批量生成修复。
测试补充:为新增函数补单测、为公共方法生成表驱动测试。AI 不需要知道业务逻辑细节,只要把输入输出对补齐。
反过来看,涉及跨模块架构决策、数据库迁移、安全加固的 PR,人必须全程盯着。这些任务里 AI 只能做“初稿”,如果直接自动化,大概率会把线上环境搞炸。
2. AI 在 Lauren 工作流中的几个关键落点
2000 个 PR 不可能靠手写代码然后提交完成,AI 的介入点远比“写代码”要多。我根据公开的工程实践和经验推断,她的工作流大致是:AI 生成初稿,工具链做检查,人工做最终裁决。这套流水线里最值钱的四个环节,拆开来说。
2.1 代码生成:从补全到跨文件改动
早期 Copilot 类工具只能做单行补全,真正让高产出成为可能的,是可以跨文件理解上下文的 Agent 型编程工具。比如你在终端里给它一条指令:“把 packages/core 下所有文件的 fetch 替换成 axios,同时处理 .then 链和错误捕获,不改变对外导出签名”,它会自动读取整个目录,完成跨文件修改,然后生成一个完整的 commit。
这里要注意,生成只是起点,真正的功夫在指令设计。我试过给 AI 一句话任务,出来的代码 80% 不能直接用。有效的做法是仿照“验收标准”写指令:指出涉及范围、不许动的部分、必须兼容的边界。一个包含“范围 + 约束 + 验收条件”的提示词,生成的代码可复用率能翻倍。
2.2 代码审查:AI 当第一轮 Reviewer
一个 PR 从创建到合入,过去至少要等人工 Reviewer 排队。Lauren 这类高产出流程里,AI 先做第一轮 Reviewer。这有两个作用:
第一,机械问题前置拦截。比如格式问题、常见反模式、潜在的竞态条件,AI 一眼就能看出,人工没必要挨个标注。
第二,PR 合并信号分级。AI 检查通过后,再根据改动范围决定是否需要人工 Review。改动只涉及测试用例,自动合并;改动涉及核心模块,提升到资深开发者人工审。
这个流程能极大释放人工 Review 的时间。我在团队里落地后,代码评审从平均等待 12 小时降到 2 小时以内,而且质量并没有下降,因为真正需要人看的 PR 数量少了很多。
2.3 测试与修复:把最耗时的环节自动化
写代码一小时,补测试半天,修边角 bug 又半天——这是很多人的日常。AI 在高产工作流里做得很重的一件事,是自动生成测试代码并自动修复失败的用例。
具体做法是:AI 先生成针对新功能的单测;CI 跑一遍;如果失败,把 CI 日志回传给 AI,让它自己猜哪里不对;AI 修正后再跑;如果连续三轮失败,才转人工。这套闭环在处理依赖升级时尤其好用,因为很多依赖升级失败的根因是 API 用法变了,AI 看到新签名后往往能直接修好。
我实测的一个数据:一次从 Node 14 升到 Node 18 的迁移,手工修测试可能要三到四天,用这套 AI 闭环把周期压到一天半。虽然前期写提示词和调试流程花了大半天,但之后每次升级都能复用,收益是持续放大的。
3. 我用这套思路复刻的实操工作流
纸上谈兵没意思,我按照“Lauren 模式”重新设计了团队的 PR 流水线。下面这套方案不是简化的概念版,而是已经跑了一季度的实际配置。你不要指望原样照搬就能立刻产出 2000 个 PR,但基础设施一致性越高,适配成本就越低。
3.1 任务拆分模板:给 AI 一个能执行的边界
首先要规范任务描述。我设计了一个 PR 生成模板,把需求拆成固定四段:
目标范围:项目根目录下 src/modules/user 所有文件 具体变更:将接口请求库从 axios 0.27 迁移到 axios 1.6 禁止修改:保持所有导出函数名和参数签名完全一致 验收标准:所有测试通过;TypeScript 编译无错误;每个文件 diff 不超过 200 行这里的关键是“禁止修改”。AI Agent 很容易自作主张,把关联文件里看起来像旧的代码一并改了,结果一个 PR 的 diff 有一千多行。加了“禁止修改”之后,产出会老老实实地控制在你给的边界内。
有了模板,就把它接进流程里。我的做法是建立一个议题模板,每个任务填完四段后,自动触发一个工作流,把任务描述喂给 AI Agent,Agent 直接开分支、写代码、提 PR。整个过程不需要人来碰键盘。
3.2 CI 自动化的“PR 工厂”
复刻这套工作流,CI 要具备三个基础能力:可编程的检查门禁、自动依赖更新、合入策略分层。
可编程检查门禁是地基。每个 PR 至少要跑 lint、类型检查、单测、改动边界检查。改动边界检查尤其重要:如果 AI 生成 PR 动了不该动的文件,CI 会立刻挂掉。
自动依赖更新是 PR 数量的大头。我用自动化工具每天扫描依赖,把可更新的依赖按模块分组,每个分组生成一个 PR。依赖比较多时,一个月几十上百个 PR 很正常。这些 PR 完全不需要人写代码,AI 负责解决冲突和修补测试就行。
合入策略分层决定效率。安全等级高的模块:必须走人工 Review;工具类和纯前端样式文件:AI Review 通过即自动合入;依赖升级类:CI 全绿后定时自动合入。这个分层是核心,否则挤出来的时间又会被评审队列吃掉。
3.3 团队协作与 PR 描述
高产出 PR 流里,PR 描述和 Commit 信息不是可有可无的装饰,而是整个流程的“信令系统”。
每个 PR 标题我要求以类型开头:chore(deps)、refactor(user)、fix(ui)。这个前缀不是形式主义,它能让 AI Review 工具、CI 脚本、人工检视都快速识别任务性质。
PR 描述我固定成三块:变更原因、影响范围、测试方案。人工 Reviewer 只要花 30 秒读完描述就能判断要不要仔细看代码。如果不熟悉这个规范,AI 生成 PR 只会写“update code”这种没有意义的说明,时间久了整个提交历史会变成一锅粥。
我建议写一个自动生成的 PR 描述模板,把 diff 的统计信息、涉及文件列表、CI 结果全部塞进去。长期跑下来,这套模板会让追踪历史变更时省下大量时间,因为任何一次线上故障后的回溯,都像翻字典一样快。
4. 踩过坑之后,我对 AI 提效的几个保留意见
这套流程听起来很高效,但落地过程并不是一帆风顺。我聊过的很多团队卡在同一个地方:盲目追求 PR 数量,结果产出很多无人维护的垃圾变更。这里分享几个我踩过的坑和调整后的思路。
4.1 AI 代码的质量边界在哪里
第一代 AI 编程工具擅长“写得像”,不擅长“保证正确”。它们看过的代码模式很多,但遇到业务逻辑中的隐式约束时,经常给出一个看似合理、实则带 bug 的答案。
我遇到最典型的是时间处理:AI 生成代码时习惯用本地时间,而业务系统要求 UTC。这个差异在常规测试里根本发现不了,只有处理跨时区订单时才炸。这倒不是 AI 能力不行,而是我们要求的“正确性”里面包含了大量没有写进文档的上下文。
所以我对团队的约束是:AI 生成的代码必须有人看,但人看的密度可以随着经验调整。新建的业务模块:全量 Review;工程化重构:AI Review + 抽样人工;依赖升级:靠 CI 兜底,人工只看高风险依赖。
4.2 批量 PR 的噪音治理
一天几十上百个 PR 同时冒出来,团队成员会瞬间被通知淹没。这会导致一个严重问题:真正重要的代码评审被当成噪音忽略。
我试过两个办法:
第一,给 PR 设置“静默区”。自动化生成的 PR 默认不通知所有人,只在指定频道里汇总;只有被标记为需要人工干预的才触发通知。
第二,合入节奏错峰。依赖升级类 PR 统一在凌晨合入,早晨 CI 已经跑完,开发开始一天工作时看到的是稳定的主分支。人工驱动的功能 PR 集中在上午创建,下午 Review,晚上合入。
这两个调整之后,团队收到的通知量下降了很多,但关键信息的触达率反而提高了。这印证了一件事:自动化不是为了创造更多噪音,而是为了把人的注意力集中在真正需要判断的事情上。
4.3 不要为了数字牺牲工程文化
每月 2000 个 PR 是一个自然结果,不是直接追求的目标。如果团队里强行要求“每个成员每月必须交付多少 PR”,最直接的副作用就是大家开始疯狂拆分无用 PR,把一行注释改动也提成一个 PR。
我在内部复盘时发现,一旦 PR 被当作绩效指标,原本用来提高质量的手段就变成刷数据的工具。正确的导向应该是:大量可自动化的工作被机器接管,人的时间用在高价值决策上。PR 数量可以作为监控指标,但不应该变成考核指标。
所以我现在看团队健康度,更关注的是两个指标:平均每个 PR 的 diff 行数、以及 PR 从创建到合入的周期时间。这两个数据比单纯 PR 数量更能反映 AI 和人的协作质量。太小的 PR 说明拆分过度,太大的 PR 说明自动化粒度不够,两者都需要调整。
尾声:我的个人体会
复刻这套工作流之后,我最深的感受不是“AI 真快”,而是“过去我们低估了机械任务占总工作量的比例”。依赖升级、死代码清理、测试修复,这些活儿在 AI 出现之前就存在,只是每个人都有意无意地拖延。现在我每天在 PR 列表里看到大量由 Agent 自动生成的变更,终于理解了高产出工程师的真正优势不是手速,而是他们先人一步把流程基建搭好了。
如果你有带回消息的习惯,可以顺手做一个小实验:把自己最近一个月提过的 PR 分个类,看看其中有多少属于机械变更。只要这部分占比超过三分之一,这套 AI 辅助的 PR 流水线就值得你认真尝试。别急着追求 2000 这个数字,先让 50 个 PR 的交付完全自动化,跑顺之后再慢慢放大范围。