本文へスキップ

Structured Output(構造化出力)

この記事は8で読めます

ざっくり言うと

Structured Output(構造化出力)とは、AI(とくに大規模言語モデル)の答えを、自由な文章ではなく決まった形のデータで受け取る考え方です。形の指定にはJSONなどを使います。

各社のAPIにあるStructured Outputs機能では、対応するモデルと対応するスキーマの範囲で、指定した形に沿うよう生成を制約できます。

スキーマというのは、どんな項目を、どんな種類の値で返すかを決めておくルールのことです。

チャットの画面で「JSONで返して」と頼むのと、APIへスキーマを渡して形を制約するのとでは、守られる範囲が違います。

イメージ

例えるなら、自由作文とマークシートの違いに近いです。自由作文は読んでいて面白いのですが、機械で集計するのは大変です。

マークシートなら決まった欄に印がつくので、機械がそのまま数えられます。Structured Outputは、AIにマークシート形式で答えてもらう頼み方です

正確には

Structured Outputは、APIを使うときに「答えはこのスキーマに従ってください」と指定する機能を指します。名前、パラメータ、対応するJSON Schemaの範囲、例外が起きたときの扱いは、提供元ごとに違います。

2026年7月27日時点で、スキーマを使う構造化出力を案内しているのは、次の3つのAPIです。

提供元機能名概要
OpenAIStructured Outputs応答形式、またはstrictなFunction Callingで、対応範囲のJSON Schemaへ出力を制約
Anthropic(Claude)Structured outputsoutput_config.formatによるJSON outputsと、strict: trueによるstrict tool useを提供
Google(Gemini)Structured outputsInteractions APIやGenerate Content APIで、対応するJSON Schemaのサブセットへ出力を制約

自由な文章のまま渡すと、3つのつまずきが起きます

LLMの答えをそのままプログラムへ流し込もうとすると、地味につらい問題が起きます。よく起きるのは次の3つです。

  • 書式がブレる
    同じ質問でも、返し方が毎回少しずつ違います。JSONのつもりが文章だったり、余計な説明が付いたりします。
  • キーの名前が揺れる
    assigneeだったり担当者だったりpersonだったり、呼び方が安定しません。
  • 必須の項目が抜ける
    期限を出してほしいのに、たまに省略されます。

Structured Outputを使うと、対応する条件の範囲で、スキーマに沿うよう出力を制約できます。そのぶん、受け取る側のプログラムにとって、値を読み取りやすい形です。

JSONを返させる機能には、もうひとつJSON modeがあります。OpenAIの現行ドキュメントは、この2つを次のように区別しています。JSON modeは、有効なJSONを作るところまでの機能です。Structured Outputsは、対応するスキーマへの適合まで踏み込みます。

Function Callingは道具を呼び、構造化出力は返事の形を決めます

ほぼ同じ場面で使われる仲間に、Function Calling(Tool Use)があります。違いは、どこを構造化するかです。

Function Calling(Tool Use)

AIに外部の道具(関数やAPI)を呼ばせるための仕組みです。道具へ渡す引数を構造化します。

Structured Output

AIの返事そのものを構造化するための仕組みです。出力の形を縛ります。

道具を呼ぶのがFunction Calling、答えの形を決めるのがStructured Outputです。ツールの引数にもstrictなスキーマ制約をかけられるAPIがあり、両方を組み合わせることもできます。

使う場面

構造化出力が向いている場面

使う前に、返してほしい項目を決めましょう

Structured Outputは便利ですが、どんな欄を用意するかを先に決めておかないと力を発揮しません。

たとえば問い合わせメールを分類するなら、少なくともこれくらいは決めます。

  • category:返品、予約、質問、苦情など
  • priority:高、中、低など
  • summary:人が読む短い要約
  • needs_reply:返信が必要かどうか

はじめから完璧なスキーマを作ろうとせず、そのあとの作業で本当に使う項目だけから始めてください。欄が細かすぎると、AIも人も確認が大変になります。小さく作って、使いながら増やすほうが失敗しにくいです

確かめるときは、AIの返答そのものより、受け取る側のプログラムが迷わず読めるかを見てください。見るのは次の4点です。

  1. 必要なキーが毎回入っているか
  2. 値の種類が、決めた型に合っているか
  3. 空欄にしてよい項目と、必ず埋める項目が分かれているか
  4. 想定外の文章が混ざっても、処理が止まらないか

ここを確かめておくと、AIの出力を表計算ソフト、顧客管理システム(CRM)、予約管理、社内ツールへ渡すときの事故を減らせます。

注意点

関連用語

  • Function Calling(Tool Use) — 外部の道具(関数やAPI)をAIに呼ばせ、渡す引数を構造化する仕組みです。
  • API — ソフトウェア同士が決まった手順でやり取りするための窓口です。
  • ハルシネーション — 事実と違う内容を、AIがもっともらしく書いてしまう現象です。
  • プロンプト — ふだんAIへ渡している指示文のことです。頼み方しだいで、返ってくる形も変わります。

やってみよう

よくある質問

Q. Structured Output(構造化出力)とは何ですか?
A. AIの答えを自由な文章ではなく、JSONなど決まった形のデータで受け取る考え方です。どんな項目を、どんな種類の値で返すかを、あらかじめ決めておきます。
Q. 構造化出力は、どんな場面で使いますか?
A. AIの結果を別のシステムへ渡す場面です。会議メモからタスク一覧を作る、問い合わせメールを分類する、レシート画像を経費データにする、といった使い方があります。
Q. Structured OutputとFunction Callingは、何が違いますか?
A. 構造化する場所が違います。Function Callingは外部の道具へ渡す引数を構造化し、Structured Outputは返事そのものの形を縛ります。両方を組み合わせることもできます。
Q. 形をそろえれば、中身も正しくなりますか?
A. そろうのは形だけで、値が事実かどうかは別の話です。元の文書に書いていないことを、それらしく埋めてしまうこともあります。大事な抽出結果は、人が目を通してください。

公開: 更新: ✓ 公式情報と照合:

参考ソース

判断クイズ

JSONで返ってきたら、中身も信用してよいと思っていませんか?

3問です。答えるとその場で解説が出ます。全問終えたら、「回答を記録する」で学習の記録に残せます。

1. レシート画像から経費データを作りました。金額が決まった項目で返ってきます。次にすることは?
2. 「チャットで『JSONで返して』と頼んでいるので、APIのStructured Outputsは要らないのでは」と言われました
3. 問い合わせメールの仕分けを自動化します。スキーマの項目はどう決めますか?

全問に答えると、回答を記録できます。

残るのは「答えたかどうか」だけで、正解数は保存されません。この端末の中だけに残り、別の端末には引き継がれません。

この教科書は無料で全文公開しています。仕事で使えるところまで進みたい方は、実習と資料がそろった生徒プランをどうぞ。

生徒プランを見る(14日間無料)

あわせて読みたい