C
Claude Academy
Structured Output (JSON)

JSON / 構造化出力

約 10 分 · クイズ 3 問 · 演習 1 問
重要キーワード (3 語)
Structured Output (構造化出力) — JSON など機械可読フォーマットで結果を返させること
JSON Schema (JSONスキーマ) — JSON の形を定義する仕様
Pydantic (ピダンティック) — Python の型付き検証ライブラリ

JSON / 構造化出力

API 連携や DB 投入には 正確な JSON が必要です。 Claude に JSON を返させる定石を見ていきましょう。

方法 1: Tool Use の入力スキーマを利用

最も信頼性が高い方法。Tool Use の input_schema は JSON Schema なので、 ツールを「定義 → 呼ばせる → input をそのまま使う」と確実に構造化されます。

tools = [{
    "name": "extract_meeting",
    "description": "テキストから会議情報を抽出",
    "input_schema": {
        "type": "object",
        "properties": {
            "title": {"type": "string"},
            "date": {"type": "string", "format": "date"},
            "attendees": {"type": "array", "items": {"type": "string"}},
        },
        "required": ["title", "date"],
    },
}]
res = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=512,
    tools=tools,
    tool_choice={"type": "tool", "name": "extract_meeting"},
    messages=[{"role": "user", "content": "5/8 14:00 から 田中・佐藤と週次定例"}],
)
data = next(b.input for b in res.content if b.type == "tool_use")
# data: {"title": "週次定例", "date": "2026-05-08", "attendees": ["田中", "佐藤"]}

方法 2: プロンプトで JSON 指示

シンプルな場合はプロンプトだけで OK。

出力は次の JSON のみで、解説は不要:
{
  "title": "...",
  "date": "YYYY-MM-DD",
  "attendees": ["...", "..."]
}

temperature=0 を併用するのが安定です。

方法 3: assistant プレフィックスを使う

API は messages の最後に {"role": "assistant", "content": "{"} を入れると JSON の { の続きから生成 させられます。

messages=[
    {"role": "user", "content": "..."},
    {"role": "assistant", "content": "{"},
]

返ってくる文字列の先頭に { を付けて json.loads すれば安全に解析可能。

Pydantic で検証

from pydantic import BaseModel

class Meeting(BaseModel):
    title: str
    date: str
    attendees: list[str]

m = Meeting.model_validate(data)

検証エラー時は 再試行ループ に乗せるのが堅牢な実装です。

失敗パターン

❌ 解説が混ざる: 「以下が JSON です: { ... }」 → 「JSON 以外の文字列を出力するな」を strict に書く / Tool Use を使う

❌ trailing comma で json.loads が落ちる → Tool Use の input は SDK が安全に dict にしてくれる

❌ 配列の数が指定外 → JSON Schema の minItems / maxItems で制約

試す

JSON 抽出をやってみましょう。

▶ JSON 抽出 (Tool Use なし版)
次のメモから JSON を抽出してください。出力は JSON のみ、解説は禁止。 メモ: 5/8 14:00 から 田中・佐藤と週次定例 出力スキーマ: {title: string, date: "YYYY-MM-DD", attendees: string[]

}

Hands-on 演習

演習 1: Pydantic 検証付き抽出

次のスキーマで会議メモから JSON を抽出 → Pydantic 検証 → 失敗なら 1 回だけ再試行、するスクリプトを書いてください。

class Meeting(BaseModel):
    title: str
    date: str  # YYYY-MM-DD
    attendees: list[str]
▶ Playground を開いて実行
💡 ヒント

再試行時は assistant の前回応答 + 「次のエラーで失敗しました: 。スキーマに合うよう修正してください」を渡すのが定石。

進捗保存にはログインが必要 クイズに挑戦 (3問)

💬 このレッスンへの質問 (0)

全質問を見る →
質問の投稿には ログイン が必要です。閲覧は誰でも可能です。

まだ質問はありません。最初の 1 件を投稿してみましょう。