核心内容总结:OpenAI 使用 Codex 的方式
该文件总结了 OpenAI 各个技术团队(如安全、产品工程、前端、API、基础设施和性能工程等)日常使用 Codex 的情况、具体用例以及最佳实践。Codex 旨在帮助团队提高开发速度、改善工作质量,并在大规模环境下管理复杂性。
主要应用场景 (Use Cases):
- 代码理解 (Code understanding): Codex 帮助工程师在不熟悉的代码库中快速上手,这对于新员工入职、调试或调查事件非常重要。它用于定位核心逻辑、描绘服务或模块之间的关系、追踪系统中的数据流。在事件响应期间,它可以快速揭示组件间的交互或故障状态在系统中的传播方式,并且比使用
grep等工具更快地回答“我应该在哪里做这件事?”之类的代码库问题。 - 重构和迁移 (Refactoring and migrations): Codex 常用于跨多个文件或包进行一致性更改,例如更新 API、更改模式实现或迁移到新的依赖项。当需要对数十个文件进行相同的更新,或更新需要超出正则表达式或查找替换能力所及的结构和依赖关系意识时,它特别有用。它还可以通过拆分大型模块、用现代模式替换旧模式或准备代码以提高可测试性来进行代码清理。
- 性能优化 (Performance optimization): Codex 用于识别和解决性能瓶颈。工程师提示 Codex 分析慢速或内存密集型的代码路径(如低效循环、冗余操作、昂贵查询),并建议优化方案,从而显著提高效率和可靠性。它还有助于通过识别仍在使用中的高风险或已弃用模式来减少长期技术债务。使用提示进行性能优化可以节省大量时间(例如,用 5 分钟的提示节省 30 分钟的工作时间)。
- 提高测试覆盖率 (Improving test coverage): Codex 帮助工程师更快地编写测试,尤其是在覆盖率低或完全缺失的区域。它可以根据函数签名和周围逻辑生成单元或集成测试,并建议覆盖边缘情况和潜在故障路径的测试。它对于识别空输入、最大长度或异常但有效状态等边界条件特别有帮助。
- 提高开发速度 (Increasing development velocity): Codex 通过加速开发周期的开始和结束阶段来帮助团队更快地行动。在开始新功能时,它可以搭建样板代码(生成文件夹、模块和 API 存根)。在临近发布时,它可以通过处理小型但必要的任务(如分类错误、填补实施差距、生成部署脚本或配置等)来帮助赶上最后期限。它还可以将产品反馈或用户请求转化为初稿代码。
- 保持心流状态 (Staying in flow): 当工程师日程分散且充满干扰时,Codex 帮助他们保持高效率。它可以捕获未完成的工作、将笔记转化为工作原型,或分支出探索性任务供稍后重新审视,从而更轻松地暂停和恢复工作而不丢失上下文。
- 探索和构思 (Exploration and ideation): Codex 对于开放式工作很有用,例如寻找替代解决方案或验证设计决策。它可以探索不同的问题解决方法、测试假设,并有助于揭示权衡和深化实施选择。它还可以根据已知问题或已弃用方法来识别代码库中类似模式的相关错误,便于完成清理工作。
最佳实践 (Best Practices):
Codex 在给予结构、上下文和迭代空间时表现最佳。
- 从“Ask Mode”开始: 对于大型更改,首先使用 Ask Mode 提示 Codex 制定实施计划,然后将该计划作为后续 Code Mode 提示的输入。这种两步流程有助于确保 Codex 输出的准确性。
- 迭代改进 Codex 的开发环境: 设置启动脚本、环境变量和互联网访问权限可以显著减少 Codex 的错误率。
- 将提示结构化为 GitHub Issue: 提示的内容应模拟在 PR 或 Issue 中描述更改的方式,包括文件路径、组件名称、差异和文档片段。使用“以 [模块 X] 中的相同方式实现此功能”等模式可以改善结果。
- 将 Codex 任务队列用作轻量级待办事项列表: 发送任务以捕获切线想法、部分工作或附带的修复。
- 使用 AGENTS.md 提供持久上下文: 维护一个 AGENTS.md 文件,其中包含命名约定、业务逻辑、已知怪癖或 Codex 无法单独从代码中推断出的依赖关系,以帮助其更有效地运行。
- 利用“Best of N”来改善输出: 此功能允许同时为单个任务生成多个响应,以便快速探索多种解决方案并选择最佳结果。对于更复杂的任务,可以审查多个迭代并组合不同响应的部分以获得更强的结果。
总而言之,尽管 Codex 仍处于研究预览阶段,但它已经对 OpenAI 内部的软件开发方式产生了实际影响,帮助团队更快地行动并编写出更好的代码。
这是一个根据“道、法、术”框架对 OpenAI 使用 Codex 的核心内容进行的系统性梳理。
按照“道、法、术”的层面完成内容的梳理
一、 道 (Dào): 愿景与指导哲学
“道”代表了使用 Codex 的终极目标、基本原则以及对未来发展的愿景。
核心指导原则:
- 加速工程任务 (Accelerating Engineering Tasks): Codex 被日常用于加速一系列工程任务,包括理解复杂的系统、重构大型代码库、交付新功能以及在紧迫期限内解决事件。
- 提高速度与质量 (Speed and Quality Improvement): Codex 帮助 OpenAI 团队更快地行动、提高工作质量以及管理大规模的复杂性。
- 减少技术债务和预防回归 (Reducing Technical Debt): Codex 用于支持代码健康,识别仍在使用的有风险或已弃用的模式,从而帮助减少长期技术债务并主动预防代码回归。
- 展望未来潜力 (Future Potential): 尽管 Codex 仍处于研究预览阶段,它已对软件开发产生了实际影响。随着模型的改进和更深度的集成,OpenAI 期待解锁更多强大的软件开发方式。
二、 法 (Fǎ): 主要方法与应用系统
“法”代表了实现“道”所依赖的、系统性的、主要的 Codex 应用场景和功能类别。这些涵盖了日常技术团队(如安全、产品工程、API、基础设施等)使用 Codex 的七个核心用例。
| 应用场景 (Use Case) | 核心目标与功能 | 来源 |
|---|---|---|
| 1. 代码理解 | 帮助工程师在新代码库中快速上手、调试或调查事件。用于定位核心逻辑、描绘服务或模块间的关系、追踪数据流,并能在事件响应期间快速梳理组件交互或故障传播方式。它比 grep 等工具更快地回答“我应该在哪里做这件事?”等代码库问题。 | |
| 2. 重构和迁移 | 跨多个文件或包进行一致性的修改,例如更新 API、更改模式实现或迁移到新依赖项。尤其适用于需要结构和依赖关系意识的更新,超越正则表达式的能力。也用于代码清理,如拆分大型模块、替换旧模式或提高可测试性。 | |
| 3. 性能优化 | 用于识别和解决性能瓶颈。工程师提示 Codex 分析慢速或内存密集型的代码路径(如低效循环、冗余操作、昂贵查询)并建议优化方案。通过提示进行性能优化可以节省大量时间(例如,用 5 分钟的提示节省 30 分钟的工作时间)。 | |
| 4. 提高测试覆盖率 | 更快地编写测试,特别是在覆盖率低或缺失的区域。根据函数签名和周围逻辑生成单元或集成测试,并建议覆盖边缘情况和潜在故障路径的测试。尤其有助于识别空输入、最大长度或异常但有效状态等边界条件。 | |
| 5. 提高开发速度 | 加速开发周期的开始和结束阶段。开始时,用于搭建样板代码(生成文件夹、模块、API 存根)。结束时,用于处理小型但必要的任务,如分类错误、填补实施差距、生成部署脚本或配置。它还可以将产品反馈或用户请求转化为粗略的代码初稿。 | |
| 6. 保持心流状态 | 帮助工程师在日程分散和干扰多时保持高效率。用于捕获未完成的工作、将笔记转化为工作原型,或分支出探索性任务供稍后重新审视,从而更容易暂停和恢复工作而不丢失上下文。 | |
| 7. 探索和构思 | 用于开放式工作,如寻找替代解决方案或验证设计决策。可以探索不同的问题解决方法、测试假设、揭示权衡并深化实施选择。也可以根据已知问题或已弃用方法来识别代码库中类似的模式,便于完成清理工作。 |
三、 术 (Shù): 具体技术与操作实践
“术”代表了确保 Codex 产出一致价值的、可操作的、日常习惯和最佳实践。Codex 在被给予结构、上下文和迭代空间时表现最佳。
核心技术实践:
- 从“Ask Mode”开始 (Start with Ask Mode): 对于大型的更改,首先使用 Ask Mode 提示 Codex 制定实施计划。然后将该计划作为后续 Code Mode 提示的输入。这种两步流程有助于确保 Codex 输出的准确性,并适用于需要花费约一小时或几百行代码的任务。
- 迭代改进开发环境 (Iteratively Improve Environment): 设置启动脚本、环境变量和互联网访问权限可以显著减少 Codex 的错误率。应通过运行任务来查找并纠正构建错误。
- 将提示结构化为 GitHub Issue (Structure Prompts as GitHub Issues): 提示应模仿在 PR 或 Issue 中描述更改的方式,包括文件路径、组件名称、差异和文档片段。使用模式(如“以 [模块 X] 中的相同方式实现此功能”)可以改善结果。
- 使用 Codex 任务队列作为轻量级待办事项列表 (Use Task Queue as Backlog): 发送任务来捕获切线想法、部分工作或附带的修复。Codex 可以作为暂存区,以便在重新集中精力时再返回处理。
- 使用 AGENTS.md 提供持久上下文 (Use AGENTS.md): 维护一个 AGENTS.md 文件,其中包含命名约定、业务逻辑、已知怪癖或 Codex 无法单独从代码中推断出的依赖关系,以帮助其在跨提示操作时更有效地运行。
- 利用“Best of N”来改善输出 (Leverage “Best of N”): 此功能允许同时为单个任务生成多个响应,以便快速探索多种解决方案并选择最佳结果。对于更复杂的任务,可以组合不同响应的部分以获得更强的结果。