
2025/12/31 22:22
LLMRouter:LLMルーティング用オープンソースライブラリ
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
LLMRouter は、タスクの複雑さ・コスト・パフォーマンスを評価して、ユーザーのクエリを最も適した大型言語モデル(LLM)へルーティングするオープンソースライブラリです。
16 以上のルーター型が標準搭載されており、シングルラウンド、マルチラウンド、エージェント型、パーソナライズド、KNN、SVM、MLP、行列分解、Elo Rating、グラフベース、BERT ベース、ハイブリッド確率アルゴリズムなどが含まれます。
統一されたコマンドラインインターフェース(CLI)により、トレーニング・推論・対話型 Gradio チャット UI が利用できます。データ生成パイプラインは 11 個のベンチマークデータセット ― Natural QA, Trivia QA, MMLU, GPQA, MBPP, HumanEval, GSM8K, CommonsenseQA, MATH, OpenbookQA, ARC‑Challenge ― を処理し、クエリ例・埋め込み・ルーティング学習ファイルを作成します。
インストールは GitHub(
git clone …)または PyPI(pip install llmrouter-lib)から可能です。API キーは API_KEYS 環境変数(JSON/辞書形式でプロバイダーごとに指定)を通じて供給され、NVIDIA、OpenAI、Anthropic などの間でラウンドロビンロードバランシングがサポートされています。エンドポイントは default_llm.json、ルーター YAML レベル、または Ollama、vLLM、SGLang のようなローカル LLM を自動検出して設定できます。使用例
- トレーニング:
llmrouter train --router knnrouter --config configs/model_config_train/knnrouter.yaml --device cuda - 推論: 単一クエリ(
)、ファイルからのバッチ、または API 呼び出しを行わないルートのみモード。llmrouter infer … - チャットインターフェース:
はカスタムホスト/ポート、パブリック共有、および 3 種類のクエリモード(llmrouter chat --router knnrouter
,current_only
,full_context
)をサポート。retrieval
プラグインシステムにより開発者は カスタムルーター を追加できます。
を継承したクラスを作成し、MetaRouter
、./custom_routers/
、または~/.llmrouter/plugins/
にある任意のパスに登録すれば CLI が自動で検出します。プロンプトテンプレートやメトリクス、フォーマッタといったカスタムタスクも同様に登録可能です。$LLMROUTER_PLUGINS
各リクエストごとに最適な LLM を選択することで、LLMRouter はコストを削減しつつ、拡張性のある AI ソリューションを構築する企業や研究者に対してパフォーマンス向上を実現します。
本文
LLMRouter:LLMルーティングのためのオープンソースライブラリ
はじめに
LLMRouterは、タスクの複雑さ・コスト・性能を考慮しながら各クエリに最適なモデルを動的に選択するインテリジェントルーティングシステムです。推論を最適化します。
主な特徴
- スマートルーティング – クエリを自動で最適LLMへ振り分けます。
- 複数のルーターモデル – 4カテゴリ(単一ラウンド、マルチラウンド、エージェンティック、パーソナライズド)に16種類以上。
戦略はKNN、SVM、MLP、行列分解、Elo Rating、グラフベースルーティング、BERTベースルーティング、ハイブリッド確率手法、変換スコアルーターなど。 - 統一CLI – 学習・推論・対話型チャット(Gradio UI)をサポート。
- データ生成パイプライン – 11のベンチマークデータセットから自動API呼び出し&評価で学習データを作成。
最近のニュース
- 2025‑12:正式リリース – コスト感知ルーティング、統一CLI、カスタムルーター用プラグインワークフローが追加。
サポートされているルーター
| ルーター | 学習 | 推論 | 説明 |
|---|---|---|---|
| 単一ラウンド | |||
| knnrouter | ✅ | ✅ | K‑Nearest Neighbors ベースのルーティング |
| svmrouter | ✅ | ✅ | サポートベクターマシンベースのルーティング |
| mlprouter | ✅ | ✅ | マルチレイヤーパーセプトロンベースのルーティング |
| mfrouter | ✅ | ✅ | 行列分解ベースのルーティング |
| elorouter | ✅ | ✅ | Elo Rating ベースのルーティング |
| routerdc | ✅ | ✅ | デュアルコントラスト学習ベースのルーティング |
| automix | ✅ | ✅ | 自動モデルミキシング |
| hybrid_llm | ✅ | ✅ | ハイブリッドLLMルーティング戦略 |
| graphrouter | ✅ | ✅ | グラフベースルーティング |
| causallm_router | ✅ | ✅ | 因果言語モデルルーター |
| smallest_llm | N/A | ✅ | 常に最小サイズのモデルへルート |
| largest_llm | N/A | ✅ | 常に最大サイズのモデルへルート |
| マルチラウンド | |||
| router_r1 | LINK | ✅ | マルチターン会話用事前学習済みRouter‑R1 |
| パーソナライズド | |||
| gmtrouter | ✅ | ✅ | ユーザープリファレンス学習付きグラフベースパーソナライズドルーター |
| エージェンティック | |||
| knnmultiroundrouter | ✅ | ✅ | 複雑タスク用KNNベースのエージェンティックルーター |
| llmmultiroundrouter | N/A | ✅ | LLMベース複雑タスク用エージェンティックルーター |
はじめ方
インストール
# クローンして編集モードでインストール git clone https://github.com/ulab-uiuc/LLMRouter.git cd LLMRouter conda create -n llmrouter python=3.10 conda activate llmrouter pip install -e .
GPUサポート(
vllm==0.6.3, torch==2.4.0 が必要):
pip install -e ".[router-r1]"
すべてのオプション依存関係:
pip install -e ".[all]"
PyPI からは:
pip install llmrouter-lib
API キー設定
シェルプロファイルに
API_KEYS を定義します:
export API_KEYS='{"NVIDIA":"nvidia-key-1,nvidia-key-2", "OpenAI":["openai-key-1","openai-key-2"], "Anthropic":"anthropic-key-1"}'
レガシー形式
# 同一プロバイダーのJSON配列 export API_KEYS='["key1","key2"]' # カンマ区切り export API_KEYS='key1,key2,key3' # 単一キー export API_KEYS='your-api-key'
API エンドポイント設定
エンドポイントは優先順位で解決されます:
- LLM 候補 JSON の
フィールド(最高優先)。api_endpoint - ルーター YAML 設定の
フィールド。api_endpoint
どちらも指定されていない場合、エラーが発生します。
LLM候補JSON例
{ "qwen2.5-7b-instruct": { "service":"NVIDIA", "model":"qwen/qwen2.5-7b-instruct", "api_endpoint":"https://integrate.api.nvidia.com/v1" }, "gpt-4": { "service":"OpenAI", "model":"gpt-4", "api_endpoint":"https://api.openai.com/v1" } }
ローカルLLMモデルの利用
Ollama、vLLM、SGLang 等のローカルプロバイダーの場合は API キーを空文字に設定します:
export API_KEYS='{"Ollama":""}' { "gemma3":{ "size":"3B", "feature":"Gemma 3B model hosted locally via Ollama", "input_price":0.0, "output_price":0.0, "model":"gemma3", "service":"Ollama", "api_endpoint":"http://localhost:11434/v1" } }
学習データの準備
データ生成パイプラインは以下の3ステップで構成されます:
- クエリデータ生成 – クエリを抽出し、train/test JSONL ファイルを作成。
- LLM埋め込み生成 – LLM 候補用埋め込みを作成。
- API呼び出し&評価 – LLM API を呼び出し、応答を評価し統一埋め込みを生成。
# ステップ1 python llmrouter/data/data_generation.py --config llmrouter/data/sample_config.yaml # ステップ2 python llmrouter/data/generate_llm_embeddings.py --config llmrouter/data/sample_config.yaml # ステップ3(API_KEYS 必須) python llmrouter/data/api_calling_evaluation.py \ --config llmrouter/data/sample_config.yaml \ --workers 100
出力ファイル
| ファイル | 説明 |
|---|---|
, | 訓練/テストクエリデータ |
| 埋め込み付きLLMメタデータ |
| 統一クエリエンベディング |
, | ルーティングデータ(モデル応答、スコア、トークン使用量) |
ルーターの学習
# KNNルーター llmrouter train --router knnrouter --config configs/model_config_train/knnrouter.yaml # GPU付きMLPルーター CUDA_VISIBLE_DEVICES=2 llmrouter train \ --router mlprouter \ --config configs/model_config_train/mlprouter.yaml \ --device cuda # MFルーターを静かに学習 CUDA_VISIBLE_DEVICES=1 llmrouter train \ --router mfrouter \ --config configs/model_config_train/mfrouter.yaml \ --device cuda \ --quiet
推論の実行
# 単一クエリ llmrouter infer --router knnrouter --config config.yaml --query "What is machine learning?" # ファイルからバッチ推論 llmrouter infer --router knnrouter --config config.yaml \ --input queries.txt --output results.json # ルートのみ(API呼び出しなし) llmrouter infer --router knnrouter --config config.yaml \ --query "Hello" --route-only # カスタム生成パラメータ llmrouter infer --router knnrouter --config config.yaml \ --query "Explain AI" --temp 0.7 --max-tokens 2048 --verbose
サポートされる入力形式:
.txt, .json, .jsonl。
対話型チャットインターフェース
# 基本的なチャット llmrouter chat --router knnrouter --config config.yaml # カスタムホスト/ポート llmrouter chat --router knnrouter --config config.yaml \ --host 0.0.0.0 --port 7860 # 公開共有リンク llmrouter chat --router knnrouter --config config.yaml --share # クエリモードを指定 llmrouter chat --router knnrouter --config config.yaml \ --mode full_context --top_k 5
クエリモード
– 現在のクエリのみでルーティング(デフォルト)。current_only
– 会話履歴全体を使用。full_context
– コンテキストとして類似した過去クエリを top‑k 取得。retrieval
スクリプト直接実行
# 学習 python -m llmrouter.cli.router_train --router knnrouter --config config.yaml # 推論 python -m llmrouter.cli.router_inference \ --router knnrouter --config config.yaml --query "Hello" # チャット python -m llmrouter.cli.router_chat --router knnrouter --config config.yaml
独自ルーターの作成
LLMRouter はカスタムルーター用プラグインシステムをサポートします。
- ディレクトリ作成
mkdir -p custom_routers/my_router - ルーター実装 (
)custom_routers/my_router/router.py
from llmrouter.models.meta_router import MetaRouter import torch.nn as nn class MyRouter(MetaRouter): def __init__(self, yaml_path: str): super().__init__(model=nn.Identity(), yaml_path=yaml_path) self.llm_names = list(self.llm_data.keys()) def route_single(self, query_input: dict) -> dict: query = query_input['query'] selected_llm = self.llm_names[0] if len(query) < 50 else self.llm_names[-1] return {"query": query, "model_name": selected_llm, "predicted_llm": selected_llm} def route_batch(self, batch: list) -> list: return [self.route_single(q) for q in batch]
- 設定ファイル (
)custom_routers/my_router/config.yaml
data_path: llm_data: 'data/example_data/llm_candidates/default_llm.json' hparam: {} api_endpoint: 'https://integrate.api.nvidia.com/v1'
- ルーター使用
llmrouter infer --router my_router \ --config custom_routers/my_router/config.yaml \ --query "What is machine learning?"
プラグイン検索パス
(プロジェクトディレクトリ)./custom_routers/
(ユーザーホーム)~/.llmrouter/plugins/
(コロン区切り)$LLMROUTER_PLUGINS
リポジトリには例として
RandomRouter, ThresholdRouter が用意されています。
独自タスクの追加
カスタムタスクはプロンプトテンプレートと評価指標を新しく定義できます。
- タスクフォーマッター (
)custom_tasks/my_tasks.py
from llmrouter.utils.prompting import register_prompt from llmrouter.prompts import load_prompt_template @register_prompt('my_task', default_metric='my_metric') def format_my_task_prompt(sample_data): system_prompt = load_prompt_template("task_my_task") user_query = f"Question: {sample_data.get('query', '')}" return {"system": system_prompt, "user": user_query}
- プロンプトテンプレート (
)custom_tasks/task_prompts/task_my_task.yaml
template: | You are an expert at [task description]. [Instructions].
- カスタムメトリック(任意)
from llmrouter.evaluation import evaluation_metric @evaluation_metric('my_metric') def my_metric(prediction: str, ground_truth: str, **kwargs) -> float: return 1.0 if prediction == ground_truth else 0.0
- 使用例
import custom_tasks.my_tasks # 登録をトリガー from llmrouter.utils import generate_task_query from llmrouter.utils.evaluation import calculate_task_performance prompt = generate_task_query('my_task', {'query': '...'}) score = calculate_task_performance( prediction="...", ground_truth="...", task_name="my_task" )
TODO
- パーソナライズドルーターの強化(ユーザープロファイリング、コールドスタート、オンラインフィードバック)。
- マルチモーダルルーティング(画像/音声+テキスト)追加。
- ドメイン漂移に対する継続的/オンライン学習を実装。
謝辞
以下からインスパイアされています:
- RouteLLM, RouterDC, AutoMix, Hybrid LLM, GraphRouter, GMTRouter, Router‑R1, FusionFactory など。
コントリビューション
新しいルーティング戦略、学習パラダイム、評価プロトコルを追加する PR を歓迎します。受理された全ての作業は文書化され、クレジットが付与されます。
引用
@misc{llmrouter2025, title = {LLMRouter: An Open-Source Library for LLM Routing}, author = {Tao Feng and Haozhen Zhang and Zijie Lei and Haodong Yue and Chongshan Lin and Jiaxuan You}, year = {2025}, howpublished = {\url{https://github.com/ulab-uiuc/LLMRouter}}, note = {GitHub repository} }