🗂

Structured Outputsで複数の選択肢から値を返す書き方

に公開

執筆日

2026/01/20

はじめに

OpenAI の Structured Outputs は、LLM の出力を
事前に定義した構造(JSON Schema / Pydantic)に厳密に従わせるための仕組みです。

Structured Outputs を使っていると、次のような要件に直面することがよくあります。

  • 出力は 複数の選択肢から1つを選ばせたい

本記事では、Structured Outputs で「複数の選択肢から値を決める」場合の基本的な書き方を整理します。


書き方

複数の選択肢から必ず1つを選ばせたい場合

from pydantic import BaseModel
from typing import Literal

class Output(BaseModel):
    status: Literal["ok", "ng"]

この定義では、Structured Outputs が次を保証します。

  • フィールド status は必須
  • 値は "ok" または "ng" のみ
  • null やフィールド欠落は発生しない

自動判定や後続処理にそのまま使う場合、この形が最も安全です。


任意(null / 欠落)を許可する場合

from pydantic import BaseModel
from typing import Optional, Literal

class Output(BaseModel):
    status: Optional[Literal["ok", "ng"]]

この場合、status は任意項目となり、

  • "ok" / "ng"
  • null
  • フィールド欠落

が許可されます。


ヘッドウォータース

Discussion