1. 为什么你的 Codex 提示词总是“差一点意思”Codex CLI 这类终端里的编码助手本质上是一个“按提示词施工”的工人。你给的图纸越模糊它越容易自作主张。很多人第一次用 Codex 时习惯像跟同事聊天一样丢一句“帮我优化下这个函数”结果它要么改错文件要么把整个模块重写一遍最后你花在回滚上的时间比写代码还多。我试过把同一段需求用两种方式喂给 Codex一种是“把日期格式化函数改好一点”另一种是“重写 src/utils/date.ts 里的 formatISODate输入支持 null 和空字符串输出 ISO8601附 3 个测试用例”。前者改了三个文件还引入了新依赖后者一次通过。差别不在模型而在提示词的结构。这篇内容聚焦 Codex 提示词优化的五大实战技巧并且把它们落到一个可复用的配置骨架上用 TaoToken 统一 Key 和 API 通道完成接入把 config.toml 和 settings.json 写成模板让你在本地快速跑通“提示词优化 → 配置固化 → 验证请求”的完整流程。适合已经在用 Codex CLI、但生成结果不稳定、想用配置把技巧固定下来的开发者。下面从接入准备开始一步步给出可复制的配置和验证动作。2. TaoToken 前置准备统一 Key 与 API 通道Codex CLI 默认走 OpenAI 的接口但很多人在本地会遇到网络波动、额度分散、多个项目 Key 不统一的问题。TaoToken 的作用是提供一个统一的 API 通道和 Key 管理入口让你在 config.toml 里只维护一份 base_url 和 api_key所有 Codex 会话都走同一条链路。你需要先拿到两样东西一个可用的 API Key以及确认接入地址。访问控制台创建 Keyhttps://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcodex_prompt_config创建完成后在 API Keys 页面复制以sk-开头的密钥。接入文档在https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcodex_prompt_configAPI 基础地址统一使用https://taotoken.net/api注意这里不加 UTM 参数它是给程序调用的纯净端点。Key 拿到后不要直接写进代码仓库建议用环境变量注入config.toml 里通过env_key引用。这样你在多台机器、多个项目之间切换时只需要改环境变量配置文件本身可以进版本库。如果你还没决定用哪个模型做提示词优化实验可以先用模型对话页面快速对比不同提示词的效果https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcodex_prompt_config长期在终端里做编码和 Agent 任务的话Coding Plan 更适合按量跑https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcodex_prompt_config3. 可复制配置config.toml 骨架与 settings.json 示例Codex CLI 的配置分两层~/.codex/config.toml管模型和通道项目里的settings.json管提示词模板和默认参数。下面这份 config.toml 骨架可以直接复制把env_key指向你设置的环境变量名即可。# ~/.codex/config.toml model gpt-4o model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY wire_api chat [profiles.default] model gpt-4o model_provider taotoken approval_policy on-request sandbox_mode workspace-write [profiles.prompt-lab] model gpt-4o model_provider taotoken temperature 0.75关键参数说明wire_api chat表示走对话补全接口approval_policy on-request让 Codex 在改动文件前先问你temperature 0.75是提示词风格实验用的档位低于 0.6 输出偏死板高于 0.8 容易跑偏。环境变量这样设置export TAOTOKEN_API_KEYsk-你的密钥Windows PowerShell 用$env:TAOTOKEN_API_KEYsk-你的密钥项目根目录的settings.json用来固化提示词模板把五大技巧变成可调用的字段{ prompt_template: { goal: 用动词开头明确要改的文件和函数, context: 粘贴文件路径与关键代码片段, constraints: [camelCase 命名, if 分支必须带大括号, 单行语句不省略分号], done_when: [输出 3 个测试用例, 覆盖 null、空字符串、ISO8601] }, max_prompt_chars: 1800, step_mode: true, style_anchor: 参考项目中已有函数的命名节奏, verify_command: npm test -- date }这份 settings.json 不是 Codex 官方强制格式而是你团队内部的约定文件配合脚本在提交提示词前做校验。max_prompt_chars对应技巧二里的截断风险step_mode对应技巧三的分阶段执行verify_command对应技巧五的验证动作。4. 五大技巧落地从提示词到配置的映射4.1 四段式结构锁定需求把每次提示词拆成 Goal、Context、Constraints、Done when 四段。Goal 用动词开头Context 直接贴路径和代码Constraints 列硬性条件Done when 给可量化指标。在 settings.json 里这四段就是四个字段写提示词时逐项填缺一项就报错。Goal: 重写 src/utils/date.ts 中的 formatISODate 函数 Context: 当前实现见下方代码块输入可能是 null 或空字符串 Constraints: 使用 TypeScript函数命名 camelCaseif 分支带大括号 Done when: 输出 3 个测试用例覆盖 null、空字符串、ISO8601 时间戳4.2 精简冗余聚焦技术主干删掉“请”“麻烦”“希望你”这类前缀把复合需求拆成原子动作。settings.json 里的max_prompt_chars设成 1800超过就提示你砍掉示例代码块。实测下来提示词超过 1800 字符后Codex 对后半段约束的遵守率明显下降。4.3 复杂任务分阶段执行用 Step 1、Step 2 显式分步单次只提交一个步骤。step_mode: true时脚本会检查提示词里是否包含Step关键字没有就拒绝提交。大型重构前先让 Codex 输出变更计划确认后再执行。4.4 语气与风格精准控制在提示词开头声明语气比如“以一线产品运营口吻输出带 0.3 分调侃感”。style_anchor字段用来指向项目里已有的典型句子让模型对齐节奏。CLI 里可以用--temperature 0.75调档配置里已经写进prompt-labprofile。4.5 验证与迭代技巧三步检查法读出来、对照锚点、运行测试。verify_command字段指定验证命令Codex 改完代码后自动跑一遍。迭代时明确指出改进点比如“查询时间从 500ms 降到 100ms 以内”而不是“优化性能”。5. 验证请求确认配置生效与提示词跑通配置写完后先验证通道是否通。用 curl 发一个最小请求curl -s https://taotoken.net/api/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: gpt-4o, messages: [{role: user, content: 回复 ok}], max_tokens: 10 }返回里出现content: ok就说明 Key 和通道正常。接着在项目目录启动 Codexcodex --profile prompt-lab进入交互后用四段式模板发一条提示词观察它是否只改指定文件、是否输出测试用例。如果 Codex 改错了文件检查 Context 段是否贴了准确路径如果输出被截断检查提示词字符数是否超过 1800。验证成功后把这次有效的提示词存进 settings.json 的模板库下次直接调用。这样五大技巧就从“经验”变成了“配置”团队里每个人跑出来的结果都一致。6. 本篇常见错排查报错一401 Unauthorized。检查TAOTOKEN_API_KEY是否导出到当前 shellconfig.toml 里的env_key名称是否和实际环境变量一致。注意 base_url 不要带 UTM 参数。报错二model not found。config.toml 里model字段和model_providers下的名称要匹配wire_api用chat。如果用的是 Coding Plan 的额度确认 profile 里引用的 provider 正确。报错三提示词被截断。检查max_prompt_chars是否生效把示例代码块移到 Context 段之外或者拆成 Step 分步提交。报错四Codex 改了不该改的文件。在 Constraints 里加“只允许修改 src/utils/date.ts”并把approval_policy设为on-request改动前会先问你。报错五测试命令没跑。确认verify_command字段拼写正确且项目里有对应的 npm script。Codex 不会自动猜你的测试命令必须显式给出。排障时如果怀疑是 Key 或通道问题去 API Keys 页面重新生成一个 Key 对比测试https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcodex_prompt_config接入细节以官方文档为准https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcodex_prompt_config7. 把配置模板用起来这套 config.toml 加 settings.json 的组合核心价值是把提示词优化的五大技巧从“每次靠记忆”变成“每次靠配置”。你可以在项目里加一个 pre-commit 钩子检查提示词是否包含四段式字段、是否超过字符上限、是否带了验证命令。跑通之后Codex 的生成结果会稳定很多回滚次数明显下降。如果后面要接 Claude Code 做 Anthropic 通道的编码任务配置骨架可以复用只需要在model_providers下加一个 provider 段把 base_url 和 env_key 换成对应值。长期跑 Agent 任务的话Coding Plan 的额度管理比单次调用更省心https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcodex_prompt_config先把今天这份 config.toml 复制到~/.codex/下设好环境变量用 curl 验证一次通道再用四段式模板发一条提示词。跑通之后你就有了一个可复用的提示词优化工作流而不是每次重新摸索。
