🗂
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