在我最开始使用 Codex 等 ai工具时,最先研究的是 Prompt。
应该怎么描述需求?要不要指定角色?要不要让模型先思考?要不要写一份很长的系统提示词?
这些问题当然都有意义,但它们很容易把注意力带到一个不太重要的地方:我们开始研究如何控制模型,却忘了先告诉模型我们在做什么。
一项真实的软件任务,通常不只是“写一个新的组件”这么简单。它可能涉及旧接口、历史数据、部署环境、测试习惯、兼容性要求,以及一些没有写进文档、但团队默认不能碰的东西。
Codex 可以很快写出一段看起来合理的代码,但它不一定知道当前项目的真实边界,也不一定知道什么结果才算完成。
所以,使用 Codex 最重要的能力我觉得应该是把任务变成一个可以被理解、执行和验收的工作。
给上下文,而不是堆 Prompt
OpenAI 当前的 Codex 指南把一个有效任务拆成了几类信息:目标、上下文、约束和完成标准。[1]
这四类信息比“请你扮演一名资深工程师”更重要。
一个简单的任务可以这样写:
目标:修复邮箱登录失败的问题。
上下文:- 后端入口位于 backend/auth/;- 错误发生在 POST /api/login;- 手机号登录目前正常;- 相关测试位于 backend/tests/auth/。
约束:- 保持现有 API 响应格式;- 不更换数据库;- 不删除或跳过现有测试;- 不修改与登录无关的页面。
完成标准:- 正确邮箱和密码可以登录;- 错误密码返回 401;- 手机号登录测试仍然通过;- 完整后端测试套件通过。这段文字没有什么复杂技巧,但它告诉了 Codex 四件关键的事情:想改变什么,当前实现是什么,哪些东西不能动,以及如何证明任务完成。(其实现在也没必要这么复杂,能力越强的模型对于这些状态的感知越强)
如果任务涉及陌生代码库,不应该一开始就要求 Codex 修改。可以先让它只读调查:
先不要修改文件。
请检查与这个问题有关的入口、配置、依赖、测试和复现步骤,并输出:
1. 已确认的事实;2. 你的假设;3. 相关文件;4. 可能原因;5. 仍然无法从代码中确定的问题;6. 建议的下一步。
可以从代码、配置或测试中确认的信息,不要询问我。Codex 最容易出错的地方,是在错误的上下文里快速写出了局部最优的方案,但是却可能没有真正解决问题。
新模型不缺少规划能力
现在的 Codex 已经可以自己阅读代码、选择工具、安排多个步骤,并根据测试结果继续推进。把每一条命令和中间动作都提前写死,反而可能限制模型寻找更好路径的能力。
更适合当前 Agent 工作流的原则是:
少写操作指令,多提供工作现场;少规定路径,多定义结果边界。
真正需要人类确认的,应该集中在任务范围、兼容性要求、外部副作用和验收标准。具体拆成几个阶段、先读哪一个文件、是否调用工具,尽量留给模型判断。
先让 Codex 研究,再生成 Goal
当任务本身还不清楚时,直接写 /goal 可能会把错误理解固定成持续目标。
因为 Goal 会成为 Codex 持续工作的目标和完成标准。如果一开始写的是“把这个模块优化一下”,模型就很难知道什么叫优化完成。
一个很实用的社区工作流是:先让 Codex 做 requirements gathering 和 research,不要急着人工填写 Goal;等它了解代码、配置和测试后,再让它生成并设置合适的 Goal。这样目标建立在项目事实和真实约束上,通常比一开始凭猜测写目标更可靠。[8]
更稳妥的方式,是先让 Codex 进入 Plan mode,调查代码并采访你:
/plan
我有一个可能不完整的需求,请先不要修改文件。
请先阅读相关代码、配置和测试,了解当前实现。然后通过提问澄清目标、范围、约束和验收标准。
要求:- 只询问真正会影响实现的问题;- 可以从代码中确认的信息不要问我;- 区分已确认事实、假设和待决定事项;- 最后生成一段可以直接用于 /goal 的 Goal;- 在我确认之前不要开始实现。等 Codex 完成调查后,可以让它整理最终目标:
确认没有问题后,让它输出一段包含 Outcome、Scope、Constraints 和 Verification 的最终目标,并执行goal(在我自己实践中,发现全让ai托管可能会走偏,还是要时不时看一下的)
大型重构或跨多个模块的项目,则可以把执行计划保存为 PLANS.md 或 ExecPlan。这样计划不再只是聊天中的一次性内容,而是一个可以随着技术决策不断更新的项目文档。[3]
官方当前文档也建议,在结果还不明确时,先让 Codex 通过提问识别约束,再把结果变成带有可验证完成标准的 Goal。[2] Goal 不需要写成完整技术设计,只要说明最终结果和判断完成的证据即可。
给模型路径自由,但保留必要边界
新模型拥有更强的自主性,并不意味着人类应该放弃边界。
真正值得保留的边界通常只有几类:不要扩大范围、不要破坏兼容性、不要通过跳过测试制造成功,不要未经确认执行数据删除或生产发布,发现现实约束冲突时暂停询问。
这些边界描述的是交付责任,而不是限制模型思考路径。具体阶段、工具和实现顺序,如果不涉及风险,就不必提前写死。
AGENTS.md 是长期上下文
如果每次都要告诉 Codex项目如何启动、测试如何运行、哪些目录不能修改,那么这些信息就不应该一直停留在聊天记录里。
它们应该进入 AGENTS.md。
AGENTS.md 适合保存仓库布局、启动和测试命令、工程约定、限制条件,以及“什么叫完成”。
它还支持按范围分层。全局默认使用 <CODEX_HOME>/AGENTS.md,默认位置是 ~/.codex;仓库根目录可以存放团队规范;子目录可以存放某个服务或模块的本地规则。[4]
当前 Codex 会从项目根目录向当前工作目录逐级发现指导文件,并按从上到下的顺序拼接。更靠近当前目录的规则出现在后面,因此通常具有更高优先级。全局范围还可以使用 AGENTS.override.md,项目和子目录同样支持 override 文件。
每个目录最多纳入一个指导文件,默认项目指导内容总上限为 32 KiB;如果规则太多,就应该拆到更具体的子目录。
推荐先使用/init 生成初始模板,生成后人工再调整。
Subagent 不是免费的加速按钮
Subagent 更像是用额外 Token 换取并行等待时间。
每个 Subagent 都会独立运行模型和工具调用,因此并行工作流通常比单 Agent 消耗更多 Token。[5]
代码探索、测试检查、日志分析和资料整理都是比较适合并行的读密集型任务(read-heavy tasks)。写密集型任务(write-heavy tasks)则要谨慎,因为多个 Agent同时修改代码会增加冲突和协调成本;范围明确的局部修改,留在主线程里通常更划算。
可以把判断标准写成一句话:
如果任务的主要成本是等待不同信息被读出来,可以考虑并行;如果任务的主要成本是协调多个修改,就先不要为了并行而并行。
官方文档还用“上下文污染”(Context pollution)描述中间输出淹没关键决策,用“上下文腐化”(Context rot)描述无关内容变多后任务表现下降。[5] Subagent 的价值之一,就是把这些噪音留在其他线程,只把总结带回主线程。
/compact 和 /fork
/compact会把早期对话压缩成摘要,释放上下文空间,同时保留关键细节。[6] 实践中,在一个里程碑完成并验证通过后再压缩,通常比在关键决策尚未确认时压缩更稳。
如果要探索两条不同的技术路线,可以使用 /fork 保留主线并创建新的聊天副本。原聊天不会被修改,分叉可以用来验证另一个方案。[6]
需要注意,/fork 复制的是聊天上下文,不是自动创建 Git 分支或 worktree。如果两个分叉都要修改代码,还需要额外的工作树隔离,否则两个会话仍然可能修改同一份文件。
Review 是另一个阶段
让 Codex检查自己刚写的代码,通常不如让它换一个角色重新检查。实现结束后可以使用 /review,或者直接发送:
请以严格 reviewer 的身份检查当前 diff,重点关注回归、边界、错误处理、权限、安全、兼容性、测试遗漏和范围外修改。只报告有具体证据的问题,并给出文件、位置、原因和验证方式。Review应该回答哪里可能出错、为什么可能出错,以及如何复现。[7]
Review没有发现问题,也只说明在当前上下文和检查范围内没有发现问题。
结语
使用 Codex最容易陷入的误区,是把注意力放在“它能不能写出能运行代码”上。更困难的问题是:它是否理解当前项目,知道哪些东西不能改,知道什么结果才算完成,并且会验证自己的修改。
真正用好 Codex方法并不是一套神奇 Prompt。我们应该 先给上下文,再定义结果;让模型自由选择路径,但保留范围、权限和外部副作用的边界;用测试、真实冒烟和 Review验收;把长期经验沉淀进 AGENTS.md 和 Skill,并且只在并行真正减少等待时使用 Subagent。
Codex可以替你写代码,但只有在你把工作现场和完成标准说清楚之后,它才有机会真正替你完成一项工作。
参考资料
本文资料核验于 2026 年 8 月 2 日。
[1] OpenAI,Codex Best practices:https://learn.chatgpt.com/guides/best-practices
[2] OpenAI,Long-running work:https://learn.chatgpt.com/docs/long-running-work
[3] OpenAI Cookbook,Codex Execution Plans:https://developers.openai.com/cookbook/articles/codex_exec_plans
[4] OpenAI,Custom instructions with AGENTS.md:https://learn.chatgpt.com/docs/agent-configuration/agents-md
[5] OpenAI,Subagents:https://learn.chatgpt.com/docs/agent-configuration/subagents
[6] OpenAI,Slash commands:https://learn.chatgpt.com/docs/reference/slash-commands
[7] OpenAI,Code review:https://learn.chatgpt.com/docs/code-review?surface=app
[8] reach_vb,Codex tip:https://x.com/reach_vb/status/2076813989598662816