JSON ModeとTool-Call出力
response_format={'type':'json_object'}または単一のツール呼び出しを使い、機械で解析可能な出力を強制します。
「JSON ModeとTool-Call出力」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
構造化の必要性
LLMからの自由形式のテキストは、コードにとって扱いにくいものです。本番環境のエージェントには、解析可能な出力が必要です。JSON、XML、関数の引数などを使い、「回答は……です」のような形式は決して使わないでください。
JSONモード(OpenAI)
モデルに「常にJSONを返してください」と指示します。
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[
{'role': 'system', 'content': 'Return a JSON object with name and age.'},
{'role': 'user', 'content': 'Alice, 30 years old.'}
],
response_format={'type': 'json_object'}
)
import json
data = json.loads(response.choices[0].message.content)JSONモードの注意点
JSONモードで保証されるのは、有効なJSONであることだけで、期待するSHAPEになることではありません。モデルは {} や {"foo": "bar"} を返す可能性があります。必ずデータの構造も検証してください。
Structured Outputs(Strict)
OpenAI Structured Outputs は、レスポンスが JSON Schema に一致することを保証します:
schema = {
'name': 'person',
'schema': {
'type': 'object',
'properties': {
'name': {'type': 'string'},
'age': {'type': 'integer'}
},
'required': ['name', 'age'],
'additionalProperties': False
},
'strict': True
}
response = client.chat.completions.create(
model='gpt-4o-2024-08-06',
messages=...,
response_format={'type': 'json_schema', 'json_schema': schema}
)Strict モードの仕組み
Strict モードではデコーダーに制約をかけるため、モデルは無効なトークンを文字どおり生成できません。出力はスキーマに 100% 一致します。
構造化出力としてのツール呼び出し
特定のツール呼び出しを強制することで、構造化データを抽出できます:
tools = [{'type': 'function', 'function': {
'name': 'submit_person',
'parameters': {
'type': 'object',
'properties': {'name': {'type': 'string'}, 'age': {'type': 'integer'}},
'required': ['name', 'age']
}
}}]
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=...,
tools=tools,
tool_choice={'type': 'function', 'function': {'name': 'submit_person'}}
)
args = json.loads(response.choices[0].message.tool_calls[0].function.arguments)出力としての Anthropic ツール使用
Anthropic でも、tool_choice="tool" を使って同じパターンを実現できます:
tool_choice = {'type': 'tool', 'name': 'submit_person'}
print(tool_choice)
事前入力による JSON(Anthropic)
ツールを使わない Claude では、assistant のターンに { を事前入力します:
messages = [
{'role': 'user', 'content': 'Give me JSON for Alice, 30.'},
{'role': 'assistant', 'content': '{'}
]
# Output starts with { and likely produces valid JSON.
for m in messages:
print(f"{m['role']}: {m['content']}")
print("Output starts with { and likely produces valid JSON.")
Pydantic + Strict モード
OpenAI Python SDK には、Pydantic を使うショートカットがあります:
from pydantic import BaseModel
class Person(BaseModel):
name: str
age: int
response = client.beta.chat.completions.parse(
model='gpt-4o-2024-08-06',
messages=...,
response_format=Person
)
person = response.choices[0].message.parsed
# Pydantic instance, type-safeよくある落とし穴
- Strict なしの JSON モード — モデルが誤った構造を返す可能性があります
- Strict で
additionalProperties: falseを指定し忘れる - 必須フィールドを "required" 配列に記載していない
- Strict モードは gpt-4o-2024-08-06 以降でのみ使用できます
Structured Outputs のコスト
Strict モードには、文法制約付きデコーディングによるわずかなオーバーヘッドがありますが、品質向上のメリットと比べれば無視できる程度です。出力形式が重要な場合は、常に有効にしてください。
バリデーションと組み合わせる
Strict な出力であっても、その後に Pydantic でバリデーションする必要があります。多層防御によって、範囲外の整数値のようなエッジケースも検出できます。
Strict モードの保証
OpenAI Structured Outputs(Strict モード)は何を保証しますか?
まとめ
JSON モードは柔軟な構造に、Strict Outputs は保証された構造に、ツール呼び出しは同じ効果を得るために使います。Anthropic の Claude には事前入力を使います。必ず後からバリデーションしてください。
AI チューターと学ぶ AI Agents — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 60
- レッスン
- 239
よくある質問
「JSON ModeとTool-Call出力」レッスンは無料ですか?
はい。「JSON ModeとTool-Call出力」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「JSON ModeとTool-Call出力」で何を学びますか?
response_format={'type':'json_object'}または単一のツール呼び出しを使い、機械で解析可能な出力を強制します。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「JSON ModeとTool-Call出力」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- JSON ModeとTool-Call出力
- Pydanticスキーマ検証
- 不正な出力の修復ループ
- Instructor / Outlinesによる構造の保証