OpenAI 提示词对象 11 月 30 日停用:保留 pmpt_ ID,补齐版本
目录
OpenAI 将于 2026 年 11 月 30 日停用可复用提示词对象和 v1/prompts API,同日关闭 Evals 控制台和 API。OpenAI 只说这些对象“计划停用”,没有说明之后携带 prompt={"id": "pmpt_..."} 的 Responses API 请求会返回什么,因此必须提前把提示词文本迁走。我们在 Synthorai 提示词库中用原来的 pmpt_ ID 重建了提示词,再把 OpenAI SDK 调用指向 Synthorai 网关。这个网关是应用与模型供应商之间的 API 代理。只修改 base URL 和密钥后,请求指定版本 "2" 时使用库中的版本 2,不指定版本时则使用生产版本。
TL;DR
- OpenAI 的提示词对象和
v1/promptsAPI 将于 2026 年 11 月 30 日停用;OpenAI Evals 将于 10 月 31 日转为只读。 - 携带
prompt={"id": "pmpt_...", "version": "2"}的 Responses 调用由 Synthorai 提示词库中同一 ID 的版本 2 处理;只改了 base URL。 - 在持续流量下,移动提示词库的生产标签后,线上调用在 8 到 9 秒内开始使用新版本。
- 提前确定的测试方案发现,一次修改导致 16% 的回答违反规则;此前一轮 40 条数据的测试却全部通过。
本文概述了提示词库系列的三篇指南。下面每节分别总结一篇指南,列出实测数据,并附上原文链接,代码和控制台截图都在对应指南中。所有测试均在 2026 年 10 月 19 日和 20 日完成,代码位于 github.com/synthorai-io/use-cases 的 prompt-library/ 目录。
OpenAI 要停用什么,什么时候停用?
OpenAI 的弃用公告列出了两项同日关闭的服务:
| 服务 | 公告日期 | 变化 | 关闭日期 |
|---|---|---|---|
可复用提示词:提示词对象和 v1/prompts API | 2026 年 6 月 3 日 | 平台逐步弱化提示词创建入口 | 2026 年 11 月 30 日 |
| Evals 平台:控制台和 API | 2026 年 6 月 3 日 | 现有评估从 2026 年 10 月 31 日起转为只读 | 2026 年 11 月 30 日 |
提示词对象是保存在 OpenAI 控制台中的提示词,通过 pmpt_ ID 调用,也可以指定版本和变量。OpenAI 的迁移指南建议将提示词文本从对象中移到应用代码里,以 input 传给 Responses API,并通过 git、代码审查和测试管理版本。指南没有说明服务关闭后,携带 pmpt_ ID 的请求会返回什么。
不改代码,怎样让 pmpt_ 调用继续工作?
在提示词库中用相同 ID 重建提示词,再把客户端指向能解析该提示词的网关。Synthorai 网关会读取 /v1/responses 请求中的 prompt 字段:如果 ID 匹配库中的提示词,就使用库中的内容;数值形式的 version 则指定对应的库版本。下面是演示中的调用,除了 base URL 和密钥,其余内容与直接调用 OpenAI 的应用请求相同:
import os
from openai import OpenAI
# The only change: the base URL and the key.
client = OpenAI(base_url="https://synthorai.io/v1", api_key=os.environ["SYNTHORAI_API_KEY"])
raw = client.responses.with_raw_response.create(
model="gpt-6-luna",
prompt={"id": "pmpt_68f2a1c09d4e4b7a8c3f5e21d0b97a64", "version": "2"},
input="Where is order A-50977? It has been a week.",
)
print(raw.headers["x-synthorai-prompt-version"]) # 2
print(raw.parse().output_text)
| 调用 | 实际使用版本 | 输入 token | 输出 token | 费用 |
|---|---|---|---|---|
prompt={"id": ..., "version": "2"} | 库中的版本 2 | 92 | 177 | $0.0000977 |
prompt={"id": ...} | 库中的版本 1,即生产标签指向的版本 | 96 | 207 | $0.0001131 |
两次回答都来自 GPT-6 Luna,这是库中版本保存的模型。演示里的 pmpt_ ID 是虚构的;实际迁移时应使用自己的 ID。我们在 10 月 20 日又做了三项检查,覆盖迁移后应用可能发送的请求:
| 请求 | 结果 |
|---|---|
在 prompt 内传入 "variables": {"product": "garden tools"} | 该值填入版本中的 {{product}};回答以“我们在线销售园艺工具。”开头 |
请求中指定 model: "gpt-4o" | 被版本中保存的模型 GPT-6 Luna 替换 |
指定库中不存在的 "version": "7" | 404 prompt_not_found,提示“没有版本 7” |
最后一行很容易漏掉。OpenAI 的版本号会映射到库中相同编号的版本,因此固定使用 "version": "7" 的调用需要库中存在 v7。按顺序重建代码中固定引用的版本,确保编号一致;也可以修改这些调用,改用已经重建的版本。
OpenAI 文档没有提供读取提示词对象内容的 API,我们也没有找到导出功能。因此,要趁 OpenAI 控制台还能访问时,复制每个提示词的文本和设置。在控制台中,用复制出的文本构造 Responses 请求体,再粘贴到新提示词的导入入口。导入会将消息、模型、参数、工具和输出 schema 读入首个版本,也可以直接在编辑器中编写版本。
提示词应该放在代码里,还是提示词库里?
OpenAI 推荐放在代码里。如果希望不部署就能修改提示词,可以选择提示词库,代价是请求链路中多了一个服务:
| 提示词放在代码里 | 提示词放在库中,按 ID 调用 | |
|---|---|---|
| 发布修改 | 修改代码、审查、部署 | 移动标签;实测在 8 到 9 秒内影响调用 |
| 回滚 | 回退代码并部署 | 将标签移回原版本 |
| 将 10% 的流量发给新版本 | 自行实现功能开关或路由 | 在标签上设置灰度比例 |
| 审查 | git diff 和 pull request | 在控制台查看版本差异;修改不进入代码仓库 |
| 发布前测试 | 自行搭建测试运行器 | 使用提示词自带的测试集和评估运行 |
| 依赖 | 除模型供应商外没有其他依赖 | 必须能访问网关,才能解析提示词 |
最后一行就是引入提示词库的代价。如果无法读取提示词库,Synthorai 网关会使用最近读取的提示词副本继续处理请求,最长可用 24 小时;只有没有近期副本的提示词才会返回 503。希望兼顾两种方式的团队,可以将提示词及其所有版本导出为 JSON,存入代码仓库。
按 ID 调用提示词要多花多少钱?
按 ID 调用没有额外费用:在 20 组配对测试中,通过 prompt_id 调用发送的提示词 token 中位数为 114.5,与在代码中直接写出相同请求完全一致。网关会填入版本中的消息、模型和参数,再向供应商发送普通请求。缺少变量或 ID 不存在等无法处理的调用,会在调用模型前返回 400 或 404,不会计费。标签是一个具名指针,例如 production 或 staging,同一时间只指向一个版本。在每半秒一次调用的持续流量下,移动 production 标签后,调用切换版本的耗时中位数为 8.0 到 8.5 秒;如果 15 秒没有流量,之后的第一次调用就会使用新版本。提示词版本管理给出了代码、五种错误场景和计时方法。
怎样让部分生产流量试用新版本?
给 production 标签配置第二个版本及其流量比例,网关就会按会话 ID 分流。会话 ID 来自 X-Session-Id 请求头,用于将同一段对话的调用归为一组,确保对话不会中途切换版本。在 10% 灰度测试中,200 个会话中有 16 个(8.0%)进入候选版本;10% 和 50% 两轮测试共 400 个会话,全部始终使用同一版本。通过 _user 标签、请求的 user 字段或 safety_identifier 识别的终端用户,也始终使用同一版本。候选版本使用相同提示词,只将模型从 GPT-6 Luna 换成了 DeepSeek V4.1 Flash。它回答更快,中位耗时为 3.1 秒,生产版本为 4.9 秒;但仅看 10% 灰度阶段的 71 次调用,其单次调用费用是生产版本的 1.92 倍。提示词修改的 A/B 测试展示了如何从各版本汇总数据中发现这个问题。
怎样在发布前测试新版本?
让新版本和当前版本运行同一套固定测试集,再按事先写好的检查项逐条评分。检查项可以是模式匹配、JSON schema、延迟和费用上限,也可以由模型担任评判。我们的 v2 缩短了系统提示词,并删掉了“始终写明订单号”这条规则。在此前所有测试都未使用过的 110 条消息中,v2 有 18 条回答(16%)漏掉订单号,v1 则没有遗漏。这轮测试方案在运行前就已确定,Fisher 精确检验得到 p = 3.6 × 10⁻⁶,表示随机因素造成如此大差异的概率。此前一轮 40 条数据的测试中,v2 却全部通过。评判模型 Claude Sonnet 5.5 占了测试费用的大部分,每条约十分之一美分。发布前测试提示词给出了据此确定测试规模的方法。
对于准备迁出 OpenAI Evals 的团队,提示词库内的这套功能可以作为替代,但有一个差异需要提前安排:通过 API 发起的测试由调用方执行,调用方负责调用两个版本、给回答评分,再写回结果。控制台则在浏览器中运行同样的测试。
11 月 30 日前需要做什么?
迁移分为五步:
- 列出代码调用的所有
pmpt_ID,以及固定引用的版本。 - 复制每个提示词的文本和设置,趁 OpenAI 控制台还能访问时完成。
- 逐个决定提示词的去向:放进代码(OpenAI 的建议),或用相同 ID 放进提示词库。
- 用原来的
pmpt_ID 重建库中提示词,让每个固定引用的版本保留原编号,并将客户端的 base URL 指向网关;首次调用时检查X-Synthorai-Prompt-Version响应头。 - 在 10 月 31 日前迁移仍在使用的评估,届时 OpenAI Evals 将转为只读。
常见问题
2026 年 11 月 30 日,OpenAI 中保存的提示词会怎样?
OpenAI 的弃用公告称,可复用提示词对象和 v1/prompts API 计划于 2026 年 11 月 30 日停用。OpenAI 的迁移指南建议将提示词文本移入应用代码,但没有说明在此日期后,携带 pmpt_ ID 的请求会返回什么。
停用后还能继续用 pmpt_ ID 调用吗?
可以,前提是网关能从自己的提示词库中解析这个 ID。我们的测试中,向 Synthorai 网关发送携带 prompt={"id": "pmpt_...", "version": "2"} 的 OpenAI SDK 调用后,请求由库中的版本 2 处理;只修改了 base URL 和密钥。固定引用的版本必须在库中以相同编号存在,否则调用返回 404。
什么能替代 OpenAI Evals?
任何能用固定输入调用两个提示词版本、并对回答评分的测试运行器都可以替代它。在提示词库中,测试集和评估运行与提示词放在一起;发布时,标签移动对话框会显示该版本最近一次测试的结果。
相关阅读
- 提示词版本管理:按 ID 调用提示词,通过移动标签发布。
- 提示词修改的 A/B 测试:10% 灰度发布与版本间对比。
- 发布前测试提示词:测试集、检查项,以及测试需要多少条数据。
- 提示词库指南:所有字段的说明,包括 OpenAI
prompt对象。 - OpenAI:从提示词对象迁移:OpenAI 官方的迁移建议。