チュートリアル

OpenAI Decisions API チュートリアル:はじめての決定呼び出し

このチュートリアルでは、空のアカウントから、このサイトの decisions-1 エンドポイント(呼び出せる OpenAI Decisions API の代替)で動く決定呼び出しまで進みます。キー取得、1 回の POST、レスポンスの確率、次の動作を決めるしきい値まで。

更新日

ステップ 1 — キーを取得

プレイグラウンドを開いて Run を一度押すだけ——ゲストセッション、API キー、1 クレジットが自動で作られます。本番利用ではログインし、ダッシュボードの API keys で名前付きキーを作ります。キーは Authorization Bearer ヘッダーで送ります。

キーはサーバー側に置いてください。それを持つすべてのリクエストが残高に課金されるため、ブラウザコードや公開リポジトリに入れてはいけません。

ステップ 2 — 最初のリクエストを送る

決定リクエストには 3 つのフィールドがあります:model(decisions-1 または decisions-latest)、state(モデルが読むコンテキスト——文字列、JSON オブジェクト、テキスト配列)、questions(1 〜 6 個の質問 ID のマップ)。実際の質問は instructions に書きます——ID は回答が返ってくる際のラベルにすぎません。

noul 質問は yes/no の判定です:回答フィールド 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?"
    }
  }
}'

ステップ 3 — choice 質問を加える

choice 質問は定義したリストから 1 つのラベルを選びます。criteria は 2〜8 個の選択肢 ID のオブジェクトで、各々に短い説明を付けます——モデルが読むのは説明なので、ルーティングルールのように書いてください。

score 質問も同様ですが、criteria は 2〜10 個のレベル説明の順序付き配列で、低い方から並べます。3 種すべてを 1 回の呼び出しに混ぜられ、合計 6 問までです。

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."
    }
  }
}

ステップ 4 — 確率を読む

成功レスポンスには model、質問 ID をキーとした answers、usage、credits_used が含まれます。noul の回答は確率だけです。choice の回答には勝った choice、全選択肢の確率、confidence が含まれます。

2 位は 1 位と同じくらい重要です。2 つの選択肢がそれぞれ約 0.5 の場合と 0.9 対 0.1 は別の状況です——僅差は確信ではなくレビュー対象として扱いましょう。

レスポンス

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

ステップ 5 — しきい値を決めエラーを処理する

自前のトラフィックから信頼度のしきい値を決めます:上なら受理、残りは人へ。高め(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 を返します。

ストリーミングできますか?

できません。デシジョンコールは 1 往復で answers 全体を返します。このエンドポイントにストリーミングモードはありません。

信頼度はしきい値にどう意味を持ちますか?

confidence は選択肢の分離度を要約します。実トラフィックで校正してください。数百件の確率を記録し、自動受理が許容できないミスをしなくなる点にカットオフを置きます。

プレイグラウンドで試す

このリクエストをブラウザで実行——新規訪問者は 1 回無料、セットアップ不要。