AI Agents · レッスン

JSON ModeとTool-Call出力

response_format={'type':'json_object'}または単一のツール呼び出しを使い、機械で解析可能な出力を強制します。

レッスン 1/414 ステップ

「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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. JSON ModeとTool-Call出力
  2. Pydanticスキーマ検証
  3. 不正な出力の修復ループ
  4. Instructor / Outlinesによる構造の保証
← AI Agentsに戻る