教程

OpenAI Decisions API 教程:你的第一次决策调用

本教程带你从零开始在本站 decisions-1 端点(可调用的 OpenAI Decisions API 替代方案)完成一次决策调用:获取密钥、一次 POST、读取响应中的概率、设定后续阈值。

更新于

第一步——获取密钥

打开试用台点击一次运行——访客会话、API 密钥和 2 个免费积分会自动为你创建。生产用途请登录并在控制台的 API keys 下创建命名密钥。密钥放在 Authorization Bearer 请求头里发送。

密钥只放在服务端。携带它的每个请求都会扣你的余额,切勿放进浏览器代码或公开仓库。

第二步——发送第一个请求

决策请求有三个字段:model(decisions-1 或 decisions-latest)、state(模型读取的上下文——字符串、JSON 对象或文本数组)和 questions(1 到 6 个问题 ID 的映射)。把真正的问题写进 instructions——ID 只是答案返回时使用的标签。

noul 问题是是非判断:答案字段 noul 是该陈述为真的概率。

cURL

curl https://decisions-api.net/api/v1/decisions \
  -H "Authorization: Bearer $DECISIONS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "decisions-1",
  "state": "I was charged twice for my subscription this morning.",
  "questions": {
    "refund": {
      "type": "noul",
      "instructions": "Is the customer asking for money back?"
    }
  }
}'

第三步——加一个 choice 问题

choice 问题从你定义的列表中选一个标签。criteria 是 2 到 8 个选项 ID 的对象,每个带一句描述——模型读的就是描述,所以请把它写成路由规则。

score 问题类似,但 criteria 是 2 到 10 个等级描述的有序数组,从最低开始。三种类型可以混在一次调用里,最多六个问题。

JSON

{
  "team": {
    "type": "choice",
    "instructions": "Which team should own this ticket?",
    "criteria": {
      "payments": "Checkout, billing, or payment processing.",
      "frontend": "Rendering or browser behavior.",
      "account": "Login, permissions, or profile."
    }
  }
}

第四步——读取概率

成功响应包含 model、以你的问题 ID 为键的 answers、usage 和 credits_used。noul 答案就是一个概率。choice 答案包含胜出的 choice、每个选项的概率和置信度。

第二名和第一名同样重要。两个选项各约 0.5 和 0.9 对 0.1 是完全不同的情形——把接近的结果当复核对象,而不是自信结论。

响应

{
  "model": "decisions-1",
  "answers": {
    "refund": { "type": "noul", "noul": 0.98 }
  },
  "credits_used": 1
}

第五步——设阈值并处理错误

用你自己的流量定置信度阈值:高于它自动接受,其余转人工。从高值(0.7–0.8)开始,只在复核过未达标用例后才下调。

402 表示余额不足;429 或 502 表示稍后重试——失败的调用不计费。422 是请求体校验错误,报错信息会指明字段。

JavaScript

const res = await fetch('https://decisions-api.net/api/v1/decisions', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DECISIONS_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(body),
})

if (res.status === 402) { /* out of credits */ }
if (res.status === 429 || res.status === 502) { /* retry later */ }

const { answers } = await res.json()
const team = answers.team

if (team.type === 'choice' && team.confidence >= 0.7) {
  routeTo(team.choice)          // confident: auto-assign
} else {
  queueForHuman(team)           // low confidence or near-tie: review
}

常见问题

这会调用 OpenAI 的 Decisions API 吗?

不是。本端点由本站运行的决策模型 decisions-1 提供服务。OpenAI 的 Decisions API 处于有限预览且尚无公开结构;这里的请求形式遵循相同的决策模式。

为什么返回的答案键和我发送的不一样?

是一样的——answers 以你在 questions 映射里发送的问题 ID 为键。若某个键缺失,说明该问题校验失败,调用会返回 422。

可以流式返回吗?

不可以。决策调用是单次往返,返回完整的 answers 对象,本端点不支持流式。

置信度对我的阈值意味着什么?

置信度概括了选项间的分离程度。用真实流量校准:记录几百个用例的概率,再把阈值设在自动接受不再犯你在意的错误的位置。

在试用台里跑一遍

在浏览器中运行这个请求——新访客 2 次免费调用,无需配置。