LLM Semantic Router(エルエルエムセマンティックルーター)
LLM Semantic Router(セマンティックルーター)とは、ユーザークエリの意味的内容をベクトル埋め込みで分類し、適切な処理パス(モデル・ツール・ワークフロー)へ高速に振り分ける仕組みである。LLM を呼び出さずにルーティング判定を行うため、レイテンシ 1-5ms で動作する。
LLM Semantic Router は、テキスト入力をベクトル埋め込みに変換し、事前定義されたルート(意図カテゴリ)との類似度に基づいてリクエストを振り分ける軽量なルーティングレイヤーである。Aurelio AI が開発した Semantic Router ライブラリが代表的な実装で、2026年時点で GitHub Stars 2,000 以上を獲得している。
概要
従来の LLM ベースの意図分類は、クエリを LLM に投げて「このクエリはどのカテゴリですか?」と判定させていた。この方式は精度は高いが、LLM 呼び出しに 200ms-2s かかり、API コストも発生する。セマンティックルーターは、小型の埋め込みモデル(OpenAI text-embedding-3-small: 62,500 tokens/$1、Cohere embed-v3 等)でクエリをベクトル化し、事前定義されたルートベクトルとのコサイン類似度で分類する。判定は純粋なベクトル演算のため 1-5ms で完了し、API コストもほぼゼロ。
アーキテクチャ
コンポーネント構成
| コンポーネント | 役割 | 例 |
|---|---|---|
| Encoder | テキスト→ベクトル変換 | OpenAI text-embedding-3-small / Cohere embed-v3 / ローカル E5-Mistral |
| Route Layer | ルート定義・類似度計算 | Semantic Router RouteLayer |
| Routes | 意図カテゴリ定義 | Route("billing", utterances=["請求について", "料金を知りたい"]) |
| Decision Function | 閾値判定 | コサイン類似度 > 0.82 で確定、未満は fallback |
ルート定義の例
from semantic_router import Route, RouteLayer
from semantic_router.encoders import OpenAIEncoder
billing = Route(
name="billing",
utterances=[
"請求書を確認したい",
"料金プランを変更したい",
"支払い方法を更新したい",
"今月の利用料金はいくらですか",
],
)
technical = Route(
name="technical",
utterances=[
"エラーが発生しました",
"接続できません",
"パフォーマンスが低下しています",
"バグを報告したい",
],
)
encoder = OpenAIEncoder(name="text-embedding-3-small")
rl = RouteLayer(encoder=encoder, routes=[billing, technical])
result = rl("先月の請求額を教えてください")
# result.name == "billing"
LLM ルーティングへの応用
セマンティックルーターは単なる意図分類器ではなく、LLM のモデル選択・ツール呼び出し・ワークフロー制御に応用できる。
モデル選択ルーティング
- Route("simple") → GPT-4o-mini で応答
- Route("complex_reasoning") → Claude 4 Opus で応答
- Route("code_generation") → Claude 4 Sonnet で応答
- Route("multilingual") → GPT-4o で応答
ツール呼び出し制御
- Route("web_search") → Tavily / Exa で検索実行
- Route("code_execution") → サンドボックスでコード実行
- Route("database_query") → SQL 生成→DB 実行
- Route("image_generation") → DALL-E / Stable Diffusion 呼び出し
ガードレール
- Route("jailbreak") → リクエスト拒否
- Route("pii_detected") → PII マスキング処理
- Route("off_topic") → 「対応範囲外です」応答
性能ベンチマーク
| 方式 | 分類精度 | レイテンシ | コスト (1M クエリ) |
|---|---|---|---|
| Semantic Router (text-embedding-3-small) | 92-95% | 1-5ms | $1.00 |
| LLM 分類 (GPT-4o-mini) | 95-98% | 200-500ms | $15.00 |
| LLM 分類 (GPT-4o) | 97-99% | 500-2000ms | $250.00 |
| ルールベース (キーワード) | 75-85% | <1ms | $0 |
よくある質問(FAQ)
Q1: ルートの utterance は何件くらい用意すべきですか? A: 1ルートあたり 5-20 件が推奨。5件未満だとカバレッジ不足で誤分類が増え、20件以上でも精度向上は限定的。多様な表現バリエーション(敬語/カジュアル/略語/英語混じり)を含めることが重要。
Q2: 新しいルートを追加するとき再トレーニングは必要ですか? A: 不要。utterance のベクトルを追加計算して RouteLayer に登録するだけで即座に有効になる。ダウンタイムゼロで動的にルート追加・削除が可能。
Q3: セマンティックルーターと LLM 分類器を併用する構成はありますか? A: 推奨構成として、セマンティックルーターで高信頼度(類似度 0.85 以上)のクエリを即座に振り分け、低信頼度のクエリのみ LLM 分類器にフォールバックする 2 段構成がある。全体の 80-90% をセマンティックルーターで処理し、残りを LLM で判定することで、精度とコストの両立が可能。
まとめ
- セマンティックルーターはベクトル類似度ベースの軽量意図分類器
- LLM を呼び出さずに 1-5ms で判定完了、API コストほぼゼロ
- モデル選択・ツール呼び出し・ガードレールに応用可能
- Semantic Router ライブラリ(Aurelio AI)が OSS で最も成熟
- LLM 分類器とのハイブリッド構成で精度 97%+ とコスト最小化を両立