Structured Outputとは
構造化出力 / JSON Mode
LLMの出力を、あらかじめ定義したJSONスキーマなど決まったデータ構造に厳密に従わせる機能
ひとことで言うと
AIの返事を、決まった項目を持つデータの形できっちり出させる機能。プログラムがそのまま扱える。
概要
Structured Outputは、LLMに自然文で応答させるのではなく、あらかじめ指定したJSONスキーマなどのデータ構造に厳密に従った形式で応答を生成させる機能で、後続のプログラムがLLMの出力をそのままパースして扱えるようにする。 プロンプトで「JSON形式で答えて」と依頼するだけでは、余計な説明文が混じったり必須フィールドが抜け落ちたり型が一致しなかったりすることがある。 Structured Outputはデコード時、指定スキーマに適合しないトークンの生成そのものを制約する仕組みにより、出力が常にスキーマへ準拠することを保証する。 ツールコーリングにおける引数の生成、データベースへの登録用データの抽出、他システムとの連携などで特に有用で、LLMの出力を後段のソフトウェアに安全に組み込む上で重要な機能になっている。 OpenAIやAnthropic、Googleなど主要なLLM提供元のAPIで、スキーマを指定して出力形式を制約する機能として提供されている。
背景
LLMの出力はあくまで自然文の生成であり、プロンプトで形式を指示するだけでは出力の構造を確実には保証できない。 Structured Outputは、デコード時にスキーマ違反となるトークンの生成そのものを制約する仕組みを導入し、出力形式の保証という実用上の課題を解決するために整備された。
歴史
2023年: OpenAIがFunction Callingにより、関数の引数としてJSON形式の出力を生成できる機能を提供。 2024年8月: OpenAIが「Structured Outputs」として、指定したJSON Schemaへの厳密な準拠を保証する機能をAPIに追加(gpt-4o-2024-08-06以降で対応)。
ワークフロー
アプリケーション側で、期待する出力の構造をJSONスキーマなどの形式で定義する。 プロンプトとともにこのスキーマをAPIへ渡すと、モデルは生成の各ステップでスキーマに違反しないトークンだけを候補として出力を生成する。 得られた出力はスキーマに準拠したJSON等として、そのままプログラムでパースして利用できる。
コード例
OpenAI APIでのStructured Output指定例
from pydantic import BaseModel
class Event(BaseModel):
name: str
date: str
response = client.responses.parse(
model="gpt-4o",
input="来週の会議の情報を抽出して",
text_format=Event,
)利点
- 後続のプログラムがLLMの出力をそのままパースでき、余計な後処理や例外処理を減らせる
- 必須フィールドの欠落や型の不一致など、出力形式に起因するエラーを構造上防げる
- ツールコーリングやデータ抽出など、他システムとの連携を前提とした用途と相性がよい
欠点
- 複雑すぎるスキーマを指定すると、生成品質や応答速度に影響することがある
- スキーマの制約は出力の「形式」を保証するものであり、内容の正しさまでは保証しない
- 対応する出力形式や制約の仕様がLLM提供元ごとに異なり、互換性に注意が必要
比較
- ファンクションコーリング — Function CallingはStructured Outputの応用例の1つで、呼び出す関数の引数を構造化された形式で出力させる
- ツールコーリング — Structured OutputはToolコーリングの引数生成において、意図しない形式のずれを防ぐ役割を果たす
- プロンプトエンジニアリング — 出力形式をプロンプトの文章だけで指示する従来のやり方に比べ、Structured Outputは形式をAPIレベルで保証する
関連用語
よくある質問
プロンプトで「JSONで返して」と頼むのと何が違う?
プロンプトによる指示は、モデルがそれに従わず余計な文章や不正な形式を返すことがある。Structured Outputはデコード時にスキーマ違反のトークンを生成候補から除外するため、出力形式そのものを構造的に保証できる。
Structured Outputは出力の内容の正しさも保証する?
保証しない。あくまで指定したスキーマに沿った「形式」を保証する機能であり、抽出された値が事実として正しいかどうかは別途検証が必要。
参考文献
- DocumentationOpenAI Structured Outputs