{"componentChunkName":"component---src-templates-info-posts-js","path":"/information/AI/7d6727be-a0fa-530a-8fe5-0212127154fc","result":{"data":{"microcmsInformation":{"id":"7d6727be-a0fa-530a-8fe5-0212127154fc","title":"OpenAI Decisions APIとは？料金・使い方と4件の問い合わせ分類を試した結果","date":"2026 年 10 月 26 日","image":{"url":"https://images.microcms-assets.io/assets/52137c02cafa4450bbdc092b64fbadac/0a1f46d3b36648179eb29039860af185/openai-decisions-api-pricing-usage.png"},"author":{"author":"Goubara"},"body":"<p>問い合わせの振り分け、商品画像の破損判定、障害報告の優先度付け。こうした判断処理をアプリケーションに組み込むための仕組みが、OpenAIの「Decisions API」です。</p><p>2026年10月22日に一般提供が始まりました。本記事では、2026年10月27日時点の公式資料をもとに機能と料金を整理し、同日に4件の問い合わせを分類した実行結果を紹介します。<a href=\"https://developers.openai.com/api/docs/changelog\">OpenAIの変更履歴</a></p><h2 id=\"hff50bca035\">Decisions APIとは？</h2><p>Decisions APIは、テキスト・画像・JSONなどを評価し、条件への該当確率、選択肢、スコアを返します。主な仕様は次のとおりです。</p><table><tbody><tr><th colspan=\"1\" rowspan=\"1\"><p>項目</p></th><th colspan=\"1\" rowspan=\"1\"><p>内容</p></th></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>エンドポイント</p></td><td colspan=\"1\" rowspan=\"1\"><p><code>POST /v1/decisions</code></p></td></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>対応モデル</p></td><td colspan=\"1\" rowspan=\"1\"><p><code>gpt-6-luna</code></p></td></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>主な入力</p></td><td colspan=\"1\" rowspan=\"1\"><p>テキスト、画像、JSON、会話履歴</p></td></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>判断形式</p></td><td colspan=\"1\" rowspan=\"1\"><p><code>predicate</code>・<code>choice</code>・<code>score</code></p></td></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>1リクエストの質問数</p></td><td colspan=\"1\" rowspan=\"1\"><p>1〜400件</p></td></tr></tbody></table><p>OpenAIは、Responses APIと比較して約10倍高速と説明しています。約10倍という値は提供元の説明で、本記事ではResponses APIとの速度比較は行っていません。<a href=\"https://developers.openai.com/api/docs/guides/decisions\">Decisions API公式ガイド</a></p><p>問い合わせを「請求担当」と分類した場合、その結果を受け取ったアプリケーションが転送します。登録や通知など、判断に続く処理はアプリケーション側に実装します。</p><h2 id=\"haa2d0e17b7\">3種類の判断形式：predicate・choice・score</h2><p>必要な答えに合わせて、質問の形式を選びます。</p><h3 id=\"hf3fb5f961c\">predicate：条件に該当する確率を返す</h3><p><code>predicate</code>は、「商品画像に破損が見えるか」などの条件に対して、0〜1の<code>probability</code>を返します。</p><p>以下は返り値の形式を示す架空の例です。</p><pre><code class=\"language-json\">{\n  &quot;type&quot;: &quot;predicate&quot;,\n  &quot;name&quot;: &quot;has_damage&quot;,\n  &quot;probability&quot;: 0.92\n}\n</code></pre><p>この値を使って確認対象を絞り込めます。ただし、0.92は「92％の正解保証」を意味しません。実際のデータで誤判定の傾向を調べ、処理を分ける基準を決めます。</p><h3 id=\"h8f62357d26\">choice：用意した候補から選択する</h3><p><code>choice</code>は、「請求」「技術サポート」「その他」といった候補から1つを選びます。候補数は2〜255件です。</p><p>候補ごとの確率分布と<code>confidence</code>も返ります。候補の意味が重ならないように説明し、分類できない入力を受け止める「その他」を用意すると、後続処理を設計しやすくなります。</p><h3 id=\"h5e05cae36b\">score：順序のある基準で評価する</h3><p><code>score</code>は、2〜10段階の評価基準を使う形式です。たとえば障害の影響を「軽微」「代替手段あり」「業務停止」の順に定義します。</p><p>各段階には0から始まる番号が付き、返されるスコアは、その番号を各段階の確率で重み付けした平均です。3段階の確率がそれぞれ0.1、0.7、0.2なら、スコアは次のようになります。</p><pre><code class=\"language-text\">0 × 0.1 ＋ 1 × 0.7 ＋ 2 × 0.2 ＝ 1.1\n</code></pre><p>スコアは整数とは限りません。単一のカテゴリを選びたい場合は<code>choice</code>、順序のある評価を数値で扱いたい場合は<code>score</code>が適しています。<a href=\"https://developers.openai.com/api/docs/guides/decisions#choose-a-question-type\">判断形式と返り値の公式説明</a>、<a href=\"https://developers.openai.com/api/reference/resources/decisions/methods/create\">APIリファレンス</a></p><h2 id=\"h72d5f3756c\">Responses APIとはどう使い分ける？</h2><p>Decisions APIは、分類や採点など、答えの形式が決まっている処理に向いています。要約や返信文の生成にはResponses API、独自のJSONスキーマに沿った情報抽出には<a href=\"https://developers.openai.com/api/docs/guides/structured-outputs\">Structured Outputs</a>を使います。</p><p>たとえば、Decisions APIで問い合わせを分類し、その結果と問い合わせ内容をResponses APIへ渡して返信案を作る、といった構成が考えられます。</p><h2 id=\"h8fb6402d0f\">料金はいくら？10万回の処理で試算</h2><p>Decisions APIの通常入力料金は、100万トークンあたり0.10米ドルです。キャッシュ読み取りには割引料金が適用され、キャッシュへの書き込みは有料です。</p><table><tbody><tr><th colspan=\"1\" rowspan=\"1\"><p>課金区分</p></th><th colspan=\"1\" rowspan=\"1\"><p>100万トークンあたりの料金</p></th></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>通常入力</p></td><td colspan=\"1\" rowspan=\"1\"><p>$0.10</p></td></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>キャッシュ読み取り</p></td><td colspan=\"1\" rowspan=\"1\"><p>$0.01</p></td></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>キャッシュ書き込み・30分</p></td><td colspan=\"1\" rowspan=\"1\"><p>$0.125</p></td></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>出力トークン</p></td><td colspan=\"1\" rowspan=\"1\"><p>$0.00</p></td></tr></tbody></table><p>上記は通常の短いコンテキストでの単価です。長文入力や地域内処理には追加の料金条件があります。料金は<a href=\"https://developers.openai.com/api/docs/guides/decisions#pricing-and-availability\">Decisions APIの料金説明</a>と<a href=\"https://developers.openai.com/api/docs/pricing\">公式料金表</a>を参照しています。</p><h3 id=\"h1995048cab\">1回あたり500入力トークンなら？</h3><p>質問文や候補定義などを含む総入力が1回あたり500トークンで、キャッシュを利用せず、追加料金もないと仮定すると、料金は次のように計算できます。</p><table><tbody><tr><th colspan=\"1\" rowspan=\"1\"><p>API呼び出し回数</p></th><th colspan=\"1\" rowspan=\"1\"><p>総入力トークン数</p></th><th colspan=\"1\" rowspan=\"1\"><p>入力料金の試算</p></th></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>1万回</p></td><td colspan=\"1\" rowspan=\"1\"><p>500万</p></td><td colspan=\"1\" rowspan=\"1\"><p>$0.50</p></td></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>10万回</p></td><td colspan=\"1\" rowspan=\"1\"><p>5,000万</p></td><td colspan=\"1\" rowspan=\"1\"><p>$5.00</p></td></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>100万回</p></td><td colspan=\"1\" rowspan=\"1\"><p>5億</p></td><td colspan=\"1\" rowspan=\"1\"><p>$50.00</p></td></tr></tbody></table><p>これは条件を固定した試算です。本文が500トークンでも、質問文・選択肢・画像などが加われば総入力は増えます。費用の見積もりには、実際のレスポンスに含まれる<code>usage</code>を使いましょう。</p><h3 id=\"hae352fcee7\">キャッシュが向いているのは共通入力の再利用</h3><p>キャッシュ対象となる共通入力の先頭部分には、1,024トークン以上が必要です。<code>questions</code>は対象に含まれません。同じ長い参照資料を繰り返し評価する用途に向き、毎回内容が変わる短い問い合わせでは効果が限定的です。<a href=\"https://developers.openai.com/api/docs/guides/decisions#reuse-shared-input-with-prompt-caching\">キャッシュの公式説明</a></p><h2 id=\"h197546c3f2\">実例:TypeScriptで4件の問い合わせを分類する</h2><p>「二重請求」「ログインエラー」「商品の未着」「登壇依頼」の4件を、請求・返金／技術サポート／配送・お届け／その他に分類します。<code>choice</code>を使い、問い合わせ1件につき1回、合計4回APIを呼び出します。</p><p>Node.js 22以上と、Decisions APIに対応したOpenAI SDKを用意します。以下はPowerShellの準備例です。APIキーは、実行するターミナルの環境変数に設定してください。</p><pre><code class=\"language-powershell\">npm install openai\nnpm install --save-dev typescript tsx @types/node\n$env:OPENAI_API_KEY = &quot;取得したAPIキー&quot;\n</code></pre><p>以下は、検証用プログラムから分類処理を抜き出した最小例です。<code>classification-example.ts</code>として保存します。</p><pre><code class=\"language-typescript\">import OpenAI from &quot;openai&quot;;\n\nconst departments = {\n  billing: {\n    label: &quot;請求・返金&quot;,\n    description: &quot;請求額、重複請求、支払い内容、返金の相談。&quot;,\n  },\n  technical: {\n    label: &quot;技術サポート&quot;,\n    description: &quot;アプリや管理画面の不具合、ログインエラー、システムの操作方法。&quot;,\n  },\n  shipping: {\n    label: &quot;配送・お届け&quot;,\n    description: &quot;配達状況、未着、追跡番号、届け先変更。&quot;,\n  },\n  other: {\n    label: &quot;その他&quot;,\n    description: &quot;上記以外。登壇依頼、協業の相談など。&quot;,\n  },\n} as const;\n\nconst tickets = [\n  &quot;同じ注文の代金がクレジットカードから2回引き落とされています。重複した分を返金してほしいです。&quot;,\n  &quot;管理画面にログインすると認証エラーが表示されます。パスワードを再設定してもログインできません。&quot;,\n  &quot;商品の配達予定日を3日過ぎましたが、まだ届いていません。配送状況と追跡番号を教えてください。&quot;,\n  &quot;来月開催するイベントで、御社の担当者に登壇をお願いしたいです。企画書を送る窓口を教えてください。&quot;,\n];\n\nasync function main() {\n  const client = new OpenAI();\n  const rows = [];\n\n  for (const message of tickets) {\n    const startedAt = performance.now();\n    const decision = await client.decisions.create({\n      model: &quot;gpt-6-luna&quot;,\n      input: message,\n      questions: [{\n        type: &quot;choice&quot;,\n        name: &quot;department&quot;,\n        instructions:\n          &quot;問い合わせの主な用件を担当する窓口を1つ選んでください。請求や返金の相談はbilling、アプリの不具合はtechnical、配送の相談はshipping、それ以外はotherです。&quot;,\n        choices: Object.entries(departments).map(([value, department]) =&gt; ({\n          value,\n          description: department.description,\n        })),\n      }],\n    });\n\n    const elapsedMs = Math.round(performance.now() - startedAt);\n    const answer = decision.answers.find(answer =&gt; answer.name === &quot;department&quot;);\n    if (!answer || answer.type !== &quot;choice&quot; ||\n        typeof answer.choice !== &quot;string&quot; ||\n        !Object.hasOwn(departments, answer.choice)) {\n      rows.push({ 問い合わせ: message, 分類結果: &quot;判定できませんでした&quot; });\n      continue;\n    }\n\n    const category = answer.choice as keyof typeof departments;\n    rows.push({\n      問い合わせ: message,\n      分類結果: departments[category].label,\n      confidence: answer.confidence,\n      応答時間ms: elapsedMs,\n      入力トークン: decision.usage.input_tokens,\n      出力トークン: decision.usage.output_tokens,\n    });\n  }\n\n  console.table(rows);\n}\n\nmain().catch((error: unknown) =&gt; {\n  let message = error instanceof Error ? error.message : String(error);\n  const apiKey = process.env.OPENAI_API_KEY;\n  if (apiKey) message = message.replaceAll(apiKey, &quot;[REDACTED]&quot;);\n  console.error(&quot;分類に失敗しました。&quot;, message);\n  process.exitCode = 1;\n});\n</code></pre><p>実行すると、問い合わせ本文、日本語の分類結果、信頼度、応答時間、使用トークン数を一覧で表示します。</p><pre><code class=\"language-powershell\">[Console]::OutputEncoding = [Text.UTF8Encoding]::new($false)\nnpx tsx classification-example.ts\n</code></pre><p>英語コードを日本語のラベルに変換し、分類結果を読みやすくしています。選択する分類はAPIに任せています。</p><h3 id=\"hc831bfab56\">実行結果：4件はどこに分類された？</h3><p>2026年10月27日、同じ入力文・質問・候補定義を使い、HTML保存機能を加えた検証用プログラムで実際にAPIを呼び出しました。次の表は、その結果です。入力文は表内では要約しています。</p><table><tbody><tr><th colspan=\"1\" rowspan=\"1\"><p>入力した問い合わせの要約</p></th><th colspan=\"1\" rowspan=\"1\"><p>APIの分類結果</p></th><th colspan=\"1\" rowspan=\"1\"><p>confidence</p></th><th colspan=\"1\" rowspan=\"1\"><p>応答時間</p></th></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>同じ注文が二重に引き落とされた</p></td><td colspan=\"1\" rowspan=\"1\"><p>請求・返金</p></td><td colspan=\"1\" rowspan=\"1\"><p>1.00</p></td><td colspan=\"1\" rowspan=\"1\"><p>1.767秒</p></td></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>管理画面にログインできない</p></td><td colspan=\"1\" rowspan=\"1\"><p>技術サポート</p></td><td colspan=\"1\" rowspan=\"1\"><p>1.00</p></td><td colspan=\"1\" rowspan=\"1\"><p>0.389秒</p></td></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>配達予定日を過ぎても商品が届かない</p></td><td colspan=\"1\" rowspan=\"1\"><p>配送・お届け</p></td><td colspan=\"1\" rowspan=\"1\"><p>1.00</p></td><td colspan=\"1\" rowspan=\"1\"><p>0.262秒</p></td></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>イベントへの登壇を依頼したい</p></td><td colspan=\"1\" rowspan=\"1\"><p>その他</p></td><td colspan=\"1\" rowspan=\"1\"><p>0.99</p></td><td colspan=\"1\" rowspan=\"1\"><p>0.210秒</p></td></tr></tbody></table><p>これらはAPIが返した選択結果です。担当者への実際の転送や通知は行っていません。</p><figure><img src=\"https://images.microcms-assets.io/assets/52137c02cafa4450bbdc092b64fbadac/20048edf75104e2f862e05d82b9693bd/classification-results-annotated.png\" alt=\"4件の問い合わせ本文と、Decisions APIが返した日本語の分類結果\" width=\"1650\" height=\"2651\"></figure><p><em>2026年10月27日の実行結果。保存したAPIの返り値を日本語の一覧に表示した画面です。</em></p><p>4リクエストの入力トークン数は合計1,079、出力トークン数は合計0でした。応答時間は、各API呼び出しの前後をアプリ側で測った値です。</p><p>今回は分かりやすい4例での動作確認です。confidenceが1.00でも正解を保証するものではなく、大量データでの精度やResponses APIに対する速度差を検証した結果ではありません。</p><p>判定拒否などで分類できない場合の表示も用意します。</p><h2 id=\"h1e8f6958e1\">導入前に確認したいこと</h2><h3 id=\"h1ee7825f0b\">データで精度と応答時間を測る</h3><p>正解ラベルを付けたデータで精度を測り、誤検知と見逃しの影響に応じて、自動処理と人間の確認を分ける基準を決めます。<code>confidence</code>は各候補の確率とは別の指標です。<a href=\"https://developers.openai.com/api/docs/guides/decisions#interpret-the-answers\">回答の解釈に関する公式説明</a></p><p>応答時間は、質問数やネットワークも含めて測定します。既存方式と同じデータを使い、精度・速度・費用を比較しましょう。</p><h3 id=\"hbc33cc1a10\">入力形式と対応範囲を確認する</h3><table><tbody><tr><th colspan=\"1\" rowspan=\"1\"><p>項目</p></th><th colspan=\"1\" rowspan=\"1\"><p>確認時点の制約</p></th></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>モデル</p></td><td colspan=\"1\" rowspan=\"1\"><p><code>gpt-6-luna</code>のみ</p></td></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>PDFなどのファイル</p></td><td colspan=\"1\" rowspan=\"1\"><p>Decisionsエンドポイントへの直接入力は非対応</p></td></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>音声</p></td><td colspan=\"1\" rowspan=\"1\"><p>Decisionsエンドポイントへの直接入力は非対応。GPT-Liveとの連携を利用</p></td></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>画像</p></td><td colspan=\"1\" rowspan=\"1\"><p>公開HTTP／HTTPS URL、またはBase64のデータURL。<code>file_id</code>は非対応</p></td></tr><tr><td colspan=\"1\" rowspan=\"1\"><p>依存する判断</p></td><td colspan=\"1\" rowspan=\"1\"><p>前の回答に依存する判断は別リクエストで実行</p></td></tr></tbody></table><p>入力形式の詳細は<a href=\"https://developers.openai.com/api/docs/guides/decisions#evaluate-a-conversation\">Decisions API公式ガイド</a>で確認できます。</p><p>まずは<a href=\"https://platform.openai.com/decisions\">Decisions Playground</a>で質問と候補を試し評価します。小さな分類処理から始め、自動化できる範囲を見極めるとよいでしょう。</p><h2 id=\"h03e7af0d39\">参考リンク</h2><ul><li><a href=\"https://developers.openai.com/api/docs/guides/decisions\">Decisions API公式ガイド</a></li><li><a href=\"https://developers.openai.com/api/reference/resources/decisions/methods/create\">Create a decision APIリファレンス</a></li><li><a href=\"https://developers.openai.com/api/docs/changelog\">OpenAI API変更履歴</a></li><li><a href=\"https://developers.openai.com/api/docs/pricing\">OpenAI API料金表</a></li></ul>","category":{"category":"AI"}}},"pageContext":{"id":"7d6727be-a0fa-530a-8fe5-0212127154fc"}},"staticQueryHashes":["3649515864","63159454"]}