メインコンテンツまでスキップ

構造化出力

中級
What you'll learn
  • スキーマ強制された出力が、JSON を期待してプロンプトを書くより優れている理由を説明する
  • JSON Schema を渡し、レスポンスを型付きオブジェクト(Pydantic / Zod)にパースする
  • 構造化出力とツール使用を、仕組みではなく意図で見分ける
  • タイトで信頼できるスキーマのための4つのコツを適用する
  • ひと言の判断ルールで正しいツールを選ぶ

Claude の出力が他のソフトウェアに渡るとき、信頼できる構造——既知の形に毎回一致する有効な JSON——が必要です。「JSON で答えて」と頼んで祈るのではなく、プラットフォームの構造化出力サポートを使いましょう。

このレッスンは、プロンプトで祈る方式がなぜ失敗するのかから、スキーマを強制して型付きオブジェクトにパースする方法まで導きます——そして、見た目がそっくりなときに構造化出力とツール使用をどう見分けるかも。上から下まで通して読み、終盤のクイズで自分を試してください。

信頼できる方法

出力の JSON Schema を渡し、API/SDK にそれを強制させてから、型付きオブジェクト(Python なら Pydantic、TypeScript なら Zod)にパースします。SDK の parse ヘルパーは、自分で JSON.parse して検証しなければならない文字列ではなく、型付きの結果を直接返してくれます。

Guided walkthrough1 of 3
  1. 必要な出力を JSON Schema としてモデル化します——Python なら Pydantic BaseModel で、TypeScript なら Zod スキーマで。
# Conceptual shape — see the official docs for the current API surface.
from pydantic import BaseModel

class Ticket(BaseModel):
title: str
priority: str # "low" | "medium" | "high"
tags: list[str]

# Request the model to return data conforming to Ticket's JSON schema,
# then parse the response into a Ticket instance.

調整できる具体的なリクエストが欲しいですか?モデルに渡すものの形は次のとおりです——モデルを自分のスキーマに置き換えてください。

スキーマ準拠の出力を求める

Return the data conforming to this JSON Schema:

{
"title": "string",
"priority": "low | medium | high",
"tags": ["string"]
}

Do not include any prose outside the JSON.

なぜ単にプロンプトで JSON を求めないのか?

プロンプトで JSON を頼むことはできますし、単純なケースでは機能します——しかしブレることがあります。余計な散文、末尾のカンマ、欠けたフィールド。スキーマ強制された出力はこの種のバグを取り除きます。これは、下流のシステムがそれに依存した瞬間に効いてきます。

Watch out
  • プロンプトされた JSON はデモでは動き、本番で壊れます。障害は下流のシステムがパースしたときにだけ現れます。
  • 注意すべき典型的な3つのブレ:JSON の周りの余計な散文、末尾のカンマ、欠けた必須フィールド。

構造化出力 vs. ツール使用

どちらの機能もモデルに JSON Schema を渡すので、見た目は似ています——そして人々は間違ったほうを選びます。違いは意図であって、仕組みではありません。

構造化出力ツール使用
欲しいもの固定された形での最終的な答えモデルに機能を呼び出させる(関数を呼ぶ、データを取得する、アクションを取る)
誰が使うかあなたのコードが直接あなたのコードがツールを実行し、その結果をモデルに返す
ターンの形1回のレスポンスで完了ループ:モデルが尋ね、あなたが実行し、モデルが続ける
典型的な用途抽出、分類、パースエージェント、ライブ検索、副作用

ひと言の判断ルール:

JSON が成果物そのものなら、構造化出力を使います。JSON がモデルからあなたのコードへ何かをさせる依頼なら、それはツール使用です。エージェントはしばしば両方を使います——行動するためのツールと、きれいな最終結果を返すための構造化出力。

コツ

Pro tip
  • スキーマをタイトに保つ——固定の選択肢には enum を使い、必須フィールドをマークする。
  • フィールドを説明する——フィールドの説明はミニプロンプトのようにモデルを導く。
  • 境界で必ず検証する——防御的なパースは安価な保険。
  • 抽出タスクでは、構造化出力 + 明確なスキーマが自由形式に毎回勝つ。
Key takeaways
  • API/SDK に JSON Schema を渡して型付きオブジェクトにパースする——プロンプトで祈らない。
  • JSON をプロンプトで求めるとブレうる(余計な散文、末尾のカンマ、欠けたフィールド)。スキーマ強制はそのバグ群を取り除く。
  • 構造化出力 vs. ツール使用は意図で異なる:JSON が答えそのもの vs. JSON がアクションを要求する。
  • タイトなスキーマ、説明されたフィールド、境界での検証が、抽出と分類を信頼できるものにする。

用語を定着させる

Enter キーまたはスペースキーでカードを裏返します。左右の矢印キーでカードを移動できます。用語を表示しました。
1 / 5

理解度チェック

0/4
  1. Claude から構造化された JSON を得る信頼できる方法は?
  2. 下流のシステムが依存した途端、JSON をプロンプトで求めるのがなぜ危険なのか?
  3. 構造化出力とツール使用を実際に区別するものは?
  4. スキーマ設計の健全なアドバイスはどれ?

次へ