OpenAI Decisions APIとは?料金・使い方と4件の問い合わせ分類を試した結果

Posted at 2026 年 10 月 26 日

問い合わせの振り分け、商品画像の破損判定、障害報告の優先度付け。こうした判断処理をアプリケーションに組み込むための仕組みが、OpenAIの「Decisions API」です。

2026年10月22日に一般提供が始まりました。本記事では、2026年10月27日時点の公式資料をもとに機能と料金を整理し、同日に4件の問い合わせを分類した実行結果を紹介します。OpenAIの変更履歴

Decisions APIとは?

Decisions APIは、テキスト・画像・JSONなどを評価し、条件への該当確率、選択肢、スコアを返します。主な仕様は次のとおりです。

項目

内容

エンドポイント

POST /v1/decisions

対応モデル

gpt-6-luna

主な入力

テキスト、画像、JSON、会話履歴

判断形式

predicate・choice・score

1リクエストの質問数

1〜400件

OpenAIは、Responses APIと比較して約10倍高速と説明しています。約10倍という値は提供元の説明で、本記事ではResponses APIとの速度比較は行っていません。Decisions API公式ガイド

問い合わせを「請求担当」と分類した場合、その結果を受け取ったアプリケーションが転送します。登録や通知など、判断に続く処理はアプリケーション側に実装します。

3種類の判断形式:predicate・choice・score

必要な答えに合わせて、質問の形式を選びます。

predicate:条件に該当する確率を返す

predicateは、「商品画像に破損が見えるか」などの条件に対して、0〜1のprobabilityを返します。

以下は返り値の形式を示す架空の例です。

{
  "type": "predicate",
  "name": "has_damage",
  "probability": 0.92
}

この値を使って確認対象を絞り込めます。ただし、0.92は「92%の正解保証」を意味しません。実際のデータで誤判定の傾向を調べ、処理を分ける基準を決めます。

choice:用意した候補から選択する

choiceは、「請求」「技術サポート」「その他」といった候補から1つを選びます。候補数は2〜255件です。

候補ごとの確率分布とconfidenceも返ります。候補の意味が重ならないように説明し、分類できない入力を受け止める「その他」を用意すると、後続処理を設計しやすくなります。

score:順序のある基準で評価する

scoreは、2〜10段階の評価基準を使う形式です。たとえば障害の影響を「軽微」「代替手段あり」「業務停止」の順に定義します。

各段階には0から始まる番号が付き、返されるスコアは、その番号を各段階の確率で重み付けした平均です。3段階の確率がそれぞれ0.1、0.7、0.2なら、スコアは次のようになります。

0 × 0.1 + 1 × 0.7 + 2 × 0.2 = 1.1

スコアは整数とは限りません。単一のカテゴリを選びたい場合はchoice、順序のある評価を数値で扱いたい場合はscoreが適しています。判断形式と返り値の公式説明、APIリファレンス

Responses APIとはどう使い分ける?

Decisions APIは、分類や採点など、答えの形式が決まっている処理に向いています。要約や返信文の生成にはResponses API、独自のJSONスキーマに沿った情報抽出にはStructured Outputsを使います。

たとえば、Decisions APIで問い合わせを分類し、その結果と問い合わせ内容をResponses APIへ渡して返信案を作る、といった構成が考えられます。

料金はいくら?10万回の処理で試算

Decisions APIの通常入力料金は、100万トークンあたり0.10米ドルです。キャッシュ読み取りには割引料金が適用され、キャッシュへの書き込みは有料です。

課金区分

100万トークンあたりの料金

通常入力

$0.10

キャッシュ読み取り

$0.01

キャッシュ書き込み・30分

$0.125

出力トークン

$0.00

上記は通常の短いコンテキストでの単価です。長文入力や地域内処理には追加の料金条件があります。料金はDecisions APIの料金説明と公式料金表を参照しています。

1回あたり500入力トークンなら?

質問文や候補定義などを含む総入力が1回あたり500トークンで、キャッシュを利用せず、追加料金もないと仮定すると、料金は次のように計算できます。

API呼び出し回数

総入力トークン数

入力料金の試算

1万回

500万

$0.50

10万回

5,000万

$5.00

100万回

5億

$50.00

これは条件を固定した試算です。本文が500トークンでも、質問文・選択肢・画像などが加われば総入力は増えます。費用の見積もりには、実際のレスポンスに含まれるusageを使いましょう。

キャッシュが向いているのは共通入力の再利用

キャッシュ対象となる共通入力の先頭部分には、1,024トークン以上が必要です。questionsは対象に含まれません。同じ長い参照資料を繰り返し評価する用途に向き、毎回内容が変わる短い問い合わせでは効果が限定的です。キャッシュの公式説明

実例:TypeScriptで4件の問い合わせを分類する

「二重請求」「ログインエラー」「商品の未着」「登壇依頼」の4件を、請求・返金/技術サポート/配送・お届け/その他に分類します。choiceを使い、問い合わせ1件につき1回、合計4回APIを呼び出します。

Node.js 22以上と、Decisions APIに対応したOpenAI SDKを用意します。以下はPowerShellの準備例です。APIキーは、実行するターミナルの環境変数に設定してください。

npm install openai
npm install --save-dev typescript tsx @types/node
$env:OPENAI_API_KEY = "取得したAPIキー"

以下は、検証用プログラムから分類処理を抜き出した最小例です。classification-example.tsとして保存します。

import OpenAI from "openai";

const departments = {
  billing: {
    label: "請求・返金",
    description: "請求額、重複請求、支払い内容、返金の相談。",
  },
  technical: {
    label: "技術サポート",
    description: "アプリや管理画面の不具合、ログインエラー、システムの操作方法。",
  },
  shipping: {
    label: "配送・お届け",
    description: "配達状況、未着、追跡番号、届け先変更。",
  },
  other: {
    label: "その他",
    description: "上記以外。登壇依頼、協業の相談など。",
  },
} as const;

const tickets = [
  "同じ注文の代金がクレジットカードから2回引き落とされています。重複した分を返金してほしいです。",
  "管理画面にログインすると認証エラーが表示されます。パスワードを再設定してもログインできません。",
  "商品の配達予定日を3日過ぎましたが、まだ届いていません。配送状況と追跡番号を教えてください。",
  "来月開催するイベントで、御社の担当者に登壇をお願いしたいです。企画書を送る窓口を教えてください。",
];

async function main() {
  const client = new OpenAI();
  const rows = [];

  for (const message of tickets) {
    const startedAt = performance.now();
    const decision = await client.decisions.create({
      model: "gpt-6-luna",
      input: message,
      questions: [{
        type: "choice",
        name: "department",
        instructions:
          "問い合わせの主な用件を担当する窓口を1つ選んでください。請求や返金の相談はbilling、アプリの不具合はtechnical、配送の相談はshipping、それ以外はotherです。",
        choices: Object.entries(departments).map(([value, department]) => ({
          value,
          description: department.description,
        })),
      }],
    });

    const elapsedMs = Math.round(performance.now() - startedAt);
    const answer = decision.answers.find(answer => answer.name === "department");
    if (!answer || answer.type !== "choice" ||
        typeof answer.choice !== "string" ||
        !Object.hasOwn(departments, answer.choice)) {
      rows.push({ 問い合わせ: message, 分類結果: "判定できませんでした" });
      continue;
    }

    const category = answer.choice as keyof typeof departments;
    rows.push({
      問い合わせ: message,
      分類結果: departments[category].label,
      confidence: answer.confidence,
      応答時間ms: elapsedMs,
      入力トークン: decision.usage.input_tokens,
      出力トークン: decision.usage.output_tokens,
    });
  }

  console.table(rows);
}

main().catch((error: unknown) => {
  let message = error instanceof Error ? error.message : String(error);
  const apiKey = process.env.OPENAI_API_KEY;
  if (apiKey) message = message.replaceAll(apiKey, "[REDACTED]");
  console.error("分類に失敗しました。", message);
  process.exitCode = 1;
});

実行すると、問い合わせ本文、日本語の分類結果、信頼度、応答時間、使用トークン数を一覧で表示します。

[Console]::OutputEncoding = [Text.UTF8Encoding]::new($false)
npx tsx classification-example.ts

英語コードを日本語のラベルに変換し、分類結果を読みやすくしています。選択する分類はAPIに任せています。

実行結果:4件はどこに分類された?

2026年10月27日、同じ入力文・質問・候補定義を使い、HTML保存機能を加えた検証用プログラムで実際にAPIを呼び出しました。次の表は、その結果です。入力文は表内では要約しています。

入力した問い合わせの要約

APIの分類結果

confidence

応答時間

同じ注文が二重に引き落とされた

請求・返金

1.00

1.767秒

管理画面にログインできない

技術サポート

1.00

0.389秒

配達予定日を過ぎても商品が届かない

配送・お届け

1.00

0.262秒

イベントへの登壇を依頼したい

その他

0.99

0.210秒

これらはAPIが返した選択結果です。担当者への実際の転送や通知は行っていません。

4件の問い合わせ本文と、Decisions APIが返した日本語の分類結果

2026年10月27日の実行結果。保存したAPIの返り値を日本語の一覧に表示した画面です。

4リクエストの入力トークン数は合計1,079、出力トークン数は合計0でした。応答時間は、各API呼び出しの前後をアプリ側で測った値です。

今回は分かりやすい4例での動作確認です。confidenceが1.00でも正解を保証するものではなく、大量データでの精度やResponses APIに対する速度差を検証した結果ではありません。

判定拒否などで分類できない場合の表示も用意します。

導入前に確認したいこと

データで精度と応答時間を測る

正解ラベルを付けたデータで精度を測り、誤検知と見逃しの影響に応じて、自動処理と人間の確認を分ける基準を決めます。confidenceは各候補の確率とは別の指標です。回答の解釈に関する公式説明

応答時間は、質問数やネットワークも含めて測定します。既存方式と同じデータを使い、精度・速度・費用を比較しましょう。

入力形式と対応範囲を確認する

項目

確認時点の制約

モデル

gpt-6-lunaのみ

PDFなどのファイル

Decisionsエンドポイントへの直接入力は非対応

音声

Decisionsエンドポイントへの直接入力は非対応。GPT-Liveとの連携を利用

画像

公開HTTP/HTTPS URL、またはBase64のデータURL。file_idは非対応

依存する判断

前の回答に依存する判断は別リクエストで実行

入力形式の詳細はDecisions API公式ガイドで確認できます。

まずはDecisions Playgroundで質問と候補を試し評価します。小さな分類処理から始め、自動化できる範囲を見極めるとよいでしょう。

参考リンク

DevpediaCode編集部

DevpediaCodeはWeb、AIなどプログラムに関する最新ITテーマの情報を発信するメディアです。

お問合せ下記のURLからお願いします。

https://devpediacode.com/contact