AI・機械学習
初級

LLM Response Format(エルエルエムレスポンスフォーマット)

LLM APIに送信するリクエストで出力形式を指定するパラメータの総称。text(自由テキスト)、json_object(JSON構文保証)、json_schema(スキーマ準拠JSON)の3段階があり、用途に応じて使い分ける。

0 回閲覧
0 いいね

LLM Response Formatとは

LLM Response Format(レスポンスフォーマット)は、LLM APIのリクエストパラメータとして出力形式を指定する仕組みの総称である。モデルの出力をアプリケーションが処理しやすい形式に制御するために使われ、自由テキストからスキーマ準拠JSONまで段階的な制約を設定できる。

フォーマットの3段階

Stage 1: text(デフォルト)

制約なしの自然言語テキスト。チャットボット、文章生成、翻訳などLLMの汎用的な利用に適する。出力をプログラムで処理する場合はパーシングが必要になる。

Stage 2: json_object(JSON Mode)

出力が構文的に有効なJSONであることを保証する。フィールド名や型の保証はないが、json.loads()で確実にパースできる。APIレスポンスの軽量な構造化に適する。

Stage 3: json_schema(Structured Output)

JSON Schemaに100%準拠した出力を保証する。フィールド名、型、必須項目、enum値まで制御できる。データベース投入やフォーム生成など厳密な型安全性が必要な用途に適する。

プロバイダ別パラメータ対応

プロバイダパラメータ名textjson_objectjson_schema
OpenAIresponse_format○○○ (Structured Outputs)
Anthropic-○Tool Use経由Tool Use経由
Google Geminiresponse_mime_type○○○ (controlled generation)
Mistralresponse_format○○△ (限定)
Cohereresponse_format○○△
Groqresponse_format○○×

OpenAI の実装詳細

OpenAIは3段階すべてをresponse_formatパラメータで提供する。

  • {"type": "text"} — デフォルト。自由テキスト
  • {"type": "json_object"} — JSON Mode。構文保証のみ
  • {"type": "json_schema", "json_schema": {...}} — Structured Outputs。スキーマ準拠保証

2024年8月のStructured Outputs導入により、OpenAIのresponse_formatは最も成熟した実装となった。

Anthropic の対応方針

AnthropicはClaude APIにresponse_formatパラメータを持たない。代わりにTool Use(Function Calling)機能を活用し、ツール定義のJSON Schemaで出力形式を制御する。この設計哲学はStructured Outputをツール呼び出しの一形態として統合するもので、別途のフォーマットパラメータを不要にしている。

選択ガイドライン

ユースケース推奨フォーマット理由
チャットボット・QAtext自然な会話に制約は不要
API中間処理・ログ構造化json_object軽量で十分
DBレコード生成json_schema型安全が必須
UIフォーム自動入力json_schemaフィールド準拠が必須
コード生成textコードは自由テキスト
データ抽出(NER等)json_schema抽出結果の構造化

マルチモーダル出力とフォーマット

テキスト以外のモダリティ(画像、音声、動画)を含む出力では、response_formatの適用範囲はテキスト部分に限定される。画像生成(DALL-E 3)や音声合成(TTS)のフォーマットは別のパラメータで制御する。

Gemini 2.0のマルチモーダル出力では、テキスト部分にjson_schemaを適用しつつ画像やコードの生成を同時に行えるが、JSON内に画像データを含める場合はBase64エンコードが必要になる。

よくある質問

Q: response_formatを使うとトークン消費量は増えますか?

A: JSON形式はテキスト形式より括弧・引用符・カンマなどの構造文字でトークンが増える傾向がある。一般的にJSON出力はテキスト出力より10〜30%多いトークンを消費する。ただしjson_schemaモードでは不要な説明テキストが省略されるため、実質的な増加は小さい。

Q: response_formatはシステムプロンプトの指示と矛盾しますか?

A: 矛盾しない。response_formatはモデルの出力形式を制約するもので、内容は影響しない。システムプロンプトで「JSONで返して」と指示しつつresponse_formatもjson_objectにするのは冗長だが害はない。逆にresponse_format: json_objectを指定しながらシステムプロンプトで「自然な文章で返して」と矛盾する指示を出すと、モデルはresponse_formatに従ってJSON形式で返す。

Q: ストリーミングとresponse_formatは併用できますか?

A: 併用できる。ストリーミング中はJSONが段階的にトークン単位で返されるため、ストリーム完了まで完全なJSONは得られない。リアルタイム表示が不要なバッチ処理では、非ストリーミングでresponse_formatを使う方がシンプルだ。