テーマ
言語
·1 分で読めます

JSONモードと構造化出力:各モデルの対応状況

GetVibe APIにおけるJSONモードのモデル別対応表、json_objectとjson_schemaの違い、そしてすべてのモデルで機能するフォールバックである強制ツール呼び出しについて解説します。

JSONモードと構造化出力:各モデルの対応状況

コードでモデルの回答を解析する場合、毎回確実に解析できるJSONが必要です。GetVibe APIでこれを実現する方法は、json_objectモード、厳密なjson_schemaモード、強制ツール呼び出しの3つです。モデルによって対応状況が異なります。この記事では、カタログに基づく対応表と、それぞれの場面で使用すべき方法を紹介します。

3つのアプローチ

  • response_format: {"type": "json_object"}: モデルは有効なJSONを返します。フィールドはプロンプトで指定します。
  • response_format: {"type": "json_schema", ...}とstrict: true: モデルは渡されたスキーマに正確に従って値を埋めます。GPT-5.xおよび互換モデルが対応しています。
  • 強制ツール呼び出し(toolsに加えて、1つの関数を指定するtool_choice): モデルは、関数のパラメータスキーマに一致するJSONとして関数引数を返します。カタログ内のすべてのテキストモデルがツール呼び出しに対応しているため、移植性の高い方法です。

対応表

JSONモードの列は、2026年9月25日にhttps://getvibeapi.com/api/catalogから読み取ったcaps.jsonModeです。

モデルJSONモードツール呼び出し価格
GPT-6 Lunaはいはい$0.0055 入力 · $0.0274 出力 100万トークンあたり
GPT-6 Solはいはい$0.1096 入力 · $0.548 出力 100万トークンあたり
GPT-6 Astraいいえはい$0.548 入力 · $2.7398 出力 100万トークンあたり
GPT-5.6 Sol(Luna、Terraも含む)はいはい$0.0667 入力 · $0.40 出力 100万トークンあたり
Claude Opus 5.5はいはい$0.1067 入力 · $0.5334 出力 100万トークンあたり
Claude Sonnet 5はいはい$0.3334 入力 · $1.6667 出力 100万トークンあたり
Gemini 3.1 Proはいはい$0.2515 入力 · $1.5086 出力 100万トークンあたり
Gemini 3.8 Flash(3.7 Flashも含む)いいえはい$0.0097 入力 · $0.0483 出力 100万トークンあたり
DeepSeek V4.1 Flashはいはい$0.0112 入力 · $0.0445 出力 100万トークンあたり
Qwen3.8 Max(3.8 Flashも含む)はいはい$0.1543 入力 · $0.4629 出力 100万トークンあたり
Kimi K3はいはい$0.1715 入力 · $0.8572 出力 100万トークンあたり
MiniMax M3はいはい$0.0148 入力 · $0.0591 出力 100万トークンあたり
Tencent Hy4 Previewはいはい$0.0334 入力 · $0.1001 出力 100万トークンあたり
GLM-5.3(5.3 Flash、5.2も含む)いいえはい$0.10 入力 · $0.3143 出力 100万トークンあたり

「いいえ」と記載されたモデルでは、強制ツール呼び出しを使用するか、プロンプトでJSONの形式を指定して、アプリケーション側で検証してください。

当社側での厳密モードの動作

json_schemaリクエストでstrict: trueを指定すると、ゲートウェイは実際にスキーマを遵守するモデルバリアントにのみルーティングします。バックアップへの切り替えを含め、すべての試行でこの処理を行います。適切なバリアントが利用できない場合、JSONが期待されている場面でプレーンテキストを返すのではなく、明示的なstructured_output_unsupportedエラーが返されます。このガードは当社の測定結果に基づいており、測定済みのバリアントのみを対象としています。

既知のケースとして、DeepSeek独自のAPIにはjson_schemaモードがありません。DeepSeekモデルではjson_objectを使用するか、1つの形式に正確に限定したい場合は強制ツール呼び出しを使用してください。

例

厳密なスキーマ:

from openai import OpenAI
import json

client = OpenAI(base_url="https://getvibeapi.com/v1", api_key="sk-pv-...")
schema = {
    "type": "object",
    "properties": {"name": {"type": "string"}, "score": {"type": "number"}},
    "required": ["name", "score"],
    "additionalProperties": False,
}
resp = client.chat.completions.create(
    model="gpt-6-luna",
    response_format={"type": "json_schema",
                     "json_schema": {"name": "review", "strict": True, "schema": schema}},
    messages=[{"role": "user", "content": "この製品を評価してください: 配送が速く、梱包が丁寧"}],
)
print(json.loads(resp.choices[0].message.content))

JSONモードに対応していないモデルでも動作する強制ツール呼び出し:

resp = client.chat.completions.create(
    model="gemini-3.8-flash",
    tools=[{"type": "function", "function": {"name": "save_review", "parameters": schema}}],
    tool_choice={"type": "function", "function": {"name": "save_review"}},
    messages=[{"role": "user", "content": "この製品を評価してください: 配送が速く、梱包が丁寧"}],
)
args = json.loads(resp.choices[0].message.tool_calls[0].function.arguments)

必ず検証する

JSONモードを使用している場合でも、解析したオブジェクトを使用する前にスキーマに照らして確認し、失敗した場合は再試行してください。これは、長い出力で特に重要です。max_tokensでレスポンスが途中で打ち切られると、JSONが不完全になる可能性があります。finish_reasonも確認してください。lengthは回答が途中で切れたことを意味します。

次のステップ

構造化出力のドキュメントとツール呼び出しガイドを読むか、最安LLM API一覧で低コストなJSON対応モデルを探してください。

JSONモード構造化出力response_format json_schemaLLMのJSON出力json_objectとjson_schemaの違いJSONの関数呼び出し

GetVibe APIを無料で試す

1つのOpenAI互換APIでGPT、Claude、Geminiなどを利用できます。カードまたは暗号資産で米ドル払いに対応しています。

関連記事

JSONモードと構造化出力:各モデルの対応状況 | GetVibe API