OpenAI Codex技术主管的AI辅助工程实践
Michael Bolin,OpenAI Codex技术主管,分享了其简单直接的AI辅助工程工作流程:编写规范、简单提示、审查代码。他通过Notion文档管理需求,利用Codex的Notion连接器自动读取上下文,将工作拆分为适当大小的PR,并让Codex自动处理合并冲突和CI监控。该方法强调代码评审质量和快速迭代。
近日,我有幸访问了OpenAI在旧金山的办公室,并与OpenAI Codex开源仓库(Codex CLI)的技术主管Michael Bolin进行了深入交流。Bolin曾是Meta的杰出工程师,创建了开源构建工具Buck,还参与过Google Calendar的开发,并撰写了《Closure: The Definitive Guide》一书。他向我详细介绍了他的AI辅助工程工作流程,其简洁性令人惊讶。他的核心方法包括三个步骤:编写规范、给出简单提示、审查代码。他不依赖复杂的工作流,而是依靠清晰思考、良好判断和快速迭代。
Bolin最近负责的项目是在Codex CLI中构建权限系统,主要面向企业用户。企业客户既需要丰富的功能,也需要对功能的使用设置权限限制,同时确保AI的行为被严格限制在允许的范围内。为此,团队还加强了沙箱功能。该项目耗时数月,规模较大。
项目启动时,Bolin在Notion文档中编写了详细的技术规范,描述所需的功能和需求。他邀请团队成员审阅并提出意见,经过多轮讨论和修改,最终确定了设计方案。进入实现阶段后,由于Codex已经支持Notion连接器,Bolin只需将Notion文档的URL粘贴到Codex中并说“我要构建这个”,Codex就能自动读取需求、评论和讨论历史。Bolin非常欣赏这一功能,因为它省去了手动复制粘贴上下文的麻烦。
Bolin首先要求Codex制定计划,将整个工作分解为若干大小合适的拉取请求(PR)。他明确表示不希望出现超过2000行的PR,因为人类仍需进行代码审查,过大的PR会严重影响审查体验。Codex最初生成了大约6个PR。团队依次进行审查、测试、解决合并冲突并持续优化。
关于合并冲突的处理,Bolin指出Codex在这方面比他更有纪律性。他创建了一套处理合并冲突的技能(即一组指令),当并行修改导致文件冲突时,他可以放心地让Codex一致地处理这些工作。
Bolin还强调了保持PR代码规模适中的重要性。他经常提醒Codex,代码需要由人类审查,因此更改应分解为可审查的大小。有时他会明确指定如何拆分,有时则询问Codex的最佳分解方式。此外,他还非常依赖引用相关的PR,因为相关PR中包含代码、讨论、评论和决策,为Codex提供这些上下文可以显著提升其理解和输出质量。他提到,过去他会拒绝他人提交的过大PR并引发争论,但现在借助AI工具,可以轻松要求Codex拆分PR,从而更好地贯彻良好的审查实践。
Bolin偏好让Codex直接创建PR(即代理式PR),而不是大多数工程师偏好的与AI协作创建PR的方式。他解释这是因为他们的CI任务需要15到20分钟才能完成,他希望尽快启动CI。此外,他们还开发了“PR保姆”或“CI保姆”技能,一旦PR创建,Codex会自动监视失败并做出反应。他经常告诉Codex不要在本地运行大部分测试,因为CI会在Mac、Linux和Windows上全面运行。这样可以避免本地机器因运行多个测试套件而消耗大量计算资源,从而影响生产力。
代理式PR使他能够同时处理多个任务,而不仅仅是一两个。Bolin的实践表明,AI辅助工程的关键在于清晰的规范、合适的PR大小、自动化CI监控以及高质量的代码审查。这一简单直接的方法,结合出色的基础技能,能够产生强大的效果。