OpenAIのDecisions APIとは?料金(出力は無料)と3つの答えの型、Responses APIとの使い分け

OpenAIのDecisions API。答えの型と料金・使い分け。出力には料金がかからない。答えの型はpredicate、choice、score。predicateは、当てはまるかを0〜1の確率で返す。choiceは選んだ値、scoreは段階の点数を返す。判定・分類・点数づけはDecisions API。項目の取り出しや文章は、Responses APIのStructured Outputs。判定や分類をAPIで回している人へ

OpenAIのDecisions APIは、問い合わせの振り分けや「条件に当てはまるか」の判定のように、答えの形が決まった判断をすばやく返すAPIです。OpenAIの発表では、Responses APIでgpt-6-lunaを使うときより最大で10倍速いとしています。料金は入力100万トークンあたり0.10ドルで、出力には料金がかかりません。

分類や判定をResponses APIで回している人は、まずOpenAIのPlaygroundで質問と入力を試してから、curlかPythonで呼び出せます。

2026年10月26日8時18分(日本時間)時点の、OpenAIの開発者向けドキュメントの内容です。

項目 内容
使えるモデル gpt-6-lunaだけ
送り先 POST /v1/decisions
答えの型 predicate・choice・score
1回の質問の数 1〜400個
入力の料金 100万トークンあたり0.10ドル
出力の料金 かからない
一般提供 2026年10月22日
目次

Decisions APIとは

Decisions APIのガイドによると、Decisions APIは、テキスト・画像・JSONを読んで、決まった型の答えを返すAPIです。条件に当てはまる確率、決まった選択肢のどれか、決めた基準での点数の3つを返せます。

OpenAIの変更履歴では、2026年10月6日にベータとして出て、10月22日に一般提供(GA)になりました。一般提供で、1回のリクエストに入れられる質問の数が、ベータの200個から400個に増えました。プロンプトキャッシュ、質問ごとの画像、JSONの入力にも対応しています。

3つの答えの型

型 聞くこと 返る答え
predicate 当てはまるか 0〜1の確率
choice どれを選ぶか 選んだ値
score どの段階か 段階の点数

choiceは、部署のように順番のない分類に使います。scoreは、深刻さのように順番のある段階に使います。choiceとscoreは、選択肢や段階ごとの確率と、confidence(確信度)も返します。

scoreの段階は2〜10個で、低い順に並べ、番号は0から始まります。点数は、段階の番号を確率で重みづけした平均です。たとえば3段階の確率が0.1・0.7・0.2なら、点数は1.1になり、段階と段階の間の値になることもあります。

1回のリクエストには、1〜400個の質問を入れられ、質問ごとに型を変えられます。前の答えによって次の質問が変わるときは、リクエストを分けて送ります。

入力には、テキスト、画像、JSONのほか、会話の履歴や、ツールの呼び出しとその結果も入れられます。ファイルと音声は入れられません。画像は、base64のデータURLか、公開されているHTTP・HTTPSのURLで渡します。file_idでは渡せません。

向いている使い方とResponses APIとの使い分け

ガイドでは、使い道として、内容の分類、リクエストの振り分け、作業の優先順位づけが挙がっています。例として載っているのは、商品の写真に割れやへこみがあるかの判定、問い合わせを担当の部署に回す判定、不具合の深刻さの評価です。

自分で決めたJSONスキーマに沿って項目を取り出したいときや、説明の文章を作りたいときは、Responses APIのStructured Outputsを使います。モデルにツールを呼び出させたいときは、function callingを使います。

やりたいこと 使うもの
判定・分類・点数づけ Decisions API
項目の取り出し・文章 Structured Outputs
ツールの呼び出し function calling

データの扱い

ガイドによると、Decisions APIは、条件を満たす利用者向けに、ZDR(不正利用の監視の記録に、送った内容を残さない設定)とHIPAAでの利用に対応しています。データの扱いのページによると、ZDRはOpenAIの事前の承認が必要で、HIPAAでの利用にはBAAなどの契約が必要です。ZDRでも、プロンプトキャッシュのデータはGPUに最大24時間残ることがあり、CSAMの検査で引っかかった画像は残されます。データを特定の地域で処理する設定は、米国と欧州(EEAとスイス)で使えます。使えるかどうかは営業窓口に確かめる必要があり、米国以外の地域では追加の承認と契約も必要です。

料金

料金ページとガイドによる、gpt-6-lunaの100万トークンあたりの料金です。Decisions APIでは、出力に料金がかかりません。

項目 Decisions Responses
入力 0.10ドル 0.10ドル
出力 かからない 0.50ドル
キャッシュの読み込み 0.01ドル 0.01ドル
キャッシュの書き込み Responsesと同じ 0.125ドル

ガイドでは、Decisions APIのキャッシュの読み込みと書き込みの料金は、gpt-6-lunaのふつうのプロンプトキャッシュの料金と同じとしています。料金ページでは、gpt-6-lunaの30分保持の書き込みは、100万トークンあたり0.125ドルです。プロンプトキャッシュのガイドによると、書き込みの料金はふつうの入力の料金に上乗せされるものではなく、書き込んだトークンに、ふつうの入力の料金のかわりにかかります。

データを特定の地域で処理するときの割増しと、長い入力のときの割増しもかかります。Decisions API以外でgpt-6-lunaを使うときは、ふつうのモデルの料金になります。ほかの安いモデルの料金は、MiniMax M3.1 Flashとは?で説明しています。

APIで呼び出す

コードを書く前に試すなら、OpenAIのPlaygroundで、質問と入力を試せます。開くには、OpenAIのアカウントでのログインが必要です。

APIキーは、環境変数OPENAI_API_KEYに入れておきます。問い合わせの文を、4つの部署のどれに回すかをchoiceで聞く、ガイドの例です。

export OPENAI_API_KEY="ここに自分のAPIキー"

curl https://api.openai.com/v1/decisions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6-luna",
    "input": "I was charged twice for my order.",
    "questions": [{
      "type": "choice",
      "name": "department",
      "instructions": "Which department should handle this complaint?",
      "choices": [
        {"value": "billing", "description": "Payments, invoices, and refunds."},
        {"value": "technical", "description": "Problems using the product."},
        {"value": "shipping", "description": "Delivery and tracking."},
        {"value": "other", "description": "Requests outside these categories."}
      ]
    }]
  }'

リクエストは、model、input、questionsの3つでできています。inputには、質問の判断に使う材料を入れます。質問ごとにnameをつけると、答えにも同じ名前が入ります。どの選択肢にも当てはまらない入力のために、otherのような受け皿の選択肢を入れておくよう、ガイドではすすめています。

ガイドにある、返ってくる答えの例です。

{
  "answers": [
    {
      "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
    }
  ]
}

choiceに選ばれた値が、probabilitiesに選択肢ごとの確率が、confidenceに確信度が入ります。

Pythonで呼び出す

OpenAIのPython SDKでは、client.decisions.createで呼び出します。モデルが答えを断ったときは、その質問の答えの型がrefusalになり、質問のnameが入ります。ほかの質問には答えが返ることもあるので、質問ごとに型を確かめます。

from openai import OpenAI

client = OpenAI()

decision = client.decisions.create(
    model="gpt-6-luna",
    input="I was charged twice for my order.",
    questions=[
        {
            "type": "choice",
            "name": "department",
            "instructions": "Which department should handle this complaint?",
            "choices": [
                {"value": "billing", "description": "Payments, invoices, and refunds."},
                {"value": "technical", "description": "Problems using the product."},
                {"value": "shipping", "description": "Delivery and tracking."},
                {"value": "other", "description": "Requests outside these categories."},
            ],
        }
    ],
)

answer = decision.answers[0]
if answer.type == "refusal":
    print(f"Refused: {answer.name}")
elif answer.type == "choice":
    print(f"Department: {answer.choice} (confidence: {answer.confidence})")

しきい値の決め方

確率や確信度のどこで区切って、振り分けや確認に回すかは、自分のアプリの、正解がわかっている例を使って決めるよう、ガイドではすすめています。当てはまらないものを当てはまるとしたときの損と、見落としたときの損の大きさを比べて選びます。

プロンプトキャッシュで安くする

同じ資料や画像をinputに入れたまま、質問だけを変えて何度も送ると、共通の部分がキャッシュされます。キャッシュに当たったリクエストでは、共通の部分に安い読み込みの料金がかかります。最初にキャッシュに書き込むときは、書き込みの料金がかかります。キャッシュできる共通の部分は1,024トークン以上必要で、questionsの中身は数に入りません。共通の部分は、リクエストごとにまったく同じにしておきます。

キャッシュと使用量の確かめ方

キャッシュが効いたかは、レスポンスのcached_tokens(usage.input_tokens_detailsの中)で確かめます。書き込んだ分はcache_write_tokensです。どちらの数もusage.input_tokensにすでに含まれているので、usage.input_tokensに足さないでください。

組織全体の使用量とリクエストの数は、GET /v1/organization/usage/decisionsで見られます。管理者用のAPIキーと、api.usage.readの権限が必要です。num_model_requestsはリクエストの数で、質問がいくつあっても1回と数えます。

APIキーが漏れたかもしれないときの作り直し方は、OpenCodeでAPIキー漏えいの可能性で説明しています。OpenAIのモデルをGoogle Cloudで使う方法は、OpenAIのモデルがGoogle Cloudにで説明しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

社内エンジニアとして、SREとセキュリティの仕事をしています。サーバーの構築や運用、クラウド環境の設計にも関わってきました。趣味はゲームと漫画・アニメ。

コメント

コメントする

目次