AI・機械学習
中級

JSON Mode(LLM)(ジェイソンモード)

LLMに有効なJSON形式のみで出力させる動作モード。構造化データ抽出・API連携でパース失敗を防ぐ目的で使われる。

0 回閲覧
0 いいね
2026/6/7 更新
関連タグ
json-mode
structured-output
llm
openai
constrained-decoding

JSON Mode(LLM)

概要

JSON Mode(JSONモード)は、LLM(大規模言語モデル)の出力を必ず有効なJSON文字列に制約する動作オプションです。通常のテキスト生成では不完全なJSONやマークダウンコードブロックが混入する可能性がありますが、JSON Modeを有効にすることでJSON.parse()が確実に成功する出力が得られます。

OpenAI API での使用

from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4o",
    response_format={"type": "json_object"},
    messages=[
        {
            "role": "system",
            "content": "製品情報をJSON形式で返してください。"
        },
        {
            "role": "user",
            "content": "MacBook Pro M4 16インチの仕様を抽出して"
        }
    ]
)

import json
data = json.loads(response.choices[0].message.content)
print(data)  # 常に有効なJSONオブジェクト

対応モデル一覧

プロバイダーモデルパラメータ
OpenAIGPT-4o, GPT-4 Turbo, GPT-3.5 Turboresponse_format={"type":"json_object"}
GoogleGemini 1.5 Pro/Flashresponse_mime_type="application/json"
GroqLlama 3.1, Mixtralresponse_format={"type":"json_object"}
MistralMistral Large, Codestralresponse_format={"type":"json_object"}
Ollamaほぼ全モデルformat="json"

実装方式の違い

ファインチューニング方式

OpenAIのJSON Modeは、モデルをJSONのみ出力するよう追加学習したと見られます。出力トークン生成時に有効なJSONを継続する確率を高めます。

Grammar-based Decoding(制約デコーディング)

Ollama・llama.cpp・Mistralが採用。各トークン生成時にJSON文法を満たすトークンのみを候補に残します。Outlines・XGrammar等のライブラリが実装に使われます。

# Ollama でのJSON Mode
import ollama

response = ollama.chat(
    model="gemma4:12b",
    format="json",
    messages=[{"role": "user", "content": "PCスペックをJSONで返して"}]
)
data = json.loads(response["message"]["content"])

JSON Mode vs Structured Outputs

機能JSON ModeStructured Outputs
有効なJSON保証✓✓
スキーマ準拠保証✗✓
必須フィールド保証✗✓
型安全性低高
設定の簡単さ高(1パラメータ)中(スキーマ定義必要)

注意点

  • systemプロンプトにJSON指示が必要: JSON Modeを有効にしていても、プロンプトでJSONを返すよう指示しないと無限ループや空出力が発生することがある
  • スキーマ保証なし: nameフィールドがstringではなくnullになる可能性がある
  • ネスト深度: 過度にネストされたJSONはトークン消費が大きい
  • Structured Outputsへの移行推奨: スキーマ準拠が必要な本番環境ではStructured Outputsを使用する
この記事について
カテゴリーAI・機械学習
難易度中級
作成日2026/6/7