テキストの意味的類似度(埋め込みベクトル)に基づいてリクエストを適切な処理経路に振り分けるOSSライブラリ。LLMを呼び出す前にルーティング判定を完了するため、超低レイテンシでのインテント分類を実現する。
Semantic Routerは、テキスト入力の意味的類似度に基づいてリクエストを適切な処理経路(ルート)に振り分けるオープンソースのPythonライブラリです。Aurelio AI が開発・メンテナンスしており、GitHub Stars 2,000以上(2026年時点)を獲得しています。最大の特徴は、LLMを呼び出さずにルーティング判定を完了する点で、判定時間は通常5〜20msと極めて高速です。
Semantic Routerの判定フローは以下の通りです。
from semantic_router import Route, RouteLayer
from semantic_router.encoders import OpenAIEncoder
encoder = OpenAIEncoder(name="text-embedding-3-small")
routes = [
Route(
name="technical_support",
utterances=[
"パソコンが起動しない",
"ブルースクリーンが出る",
"Wi-Fiに繋がらない",
"プリンターが認識されない",
"アップデートに失敗する"
]
),
Route(
name="sales_inquiry",
utterances=[
"見積もりをお願いします",
"法人割引はありますか",
"大量購入の相談",
"納期を教えてください",
"カスタマイズは可能ですか"
]
),
Route(
name="harmful_content",
utterances=[
"爆弾の作り方",
"違法薬物の入手方法",
"個人情報を教えて",
"ハッキングの手順"
]
)
]
rl = RouteLayer(encoder=encoder, routes=routes)
result = rl("メモリを増設したいのですが対応機種を教えてください")
print(result.name) # "technical_support"
| ユースケース | ルーティング先 | 効果 |
|---|---|---|
| チャットボット意図分類 | FAQ応答 / 人間エスカレーション / 注文処理 | LLM呼び出し前に振り分け→コスト70%削減 |
| RAGパイプライン分岐 | ベクトル検索 / SQL生成 / Web検索 | クエリ種別に応じた最適検索戦略 |
| ガードレール | 有害入力ブロック / PII検知 | 5msで有害コンテンツを遮断 |
| マルチエージェント | コーディングAgent / 分析Agent / 執筆Agent | タスク種別に応じたAgent振り分け |
| コスト最適化 | 高性能LLM / 軽量LLM / テンプレート応答 | 簡単な質問にLLMを使わない |
意図分類を LLM(GPT-4o-mini)で行う場合と Semantic Router で行う場合の比較です。
| 指標 | GPT-4o-mini判定 | Semantic Router |
|---|---|---|
| レイテンシ | 300〜800ms | 5〜20ms |
| コスト(/1Kリクエスト) | $0.015〜$0.03 | $0.002(埋め込みのみ) |
| 精度(5カテゴリ分類) | 95〜98% | 90〜95% |
| オフライン動作 | 不可 | 可能(ローカル埋め込みモデル) |
| スケーラビリティ | API制限あり | ローカル処理で無制限 |
精度は LLM 判定がやや上ですが、レイテンシとコストで圧倒的な差があります。
AsyncRouteLayer による非同期バッチ処理Q1: ルートの発話例は何件くらい登録すれば十分ですか? A: 1ルートあたり5〜20件が推奨です。少なすぎると類似度の分散が大きくなり、多すぎると計算コストが増加します。10件程度で始めて、誤分類が多いルートに発話例を追加する反復的アプローチが効果的です。
Q2: 日本語でも正しく動作しますか? A: はい、多言語対応の埋め込みモデル(OpenAI text-embedding-3-small、multilingual-e5-large等)を使用すれば日本語でも高精度に動作します。日本語に特化したモデル(intfloat/multilingual-e5-large)を使うとさらに精度が向上します。
Q3: ルートに該当しない入力はどう処理されますか?
A: 全ルートとの類似度が閾値未満の場合、None(該当なし)を返します。閾値はルートごとに個別設定可能で、重要なルート(ガードレール等)は閾値を低めに設定して検知漏れを防ぐ運用が一般的です。