1500 个 PR、0 人写代码:Codex 驱动的百万行级内部产品实践
AI前线·2026-03-15 14:05

文章核心观点 - 公司团队成功完成一项挑战,在五个月内开发并发布了一款完全由AI代码生成工具(Codex)编写代码的内部测试产品,实现了极高的开发效率,耗时仅为手动开发的10% [2] - 该实验的核心模式是“人类掌舵,Agent执行”,工程师的角色从编写代码转变为设计环境、定义意图和构建反馈循环,以最大化利用人类的时间与注意力 [3] - 通过构建一个完全由Agent生成、高度结构化且对Agent“可读”的代码库,并辅以严格的架构约束和自动化工具链,公司实现了工程效能的量级突破,并探索了AI编程代理(Agent)在复杂软件开发中的规模化应用前景 [6][24][40] 开发模式与效率 - 开发团队在五个月内,从一个空仓库开始,驱动Codex生成了约100万行代码,涵盖应用逻辑、基础设施、工具链、文档和内部开发组件 [6] - 一支3名工程师的团队驱动Codex开启并合并了约1500个PR,平均每位工程师每天产出3.5个PR,团队扩大到7人后人均产出率进一步提升 [6] - 整个开发过程中,人类从未直接贡献任何一行代码,形成了“拒绝人工编写代码”的核心哲学 [6] - 人类与系统的交互几乎完全通过提示词完成,工程师描述任务,运行Agent,授权其开启Pull Request,并通过Agent间的交叉评审(“拉尔夫·维格姆循环”)来推进PR合并 [9] - 随着代码产出率提升,瓶颈变为人类的QA能力,因此团队致力于增加应用UI、日志和指标对Codex的“可读性”,例如让Codex能够为每次代码变更运行应用实例,并通过Chrome DevTools Protocol复现Bug和验证修复 [12] - 单次Codex运行可持续处理一个任务超过6小时,通常是在人类休息时 [16] 工程师角色与系统设计 - 工程师的工作重心转向系统设计、脚手架搭建和杠杆效能,首要任务变为“赋能Agent开展有效工作” [8] - 采用深度优先的工作方式:将宏大目标拆解为微小构建块,驱动Agent构建,并利用已有块解锁更复杂任务,任务失败时,人类工程师会思考并补充缺失的能力 [8] - 团队将几乎所有的代码评审工作都交给了“Agent对Agent”的协作模式 [10] - 团队意识到,只有仓库本地的、版本化的工件(代码、Markdown、Schema、可执行计划)才是Agent可见的全部世界,因此致力于将所有必要的上下文(如设计决策、团队共识)推入仓库,使其对Agent“可读” [20][22] - 人类工程师的目标是让Agent能够直接从仓库本身推导并理解完整的业务领域知识 [20] 知识管理与上下文策略 - 团队放弃了“单一AGENTS.md大文件”方案,因其会导致上下文稀缺、引导过度、文档腐化和难以验证等问题 [18] - 最终策略是将AGENTS.md视为目录而非百科全书,一份简短的AGENTS.md(约100行)作为地图,指向分布在结构化docs/目录中的更深层“事实来源” [19] - 设计文档、架构文档、质量文档和执行计划都被作为一等公民进行版本化管理,使Agent能够不依赖外部上下文即可工作 [19] - 通过专门的Linter、CI任务和一个循环运行的“文档园丁”Agent来机械化地验证和维持知识库的时效性、正确性与结构合规 [20] - 这种“渐进式披露”的策略让Agent从一个微小、稳定的入口点开始,根据需要寻找信息,而不是被海量信息淹没 [20] 架构约束与自动化执行 - 为保持由Agent生成代码库的连贯性,团队通过强制执行“不变量”而非微观管理实现细节来约束Agent [24] - 围绕一套僵化的架构模型构建应用,每个业务领域被划分为一组固定的层级,拥有严格验证的依赖方向和有限的允许连接点,跨领域关注点通过明确的“提供者”接口进入 [24] - 这些架构约束通过自定义Linter(由Codex生成)和结构化测试进行机械化强制执行 [24] - 团队还通过静态检查强制执行一系列“审美不变量”,如结构化日志记录、命名规范、文件大小限制等,由于Linter是自定义的,可以编写专门的错误信息将修复指令直接注入Agent上下文 [27] - 团队明确区分需要约束的边界和允许自由表达的领域,中央强制执行边界,地方允许自主 [27] - 最终生成的代码只要正确、可维护且对未来的Agent运行可理解即达到标准,人类审美会通过评审评论、重构PR等反馈到系统中,并可能被编码进工具链 [28][29] 开发流程与自主化演进 - 随着Codex吞吐量增加,合并哲学发生改变,PR生命周期非常短,对于测试偶发失败通常通过后续运行解决,因为在一个Agent吞吐量远超人类注意力的系统中,纠错廉价而等待昂贵 [30][31] - Codex Agent生成的内容包括产品代码、测试、CI配置、内部工具、文档、设计历史、评估框架、评审评论、管理脚本乃至生产环境仪表盘定义文件 [32] - Agent能够直接使用标准开发工具,获取评审反馈、进行行内回复、推送更新,并通常会自主压缩并合并自己的PR [33] - 随着更多开发环路被编码进系统,Codex已能够端到端地驱动新特性开发,仅需一段提示词即可自主完成从验证状态、复现Bug、实现修复、验证结果、开启PR、响应反馈到合并变更的全流程 [35] - 这种高度自主化能力极度依赖于该仓库特定的结构和工具链,目前尚不能直接泛化 [35] 挑战与持续优化 - 完全的Agent自主权带来了新挑战,Codex会复制仓库中已有的模式(包括非最优模式),导致架构偏离和技术债积累 [37] - 最初团队用每周20%的时间手动清理“AI废料”,但该模式无法扩展 [38] - 解决方案是将“金科玉律”写入代码仓库,并建立周期性清理机制,通过明确的机械化规则和定期运行的Codex后台任务来扫描偏离、更新质量评分并开启重构PR,大部分修复PR可在一分钟内自动合并 [38] - 这种机制类似于“垃圾回收”,通过持续小额偿还技术债,防止其复利增长 [38] - 公司仍在探索完全由Agent生成的系统其架构在数年跨度下的连贯性演进,以及如何将人类判断力转化为可沉淀、可产生复利的规则 [40] - 当前最艰巨的挑战在于设计环境、反馈循环和控制系统,以帮助Agent大规模构建并维护复杂可靠的软件 [40]