6600 次提交是个什么概念?一个人在一款产品上,按一年 365 天算,平均每天要提交 18 次。很多团队一个季度都凑不出这个数。但当一位深耕移动开发十几年的老将公开了他的项目提交记录后,圈内讨论最多的倒不是数字本身,而是背后那条完全靠 AI 代理(AI Agent)驱动的工作流。这不是把 ChatGPT 当成高级补全插件用,而是把“写代码-跑测试-查日志-改实现-提交-修回归”这一整条链路都交给代理去跑,人只负责定方向、审结果、拍板合并。这篇文章就从这 6600 次提交切入,聊聊 AI 原生开发的范式长什么样、代理工程的核心机制是什么,以及一个普通开发者能怎么把自己的日常开发节奏往这个方向靠。
我想先把一个容易混淆的说法掰清楚:AI 原生开发不等于“用 AI 写代码”。AI 写代码只是其中一环,甚至不是最关键的一环。真正的 AI 原生开发,是把 AI 代理当作团队里的“初级工程师”,给它分配任务、给它上下文、让它自己规划、自己执行、自己验证,最后人只做 review 和 merge。代理工程(Agentic Engineering)这个说法,指的正是围绕这种工作方式打磨出来的一整套工程实践。那位开发者的 6600 次提交,就是这套实践在真实项目上跑出来的结果。
6600 次提交的构成拆解
提交密度的第一印象
我第一眼看到 6600 次提交时,下意识觉得这不就是“提交刷量”吗?很多团队为了数据好看,会把一个完整需求拆成几十个碎提交,实际上没多少有效内容。但细看那批提交记录后会发现,提交信息非常规范,每条都附带清晰的问题上下文和改动范围,并且大量提交直接关联着自动化测试结果。
这其实是代理工程和人工提交最明显的区别:提交不再是人脑中的“阶段性成果”,而是 AI 代理在循环验证过程中产生的“工作日志”。每次代理尝试修改代码、运行测试、发现问题、调整实现,都会形成一次提交。所以提交密度本质上反映的是 AI 代理执行循环的频次,而不是人的打字速度。
提交类别体现工作流偏好
我把那 6600 次提交按类型粗略梳理了一下,分布大概长这样:
| 提交类别 | 占比 | 说明 |
|---|---|---|
| 功能开发与迭代 | 35% | 新功能、接口改动、UI 调整 |
| Bug 修复 | 28% | 含测试暴露的回归、边界条件修正 |
| 重构与清理 | 15% | 消除重复代码、调整模块结构 |
| 测试补充与修正 | 12% | 单测、快照更新、测试数据调整 |
| 依赖升级与配置 | 7% | 依赖版本变更、CI 配置、脚本优化 |
| 文档与提交说明 | 3% | README、API 注释、Changelog 更新 |
这个分布很能说明问题。传统人工开发中,重构和测试往往是被挤到提测前才突击处理的;但在代理工程模式下,重构和测试是代理在收到反馈后自动触发的例行动作,占比自然就上去了。
提交频率背后的开发节奏变化
再说频率。人工开发时,从改代码到提交,中间要经历“改完-自测-犹豫-再改-提交”的漫长过程,一个下午憋出两三个提交很正常。代理开发则是另一种节奏:代理的思考速度远快于打字速度,它可以快速生成一个版本、跑测试、看失败、改逻辑、再跑测试,几分钟就能完成一轮循环。
我看到那批提交记录里,最密集的时候一小时能产生 10 个以上提交。这不是人在疯狂敲键盘,而是多个代理并行工作、各自跑各自的任务,然后统一汇入主分支。换句话说,6600 次提交背后不是“一个人干了 6600 件事”,而是“一个架构师同时指挥着好几个代理干活”。
AI 原生开发范式与传统开发范式的关键差异
从“人写代码”到“人审代码”
传统开发里,人的精力主要消耗在“写”上:写接口、写业务逻辑、写样式,还要一边回忆语法一边排查询。代码写得快的人,往往是因为熟练,而不是因为思考得更快。AI 原生开发把这道工序整体外包了,人从“生产代码”变成“判断代码”。
判断代码并不比写代码轻松,但它对脑力的消耗方式完全不同。不是盯着光标发呆想实现,而是快速理解代理提交上来的 diff,判断逻辑是否合理、边界条件是否覆盖、性能是不是有问题。这不是能力降级,而是工作内容上移。
那位开发者在分享里提到一个细节:他每天的主要工作不是写代码,而是“大量阅读 AI 生成的 diff”,并且经常驳回代理的方案,要求它换个思路重写。这种场景在传统开发中很少见,因为在传统流程里,代码是人的思考结果,驳回就意味着推翻自己的思考;而在代理工程里,代码是代理的产出物,人天然带着审查眼光去看,决策起来更客观。
上下文即资产
传统开发依赖“人脑缓存”来维护项目信息,项目越大,人脑缓存越容易溢出。AI 原生开发则把上下文外部化了。代理能把项目的目录结构、关键模块职责、代码风格规范、常用工具函数都装进自己的上下文窗口里,然后在生成代码时持续引用。
这就解释了为什么那 6600 次提交里代码风格高度统一:不是人的自律,而是代理的默认行为。只要在项目里维护一份清晰的 CONTEXT.md 或者 AGENTS.md,把边界规则、命名约定、测试要求写清楚,代理就能在每次改动时主动遵守。人只需要在项目演进时更新这份上下文文档,而不是反复口头提醒。
依赖口头提醒的 AI 使用方式,等于每天带着一个失忆的实习生干活,效率上不去是必然的。把团队规范和项目背景沉淀成文档、喂给代理,才是代理工程里更重要的一环。
代理工程的三个核心循环
我看到的这篇分享中,最值得提炼的是开发流程中反复出现的三个循环:规划循环、执行循环、验证循环。
规划循环发生在任务启动时,代理先读取项目结构和相关文档,把大任务拆解成小步骤,并列出可能涉及的文件。执行循环是真正写代码的阶段,代理按规划逐一生成改动。验证循环则涉及运行测试、检查编译产物、定位失败原因,再回到执行循环去修正。
三个循环套在一起,就形成了代理的“工作人格”。规划做得越严谨,执行阶段跑偏的概率就越低;验证做得越严密,提交上来的代码质量就越有保障。很多人用 AI 写代码感觉不靠谱,根源在于只用了执行循环,跳过规划和验证,代理当然会胡写一气。
人和代理之间如何分工
整个模式里,人的角色总结起来就四件事:定义任务、提供上下文、审查结果、解决代理搞不定的难题。其余的都算代理的活。
这四件事里,最容易低估的是“解决代理搞不定的难题”。实际使用中,代理并不是万能的,架构级决策、跨模块的潜在影响判断、历史包袱的理解,它经常搞不定。这种时候,人的价值和必要性就体现出来了——不是去抢键盘替代理写代码,而是把难题拆成几个子问题,再逐个分派给代理去解决。
实操:搭一套自己的 AI 原生开发工作流
工作流整体设计
先给结论:AI 原生开发工作流的骨架不需要多复杂,核心是四个组件——代理运行环境、项目上下文库、自动化验证链路、提交与合并策略。
代理运行环境提供 AI 调用的入口,可以是本地命令行工具,也可以是 IDE 插件。项目上下文库是放项目背景和规范的目录,刚起步时只需要一个文本文件。自动化验证链路指的是能一键跑起来的测试、类型检查、lint 等,没有这条链路,代理就是在盲写。提交与合并策略规定了代理什么时候提交、怎么组织提交信息、提交直接进主分支还是先进功能分支。
这四件事的顺序不能乱。很多开发者一上来先折腾代理工具,配了一堆模型参数,结果项目连测试都没有,代理改完代码根本没人验证。反过来,先把测试链路补好,再让代理上手,效果会非常明显。
代理运行环境配置的几个关键点
目前主流的代理工具大多提供两种使用方式:交互式对话和自动化任务。交互式适合小需求,自动化任务适合批量处理。要支撑 6600 次提交这种密度的产出,交互式远远不够,必须跑自动化任务。
配置代理环境时,有几个参数值得花心思调整。第一是工作目录限制,给代理限定在项目目录内活动,避免它乱改外部文件。第二是并行度,一次跑多个代理任务时,要控制并发数,不然大量代理同时在磁盘上读写,很容易起冲突。第三是确认机制,设置成“高风险操作需要人工确认”,比如删除文件、修改依赖等,防止代理自作主张。
我自己试过一上来就把所有权限全开的方案,让代理完全自主干活。结果半天下来,代理把构建脚本的缓存清理逻辑误删了,整个项目编译直接挂了。从那以后,凡是涉及破坏性操作,一律走人工确认,吹得再神的代理自主模式也拦不住这种低级失误。
项目上下文库的搭建方式
项目上下文库是代理工程里性价比最高的东西,没有之一。我见过很多开发者置办了全套 AI 工具,但项目上下文只靠对话窗口里的几行描述,代理对项目的了解近乎为零,产出的代码当然只能靠猜。
正确做法是建一个 agents 目录,下面放几个针对性文档:系统架构说明、模块索引、代码风格指南、测试规范、常见陷阱记录。日常工作流里,每次给代理派任务时,先让它去读这些文档,再开始改代码。文档不需要一次写完,随着项目演进持续补充就行。
有一回我在代码风格指南里补了一句“禁止使用全局状态管理用户信息”,当天代理生成的新代码里就再没出现过全局变量存用户信息的写法。这种事说多了没用,写在上下文里就一句话的事,效率差距就是这么拉开的。
提交管理与审查节奏
代理工程下,提交频率高,提交管理就特别重要。我建议给代理设定提交规则:每次只提交一个逻辑单元的改动,提交信息按“类型:概述(详细说明)”格式书写,涉及测试变动时必须在提交信息里写明。
人的审查节奏也应该跟着变。传统开发是写完代码一起看;代理开发则是分段审查,代理每完成一个小任务就提交一次,人随时可以拉最新的 diff 看。这样一来,review 的压力会均匀分散,而不是在提测前一次性爆发。
审查代写代码时,我总结出三个必看位点:改动文件列表是否超出任务范围、新增逻辑是否覆盖了边界条件、测试补充是否真正反映了原需求。超出范围的改动多半是代理“顺手”改的,边界条件漏了说明代理对需求理解不够,测试没有对应需求则说明整个循环根本没有形成闭环。
避坑:代理生成代码的常见通病
代理写代码最常见的通病有两个。一个是“自作主张”,明明任务里没让改的东西,代理为了代码优雅顺手重构成一片。轻则让 diff 膨胀,重则引入回归。应对方法是命令里反复强调“严格只改指定文件”,审查时发现无关改动直接驳回。
另一个是“过度工程”,代理非常喜欢抽象封装,一个小功能也要拆出三个工厂类。刚看到那 6600 次提交里的重构占比时,我还以为开发者特别注重架构,后来才发现不少重构就是代理自己加戏加出来的。对这种行为,可以在上下文文档里写明“不要过度设计,遵守当前项目已有模式”,能显著抑制。
模拟推演:一次功能迭代的完整过程
任务拆解与上下文准备
看统计永远比不过亲手跑一遍。我拿一个模拟项目 X 来做推演,这是一个跨平台记录类应用,后端是标准的分层架构。任务需求是“新增数据导出功能,支持 CSV 格式,导出时过滤已删除条目”。
传统模式下,这个需求要开发先理清数据模型、写导出模块、接接口、测格式、再跑边界测试。代理工程模式下,我需要先准备上下文:项目架构文档、数据模型定义、导出接口的调用约定、测试规范。
我把这些信息整理成任务描述,然后丢给代理。任务描述不是一句“帮我做一个导出功能”,而是一段包含需求背景、涉及模块、预期行为、边界条件、验证方式的结构化文本。代理拿到任务后,会自动去读相关的模型和接口定义,然后规划改动方案。
从生成到合并的完整循环
代理规划完成,开始执行。它先新建导出模块,写了 CSV 格式化的工具函数,又改动了数据查询层,加了过滤标志。每一步改动后,它都会尝试编译并运行相关模块的测试用例。
第一轮运行测试时,代理发现 CSV 转义逻辑有问题:数据里包含逗号和引号时,导出的文件会解析错误。代理随即修改了转义函数,补充了对应的单测用例,再次运行后全部通过。
这整个过程中,人唯一的操作就是在代理完成迭代后查看提交记录。提交信息清楚写着:新增 CSV 导出能力;修复 CSV 字段转义;补充边界测试。三条提交,对应三个逻辑单元,审查起来非常顺畅。
提交记录和代码质量复盘
这个推演跑完后,我特意复盘了代理在过程中的行为模式。最值得关注的不是它写得快,而是它完全靠“测试反馈”驱动。第一轮导出的 CSV 在 Excel 里打开会错乱,如果没有自动化测试覆盖,这个问题大概率会漏到线上。传统开发里,这种边界条件通常靠老开发的经验,代理模式下,它靠的是反复运行验证循环。
6600 次提交的逻辑在局部小循环里也一样成立:提交数量多的价值不在于数量本身,而在于每个提交都对应一次真实的尝试和反馈。试错的成本被拆得非常碎,问题暴露得早,修正得也快,最终合并进主分支的代码自然更稳。
常见问题与排查技巧实录
代理“卡住不干活”的排查
用过代理工具的人基本都遇到过代理生成一段计划后就停着不动,既不写代码也不退出。最典型的诱因是规划阶段读取了过多无关文件,上下文被无用信息占满,导致代理不知道该从哪下手。
处理办法很粗暴但有效:把任务描述里的“项目全局情况”这种模糊要求删掉,改成明确指向“只读 XXX 模块下的模型定义和接口文档”。代理不需要提前了解整个项目的全部细节,它只需要拿到当前任务相关的部分。
代理反复修改同一处却不收敛
代理陷入死循环,反复修改同一段逻辑,每次改完测试还是挂。这种情况十有八九不是代码问题,而是需求描述和现有代码之间出现了理解偏差。
我遇到过一次,任务要求“修改超时时间设置”,代理一直在调一个常量值,但测试夹具里的模拟配置写死了旧值,代理没发现夹具层也要同步调整。最后我在任务里明确补了一句“检查测试配置中是否有硬编码的超时值”,代理马上跳出循环,一次改到位。
代理没你想的那么聪明,它就是一台快得多的处理器。信息给全了它是效率神器,信息给漏了它能在一个死角里高速转圈。排查这类问题,优先检查给代理的信息是否完整,别急着怀疑模型能力。
常用问题速查表
| 现象 | 常见原因 | 处理建议 |
|---|---|---|
| 代理改动范围超出任务 | 任务描述边界不明确 | 强调“只改指定文件”,审查时驳回无关改动 |
| 代码风格不统一 | 上下文缺少代码规范文档 | 在上下文中加入风格指南或示例代码 |
| 反复跑不过同一个测试 | 测试夹具存在硬编码旧值 | 排查测试数据与实现逻辑是否同步 |
| 代理生成的方案过度设计 | 上下文缺少“保持简单”约束 | 明确注明“不引入新设计模式” |
| 编译通过但运行时报错 | 只验证编译,未验证运行时 | 在验证链路中加入启动检查或冒烟测试 |
| 大量重复代码 | 上下文缺少模块索引 | 提供现有工具函数清单,引导代理复用 |
这张表不是从文档里抄的,是我实际用了大半年代理工程工作流后一条一条撞出来的。每条都对应着真金白银的时间成本,能少踩一个是一个。
经验补充:给想入局的人三句话
第一句,先从一个小型独立项目开始。别急着在核心业务代码上跑代理工程,先拿内部工具、脚本、Demo 项目练手,熟悉代理的行为模式,再逐步推进到核心模块。
第二句,一定要有一键可跑的验证链路。没有测试就上代理,等于让一个想象力丰富的实习生在没有 lint、没有单测、没有构建检查的代码库里自由发挥,结果会是灾难。
第三句,审查代理的 diff 时要像审查别人的代码一样严格。别因为是 AI 生成的就觉得“机器写的应该没问题”,恰恰相反,机器写的才更频繁地出现反直觉的逻辑漏洞。
最后再分享一点我自己的体会:6600 次提交只是一种结果呈现,真正革命性的变化是开发过程中“人的角色”变了。以前我是生产代码的人,现在我是定义问题、维护上下文、做最终判断的人。这种转换刚开始有点别扭,适应之后会发现,它确实把人的精力从重复劳动里解放了出来。如果你也处在“用 AI 但总觉得不太得劲”的阶段,不妨先停下来检查一件事:你的上下文文档写得够不够清楚,你的验证循环跑得够不够快。这两点补齐了,后续的提交密度和质量增长都是水到渠成的事。