JSON / 構造化出力
API 連携や DB 投入には 正確な JSON が必要です。 Claude に JSON を返させる定石を見ていきましょう。
方法 1: Tool Use の入力スキーマを利用
最も信頼性が高い方法。Tool Use の input_schema は JSON Schema なので、
ツールを「定義 → 呼ばせる → input をそのまま使う」と確実に構造化されます。
from pydantic import BaseModel
class Meeting(BaseModel):
title: str
date: str
attendees: list[str]
m = Meeting.model_validate(data)
方法 2: プロンプトで JSON 指示
シンプルな場合はプロンプトだけで OK。
wzxhzdk:2
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[]}