OpenAI Decisions API パブリックベータ: テキストおよび画像の高速で構造化された分類

TL‑R; OpenAI Decisions API は現在、ベータ版として公開され、以下の機能を提供します

  • 何: gpt‑6‑luna モデル上で構築された新しい /v1/decisions エンドポイント。型付きの「決定」結果(述語の確率 — yes/no)を返します。
  • なぜ
    • 10‑× 10‑倍の高速化

Decisions API とは何か?

Decisions API は、gpt‑6‑luna モデルの上に構築された専門的な 意思決定サービス です。以下の1つのリクエストを受信します:

フィールド 目的
model 現在は gpt‑6‑luna のみがサポートされています。
input テキスト、ユーザーのメッセージ、または base‑64 エンコードされた画像。決定の根拠となる証拠を提供します。
questions 1つ以上の 質問オブジェクト。必要な決定の種類(述語、選択、スコア)を記述します。

レスポンスは answers 配列であり、各回答は質問に付けた name と一致するため、アプリケーションロジックに戻すのは非常に簡単です。


Decisions API と Responses API の使い分け

用途 推奨される API
二値の yes/no 分類(例: 「目視で損傷がありますか?」) Decisions API – 単一の確率(0‑1)を返し、約10倍高速です。
固定リストからカテゴリを選択(例: サポートチケットのルーティング) Decisions API – 選択された値、各選択肢の確率、信頼度スコアを返します。
順序付き基準(深刻度、リスクなど)に基づいてアイテムをスコアリング Decisions API – 確率加重数値スコアと分布を返します。
複雑な JSON オブジェクト、自由形式の説明、関数呼び出しが必要 Responses API(構造化出力または関数呼び出し)

要するに、型付きの答え(述語/選択/スコア)が必要で、レイテンシーやコストに気を遣う場合は Decisions API を使用してください。


質問の種類とその出力

種類 一般的なシナリオ 回答内の主なフィールド
predicate Yes/No チェック — 損傷検出、コンプライアンス、センチメント。 probability (0‑1)
choice カテゴリルーティング — 部門、製品タイプ、言語。 choice (選択された値), probabilities (配列), confidence
score 順序付き評価 — 深刻度、優先度、品質ランク。 score (浮動小数点), probabilities (各レベルごと), confidence

述語 は単一の確率を返します。選択 は選択された値に加え、完全な確率分布と全体的な信頼度メトリクスを返します。スコア は離散レベル間の重み付き平均を返し、曖昧なランク付けに有用です。


クイックスタートコードスニペット(Python、Node、Go、Java、Ruby)

すべてのSDK例には、OpenAI SDK ≥ Python 3.26.0、JavaScript 7.30.0、Go 3.73.0、Ruby 0.101.0、Java 4.78.0 が必要です。

Python(述語 — 画像損傷検出)

import base64, pathlib
from openai import OpenAI

client = OpenAI()
img_b64 = base64.b64encode(pathlib.Path('product.png').read_bytes()).decode()
decision = client.decisions.create(
    model='gpt-6-luna',
    input=[{
        'role': 'user',
        'content': [
            {'type': 'input_text', 'text': 'Inspect the product in this photo.'},
            {'type': 'input_image', 'image_url': f'data:image/png;base64,{img_b64}'}
        ]
    }],
    questions=[{
        'type': 'predicate',
        'name': 'visible_damage',
        'instructions': 'Does the product have visible damage (crack, tear, dent)?'
    }]
)
print(decision.answers[0].probability)

Node(選択 — チケットルーティング)

import OpenAI from 'openai';
const client = new OpenAI();
const decision = await 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, refunds'},
      {value: 'technical', description: 'Product usage problems'},
      {value: 'shipping', description: 'Delivery & tracking'},
      {value: 'other', description: 'Anything else'}
    ]
  }]
});
const ans = decision.answers[0];
console.log(`${ans.choice} (confidence ${ans.confidence})`);

Go(スコア — イシュー深刻度)

import (
    "context"
    "encoding/base64"
    "os"
    "github.com/openai/openai-go/v3"
)

func main() {
    img, _ := os.ReadFile("product.png")
    client := openai.NewClient()
    decision, _ := client.Decisions.New(context.Background(), openai.DecisionNewParams{
        Model: "gpt-6-luna",
        Input: openai.DecisionNewParamsInputUnion{OfString: openai.String("Export fails in Safari but works in Chrome.")},
        Questions: []openai.DecisionNewParamsQuestionUnion{{
            OfScore: &openai.DecisionNewParamsQuestionScore{
                Name: openai.String("severity"),
                Instructions: "How severe is this issue?",
                Levels: []openai.DecisionNewParamsQuestionScoreLevel{{Label: "Cosmetic"}, {Label: "Workaround"}, {Label: "Blocked"}},
            },
        }},
    })
    fmt.Println(decision.Answers[0].AsAny().(openai.DecisionAnswerScore).Score)
}

(他の言語のスニペットは構造が同一。Ruby および Java の詳細はドキュメントを参照。)


パフォーマンスとコスト

  • レイテンシー – パブリックベータの測定結果では、中央値が 160‑175 ms、95パーセンタイルで約285 ms、最悪ケースで約743 ms(@agentdev001 のコメントを参照)。これは、同等のワークロードに対して、汎用 Responses API よりも約 10倍高速 です。
  • 料金 – gpt‑6‑luna では、入力トークン に対してのみ課金され、100万トークンあたり $0.10 です。出力トークンの料金は発生しません。API は構造化された決定フィールドのみを返すためです。
  • データ制御 – Zero Data Retention (ZDR) および HIPAA 対応の利用をサポート。米国およびEEA+スイスでリージョン処理が利用可能です。

Hacker News からのコミュニティの知見

コメント投稿者 主なポイント
@simonw 使用可能な llm-openai-decisions プラグインを共有し、このエンドポイントが他のプロバイダーにとってデファクトスタンダードになる可能性を指摘。
@agentdev001 実世界のレイテンシー(中央値160‑175 ms)を報告し、マルチモーダル画像対応の100万トークン窓を確認。
@TSiege 安価な二値のyes/noスコアがAI市場を商品化し、プロバイダー間の価格競争を引き起こす可能性を主張。
@AM1010101 キャッシュの欠如に言及。長時間のシステムプロンプトを再利用できるはずのバッチ処理に影響を与える可能性。
@armcat 統計実験を実施:述語確率は適切にキャリブレーションされているが、選択確率は選択肢の順序によってバイアスされる可能性がある。
@solatic 価格差に注目:OpenAI $0.10 対 Jev $0.042(100万トークンあたり)。
@mritchie712 画像入力を受け入れられる点を強調。多くの競合分類器にはない機能。
@bob1029 ロウ確率を公開すると、数値が誤解されるとユーザーの信頼が損なわれる可能性があると警告。
@Sunny_Fung Decisions をLLM駆動エージェントの「小脳」と位置づけ、高速で決定的なルーティングを処理すると述べ。

全体的な意見:開発者は速度とマルチモーダル機能に期待しているが、キャリブレーション、価格、専用決定モデルの長期的戦略的位置づけに懸念を抱いている。


ベストプラクティスチェックリスト

  1. 適切な質問タイプを選ぶ – 二値チェックには predicate、順序なしカテゴリには choice、順序付き基準には score を使用。
  2. 各質問に一意の名前を付ける – name フィールドは回答に反映され、後続ロジックの主要キーとなります。
  3. 明確な指示と明確な選択肢を提供する – 不明確な表現は信頼度スコアを低下させる。
  4. キャリブレーションされたデータに基づいて閾値を設定する – 0.9の確率が実世界で約90%の正確性に対応していることを検証。
  5. フォールバックオプションを含める – choice 質問では、範囲外の入力をキャプチャするための「その他」を追加。
  6. ZDR およびリージョン処理を検討する – PHI、GDPR対応データ、またはデータ保存の保証が必要な場合はこれらのフラグを有効化。
  7. レイテンシーとコストを監視する – レスポンスの usage ブロックを使ってトークン消費を追跡。OpenAI のコスト分析ツールと組み合わせて使用。

今後の展望

OpenAI は、今後数週間で Decisions API を GA(一般提供)に移行する予定で、gpt‑6‑luna 以外のモデルもカタログに追加する可能性があります。コミュニティでは、Live API との統合(音声駆動の意思決定)や、モデルが成熟した段階で、このエンドポイントがより広範な Responses ファミリーに組み込まれる可能性を期待しています。


結論 – Decisions API は、テキストおよび画像から構造化された型付き分類を高速かつコスト効率よく取得するための実用的な手段を提供し、カスタム分類器の構築や汎用 Responses API でのプロンプトの過剰設計を回避する代替手段として位置づけられます。

Sources

関連