Prompts
你通过发送 prompts 与 Codex 交互。Prompt 是描述你希望 Codex 完成什么的 user message。
示例 prompts:
Explain how the transform module works and how other modules use it. Add a new command-line option `--json` that outputs JSON. 当你提交 prompt 后,Codex 会以循环方式工作:它调用 model,然后执行 model output 指示的动作,例如读取文件、编辑文件和调用工具。这个过程会在任务完成或你取消任务时结束。
与 ChatGPT 一样,Codex 的效果取决于你给出的 instructions。下面是一些我们认为有帮助的 Codex prompting 建议:
当 Codex 能够验证自己的工作时,输出质量会更高。请包含复现问题、验证功能、运行 linting 和 pre-commit checks 的步骤。
当你把复杂工作拆成更小、更聚焦的步骤时,Codex 更容易处理。较小的任务更容易让 Codex 测试,也更容易让你 review。如果不确定如何拆分任务,可以让 Codex 提出计划。
想获得更多关于 Codex prompting 的思路,请参考 workflows 。
Threads
Thread 是一次单独的 session:包括你的 prompt,以及随后产生的 model outputs 和 tool calls。一个 thread 可以包含多个 prompts。例如,第一个 prompt 可以要求 Codex 实现一个功能,后续 prompt 可以要求它添加 tests。
当 Codex 正在主动处理某个 thread 时,这个 thread 会被称为 “running”。你可以同时运行多个 threads,但应避免让两个 threads 修改同一批文件。你也可以稍后通过追加另一个 prompt 来继续一个 thread。
Threads 可以在本地运行,也可以在 cloud 中运行:
Local threads 在你的机器上运行。Codex 可以读取和编辑你的文件,也可以运行 commands,因此你能看到发生了什么变化,并使用现有工具。为了降低 workspace 外发生非预期更改的风险,local threads 会在 sandbox 中运行。
Cloud threads 在隔离环境中运行。Codex 会 clone 你的 repository,并 checkout 它正在处理的 branch。当你希望并行运行工作,或从另一台设备委派任务时,cloud threads 很有用。要让 cloud threads 使用你的 repo,请先把代码 push 到 GitHub。你也可以从本地机器 delegate tasks,这会包含你当前的 working state。
在 Codex app 中,你也可以在不选择 project 的情况下开始 chat。Chats 不绑定到已保存的 repository 或 project folder。它们适用于 research、planning、connected-tool workflows,或其他不应从 codebase 开始的工作。Chats 会使用 Codex home 下由 Codex 管理的 threads directory 作为 working location。默认情况下,该位置是 ~/.codex/threads。要更改这个 state 的基础位置,请设置 CODEX_HOME;参见 Config and state locations 。
Context
提交 prompt 时,请包含 Codex 可以使用的 context,例如对相关文件和图片的引用。Codex IDE extension 会自动把打开文件列表和所选文本范围作为 context 包含进去。
当 agent 工作时,它还会从 file contents、tool output,以及一份持续记录已完成工作和待办事项的记录中收集 context。
Thread 中的所有信息都必须放进 model 的 context window,而 context window 会因 model 而异。Codex 会监控并报告剩余空间。对于更长的任务,Codex 可能会自动 compact context:总结相关信息,并丢弃较不相关的细节。经过多次 compaction 后,Codex 也可以在许多步骤中继续处理复杂任务。
Goal mode
Goal mode 会给 Codex 一个可跨越较长任务持续推进的 persistent objective。当工作可能需要很多步骤,或者 Codex 需要一个可以在工作过程中反复检查的明确完成定义时,请使用它。
设置 goal 后,goal text 既是起始 prompt,也是 completion criteria。Codex 会用它决定下一步该做什么,以及任务是否已经完成。可以在 Codex app 、 IDE extension 或 CLI 中使用 /goal 启动 Goal mode。
如果 slash command list 中没有出现 /goal,请在 config.toml 中启用 features.goals:
[features] goals = true 你也可以从 CLI 运行 codex features enable goals,或者让 Codex 帮你运行它。在 Codex app 中,progress 会显示在 composer 上方,并提供 pause、resume、edit 或 clear goal 的控件。
编写 goals 时,要让 Codex 能判断自己是否已经成功。好的 goals 会包含具体结果、可衡量目标或 test criteria。例如:
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. 如果 goal 很难一开始就定义清楚,可以先从 /plan 开始,请 Codex 在 implementation 前帮你塑形。你也可以让 Codex 访谈你,并起草一个带有清晰 success criteria 的 goal。
Goal 启动后,你仍然可以继续 steering Codex。发送 follow-up messages 来调整约束,例如要求 Codex 使用某个特定 library,或避免某种 approach。当你想获得状态 recap 或解释、但不想打断主任务时,可以使用 side chats。对于 long-running work,请在失去连接前 pause goal,等准备好继续时再 resume 或 edit。