OpenAI Decisions API 与 Responses API 对比:同一个工单分派任务的两种做法

同一个工单分派任务,Decisions 与 Responses 两种做法全面对比:请求/响应结构、功能矩阵、成本算术、速度口径与选型规则,并给出把分类器从 Responses 迁到 Decisions 的步骤,以及在 Apifox 中用同一断言测试两个接口的完整方案。

用 Apifox,节省研发团队的每一分钟

OpenAI Decisions API 与 Responses API 对比:同一个工单分派任务的两种做法

免费使用 Apifox

相关推荐

最新文章

API

一体化协作平台

API 设计

API 文档

API 调试

自动化测试

API Mock

API Hub

立即体验 Apifox
目录

当任务是分类、分派、打分或放行,并且你想要概率时,用 Decisions API:它运行在 GPT-6 Luna 上,返回带类型的答案而不是文本,只按输入计费(每 100 万 token 0.10 美元,无输出、缓存读或缓存写费用),OpenAI 称其比 Responses API 快约 10 倍。需要生成文本、自定义 schema 的 JSON、工具调用、流式或会话状态时,用 Responses API。Decisions 已于 2026-10-06 进入公测。

本文用同一个任务(分派一条客服工单)跑两个接口,对比各自的返回,算一次账,并以迁移说明和在同一个 Apifox 项目里测试两者的方法收尾。想了解接口结构,从「Decisions API 主指南」开始;想看基线,见我们的「Responses API 指南」。

AI Coding 交流群

如果你也在用 AI 写代码,或者正在研究 Cursor、Claude Code 这些工具,欢迎加入以下交流群。群里平时会聊一些 AI 编程的实际用法、开发工作流,还有各种新工具和新玩法。

功能对照表

Decisions API Responses API (GPT-6 Luna)
接口 POST /v1/decisions POST /v1/responses
输出 predicate、choice、score 答案(外加 refusal),带接口返回的概率与置信度 生成文本,或经 text.format 遵循你 schema 的 JSON
自定义 JSON schema 否 是,json_schema 搭配 strict: true
工具 / function calling 否 是
流式 否 是
会话状态 否 是
提示词缓存 无缓存费用;据 OpenAI 论坛,目前尚无缓存 有,缓存输入每 100 万 0.01 美元
Batch 未文档化 有,标准价 5 折
图片 支持,base64 data URL;参考还列出公开 HTTP(S) URL,每请求最多 128 张 支持,Luna 接受文本和图片
链式(依赖)决策 拆分为多个请求 一次生成响应可携带依赖字段
短上下文每百万价格 $0.10 输入;无输出费用 $0.10 输入,$0.50 输出(含 reasoning token)
ZDR / HIPAA 面向符合条件的客户支持;美国和欧盟支持区域处理 本对比未覆盖;见 OpenAI 数据管控页面

每一行都来自 OpenAI 的 Decisions 指南、API 参考和定价页。

同一个任务,两种做法:分派一条客服工单

工单内容是“我的订单被扣了两次款。”部门为 billing、technical、shipping 和 other。下面是带 Structured Outputs 的 Responses 请求,也是如今大多数团队的做法:

curl https://api.openai.com/v1/responses \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6-luna",
    "input": "Route this support ticket to one department.\n\nTicket: I was charged twice for my order.",
    "text": {
      "format": {
        "type": "json_schema",
        "name": "ticket_route",
        "strict": true,
        "schema": {
          "type": "object",
          "properties": {
            "department": {
              "type": "string",
              "enum": ["billing", "technical", "shipping", "other"]
            }
          },
          "required": ["department"],
          "additionalProperties": false
        }
      }
    }
  }'

同一个工单的 Decisions 请求:

curl https://api.openai.com/v1/decisions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6-luna",
    "input": "I was charged twice for my order.",
    "questions": [
      {
        "type": "choice",
        "name": "department",
        "instructions": "Which department should handle this ticket?",
        "choices": [
          {"value": "billing", "description": "Charges, refunds, invoices"},
          {"value": "technical", "description": "Bugs, errors, login problems"},
          {"value": "shipping", "description": "Delivery, tracking, returns in transit"},
          {"value": "other", "description": "Anything else"}
        ]
      }
    ]
  }'

Responses 的请求体把问题写进提示词、把允许的答案写进 schema。Decisions 的请求体把工单原文作为 input,把问题作为一个带 2 到 255 个不重复取值的 choice;它没有 temperature、reasoning、stream 或 text 字段,因为这个接口上根本不存在这些参数。

各自的返回

Responses 返回生成文本。在严格 schema 下这段文本是合法 JSON,解析后你拿到一个标签:

{"department": "billing"}

想要置信度数字,你得在 schema 里加一个字段让模型自己写;返回的是看起来像概率的生成文本,而不是测量得到的概率。

Decisions 返回标签及其背后的分布。下面的数字是 OpenAI 指南针对这个输入的示例:

{
  "model": "gpt-6-luna",
  "answers": [
    {
      "type": "choice",
      "name": "department",
      "choice": "billing",
      "probabilities": [
        {"value": "billing", "probability": 0.95},
        {"value": "technical", "probability": 0.02},
        {"value": "shipping", "probability": 0.01},
        {"value": "other", "probability": 0.02}
      ],
      "confidence": 0.93
    }
  ]
}

answers 之后跟着一个 usage 对象(见计费一节)。无需解析器,无需正则。confidence 就是你设阈值的字段;OpenAI 的建议是基于你自己的标注样本设阈值,因为官方没有公布准确率或校准数据。拒答会以 {"type": "refusal", "name": "department"} 的形式出现;同一请求中的其他问题仍会拿到答案。

成本:算一次账

短上下文(最多 272K 输入 token)下,两个接口的 Luna 输入都是每 100 万 token 0.10 美元。差别在输出。按一条 500 token 的工单、100 万次请求计算:

  • Decisions:500 / 1,000,000 x $0.10 = $0.00005 每次请求,一百万次共 50 美元,没有输出或缓存项要加。
  • Responses:同样 50 美元的输入,输出按每 100 万 0.50 美元计。40 token 的 JSON 标签是 40 / 1,000,000 x $0.50 = $0.00002 每次请求,一百万次共 20 美元。再加上 reasoning token——Luna 按同样的 0.50 美元把它记入输出。

只看标签,差距是 50 美元对 70 美元。更大的差距在 reasoning 一项;如实的表述是 Decisions 完全不收输出 token。OpenAI 的参考示例里两个计数器都是 0:

"usage": {
  "input_tokens": 42,
  "input_tokens_details": {"cached_tokens": 0, "cache_write_tokens": 0},
  "output_tokens": 0,
  "output_tokens_details": {"reasoning_tokens": 0},
  "total_tokens": 42
}

两点注意。Responses 有 Decisions 没有的手段:Luna 上 reasoning.effort 可降到 none,提示词缓存能把重复输入降到每 100 万 0.01 美元,Batch API 则是标准价 5 折。这些在 Decisions 上都没有文档。另外,长上下文输入(超过 272K token)在两个接口上都让输入费率翻倍,所以一条长的 Decisions 请求是每 100 万输入 0.20 美元(由定价页倍率推算);区域处理加收 10%。

速度

OpenAI 称 Decisions API 比 Responses API 快约 10 倍。官方没有公布绝对延迟数字,把这句话当作方向而不是预算,把热路径迁过去之前先测好自己的 p50 和 p95。OpenAI 论坛有开发者反馈慢速网络下图片输入的决策约 0.8 秒返回;这是孤例,不是基准。方向本身说得通:Responses 在生成 token(含 reasoning),你要等到最后一个 token。

选型规则

当输出属于以下情况时选 Decisions:

  • 带概率的是/否判断(predicate):“这条消息是垃圾信息吗?”
  • N 个无序类别之一(choice):部门、意图、下一步调用哪个模型或工具。记得加“other”之类的兜底项。
  • 有序等级(score):严重程度、优先级、紧急度。score 是 0 起始等级索引的概率加权平均,1.1 表示介于等级 1 和等级 2 之间、更靠近 1。
  • 放行门槛:把 confidence 或 probability 与阈值比较,低置信度的进入人工队列。

只要出现以下任一情况,选 Responses:

  • 你需要给人看的文本:摘要、回复、解释。
  • 你需要自定义形状的对象:抽取字段、嵌套结构、长度不定的数组。这是 Structured Outputs 的地盘,OpenAI 的指南也是这么说的。
  • 模型应发起带参数的工具调用:function calling。
  • 你需要流式、会话状态,或 Luna 以外的模型。
  • 一个决策依赖另一个决策,且你想在一个来回里拿到两者。Decisions 可以在一次输入上放多个相互独立的问题,但有依赖关系的决策必须拆成多个请求。

很多流水线两者都要:用 Decisions 分类和放行,用 Responses 写回复。

把分类器从 Responses 迁到 Decisions

如果你已经在用严格 enum schema 分派工单,迁移很小:

  1. 保留相同的 input,还原为工单原文;问题从提示词里移出去。
  2. 把问题放进 questions,作为 choice,enum 值变成 choices[].value,每个配一行 description。取值可以是字符串或布尔值,true 与 "true" 是不同的。
  3. 删掉解析器。直接读 answers[0].choice 和 answers[0].confidence;答案按提问顺序返回,并回显你设置的 name。然后基于标注样本设阈值。
  4. 检查输入路径。Decisions 只接受用户消息:没有 system 或 assistant 角色,没有函数调用,没有文件,没有 file_id。把系统提示词里的规则折进 instructions 或选项描述。图片以 base64 data URL 传入;参考还列出公开 HTTP(S) URL,托管图片先测再上。
  5. 拆开链条。“先分类,如果是 billing 再判断退款资格”会变成两个请求。

在一个 Apifox 项目里测试两者

最干脆的比较方法是把两个请求跑在同一批标注工单上再对比。在 Apifox 里,把密钥保存为环境变量,两个请求的 Authorization: Bearer 请求头都引用 {{OPENAI_API_KEY}},密钥原文就不会落在保存的请求体里。

给两个请求配同一条断言:department 等于 billing。Decisions 请求上是对 $.answers[0].choice 的 JSONPath 断言,旁边再加 $.answers[0].confidence 大于 0.8、$.usage.output_tokens 等于 0。Responses 请求的标签在生成文本里,用一小段后置脚本把它解析进变量供断言检查。再对比两个响应的 usage:Decisions 的输出和 reasoning token 是零,Responses 不是。

把这一对请求做成基于 CSV(工单文本 + 期望部门)的数据驱动测试场景,运行结果会显示每个接口在你的置信线之上分对了多少工单。像「条件 mock 响应」那样 mock answers 数组,让分派逻辑先行开发;用 Apifox CLI 把场景接入 CI,让措辞或模型别名变更在测试中失败,而不是错分工单。更多断言模式见「测试 LLM 应用」。

常见问题

Responses API 能像 Decisions 那样返回概率吗?作为测量值,不能。JSON schema 里的 confidence 字段得到的是模型写出的数字,本质是生成文本。Decisions 的概率是接口本身对你所给选项的输出。

Decisions 上能用 GPT-6 Luna 以外的模型吗?不能。指南明确 gpt-6-luna 是当前唯一可用模型。见我们的「GPT-6 Luna 概览」。

Decisions 与 TypeSafe 的 Jev 有何不同?两者都返回带概率的类型化答案、都只按输入计费;差异在价格、输入和响应形状。见「Decisions API 与 Jev 对比」。

Decisions API 免费吗?不免费。输入每 100 万 token 0.10 美元,没有文档化的免费档。Luna 本身的免费途径见「如何免费用 GPT-6 Luna」。

下一步

挑一个你现在跑在 Responses 上的分类器,把它重写成一个 choice 问题,在 Apifox 里用同一条断言对 50 条标注工单跑两个接口。如果置信度阈值站得住、usage 显示零输出 token,你就有答案了。下载 Apifox,然后跟着「如何使用 Decisions API」完成第一次调用和完整测试流程。

开发必备:API 全流程管理神器 Apifox

介绍完上文的内容,我想额外介绍一个对开发者同样重要的效率工具 —— Apifox。作为一个集 API 文档、调试、设计、测试、Mock、自动化测试于一体的工具,Apifox 是目前提升研发效率的首选。

如果你正在开发项目,不妨试试其极其友好的界面设计,它完全兼容 Postman 和 Swagger 数据格式,导入数据非常方便,,即使是新手也能很快上手,点击这里即可注册使用。

Apifox

值得一提的是,除了个人和常规团队使用,针对有高安全合规要求、或需要在内网环境协作的企业,Apifox 还提供了深度定制的私有化部署方案。

获取专属报价与部署方案

icon 详细的私有化部署系统架构与安全白皮书
icon 针对您公司规模的专属报价单
icon 免费的 1v1 专属产品演示 (Demo) 机会
获取部署方案
* 提交后,我们的客户经理将在 1 个工作日内与您联系
林俊锋 企业微信
@Apifox 专属顾问
扫码备注: 私有化 + 公司名