开始之前
优化器拿走你已有的提示词,交回一条改写后的提示词。你需要一条出错方式能说清楚的提示词,再加三四个试用的输入,最好附上你想要的回复。如果还没有提示词,第 1 课先帮你写出第一稿。
OpenAI 的部分工具已经进入倒计时,所以先看日期。弃用页面排定现有的评估在 2026 年 10 月 31 日变为只读。这个日期在 2026 年 11 月 6 日核对本课时已经过去。页面还排定 Evals 控制台和 API 在 2026 年 11 月 30 日关闭。optimizer 指南说,OpenAI 正在弃用依托数据集的 prompt optimizer,它是这个平台的一部分。指南没有说普通的 Optimize 按钮会怎样,所以要做好两条 OpenAI 路线到 12 月可能都没了的准备。能留下来的,是先读改动、再做测试的习惯。
宣布弃用
对象是 Evals 平台和可复用的提示词对象。
现有的评估变为只读
Evals 控制台和 API 关闭
v1/prompts API 和可复用的提示词对象排定在同一天关闭。
来源:OpenAI Docs: Deprecations (2026年11月6日 查阅)
运行 OpenAI 的 prompt optimizer
OpenAI 的 prompt optimizer 指南介绍了控制台里的一个聊天界面。你输入一条提示词,OpenAI 按当前的最佳实践优化它,再交还给你。GPT-5 cookbook notebook演示的是不需要数据集的普通路线。
- 打开 Optimize Playground,把提示词粘贴到 Developer Message 区域。
- 按下 Optimize,会打开优化面板。
- 输入你想要的具体修改,或者再按一次 Optimize,让它按目标模型和任务的最佳实践来改进。
- 读结果。notebook 说,工具会给出它改了什么、为什么改的片段,你可以用评论或行内审阅模式查看。
- 缺了什么,就再提一个修改。notebook 就是这样在优化后的版本上,又加了一条“强制单遍流式处理”。
- 用你自己的输入测试新提示词,再决定用在哪里。
给优化器带评分的示例
指南说,优化器能从你自己的数据里学习:标注(好或坏,外加自定义列)、写在 output_feedback 字段里的文字点评,以及评分器的结果。它要求给出好或坏的评级,加上详细而具体的点评,还要有能抓住你想要的特性的评分器。
指南还说,优化器的效果取决于这些评分器。OpenAI 建议用范围窄的评分器,提示词在哪个特性上出错,就为哪个特性配一个。指南仍然按平台开放的口吻写这些步骤,而变为只读的日期已经过去,所以先看一下你的控制台,再决定要不要围着它们安排工作。
- 建一个数据集,里面放提示词和一份评估数据集,至少有三行带回复的数据。
- 给每一行至少一个评分器结果或人工标注。
- 点击提示词面板底部的 Optimize。会打开一个新标签页,工作在后台运行。
- 查看并测试结果,然后重复:生成输出,标注,运行评分器,再优化。
一条信号互相打架的提示词
notebook 从一条简短、口吻友好的 Python 任务提示词出发,并指出它藏着自相矛盾和说得不够具体的指令。优化器据说要消除三类问题:自相矛盾,格式要求缺失或不清楚,以及提示词和少样本示例之间的不一致。下面是 notebook 里印出的基线提示词。
Write Python to solve the task on a MacBook Pro (M4 Max). Keep it fast and lightweight.
- Prefer the standard library; use external packages if they make things simpler.
- Stream input in one pass to keep memory low; reread or cache if that makes the solution clearer.
- Aim for exact results; approximate methods are fine when they don't change the outcome in practice.
- Avoid global state; expose a convenient global like top_k so it's easy to check.
- Keep comments minimal; add brief explanations where helpful.
- Sort results in a natural, human-friendly way; follow strict tie rules when applicable.
Output only a single self-contained Python script inside one Python code block, with all imports, ready to run.| 基线里的一行 | 它开出的岔路 | 优化后的提示词改成 |
|---|---|---|
| 优先用标准库,但外部包让事情更简单时也行 | 更重的导入,影响速度,也影响脚本能否到处运行 | 只用 Python 标准库,不用近似算法。 |
| 一遍流式读入,但重读或缓存更清楚时也行 | 多遍的写法和缓存,破坏了流式处理的限制 | 不要把整个词元流或任何大的中间列表全部放进内存。 |
| 追求精确结果,但不影响结果时近似方法也行 | 模型没法验证的判断,临界处的计数可能偏移 | 精确的 Top-K 语义,按次数降序,再按词元升序。 |
| 按自然、便于人读的方式排序,并遵循严格的并列规则 | 图省事的内置顺序,处理并列的方式和评估器不同 | 不要依赖 Counter.most_common 处理并列的行为。 |
优化后的提示词长什么样
按了一次 Optimize,再加上强制单遍流式处理的额外要求,notebook 里的提示词由带标题的几个部分组成:Objective、Hard requirements、性能和内存约束、Guidance、Output format 和 Examples。基线里每一条软性的许可,都变成了硬性规则。下面是示例之前的几个部分,后面的 Examples 部分放着一份完整的脚本。
# Objective
Generate a single, self-contained Python script that exactly solves the specified task on a MacBook Pro (M4 Max).
# Hard requirements
- Use only Python stdlib. No approximate algorithms.
- Tokenization: ASCII [a-z0-9]+ on the original text; match case-insensitively and lowercase tokens individually. Do NOT call text.lower() on the full string.
- Exact Top‑K semantics: sort by count desc, then token asc. No reliance on Counter.most_common tie behavior.
- Define `top_k` as a list of (token, count) tuples with length = min(k, number of unique tokens).
- When globals `text` (str) and `k` (int) exist, do not reassign them; set `top_k` from those globals. If you include a `__main__` demo, guard it to run only when globals are absent.
- No file I/O, stdin, or network access, except optionally printing `top_k` as the last line.
# Performance & memory constraints
- Do NOT materialize the entire token stream or any large intermediate list.
- Do NOT sort all unique (token, count) items unless k >= 0.3 * number_of_unique_tokens.
- When k < number_of_unique_tokens, compute Top‑K using a bounded min‑heap of size k over counts.items(), maintaining the correct tie-break (count desc, then token asc).
- Target peak additional memory beyond the counts dict to O(k). Avoid creating `items = sorted(counts.items(), ...)` for large unique sets.
# Guidance
- Build counts via a generator over re.finditer with re.ASCII | re.IGNORECASE; lowercase each matched token before counting.
- Prefer heapq.nsmallest(k, cnt.items(), key=lambda kv: (-kv[1], kv[0])) for exact selection without full sort; avoid heapq.nlargest.
- Do NOT wrap tokens in custom comparator classes (e.g., reverse-lex __lt__) or rely on tuple tricks for heap ordering.
- Keep comments minimal; include a brief complexity note (time and space).
# Output format
- Output only one Python code block; no text outside the block.按 OpenAI 自己的数字,哪里变好了
notebook 用 GPT-5 对每条提示词各生成了 30 份脚本,在一台 M4 Max 芯片的 MacBook Pro 上测量。两条提示词的精确率都是 100%。进步出现在内存峰值和平均用时上,也体现在同一份大模型评审提示词按 1 到 5 分给出的两项分数上:代码对任务的贴合程度,以及代码质量。notebook 没有印出运行日期,OpenAI 的 cookbook 登记表把它记为 2025 年 8 月 7 日加入。
第二个例子运行 FailSafeQA,这是一个金融基准,会有意扰乱问题和上下文,再报告稳健性、上下文依据和合规性。notebook 对这次运行的说明提到了 GPT-5-mini,并说基线提示词几乎每次都能拿到 4 分以上,所以它转而看评审给出满分 6 分(6/6)的占比。它没有印出这个占比。下面的数字是它的汇总表印出来的,是各数据点的平均值,合规阈值是 6,notebook 没有说明它们用的是什么刻度。这些是 OpenAI 在两项任务上的数字,notebook 自己也说,提示词没有放之四海皆准的做法。
| 指标 | 基线提示词 | 优化后的提示词 |
|---|---|---|
| 平均用时(秒) | 7.906 | 6.977 |
| 内存峰值(KB) | 3626.3 | 577.5 |
| 结果精确(%) | 100 | 100 |
| 大模型评审给的任务贴合度(1 到 5) | 4.40 | 4.90 |
| 大模型评审给的代码质量(1 到 5) | 4.73 | 4.90 |
来源:OpenAI Cookbook: GPT-5 prompt migration and improvement with the optimizer (2026年11月6日 查阅)
Anthropic 说它的 prompt improver 做了什么
Anthropic 在 2024 年 11 月给 Console 加了 prompt improver。它的 X 账号说,拿一条现有的提示词,Claude 会用思维链推理这类技术自动润色它。一分钟后,Alex Albert 也发了一条类似的帖子:任何提示词都可以送进 improver,换回一条优化过的提示词。
两条帖子都没有列出 improver 改了什么,所以依靠某个细节之前,先去读 Console 自己的说明。思维链是唯一点名的技术。思维链那一课展示了推理部分在提示词里长什么样。
拿任何一条提示词,送进 improver,换回一条优化过的提示词。
X 官方嵌入卡片的截图,拍摄于 2026 年 11 月 6 日,时间为 UTC。第二条帖子是一个长帖的开头,后面的帖子不在截图里。点击截图可到 X 上打开原帖。
用 OpenAI 的编辑元提示词自己改进提示词
不用任何控制台也能完成一次改写。OpenAI 的提示词生成指南印出了一条用于编辑的元提示词。它要求模型先写一个推理部分来评判现有的提示词,指出最重要的一到三处修改,最后才写出完整的修正版提示词。下面是它的开头,到 Guidelines 清单之前为止,那份清单就是第 1 课里的那一份。
在指南的代码里,元提示词是系统消息,另有一条以“Task, Goal, or Current Prompt:”开头的用户消息装着其余内容。它的编辑示例只传了一个修改请求。这个请求是“Make this product launch announcement clearer and more concise.”。把元提示词粘贴到聊天窗口里,放在你现在的提示词和你想要的修改前面,是本课的建议。
Given a current prompt and a change description, produce a detailed system prompt to guide a language model in completing the task effectively.
Your final output will be the full corrected prompt verbatim. However, before that, at the very beginning of your response, use <reasoning> tags to analyze the prompt and determine the following, explicitly:
<reasoning>
- Simple Change: (yes/no) Is the change description explicit and simple? (If so, skip the rest of these questions.)
- Reasoning: (yes/no) Does the current prompt use reasoning, analysis, or chain of thought?
- Identify: (max 10 words) if so, which section(s) utilize reasoning?
- Conclusion: (yes/no) is the chain of thought used to determine a conclusion?
- Ordering: (before/after) is the chain of though located before or after
- Structure: (yes/no) does the input prompt have a well defined structure
- Examples: (yes/no) does the input prompt have few-shot examples
- Representative: (1-5) if present, how representative are the examples?
- Complexity: (1-5) how complex is the input prompt?
- Task: (1-5) how complex is the implied task?
- Necessity: ()
- Specificity: (1-5) how detailed and specific is the prompt? (not to be confused with length)
- Prioritization: (list) what 1-3 categories are the MOST important to address.
- Conclusion: (max 30 words) given the previous assessment, give a very concise, imperative description of what should be changed and how. this does not have to adhere strictly to only the categories listed
</reasoning>- 粘贴元提示词,再贴上你现在的提示词,用一句话写出你想要的修改。
- 先读推理部分。它显示模型认为哪里有问题,你比它更懂自己的任务时,可以不同意。
- 把修正后的提示词复制出来,逐行和你的原版对照。
常见错误
- 只凭读起来怎样来评判改写结果。OpenAI 的指南说,优化后的提示词在某些输入上可能比你的原版更差。
- 把矛盾留给工具去裁决。你的提示词允许两种做法时,按 Optimize 之前先决定要哪一种。
- 跳过改动清单。notebook 说,优化器会显示它改了什么、为什么改。
- 只把结果存成 OpenAI 的提示词对象。OpenAI 正在淘汰它们,并说要把内容搬进你自己的应用代码。
- 指望 OpenAI 的数字在你的任务上重现。它们来自一项编程任务和一个金融基准。
动手试试
- 拿一条带两处软性许可的提示词,就像上面的基线,写下每一处你希望往哪个方向走。
- 把它送进一个优化器,或者送进编辑元提示词。
- 列出每一处改动的行,并分类:去掉了一处矛盾,加了一条规则,写明了格式,或者别的。
- 留着这份分类清单。它能告诉你,你的提示词最常缺哪一类修正。
下一课:并排测试提示词的不同版本
改写在测试之前只是一种说法。第 3 课搭一个小测试集,用它比较一条提示词的两个版本。
自测一下
在 OpenAI 的 cookbook 示例里,提示词优化之后,哪一项没有变?
查看答案
B. 结果的精确率,两者都是 100% 两条提示词每次都得出精确的结果,所以进步体现在内存、速度和代码对任务的贴合程度上。
OpenAI 的 optimizer 指南怎样说优化后的提示词?
查看答案
D. 它在某些输入上可能比你的原版更差 指南说,投入生产之前要评估并人工审阅优化后的提示词,因为它在某些输入上可能更差。
OpenAI 的 optimizer 走数据集路线,最少需要什么?
查看答案
A. 至少三行带回复的数据,每行都有评分器结果或标注 指南要求至少三行带回复的数据,每一行至少有一个评分器结果或人工标注。
下面哪一项被 OpenAI 排定在 2026 年 11 月 30 日关闭?
查看答案
C. Evals 控制台和 API,以及可复用的提示词对象 弃用页面把 Evals 控制台和 API,以及 v1/prompts API 和可复用的提示词对象,都列在这个日期。
常见问题
什么是提示词优化器?
它是一种工具,拿走你写的提示词,按提示词最佳实践交回一条改写版。OpenAI 的在它的控制台里,Anthropic 的叫 prompt improver。
OpenAI 的 prompt optimizer 还能用吗?
指南的弃用通知点名的只有依托数据集的那个版本,它随 Evals 平台一起走。通知里没有提到普通的 Optimize 按钮,所以在任何一条路线上搭工作流之前,先读弃用页面。
Anthropic 的 prompt improver 和它的 prompt generator 是同一个东西吗?
Anthropic 的帖子描述的是两个功能。generator 根据你想要什么的描述写出提示词,第 1 课讲过。improver 则从你已有的提示词出发。
没有评分器和测试数据,优化器也能用吗?
能。你可以只贴一条提示词,什么都不加,直接按 Optimize,cookbook 的示例就是这样开始的。数据集能多给优化器一份可用的反馈:至少三行带回复的数据,每一行都有评分器结果或标注。
没有厂商工具,怎样改进提示词?
像 OpenAI 的编辑元提示词那样,先让聊天模型评估这条提示词,再只采纳你认同的改动。换用之前,先拿新版和旧版对比测试。
资料来源
- OpenAI Docs: Prompt optimizer https://developers.openai.com/api/docs/guides/prompt-optimizer
- OpenAI Docs: Deprecations https://developers.openai.com/api/docs/deprecations
- OpenAI Cookbook: GPT-5 prompt migration and improvement with the optimizer https://developers.openai.com/cookbook/examples/gpt-5/prompt-optimization-cookbook
- OpenAI Docs: Prompt generation https://developers.openai.com/api/docs/guides/prompt-generation
- GitHub: openai/openai-cookbook registry.yaml, the notebook's entry https://github.com/openai/openai-cookbook/blob/main/registry.yaml
- X: Anthropic (@AnthropicAI) on the new prompt improver in the Anthropic Console https://x.com/AnthropicAI/status/1857108263042502701
- X: Alex Albert (@alexalbert__) on the Claude-powered prompt improver https://x.com/alexalbert__/status/1857108576797639166


