JSONスキーマによる状態制御の工夫とは?|MCP入門 6.4|一貫性あるAI応答を実現する構造的設計

6.4 JSONスキーマによる状態制御の工夫
生成AIと高度に連携したアプリケーションを構築する際、モデルに「どのような状態(state)」であるかを明示的に渡すことが求められます。 状態とは、ユーザーの現在の意図、タスクの進行状況、操作対象、条件設定などを含む、モデルにとっての“理解の土台”となるものです。
本セクションでは、MCP設計の中でも特に重要な「状態制御」を、JSONスキーマを活用してどう実装・設計するかを丁寧に解説します。
なぜ状態を制御する必要があるのか
自然言語だけに頼ったプロンプトでは、モデルの応答にばらつきが生じやすく、再現性や一貫性の担保が難しくなります。 たとえば、ユーザーが「設定画面を開いて」と言ったとき、モデルがどの画面を想定しているかは、事前に共有されている“状態”次第です。
状態を構造化し、モデルに正確に渡すことで、想定されたロジックやUIフローに沿った回答を得ることができます。
JSONスキーマで状態を定義するメリット
- 構造的な表現:各項目がキーと値で定義されるため、モデルが解析しやすい
- バリデーション可能:APIサイドやユーザー入力と連携しやすい
- テンプレートと連動:プロンプトスロットに対応させやすく、汎用的な設計が可能
- 状態のログ保存・再現性:特定のセッション状態を保持して再投入できる
例:FAQチャットボットにおける状態スキーマ
たとえば、以下のようなスキーマでチャット中の状態を定義できます:
- "user_intent": "shipping_inquiry"
- "customer_status": "premium_member"
- "previous_topic": "return_policy"
- "language": "ja-JP"
このような状態をスロットに差し込むことで、モデルは「プレミアム会員が配送について聞いてきた」状況を正確に捉えた応答を生成できます。
動的スキーマの設計と制御
実装では、状態スキーマを動的に生成し、ユーザーのアクションや履歴に応じて更新していく必要があります。 MCPでは、この更新された状態を常にプロンプトの土台に再適用することで、セッションの一貫性を維持します。
また、状態ごとにテンプレート分岐を設けることで、「入力された意図と現在の状態に適した応答ロジック」を切り替えることも可能になります。
応用:マルチモーダルやUI連携における状態制御
状態制御は、音声・画像などを含むマルチモーダルな対話や、UI操作との連携においても有効です。 たとえば、
- "current_page": "checkout"
- "ui_highlight": ["address_field"]
こうした情報をモデルに渡すことで、「いまフォームの住所欄が選択されている」といったUI上の文脈も含めた応答が可能になります。
JSONスキーマによる状態制御は、生成AIを単なるテキスト生成エンジンから「文脈を理解し、流れに沿った判断ができる存在」へと昇華させる重要な鍵です。 MCP設計の中で、状態を構造化・再利用可能に定義し、文脈の核としてモデルに伝えることで、信頼性・拡張性の高い応答ロジックが実現できます。
次の章では、MCPの全体像を総括し、今後のLLM設計においてどのような標準化や実装の方向性が考えられるかを展望していきます。 → 第7章 MCPの未来と標準化への道へ進む

下田 昌平
開発と設計を担当。1994年からプログラミングを始め、今もなお最新技術への探究心を持ち続けています。カテゴリー
検索履歴
チーム

任 弘毅
株式会社レシートローラーにて開発とサポートを担当。POSレジやShopifyアプリ開発の経験を活かし、業務のデジタル化を促進。

下田 昌平
開発と設計を担当。1994年からプログラミングを始め、今もなお最新技術への探究心を持ち続けています。