OpenAI Codex 的效果取决于你给它的 Prompt、上下文和目标是否清楚。写任务时带上复现步骤、验证方式和约束;长任务可以用 Thread、Goal mode 和上下文压缩继续推进,/goal 不显示时先启用 features.goals。
OpenAI Codex Prompting:Prompt、Thread、Goal 指南
Prompts
你通过发送 prompts(用户消息)来告诉 Codex 要做什么。
示例 prompt:
Explain how the transform module works and how other modules use it.
Add a new command-line option `--json` that outputs JSON.
提交 prompt 后,Codex 会进入一个循环:调用模型,然后执行模型输出里要求的动作,比如读文件、改文件、调用工具。任务完成,或者你取消任务后,这个过程就结束。
和 ChatGPT 一样,Codex 能做到什么,很大程度上取决于你怎么写指令。实践里有两条很有用:
- 当 Codex 能自己验证结果时,输出质量更高。把复现步骤、功能验证步骤、lint 和 pre-commit checks 一起写进去。
- 复杂工作拆成更小的步骤,Codex 更容易测试,你也更容易审查。如果你不确定怎么拆,可以先让 Codex 提一个计划。
想看更多 prompting 思路,可以参考 workflows。
Threads
thread 是一次完整会话:你的 prompt,加上后续的模型输出和工具调用。一个 thread 可以包含多个 prompt。比如第一条让 Codex 实现功能,下一条再让它补测试。
当 Codex 正在处理任务时,这个 thread 处于“running”状态。你可以同时运行多个 threads,但不要让两个 threads 修改同一批文件。你也可以稍后继续同一个 thread,接着发 prompt 让它继续做。
Threads 可以在本地或云端运行:
- Local threads 运行在你的机器上。Codex 可以读写你的文件,也能运行命令,所以你能直接看到改了什么,并继续使用你现有的工具。为了降低工作区外的误改风险,local threads 运行在 sandbox 中。
- Cloud threads 运行在隔离的 environment 中。Codex 会克隆你的 repository,并检出它正在处理的 branch。Cloud threads 适合并行处理任务,或者从另一台设备分派任务。要在仓库里使用 cloud threads,先把代码 push 到 GitHub。你也可以从本地机器 delegate tasks,这样会带上你当前的工作状态。
在 Codex app 里,你还可以在不选择 project 的情况下直接开始 chat。这样的 chat 不绑定已保存的 repository 或 project folder,适合 research、planning、connected-tool workflows,或者其他不应该从 codebase 开始的工作。它们的工作位置是 Codex home 下由 Codex 管理的 threads 目录,默认是 ~/.codex/threads。如果要改这个状态目录的基准位置,可以设置 CODEX_HOME;参考 Config and state locations。
Context
提交 prompt 时,最好带上 Codex 能用到的上下文,比如相关文件和图片。Codex IDE extension 会自动把打开的文件列表和选中的文本范围作为上下文带进去。
Codex 工作时,还会从文件内容、工具输出,以及持续维护的“已经做了什么、还要做什么”的记录里继续收集上下文。
一个 thread 里的所有信息都必须放进模型的 context window 中,而这个窗口大小会随模型变化。Codex 会监控并报告剩余空间。对于较长任务,Codex 可能会自动 compact 上下文:把相关信息总结成摘要,并丢弃不那么相关的细节。经过多次 compact,Codex 可以在复杂任务上持续推进很多步。
Goal mode
Goal mode 会给 Codex 一个跨越长任务的持久目标。适合任务步骤很多,或者你需要 Codex 始终对照“完成标准”检查结果的时候。
当你设置 goal 后,goal 文本同时充当起始 prompt 和完成判定标准。Codex 会用它来决定下一步做什么,以及任务是否已经完成。你可以在 Codex app、IDE extension 或 CLI 里用 /goal 开启 Goal mode。
如果 /goal 没有出现在 slash command 列表里,就在 config.toml 里启用 features.goals:
[features]
goals = true
你也可以在 CLI 里运行 codex features enable goals,或者直接让 Codex 帮你执行这条命令。
在 Codex app 里,进度会显示在 composer 上方,并提供暂停、继续、编辑或清空 goal 的控制。
写 goal 时,要让 Codex 能判断自己是否成功。好的 goal 应该包含明确结果、可衡量目标,或者测试标准。例如:
Migrate this codebase from JavaScript to TypeScript. The app should compile in
strict mode without explicit `any` type definitions.
Reduce the time to interactive of the home page to below 1 second.
如果目标一开始很难定义,可以先用 /plan,让 Codex 帮你把目标整理清楚,再开始实现。你也可以让 Codex 先采访你,再起草一个带明确成功标准的 goal。
goal 开始后,你仍然可以继续引导 Codex。你可以通过后续消息调整约束,比如要求它使用某个 library,或者避免某种方案。如果你只想看状态汇总或解释,不想打断主任务,可以开 side chats。对于长时间运行的工作,建议在你即将失去连接前先 pause goal,等准备继续时再 resume 或 edit。
常见问题
OpenAI Codex 的 prompt 要怎么写才更容易成功?
把 Codex 当成需要验证的执行者来写指令,而不是只给一句抽象要求。最好写清楚复现步骤、你要它验证什么,以及需要跑哪些检查,比如 lint 或 pre-commit checks。
Codex 的 thread 可以同时开多个吗?
可以,但不要让两个 threads 同时改同一批文件。一个 thread 还可以在之后继续接着跑,补充新的 prompt。
/goal 没有显示怎么办?
先在 config.toml 里启用 features.goals:
[features]
goals = true
也可以运行 codex features enable goals,或者让 Codex 帮你执行这条命令。