プロンプトルーティング(プロンプトルーティング)
ユーザーの入力内容に応じて異なるシステムプロンプトやプロンプトテンプレートを動的に切り替える手法。単一のLLMエンドポイントで多様なタスクに対応しつつ、各タスクに最適化されたプロンプトで回答品質を最大化する。
プロンプトルーティングとは
プロンプトルーティング(Prompt Routing)は、LLMアプリケーションにおいてユーザー入力の意図やカテゴリに応じて、使用するシステムプロンプトやプロンプトテンプレートを動的に切り替える設計パターンである。モデル自体を切り替えるのではなく、同一モデルに対して最適なコンテキスト(指示・例示・制約)を選択する。
なぜプロンプトを切り替えるのか
汎用的な単一プロンプトで全タスクに対応しようとすると、以下の問題が発生する。
| 問題 | 具体例 |
|---|---|
| プロンプト肥大化 | 全タスクの指示を1つのシステムプロンプトに詰め込むと10,000トークン超になる |
| 指示の競合 | 「簡潔に答えて」と「詳細に解説して」が同時に存在する |
| Few-Shotの希薄化 | 異なるタスクの例示が混在し、各タスクのサンプル数が不足する |
| トークンコストの無駄 | 不要な指示が毎回入力トークンとして課金される |
プロンプトルーティングはこれらを、タスク別の特化プロンプトを用意し、入力に応じて切り替えることで解決する。
実装アーキテクチャ
基本構成
ユーザー入力 → [ルーター] → プロンプトA(コード生成用)→ LLM → 回答
→ プロンプトB(要約用) → LLM → 回答
→ プロンプトC(翻訳用) → LLM → 回答
→ プロンプトD(Q&A用) → LLM → 回答
ルーター実装の選択肢
| 方式 | 適用場面 |
|---|---|
| Semantic Router | 低レイテンシ・低コストが必要な場合 |
| LLM分類 | 高精度が必要なエンタープライズ用途 |
| キーワードマッチ | カテゴリが明確で表記揺れが少ない場合 |
| ユーザー選択UI | チャットUIでユーザーにモード選択させる場合 |
プロンプトテンプレート設計のベストプラクティス
共通部分と可変部分の分離
全プロンプトに共通するガードレール(安全性指示、出力フォーマット)は共通テンプレートに、タスク固有の指示・Few-Shot例は可変テンプレートに分離する。
テンプレートの管理
| 管理方式 | メリット | デメリット |
|---|---|---|
| コード内ハードコード | デプロイと同期 | 変更のたびにリリース必要 |
| 設定ファイル(YAML/JSON) | 非エンジニアも編集可能 | バージョン管理が複雑化 |
| プロンプト管理ツール(LangFuse等) | A/Bテスト・バージョニング対応 | 外部依存の増加 |
| DB格納 | 動的な更新が容易 | キャッシュ戦略が必要 |
実用パターン
パターン1: ペルソナ切り替え
入力のトーンに応じて、カジュアルな応答(友達口調)とフォーマルな応答(ビジネス口調)を切り替える。
パターン2: 出力形式の最適化
入力が「コード生成」ならMarkdownコードブロック形式、「文書作成」なら段落形式、「データ分析」なら表形式のプロンプトを選択する。
パターン3: 言語・ドメイン特化
多言語対応アプリケーションで、入力言語を検出して対応言語のFew-Shot例を含むプロンプトに切り替える。
FAQ
Q1: プロンプトの数が増えすぎた場合はどう管理しますか?
A1: 階層的なプロンプト構成(ベーステンプレート + ドメインオーバーライド + タスクオーバーライド)で管理する。継承関係を持たせることで、共通変更を1箇所で反映できる。プロンプト管理ツール(LangFuse、PromptLayer等)の導入も検討する。
Q2: プロンプトルーティングとモデルルーティングは併用できますか?
A2: 併用が推奨される。たとえば「簡単な質問→GPT-4o mini + 簡潔回答プロンプト」「複雑な質問→GPT-4o + 詳細回答プロンプト」のように、モデルとプロンプトの両方を入力に応じて最適化することで、コストと品質のバランスを最大化できる。
Q3: プロンプトの切り替えが間違った場合のリカバリーは?
A3: ユーザーに「回答は役立ちましたか?」等のフィードバックUIを提供し、不適切な分類を検出する。また、各プロンプトの冒頭にフォールバック指示(「この質問がカテゴリ外の場合は汎用的に回答してください」)を含めることで、誤ルーティング時の品質低下を緩和できる。