How OpenAI uses Codex白皮书
OpenAI内部团队使用Codex提升开发效率的实践总结。文章展示了Codex在7个核心场景的应用:1)快速理解复杂代码;2)大规模重构与迁移;3)性能优化分析;4)自动生成测试用例;5)加速开发周期;6)保持工作连续性;7)探索性技术方案设计。各团队通过具体案例说明如何利用Codex处理原本耗时的手工任务,如API工程师用其分类事故堆栈,性能团队用它发现重复查询。最佳实践包括:采用"提
引言
Codex 在 OpenAI 众多技术团队中被广泛使用,包括安全、产品工程、前端、API、基础设施和性能工程团队。各团队使用 Codex 来加速各种工程任务,从理解复杂系统和重构大型代码库,到交付新功能和在紧迫截止期限下解决事故问题。基于对 OpenAI 工程师的访谈和内部使用数据,我们汇总了一些用例和最佳实践,展示了 Codex 如何帮助我们的团队提升工作效率、改善工作质量,以及管理大规模复杂性。
使用案例
使用案例 1: 代码理解
Codex 帮助我们的团队在入职、调试或调查事故时快速熟悉代码库中不熟悉的部分。团队经常使用 Codex 来定位功能的核心逻辑,绘制服务或模块之间的关系图,并追踪数据在系统中的流动。它还帮助发现架构模式或缺失的文档片段,否则需要大量手工工作才能生成。
在事故响应期间,Codex 通过展示组件之间的交互或追踪故障状态如何在系统间传播,帮助工程师快速进入新领域。
团队使用心得:
-
性能工程师,检索系统团队:"当我修复 bug 时,我使用 Ask 模式查看代码库中其他地方是否可能出现相同问题。"
-
站点可靠性工程师,API 平台团队:"当我值班时,我粘贴堆栈跟踪并询问 Codex 认证流程在哪里。它直接跳转到正确的文件,让我能快速分类处理。"
-
DevOps 工程师,基础设施服务团队:"Codex 回答我在 Terraform 和 Python 代码库中 ' 我应该在哪里做这个?' 的问题,比 grep 快得多。"
尝试使用 Codex 进行代码理解的示例提示:
-
这个代码库中的认证逻辑是在哪里实现的?
-
总结请求如何从入口点流向响应的整个服务过程。
-
哪些模块与 [插入模块名] 交互,失败是如何处理的?
使用案例 2: 重构和迁移
Codex 通常用于进行跨多个文件或包的更改。例如,当工程师更新 API、更改模式的实现方式或迁移到新的依赖项时,Codex 使得一致性地应用更改变得容易。
当相同的更新需要在数十个文件中进行,或者当更新需要对结构和依赖关系的感知而正则表达式或查找替换无法轻易捕获时,它特别有用。
团队还使用它进行代码清理,拆分过大的模块,用现代模式替换旧模式,或为更好的可测试性准备代码。
团队使用心得:
-
后端工程师,ChatGPT Web 团队:"Codex 将每个传统的 getUserById () 替换为我们的新服务模式并开启了 PR。它在几分钟内完成了原本需要几小时的工作。"
-
产品工程师,ChatGPT 企业版团队:"为了清除发布阻碍问题,我让 Codex 扫描旧模式的每个实例,在 Markdown 中总结影响,然后开启带有修复的 PR。"
尝试使用 Codex 进行重构和迁移的示例提示:
-
按关注点将此文件拆分为单独的模块,并为每个模块生成测试。
-
将所有基于回调的数据库访问转换为 async/await。
使用案例 3: 性能优化
Codex 用于识别和解决性能瓶颈。
在调优或可靠性改进工作期间,工程师提示 Codex 分析缓慢或内存密集的代码路径,如低效循环、冗余操作或昂贵的查询,并建议优化的替代方案,通常能带来效率和可靠性的显著提升。
Codex 还用于支持代码健康,通过识别仍在积极使用的风险或已弃用的模式。我们的团队依赖它来帮助减少长期技术债务并主动防止回归。
团队使用心得:
-
基础设施工程师,API 可靠性团队:"我使用 Codex 扫描重复的昂贵数据库调用。它很擅长标记热点路径并起草我之后可以调优的批量查询。"
-
平台工程师,模型服务团队:"Codex 很擅长快速发现性能问题 -- 我通过花 5 分钟编写提示节省了 30 分钟的工作。"
尝试使用 Codex 进行性能优化的示例提示:
-
优化这个循环的内存效率并解释为什么你的版本更快。
-
在这个请求处理器中找到重复的昂贵操作并建议缓存机会。
-
建议在这个函数中批处理数据库查询的更快方法。
使用案例 4: 改善测试覆盖率
Codex 帮助工程师更快地编写测试 -- 特别是在覆盖率薄弱或完全缺失的地方。
在进行 bug 修复或重构工作时,工程师经常要求 Codex 建议涵盖边缘情况或可能失败路径的测试。对于新代码,它可以基于函数签名和周围逻辑生成单元或集成测试。Codex 特别擅长识别边界条件,如空输入、最大长度或异常但有效的状态,这些在初始测试中经常被遗漏。
团队使用心得:
-
前端工程师,ChatGPT 桌面团队:"我让 Codex 在夜间处理低覆盖率模块,早上醒来就有可运行的单元测试 PR。"
-
后端工程师,支付和账单团队:"当切换单体代码库分支很痛苦时,我让 Codex 编写测试并启动 CI,同时我继续在我的分支上工作。"
尝试使用 Codex 改善测试覆盖率的示例提示:
-
为这个函数编写单元测试,包括边缘情况和失败路径。
-
为这个排序工具生成基于属性的测试。
-
扩展这个测试文件以覆盖围绕空输入和无效状态的缺失场景。
使用案例 5: 提升开发速度
Codex 通过加速开发周期的开始和结束阶段帮助团队提升效率。
在启动新功能时,工程师使用它来搭建样板代码 -- 生成文件夹、模块和 API 存根,快速获得可运行的代码,无需手动连接每一部分。
当项目接近发布时,Codex 通过处理较小但必要的任务来帮助满足紧迫的截止期限,如分类 bug、填补最后一英里的实现缺口,以及生成部署脚本、遥测钩子或配置文件。它还用于将产品反馈转化为起始代码。工程师经常粘贴用户请求或规范,让 Codex 生成一个粗略的草稿,他们可以稍后返回并完善。
团队使用心得:
-
产品工程师,ChatGPT 企业版团队:"我一整天都在开会,但仍然合并了 4 个 PR,因为 Codex 在后台工作。"
-
全栈工程师,内部工具团队:"Codex 帮助完美地交付了 3-4 个低优先级修复,这些本来会在积压工作中搁置,这非常有力量。"
尝试使用 Codex 提升开发速度的示例提示:
-
为 POST /events 搭建一个带有基本验证和日志记录的新 API 路由。
-
使用这个模板生成一个用于跟踪新入职流程成功 / 失败的遥测钩子 [插入你的遥测代码示例]。
-
基于这个规范创建存根实现:[插入规范或产品反馈]。
使用案例 6: 保持专注状态
Codex 帮助我们的工程师在日程碎片化且充满干扰时保持高效。
它用于捕获未完成的工作,将笔记转化为可工作的原型,或启动可以稍后重新访问的探索性任务。这使得在值班或有很多会议时更容易暂停和恢复工作而不丢失上下文。
团队使用心得:
-
后端工程师,ChatGPT API 团队:"如果我发现一个临时修复,我启动一个 Codex 任务而不是切换分支,当我有空时再查看其 PR。"
-
API 工程师,基础设施可观测性团队:"我经常将 Slack 线程、Datadog 跟踪、问题等转发给 Codex,这样我就可以专注于高优先级工作。"
尝试使用 Codex 保持专注状态的示例提示:
-
生成重构这个服务并将其拆分为更小模块的计划。
-
设计重试逻辑的存根并添加 TODO-- 我稍后会填入退避逻辑。
-
总结这个文件,这样我明天可以从停下的地方继续。
使用案例 7: 探索和构思
Codex 对于开放性工作也很有用,比如寻找替代解决方案或验证设计决策。你可以提示它提供解决问题的不同方式,探索不熟悉的模式,或压力测试假设。这有助于发现权衡、扩展设计选项并锐化实现选择。
它还用于识别相关 bug。给定一个已知问题或弃用方法,Codex 可以识别代码中其他地方的类似模式,使得更容易捕获回归或完成清理工作。
团队使用心得:
-
产品工程师,ChatGPT 桌面团队:"Codex 帮助我解决冷启动问题 -- 我粘贴规范和文档,它搭建代码或向我展示我遗忘的内容。"
-
性能工程师,检索系统团队:"修复 bug 后,我询问 Codex 类似 bug 可能潜伏在哪里,然后启动后续任务。"
尝试使用 Codex 进行探索和构思的示例提示:
-
如果系统是事件驱动而不是请求 / 响应,这将如何工作?
-
找到所有手动构建 SQL 字符串而不是使用我们查询构建器的模块。
-
以更函数式的风格重写这个,避免变异和副作用。
最佳实践
Codex 在给定结构、上下文和迭代空间时效果最佳。以下是 OpenAI 团队为了在日常工作中从中获得一致价值而培养的一些习惯。
-
从 Ask 模式开始 对于大型更改,首先使用 Ask 模式提示 Codex 制定实现计划,然后当你切换到 Code 模式时,该计划成为后续提示的输入。这种两步流程保持 Codex 的基础性并有助于避免输出错误。Codex 在范围明确的任务上效果最佳,这些任务需要你或队友大约一小时完成或几百行代码实现。随着模型改进,预期它能承担的任务规模会增加。
-
迭代改进 Codex 的开发环境 设置启动脚本、环境变量和互联网访问显著降低 Codex 的错误率。在运行任务时,寻找可以在 Codex 环境配置中纠正的构建错误。这可能需要几次迭代,但从长远来看会带来显著的效率提升。
-
像编写 GitHub Issue 一样构建你的提示 当提示反映你在 PR 或 issue 中描述更改的方式时,Codex 响应更好。这意味着在相关时包括文件路径、组件名称、差异和文档片段。使用 "像 [模块 X] 中的实现方式那样实现这个" 这样的模式提示会改善结果。
-
使用 Codex 任务队列作为轻量级待办事项 启动任务来捕获切题想法、部分工作或偶然修复。不必一次性生成完整的 PR。Codex 作为一个暂存区域运行良好,你可以在重新聚焦时返回。
-
使用 AGENTS.md 提供持久上下文 维护一个 AGENTS.md 文件,帮助 Codex 在跨提示时在你的代码库中更有效地操作。这些文件通常包括命名约定、业务逻辑、已知怪癖或 Codex 无法仅从代码推断的依赖关系。在文档中了解更多关于构建 AGENTS.md 文件的信息。
-
利用 "Best of N" 改善输出 Best-of-N 功能让你同时为单个任务生成多个响应,快速探索多个解决方案并选择最佳的。对于更复杂的任务,你可以查看几个迭代并结合不同响应的部分来获得更强的结果。
展望未来
Codex 仍处于研究预览阶段,但它已经在我们的构建方式上产生了真正的影响,帮助我们提升效率、编写更好的代码,并承担否则永远不会被优先考虑的工作。
我们对未来的潜力感到兴奋 -- 随着我们的模型变得更好,Codex 更深入地集成到我们的工作流程中,我们期待解锁用它开发软件的更强大方式。我们将继续分享沿途学到的经验。
更多推荐
所有评论(0)