Skip to content

Latest commit

 

History

History
321 lines (199 loc) · 19.2 KB

File metadata and controls

321 lines (199 loc) · 19.2 KB
title OpenAI Codex 最佳实践指南:提示工程、工具配置与安全策略
description 综合官方文档与实战经验,系统梳理 OpenAI Codex 云端智能体和 CLI 的提示工程、工具配置、AGENTS.md 分层机制、安全模型与 API 高级特性。
category AI 编程实战
head
meta
name content
keywords
OpenAI Codex,Codex CLI,codex-1,提示工程,AGENTS.md,AI编程,AI辅助开发,o3

OpenAI Codex 最佳实践指南

大家好,我是 Guide。前面聊了 Claude Code 的使用技巧,这篇来看看 OpenAI 阵营的主力编程工具——Codex

OpenAI 在 2025 年推出了 Codex 系列产品线,涵盖基于 o3 模型的云端软件工程智能体(codex-1)和开源的终端编码助手 Codex CLI。它和传统的代码补全不同,能自己读代码、跑测试、提 PR,完成从理解到交付的完整闭环。但想让它真正好用,提示工程、工具配置、安全策略这几环缺一不可。

这篇文章综合 OpenAI 官方博客、Codex CLI 开源仓库 README、官方提示工程指南等多个来源,整理成一份实践指南。通过本文你将搞懂:

  1. Codex 云端智能体和 CLI 的定位差异:各适合什么场景
  2. 提示工程的核心原则:行动优先、上下文收集、代码质量标准
  3. AGENTS.md 的分层机制:怎么组织项目级指令
  4. 安全模型的三级审批:从建议到全自动的安全边界
  5. GPT-5.3 Codex API 的高级特性:上下文压缩、Phase 机制、推理强度

一、认识 Codex:两条产品线与一个核心理念

Codex 云端智能体(codex-1)

OpenAI 发布了基于 o3 模型微调的 codex-1 云端智能体。它运行在 OpenAI 的安全沙箱中,可以读写代码、运行测试和命令行工具,甚至直接提交 Pull Request。三个核心特性:

  • 自主执行:你给出任务描述,它自行收集上下文、编写代码、运行测试,全程无需人工逐步引导
  • 安全沙箱:每个任务在独立的容器环境中运行,没有网络访问权限,防止对生产环境造成影响
  • AGENTS.md 指令机制:类似于 .cursorrulesCLAUDE.md,你可以在仓库中放置 AGENTS.md 文件来定义项目级别的编码规范和约束

Codex 云端智能体目前通过 ChatGPT Pro、Business 和 Enterprise 计划提供访问,Plus 计划也于 2025 年 6 月起陆续开放。它支持两种工作模式:交互式对话和后台任务。后台模式下,你可以同时派发多个任务,每个任务在独立容器中并行执行。

一句话区分:云端智能体适合“挂后台跑大任务”,CLI 适合“坐电脑前盯着改代码”。 两者定位不同,核心理念一致——长期自主、减少人工干预、以可交付的代码为目标。

Codex CLI:开源终端编码助手

Codex CLI 是一个完全开源的终端工具,用 Rust 编写,可以在本地机器上执行代码修改和 shell 命令。跟云端智能体的区别主要在运行环境和安全模型上:

维度 Codex 云端智能体 Codex CLI
运行环境 OpenAI 云端沙箱 本地机器
网络访问 无(隔离环境) 取决于本地权限
代码访问 GitHub 仓库集成 本地文件系统
安全模型 平台托管 三级审批模式
开源状态 闭源 完全开源(Rust)
适用计划 Pro/Business/Enterprise/Plus Plus/Pro/Business/Edu/Enterprise

拓展一下:Codex CLI 默认使用的模型是 codex-mini-latest(基于 o4-mini),面向低延迟的代码问答和编辑场景优化。而云端智能体使用的是 codex-1(基于 o3),面向需要深度推理的复杂工程任务。两者的定位差异类似“轻量级助手”和“高级工程师”的区别。

二、提示工程:让 Codex 高效工作的核心

搞清楚了 Codex 两条产品线的区别,接下来是最关键的部分——怎么写好提示词。这部分的内容同时适用于云端智能体和 CLI。

⭐️ 行动优先原则

这是 Codex 提示设计的第一原则——“行动偏向”(Action Bias)。好的提示应该引导模型直接交付可工作的代码,而不是用一堆问题结束回复。具体来说:

  • 明确告知模型“交付可工作的代码,而不仅仅是计划”
  • 模型应该默认做出合理假设并向前推进
  • 只有在真正被阻塞(缺少关键信息或存在矛盾约束)时才向用户提问

反面示例:提示中要求模型“先列出计划,等确认后再执行”。这会让模型在完成工作前就停下来等待,严重降低效率。

正面示例:提示中写明“接到任务后立即开始工作,合理假设模糊部分,完成后展示结果。如有无法自行判断的阻塞问题,再询问用户。”

工程提示:官方提示词中有一段很关键——“每次推出都应以具体编辑或明确的阻塞者加上有针对性的问题结束”。这句话直接告诉模型:不要用“我来帮你分析一下”之类的废话收尾,要么给出代码改动,要么给出阻塞原因和具体问题。

⭐️ 上下文收集策略

Codex 在开始修改代码之前,应该先充分理解代码库——这一点听起来理所当然,但实践中经常被忽略。提示中应明确要求:

  1. 批量读取:在调用工具前先想清楚需要哪些文件,然后一次性并行读取
  2. 避免串行探索:不要一个文件一个文件地逐个查看
  3. 先搜索后新增:在添加新实现之前,先搜索代码库中是否已有类似功能

这种“先规划、再并行”的策略可以显著减少往返轮次。

⭐️ 代码质量标准

Codex 的定位是“有判断力的高级工程师”。在提示中应体现以下工程标准:

  • 正确性优先于速度,避免冒险的捷径、投机性改动和拼凑式修复
  • 遵循代码库现有约定,偏离时需要说明理由
  • 不添加宽泛的 try/catch,错误必须显式传播
  • 保持类型安全,避免强制类型断言
  • 先搜索已有实现再决定是否新增

对于前端任务,还要特别注明:避免千篇一律的模板化设计,追求有辨识度的视觉表达。

常见误区:很多人在提示中写“代码要写得快、写得简洁”。但官方推荐的措辞恰恰相反——优先考虑正确性、清晰度和可靠性,而不是速度。把 Codex 当成“赶工的初级开发者”来用,效果反而不好。

对 Git 脏工作区的处理

这个细节很多人不会想到,但在多人协作或并行任务场景下特别重要——工作区可能包含其他人的未提交改动。提示中需要明确规定:

  • 永远不要恢复不是自己做的改动
  • 提交或编辑时,忽略与自己无关的变更
  • 发现意外更改时立即停下询问用户
  • 禁止使用 git reset --hard 等破坏性命令

三、工具配置:影响性能的关键环节

提示工程搞定了,接下来是工具配置。这部分的内容偏向实操,如果你的团队直接用 Codex CLI 或云端智能体,很多配置已经内置好了;但如果你通过 API 集成 Codex,这些细节会直接影响效果。

⭐️ apply_patch:最重要的编辑工具

apply_patch 是 Codex 修改代码的核心工具,OpenAI 官方强烈建议使用标准实现,因为模型就是在这种 diff 格式上训练的。有两种接入方式:

  • Responses API 内置:直接在工具列表中加入 {"type": "apply_patch"},最简单的方式
  • 自由格式工具:使用 Lark 语法定义上下文无关文法,适合需要自定义行为的场景

两种方式输出的 diff 格式相同,模型都能正确使用。官方建议优先使用 Responses API 内置方式,因为它开箱即用且与模型训练时的格式完全一致;只有需要自定义解析逻辑或扩展行为时才考虑自由格式工具。

shell_command:字符串优于数组

一个容易忽视的细节:将命令作为单个字符串传递(而非字符串数组)效果更好。同时,工具描述中应要求"始终填写工作目录,避免在命令中使用 cd",这能减少路径混淆。

并行工具调用

Codex 支持并行工具调用。通过设置 parallel_tool_calls: true,可以让模型同时发起多个工具调用,这比串行调用快不少。提示中应明确要求:

  • 能并行的调用绝不串行
  • 工作流应该是:规划需要读取的资源 → 批量并行发出 → 分析结果 → 如有新的未知需求再重复

工具响应的截断策略

当工具返回的内容过长时,建议截断到约 10k Token(可用字节数除以 4 近似估算)。截断方式为:前半段保留开头内容,后半段保留结尾内容,中间用 …N tokens truncated… 格式的省略标记连接(其中 N 为截断的 Token 数)。这样既保留了关键上下文,又不会浪费 Token 预算。

工程提示:为什么要保留头尾两部分?因为工具输出的开头通常是摘要或状态信息,结尾往往是错误信息或最终结果——这两部分对模型决策最有价值。中间的重复性内容截断后影响最小。

四、AGENTS.md:项目级指令的分层机制

提示工程搞定了,接下来是另一个高频配置项——AGENTS.md。它的作用和 Claude Code 的 CLAUDE.md 类似,都是给 AI 注入项目级的上下文和规范。

⭐️ 加载规则

Codex CLI 会自动扫描并注入 AGENTS.md 文件(也支持 .codex 等替代文件名),加载逻辑遵循分层覆盖原则:

  1. 从用户主目录 ~/.codex 开始,沿仓库根目录到当前工作目录逐层扫描
  2. 每个目录的指令独立成为一条用户消息
  3. 子目录的指令会覆盖父目录的同名配置
  4. 消息以根到叶的顺序注入对话历史

这意味着你可以实现分层配置:

层级 路径 适用范围
全局 ~/.codex/AGENTS.md 所有项目的通用默认行为(如语言偏好、通用编码风格)
项目 仓库根目录 AGENTS.md 项目级约定(如构建命令、测试规范、依赖管理)
模块 子目录 AGENTS.md 模块级特殊规则(如某个微服务的特定 API 约定)

实际示例:OpenAI 自己的 AGENTS.md

OpenAI 在 Codex CLI 的开源仓库中放置了一份真实的 AGENTS.md,内容涵盖:

  • Rust 代码风格约定(使用 #[allow(clippy::xxx)] 而非全局禁止 clippy 警告)
  • TUI 界面的样式规则(使用 ratatui 框架)
  • 测试策略(集成测试优先,单元测试为辅)
  • API 开发规范(JSON 请求/响应格式、错误处理)

这份文件本身就是 AGENTS.md 最佳实践的参考范本。

五、安全模型:从建议到全自动

安全这一环不能跳过。Codex CLI 和云端智能体的安全机制差异较大,分开来说。

⭐️ Codex CLI 的三级审批模式

Codex CLI 提供三种安全模式,对应不同级别的自动化需求:

模式 说明 适用场景
Suggest 可读取文件,但所有写操作和命令需确认 代码审查、学习
Auto Edit 自动编辑文件,但命令行操作需确认 日常开发
Full Auto 全自动,编辑和命令都自动执行 CI/CD、批量任务

在 Full Auto 模式下,Codex CLI 还提供沙箱机制来限制潜在风险:

  • macOS:使用 Apple Seatbelt(sandbox-exec)将文件系统设为只读白名单,并完全阻断出站网络
  • Linux:默认无沙箱,官方推荐使用 Docker 容器隔离,配合 iptables/ipset 防火墙脚本阻断除 OpenAI API 外的所有出站流量

拓展一下:Full Auto 模式下,Codex CLI 还会在非 Git 仓库中弹出一个警告确认,提醒你没有版本控制的安全网。这个设计细节挺贴心——在全自动模式下,Git 仓库的“可回滚性”是最后一道防线。

Codex 云端智能体的安全机制

云端智能体的安全设计更为严格:

  • 每个任务在独立的容器中运行,完全没有网络访问权限
  • 运行时间和资源消耗有明确限制

六、GPT-5.3 Codex API 的高级特性

本节内容适用于通过 Responses API 直接调用 gpt-5.3-codex 模型的开发者。Codex CLI 和云端智能体在内部封装了这些机制,用户无需手动配置。

上下文压缩

通过 Responses API 的 /compact 端点,Codex 可以压缩对话历史,使对话能够持续很多轮而不触碰上下文窗口限制。实际效果:

  • 长时间任务不会因为上下文溢出而中断
  • 超长任务链不再受典型窗口长度的限制
  • Token 消耗比逐轮累积更可控

工程提示/compact 端点是 ZDR(Zero Data Retention)兼容的,返回的是一个 encrypted_content 项。后续请求中直接传递这个压缩项即可,无需手动处理上下文摘要。这一点在官方文档中没有特别强调,但集成时必须注意。

⭐️ Phase 机制

这是个容易踩坑的地方。GPT-5.3-Codex 引入了 phase 字段来区分模型输出的不同阶段:

  • null:普通输出
  • commentary:工作中对用户的进度更新
  • final_answer:最终完成的交付

重要提示:phase 是 gpt-5.3-codex 的必需项(required),不是可选功能。如果不在历史消息中正确保留 phase 元数据,会导致显著的性能下降。此外,phase 字段只能附加在 assistant 消息上,不要添加到 user 消息中,否则会引发模型行为异常。

Preamble(进度更新)的节奏控制

Preamble 是模型在执行过程中向用户报告进度的机制。官方给出了明确的节奏建议:

  • 目标频率:每隔 1-3 个执行步骤发送一次进度更新
  • 硬性下限:至少每 6 个步骤或每 10 次工具调用必须发送一次
  • 如果模型连续执行了大量操作而没有任何进度输出,用户会失去对任务状态的感知

这意味着在提示工程中,应当明确要求模型保持合理的进度汇报节奏,避免过于频繁(变成日志式更新)或过于稀疏(让用户失去上下文)。

两种协作个性

Codex 支持切换“友好”和“务实”两种个性风格:

风格 特点 适用场景
友好模式 更像热情的结对编程伙伴,确认多、解释细 新人引导、模糊需求探索、高风险改动
务实模式 简洁直接,每个 Token 的信息密度更高 延迟敏感、用户已熟悉工作流

个性配置写在系统提示中,通过描述来引导模型的措辞风格、解释深度和热情程度。

推理强度选择

Codex 支持多级推理强度:

强度 说明 适用场景
medium 日常交互式编码推荐,在智能和速度之间取得平衡 大部分日常开发
high 较复杂的架构决策和重构任务 跨模块重构、复杂需求
xhigh 真正困难的多系统协调、复杂 bug 排查等场景 多服务联调、疑难 bug

选择合适的推理强度可以直接影响成本和响应速度。我的建议是:先用 medium 跑,遇到明显推理不足的情况再升级,不要一上来就用 xhigh。

七、常见问题与调试技巧

实际使用中,有几个高频问题值得单独拿出来说。

⭐️ 三个常见失败模式

OpenAI 官方追踪到了三个高频问题,每个都有对应的解法:

1. 过度思考

模型在执行第一次有用操作前耗时过长。解决方法是在提示中明确要求“立即开始行动”。

2. 日志式更新

模型机械地汇报状态而非自然协作。解决方法是在提示中要求“只在关键节点报告进度,避免机械式状态日志”。

3. 重复性口癖

反复使用“好发现”、“明白了”等填充词。解决方法是在提示中直接禁止这些表达。

工程提示:官方给出了一个很实用的调试技巧——“元提示”。做法是在模型的回复末尾追加反馈,要求它审视自己的指令并建议改进。生成几次回复后,取其中的共性建议,就能得到有针对性的指令优化方案。本质上就是在让模型帮你写提示词。

自定义工具的调优

对于 Web 搜索、语义搜索、MCP 等非标准工具,模型没有专门的后训练,效果会打折扣。但可以通过以下方式弥补:

  • 工具命名要精确(semantic_searchsearch 好)
  • 在提示中明确说明何时、为何、如何使用每个工具,附带正反示例
  • 让自定义工具的输出格式区别于模型已熟悉的工具输出,避免混淆

常见误区:很多人以为自定义工具只要定义好参数就行了。实际上,工具的输出格式同样关键——如果自定义工具的输出长得和 ripgrep 一模一样,模型可能会用错工具,因为它分不清两者的结果。让不同工具的输出在视觉上有明显区分,能有效减少混淆。

八、团队落地建议

最后聊几句团队层面的落地经验。

渐进式引入

建议团队按以下阶段逐步引入 Codex,不要一上来就 Full Auto:

  1. Suggest 模式试用:让开发者熟悉 Codex 的代码理解能力和建议质量
  2. Auto Edit 模式日常使用:在受控环境下逐步增加信任度
  3. Full Auto + 沙箱模式:在 CI/CD 流水线或批量任务中启用全自动

AGENTS.md 的团队协作

为团队项目建立 AGENTS.md 时,建议覆盖以下内容:

  • 项目构建和测试命令
  • 代码风格和命名约定
  • 依赖管理策略
  • Git 工作流规范
  • 常见陷阱和注意事项

成本控制

  • 合理选择推理强度(medium 能覆盖大部分日常场景)
  • 利用上下文压缩减少 Token 消耗
  • 并行任务时注意监控总资源使用量

一句话:先用 Suggest 模式建立信任,再用 Auto Edit 提效,最后才考虑 Full Auto。 AGENTS.md 在团队推广前,最好先让一两个人试跑一周,把规则调顺了再全员铺开。


参考来源