OpenAI Decisions APIは、テキストや画像を質問リストとともに受け取り、散文ではなく型付きの回答を返すPOST /v1/decisionsエンドポイントです。GPT-6 Luna上で動作し、predicate確率、オプションごとの確率を伴うchoice、または順序付けされたレベルに対するscoreを返します。入力コストは100万トークンあたり$0.10で、出力、キャッシュ読み取り、キャッシュ書き込みの費用はかかりません。このエンドポイントは2026年10月6日からパブリックベータ版として公開されており、OpenAIは「数週間以内に」GA(一般提供)を予定していると述べています。
この記事では、このエンドポイントが何を返すか、費用、Structured Outputsや関数呼び出しとの関連性、そしてテスト方法について解説します。curl、Python、JavaScriptを使った詳しい手順については、まずOpenAI Decisions APIの使い方をお読みください。すでにResponses APIを使用している場合は、DecisionsとResponsesの比較で同じ処理が両方の方法でどのように行われるかを示しています。この記事全体を通して、キーの保存、リクエストの保存、およびanswers配列に対するアサーションを行うためにApidogを使用します。これにより、モデルの挙動の変更がチケットの誤ルーティングではなくテスト失敗として検出されるようになります。
Decisionsリクエストとレスポンスの構造
リクエストフィールドは3つ、レスポンスフィールドも3つです。idも、生成されたテキストも、解析すべきものもありません。
| パート | フィールド | 保持する内容 |
|---|---|---|
| リクエスト | model |
gpt-6-luna、現在利用可能な唯一のモデル |
| リクエスト | input |
文字列、またはinput_textとinput_imageパートを組み合わせたユーザーメッセージの配列 |
| リクエスト | questions |
type、必須のinstructions、およびオプションのnameを持つ質問の配列 |
| リクエスト | safety_identifier |
オプションのエンドユーザーID、最大128文字 |
| レスポンス | model |
gpt-6-lunaをエコーバック |
| レスポンス | answers |
質問ごとに1つのエントリ、尋ねた順序で、typeとnameを含む |
| レスポンス | usage |
input_tokens, input_tokens_details, output_tokens, output_tokens_details, total_tokens |
欠けているものに注意してください: temperature、reasoning、stream、store、tools、text.formatはありません。これらが必要な場合は、Responses APIをご利用ください。そして、OpenAIの公式リファレンス例ではoutput_tokensが0であるため、以下の料金体系には出力に関する行がありません。
3つの質問タイプ
各質問は独自のtypeを持ち、1つの入力に対して複数のタイプを混在させることができます。独立した質問は同じリクエストに入れます。以前の回答に依存する決定の場合、OpenAIのガイドでは個別のリクエストを送信することを推奨しています。
predicate: はい/いいえの確率
predicateは条件が成立するかどうかを尋ね、それが真である確率を0から1の間で返します。
curl https://api.openai.com/v1/decisions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-luna",
"input": "The box arrived crushed and the screen is cracked.",
"questions": [
{"type": "predicate", "name": "damaged",
"instructions": "Is the product described as damaged?"}
]
}'
この形式に対するOpenAIのリファレンス例は以下を返します。
{
"model": "gpt-6-luna",
"answers": [
{"type": "predicate", "name": "damaged", "probability": 0.95}
],
"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
}
}
choice: 順序付けされていないセットから1つのラベル
choiceは、{value, description}オブジェクトのchoices配列を追加します。2から255個の一意な選択肢があり、valueは文字列またはブール値です(trueと"true"は区別されます)。OpenAIは、カテゴリがすべての入力をカバーしない場合にotherなどのフォールバックを推奨しています。
{
"model": "gpt-6-luna",
"input": "I was charged twice for my order.",
"questions": [
{"type": "choice", "name": "department",
"instructions": "Which team should handle this ticket?",
"choices": [
{"value":"billing"}, {"value":"technical"},
{"value":"shipping"}, {"value":"other"}
]}
]
}
この入力に対するガイドの例示的な回答は次のとおりです。
{"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}
score: 順序付けされたスケール上の位置
scoreは、最低から最高へと順序付けされた{label, description}の配列であるlevelsを追加します。インデックスは0から始まり、返されるscoreはそれらのインデックスの確率加重平均であるため、レベル間に位置することもあります。
{
"model": "gpt-6-luna",
"input": "Export fails in Safari but works in Chrome.",
"questions": [
{"type": "score", "name": "severity",
"instructions": "How badly does this bug block the user?",
"levels": [
{"label":"Cosmetic"},
{"label":"Workaround available"},
{"label":"Fully blocked"}
]}
]
}
ガイドの例では、3つのレベルにわたる確率が0.1、0.7、0.2であり、scoreは1.1、confidenceは0.55となります。1.1は「レベル1とレベル2の間、1に近い」と解釈されます。ガイドのルール: 部門などの順序付けされていないカテゴリにはchoiceを、重要度などの順序付けされたレベルにはscoreを使用します。
4番目の回答タイプであるrefusalは、任意の単一の質問に対して{"type":"refusal","name":...}として表示されることがあります。同じリクエスト内の他の質問は引き続き回答を得られるため、フィールドを読み取る前にtypeで分岐してください。
OpenAIが説明する速度
OpenAIは、Decisions APIがResponses APIよりも約10倍高速であると述べています。発表では、Responsesを介したGPT-6 Lunaよりも最大10倍高速であると表現されています。OpenAIは絶対的なレイテンシー数値を公表していません。OpenAIフォーラムのある開発者は、画像入力の決定が遅い接続で約0.8秒で返されたと報告しています。これはベンチマークではなく逸話です。何かを約束する前に、ご自身のp95を測定してください。
価格設定: 100万入力トークンあたり$0.10、その他はなし
gpt-6-lunaを使用する場合、入力は100万トークンあたり$0.10かかります。支払い対象は入力トークンのみで、キャッシュ読み取り、キャッシュ書き込み、出力トークンの費用はかかりません。usageオブジェクトにはcached_tokensおよびcache_write_tokensフィールドが含まれますが、OpenAIの開発者フォーラムへの返信によると、Decisionsではまだキャッシュは行われていないため、これらは0になると予想されます。
2つの乗数が適用されます。272Kトークンを超える入力は2倍の料金が請求され、これは100万トークンあたり$0.20になります(価格ページの長文コンテキスト乗数から導出)。米国またはEUのデータレジデンシーエンドポイントを介した地域処理は10%追加されます。/v1/decisionsについては、Batch、Flex、Fastティアは文書化されていないため、Responsesにのみ存在する割引を前提に計画を立てないでください。
以下は、サポートルーティングのワークロードに関する計算です。1つのリクエストで3つの質問を含む500トークンのチケットは、500 / 1,000,000 x $0.10 = $0.00005かかります。このようなチケットが100万枚あれば$50かかります。Responses APIを介して、100万出力あたり$0.50の40トークンのJSONラベルを使用すると、入力に加えて、推論トークン(LunaはResponsesで出力として請求し、Decisionsではまったく請求しない)の前に、リクエストあたり40 / 1,000,000 x $0.50 = $0.00002が追加されます。正直なところ、「Decisionsは出力トークンを請求しない」のであり、パーセンテージではありません。Lunaの料金カード全体と、プロンプトキャッシュがResponsesでどのように機能するかについては、GPT-6 Lunaとは何かをご覧ください。
Decisions、Structured Outputs、または関数呼び出しをいつ使用するか
OpenAIは、独自のJSONスキーマ(抽出されたフィールドや書かれた説明など)に従うオブジェクトが必要な場合はResponses APIでStructured Outputsを、モデルが引数付きのツール呼び出しを要求する必要がある場合は関数呼び出しを使用すると明確に線を引いています。Decisionsはコンテンツの分類、リクエストのルーティング、作業の優先順位付けに使用されます。
| 必要なもの | 使用するもの |
|---|---|
| ラベル、確率、または信頼度を伴う重要度 | Decisions API |
| 独自のJSONスキーマのオブジェクト(抽出されたフィールド、説明) | ResponsesのStructured Outputs |
| モデルにツールを選択させ、引数を入力させる | Responsesの関数呼び出し |
| ストリーミング、会話状態、ツール、キャッシュ、またはバッチ処理 | Responses API |
Structured Outputsのenumはラベルを返すことができます。ただし、確率分布やconfidenceフィールドは返せません。モデルにそれを記述するように要求した場合、それは生成されたテキストであり、測定された確率ではありません。Decisionsは、しきい値を設定できる数値を提供します。OpenAIは、誤検知のコストと偽陰性のコストを比較検討し、独自のアプリケーションでラベル付けされた例からそれらのしきい値を設定するように指示しています。これは、精度や校正の数値が公開されていないためです。2番目の型付き決定ベンダーを検討していますか?Decisions vs Jevの比較では、価格、入力、出力の形式が並べて解説されています。
画像とbase64の注意点
inputは、input_textとinput_imageパートを組み合わせたユーザーメッセージを受け入れ、オプションでlow、high、auto(デフォルト)、またはoriginalのdetailを持たせることができます。ガイドによると、画像はインラインのbase64データURLである必要があります。ホストされたURLとfile_idはサポートされていません。APIリファレンスには、公開アクセス可能なHTTP(S) URLもリストされており、1リクエストあたり最大128枚の画像に対応しています。base64を文書化されたパスとして扱い、信頼する前にホストされたURLをテストしてください。
データ管理
Decisions APIは、適格な顧客に対してZero Data Retention(データ保持なし)とHIPAA準拠をサポートしています。データレジデンシーと地域処理は、us.api.openai.comおよびeu.api.openai.comを介して米国およびヨーロッパ(EEAおよびスイス)でサポートされています。このエンドポイントは、サポートされているすべてのAPI地域からアクセス可能ですが、ある地域での可用性がそこで推論が実行されることを意味するわけではありません。悪用監視ログは、デフォルトで最大30日間保持されます。患者メッセージをルーティングする場合は、まず弊社のHIPAA APIコンプライアンスガイドをお読みください。
可用性: 現在ベータ版、まもなくGA
このエンドポイントは2026年10月6日にすべての開発者向けにパブリックベータ版として公開され、リファレンスでは「ベータAPI」の下に位置付けられています。OpenAIのガイドによると、GAは「数週間以内」に予定されているとのことですが、具体的な日付は示されていません。SDKの例では、Python 3.26.0、JavaScript 7.30.0、Go 3.73.0、Ruby 0.101.0、またはJava 4.78.0以降が必要です。PythonとJavaScriptではclient.decisions.create(...)で呼び出します。platform.openai.com/decisionsのPlaygroundでは、コードを記述する前に質問を試すことができます。Decisions固有のレート制限は公開されていません。組織の制限ページを確認してください。無料のDecisionsティアはありません。Lunaへの無料アクセスについては、弊社のLuna無料ルートに関する投稿をご覧ください。
ApidogでのDecisions呼び出しのテスト
型付きの回答はアサートが容易であり、それがこの機能のポイントです。以下の3つのステップでほとんどのチームに対応できます。
キーは一度だけ保存します。OPENAI_API_KEYをApidogの環境変数に保存し、Authorization: Bearerヘッダーで{{OPENAI_API_KEY}}を参照することで、リテラルのキーが共有リクエストに現れることはありません。
JSONPathアサーションを用いて、質問タイプごとに1つのリクエストを保存します: ステータス200、$.answers[0].typeがchoiceに等しいこと、$.answers[0].choiceがbillingに等しいこと、$.answers[0].confidenceが0.8より大きいこと、$.answers[?(@.name=='damaged')].probabilityが0.9より大きいこと、そして$.usage.output_tokensが0に等しいこと。これにより、請求書が届く前に予期せぬ請求を捕捉できます。
ラベル付けされたセットからしきい値を決定します。Apidogでテストシナリオを構築し、チケットテキストと期待される部門のCSVに対して同じリクエストを実行します。次に、誤検知のコストがレビューキューのコストを上回る点で自動ルーティングのしきい値を設定します。Apidog CLIを使ってCIで実行することで、モデルやエイリアスの変更が顧客への影響ではなくテスト失敗として検出されるようにします。ハウツーガイドでは、ルーターが完成する前にフロントエンドを構築できるように、answers配列のモックを含む各ステップを解説しています。
よくある質問
Decisions APIは新しいモデルですか? いいえ。これは、GPT-6 Luna上で動作するエンドポイント、POST /v1/decisionsです。Lunaは2026年9月22日にリリースされ、このエンドポイントは2026年10月6日にパブリックベータ版になりました。
Decisions APIの費用はいくらですか? 出力、キャッシュ読み取り、キャッシュ書き込みの費用はかからず、100万入力トークンあたり$0.10です。272Kトークンを超える入力は2倍になり、地域処理は10%追加されます。
独自のJSONスキーマを返しますか? いいえ。probability、choice、またはscoreフィールドを含むanswersを返します。独自のスキーマには、Responses APIのStructured Outputsを使用してください。
どのくらい正確ですか? OpenAIは精度や校正の数値を公開していません。独自のラベル付きデータからしきい値を設定してください。データ駆動型のLLMテストシナリオが実用的な方法です。
始め方
アプリが今日正規表現またはプロンプトと解析ループで行っているルーティング決定を1つ選び、それをotherフォールバックを持つ単一のchoice質問として記述し、50のラベル付き例で実行してみてください。信頼度分布がきれいに分離すれば、しきい値とテストができます。分離しない場合は、質問の基準をより明確にする必要があります。保存されたリクエストとアサーションでその実験を実行するには、Apidogをダウンロードし、上記のcurlをインポートしてください。
button
