ユーザーの入力テキストをベクトル埋め込みで意味的に解析し、最適な処理パス(LLMモデル・ツール・エージェント)へ振り分ける軽量ルーティングレイヤー。LLMを呼び出す前に高速な意図判定を行い、コスト削減とレイテンシ短縮を実現する。
Semantic Router(セマンティックルーター)は、LLMアプリケーションにおいてユーザーの入力クエリを意味ベクトルに変換し、事前定義されたルート(処理経路)の中から最も適切なものへ振り分けるルーティングシステムである。aurelio-labsが開発したオープンソースライブラリ「semantic-router」が代名詞的存在で、LLMを呼び出さずにベクトル類似度だけで高速にルーティング判定を行う。
従来のLLMアプリケーションでは、すべてのユーザー入力を同一のLLMに送信していた。これには以下の問題がある。
| 問題 | 具体例 | 影響 |
|---|---|---|
| コスト過剰 | 「こんにちは」にGPT-4oを使用 | 入力トークン課金の無駄 |
| レイテンシ過剰 | 単純な挨拶にLLM推論を実行 | 不必要な500ms〜2s待ち |
| 安全性 | 不適切な入力をフィルタリングせず転送 | ガードレール不在 |
| 精度低下 | 汎用モデルで専門タスクに回答 | 特化モデルの方が高品質 |
Semantic Routerはこれらの問題を、LLM呼び出しの前段に軽量な意味判定レイヤーを挟むことで解決する。
各ルートは「名前」と「サンプル発話(utterances)」で構成される。
Route: 天気
utterances: ["今日の天気は?", "明日雨降る?", "東京の気温は?"]
Route: コード生成
utterances: ["Pythonでソートして", "SQLクエリを書いて", "React componentを作って"]
Route: 雑談
utterances: ["こんにちは", "元気?", "最近どう?"]
各ルートのサンプル発話を埋め込みモデル(OpenAI text-embedding-3-small、Cohere embed-v3等)でベクトル化し、インメモリまたはベクトルDBにインデックスする。
ユーザー入力を同じ埋め込みモデルでベクトル化し、各ルートのベクトルとコサイン類似度を計算。閾値(デフォルト0.82)を超えた最も類似度の高いルートに振り分ける。全ルート閾値未満の場合はデフォルトルート(汎用LLM)にフォールバックする。
| ステップ | 処理時間 | 備考 |
|---|---|---|
| テキスト埋め込み | 5〜20ms | ローカル埋め込みなら5ms以下 |
| コサイン類似度計算 | < 1ms | NumPy行列演算 |
| ルート判定 | < 1ms | argmax + 閾値比較 |
| 合計 | 6〜22ms | LLM呼び出しの1/100以下 |
| ルート | 振り分け先 | コスト/1Kトークン |
|---|---|---|
| 簡単な質問・挨拶 | Haiku / GPT-4o mini | $0.25 |
| 一般的な質問 | Sonnet / GPT-4o | $3.00 |
| 複雑な推論・コード | Opus / o1 | $15.00 |
入力の意図に応じて適切なツール(Web検索、コード実行、DB検索、画像生成等)を選択する。LLMにツール選択を委ねるよりも高速かつ決定的。
不適切な入力(プロンプトインジェクション、有害コンテンツ)を専用ルートで捕捉し、LLMに到達する前にブロックする。
| 手法 | 判定速度 | 精度 | コスト | 柔軟性 |
|---|---|---|---|---|
| Semantic Router | 5〜20ms | 高 | 埋め込みのみ | ルート追加が容易 |
| LLMベース分類 | 500〜2000ms | 最高 | LLM呼び出し費用 | プロンプトで制御 |
| キーワードマッチ | < 1ms | 低 | ゼロ | 表記揺れに弱い |
| 正規表現 | < 1ms | 中 | ゼロ | パターン設計が困難 |
A1: サンプル発話の品質と数に依存するが、適切に設計された20〜50サンプル/ルートで95%以上の分類精度が報告されている。ただし意図が曖昧なクエリ(「これ教えて」等)では精度が低下するため、フォールバックルートの設計が重要。
A2: コサイン類似度の計算は行列演算のため、100ルート程度までは実質的な性能劣化はない。1,000ルートを超える場合はANN(Approximate Nearest Neighbor)インデックスの導入が推奨される。
A3: 動作する。sentence-transformers(all-MiniLM-L6-v2等)やFastEmbed(ONNX最適化)を使えばAPI呼び出しなしで5ms以下のルーティングが可能。プライバシー要件のある環境や、オフライン動作が必要な場合に有効。