AI・機械学習
上級

Semantic Router(セマンティックルーター)

テキストの意味的類似度(埋め込みベクトル)に基づいてリクエストを適切な処理経路に振り分けるOSSライブラリ。LLMを呼び出す前にルーティング判定を完了するため、超低レイテンシでのインテント分類を実現する。

0 回閲覧
0 いいね
2026/6/20 更新
関連タグ
セマンティックルーティング
埋め込みベクトル
意図分類
OSS
Aurelio

Semantic Routerとは

Semantic Routerは、テキスト入力の意味的類似度に基づいてリクエストを適切な処理経路(ルート)に振り分けるオープンソースのPythonライブラリです。Aurelio AI が開発・メンテナンスしており、GitHub Stars 2,000以上(2026年時点)を獲得しています。最大の特徴は、LLMを呼び出さずにルーティング判定を完了する点で、判定時間は通常5〜20msと極めて高速です。

動作原理

Semantic Routerの判定フローは以下の通りです。

  1. ルート定義: 各ルートに「代表的な発話例」(utterances)を5〜20個登録
  2. 埋め込み事前計算: 登録された発話例を埋め込みモデル(OpenAI text-embedding-3-small等)でベクトル化
  3. クエリ埋め込み: 入力テキストを同じモデルでベクトル化
  4. 類似度照合: コサイン類似度で最も近いルートを特定
  5. 閾値判定: 類似度が閾値(デフォルト0.5)以上ならそのルートに振り分け、未満なら「該当なし」
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判定との速度・コスト比較

意図分類を LLM(GPT-4o-mini)で行う場合と Semantic Router で行う場合の比較です。

指標GPT-4o-mini判定Semantic Router
レイテンシ300〜800ms5〜20ms
コスト(/1Kリクエスト)$0.015〜$0.03$0.002(埋め込みのみ)
精度(5カテゴリ分類)95〜98%90〜95%
オフライン動作不可可能(ローカル埋め込みモデル)
スケーラビリティAPI制限ありローカル処理で無制限

精度は LLM 判定がやや上ですが、レイテンシとコストで圧倒的な差があります。

高度な機能

  • Dynamic Routes: ルート判定後に LLM を呼び出してパラメータ抽出(例: 「東京の天気」→ location="東京")
  • Hybrid Router: 埋め込み類似度 + キーワードマッチングのハイブリッド判定
  • Multi-Encoder: 複数の埋め込みモデルを組み合わせてアンサンブル判定
  • ローカル埋め込み: HuggingFace Transformers / Fastembed 経由でオフライン動作
  • async対応: AsyncRouteLayer による非同期バッチ処理

よくある質問(FAQ)

Q1: ルートの発話例は何件くらい登録すれば十分ですか? A: 1ルートあたり5〜20件が推奨です。少なすぎると類似度の分散が大きくなり、多すぎると計算コストが増加します。10件程度で始めて、誤分類が多いルートに発話例を追加する反復的アプローチが効果的です。

Q2: 日本語でも正しく動作しますか? A: はい、多言語対応の埋め込みモデル(OpenAI text-embedding-3-small、multilingual-e5-large等)を使用すれば日本語でも高精度に動作します。日本語に特化したモデル(intfloat/multilingual-e5-large)を使うとさらに精度が向上します。

Q3: ルートに該当しない入力はどう処理されますか? A: 全ルートとの類似度が閾値未満の場合、None(該当なし)を返します。閾値はルートごとに個別設定可能で、重要なルート(ガードレール等)は閾値を低めに設定して検知漏れを防ぐ運用が一般的です。

まとめ

  • 埋め込みベクトルの類似度でLLM不要の超高速ルーティング(5〜20ms)
  • チャットボット・RAG・ガードレール・マルチエージェントなど幅広い用途
  • LLM判定比でコスト1/10以下、レイテンシ1/50以下
  • ローカル埋め込みモデルでオフライン動作可能
  • Apache 2.0 OSSライブラリとしてGitHub公開(Stars 2,000+)
この記事について
カテゴリーAI・機械学習
難易度上級
作成日2026/6/20