LLMRouter:LLMルーティング用オープンソースライブラリ

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
  • 推論: 単一クエリ(
    llmrouter infer …
    )、ファイルからのバッチ、または API 呼び出しを行わないルートのみモード。
  • チャットインターフェース:
    llmrouter chat --router knnrouter
    はカスタムホスト/ポート、パブリック共有、および 3 種類のクエリモード(
    current_only
    ,
    full_context
    ,
    retrieval
    )をサポート。
    プラグインシステムにより開発者は カスタムルーター を追加できます。
    MetaRouter
    を継承したクラスを作成し、
    ./custom_routers/
    ~/.llmrouter/plugins/
    、または
    $LLMROUTER_PLUGINS
    にある任意のパスに登録すれば CLI が自動で検出します。プロンプトテンプレートやメトリクス、フォーマッタといったカスタムタスクも同様に登録可能です。
    各リクエストごとに最適な LLM を選択することで、LLMRouter はコストを削減しつつ、拡張性のある AI ソリューションを構築する企業や研究者に対してパフォーマンス向上を実現します。

本文

LLMRouter:LLMルーティングのためのオープンソースライブラリ

はじめに

LLMRouterは、タスクの複雑さ・コスト・性能を考慮しながら各クエリに最適なモデルを動的に選択するインテリジェントルーティングシステムです。推論を最適化します。

主な特徴

  • スマートルーティング – クエリを自動で最適LLMへ振り分けます。
  • 複数のルーターモデル – 4カテゴリ(単一ラウンド、マルチラウンド、エージェンティック、パーソナライズド)に16種類以上。
    戦略はKNN、SVM、MLP、行列分解、Elo Rating、グラフベースルーティング、BERTベースルーティング、ハイブリッド確率手法、変換スコアルーターなど。
  • 統一CLI – 学習・推論・対話型チャット(Gradio UI)をサポート。
  • データ生成パイプライン – 11のベンチマークデータセットから自動API呼び出し&評価で学習データを作成。

最近のニュース

  • 2025‑12:正式リリース – コスト感知ルーティング、統一CLI、カスタムルーター用プラグインワークフローが追加。

サポートされているルーター

ルーター学習推論説明
単一ラウンド
knnrouterK‑Nearest Neighbors ベースのルーティング
svmrouterサポートベクターマシンベースのルーティング
mlprouterマルチレイヤーパーセプトロンベースのルーティング
mfrouter行列分解ベースのルーティング
elorouterElo Rating ベースのルーティング
routerdcデュアルコントラスト学習ベースのルーティング
automix自動モデルミキシング
hybrid_llmハイブリッドLLMルーティング戦略
graphrouterグラフベースルーティング
causallm_router因果言語モデルルーター
smallest_llmN/A常に最小サイズのモデルへルート
largest_llmN/A常に最大サイズのモデルへルート
マルチラウンド
router_r1LINKマルチターン会話用事前学習済みRouter‑R1
パーソナライズド
gmtrouterユーザープリファレンス学習付きグラフベースパーソナライズドルーター
エージェンティック
knnmultiroundrouter複雑タスク用KNNベースのエージェンティックルーター
llmmultiroundrouterN/ALLMベース複雑タスク用エージェンティックルーター

はじめ方

インストール

# クローンして編集モードでインストール
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 エンドポイント設定

エンドポイントは優先順位で解決されます:

  1. LLM 候補 JSON の
    api_endpoint
    フィールド(最高優先)。
  2. ルーター 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ステップで構成されます:

  1. クエリデータ生成 – クエリを抽出し、train/test JSONL ファイルを作成。
  2. LLM埋め込み生成 – LLM 候補用埋め込みを作成。
  3. 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

出力ファイル

ファイル説明
query_data_train.jsonl
,
query_data_test.jsonl
訓練/テストクエリデータ
default_llm_embeddings.json
埋め込み付きLLMメタデータ
query_embeddings_longformer.pt
統一クエリエンベディング
default_routing_train_data.jsonl
,
default_routing_test_data.jsonl
ルーティングデータ(モデル応答、スコア、トークン使用量)

ルーターの学習

# 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
    – 会話履歴全体を使用。
  • retrieval
    – コンテキストとして類似した過去クエリを top‑k 取得。

スクリプト直接実行

# 学習
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 はカスタムルーター用プラグインシステムをサポートします。

  1. ディレクトリ作成
    mkdir -p custom_routers/my_router
  2. ルーター実装 (
    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]
  1. 設定ファイル (
    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'
  1. ルーター使用
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
が用意されています。

独自タスクの追加

カスタムタスクはプロンプトテンプレートと評価指標を新しく定義できます。

  1. タスクフォーマッター (
    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}
  1. プロンプトテンプレート (
    custom_tasks/task_prompts/task_my_task.yaml
    )
template: |
  You are an expert at [task description]. [Instructions].
  1. カスタムメトリック(任意)
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
  1. 使用例
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}
}

同じ日のほかのニュース

一覧に戻る →

2026/01/06 6:05

ベネズエラで停電が起きた際に、BGP に異常が発生しました。

## Japanese Translation: --- ## Summary ロウオービットセキュリティのニュースレターは、ベネズエラが1月2日に停電した際に発生した疑わしいBGP異常を報告しています(Cloudflare Radar のタイムスタンプ 15:40 UTC)。Cloudflare Radar は CANTV (AS 8048) が自身の ASN を **10 回** 前置していることと、BGP 公開が急増し、その後広告される IP 空間が減少した異常なスパイクを示しています。200.74.224.0/20 ブロックから 8 つのプレフィックスが `…52320 8048 …` の経路で Sparkle(イタリア)と GlobeNet(コロンビア)を通じてリークされました。公開 BGP フィード(ris.ripe.net、bgpdump)は異常な AS‑path 構造を確認しており、Sparkle は RPKI フィルタリングが欠如しているため isbgpsafeyet.com で「unsafe」とリストされており、通常のトラフィックにとってルートが魅力的ではありません。 WHOIS データはリークされたプレフィックスがカラカスの Dayco Telecom に属していることを示しています。逆 DNS ルックアップは、これらの範囲が銀行、ISP、およびメールサーバーなどの重要インフラストラクチャをホストしていることを明らかにします。BGP アクティビティのタイミングは政治的不安と一致し(1月3日に爆発報告およびマドゥロが USS Iwo Jima に登場)、国家レベルでの悪用または意図的なルーティング操作を示唆しています。 ニュースレターは、通信事業者、ホスティングプロバイダー、およびセキュリティ企業に対し、ユーザーと重要インフラストラクチャをトラフィックの傍受や劣化から保護するために BGP 検証(例:RPKI)を強化するよう促しています。

2026/01/06 7:10

なぜAIは2025年に就業市場に参加しなかったのでしょう?

## Japanese Translation: この記事は、2025年までにAIエージェント革命が起こるという高い期待が過大であると主張しています。サム・オルトマン、ケビン・ワイル、マーク・ベニオフはすべて急速な採用と「デジタル労働」のブームを予測しましたが、実際のテスト(例:ChatGPTエージェントがドロップダウンメニューをナビゲートするのに14分かかったケース)では、大規模言語モデルは未だ鈍く不安定であることが示されています。ガリ・マーカスやアンドレイ・カルパチといったシリコンバレーの懐疑派もこれらの限界を認めており、カルパチはこの時期を「エージェントの十年」と呼びました。著者は、まだ信頼できるデジタル従業員を構築する方法がわからないことを指摘し、未来の仮想的な利益よりも現在の控えめな能力に焦点を移すべきだと訴えています。2026年には、実際の取り組みとして段階的な統合を推奨し、企業はまず小規模プロジェクトで試験運用するよう促し、政策立案者には仮説ではなく現在直面しているAIリスクに対処するよう呼びかけています。 ## Text to translate (incorporating missing details and avoiding inference):** The article argues that high‑profile predictions of an AI‑agent revolution by 2025 have been overblown. Sam Altman, Kevin Weil, and Mark Benioff all forecasted rapid adoption and a “digital labor” boom, but real‑world tests—such as ChatGPT Agent spending fourteen minutes navigating a drop‑down menu—show that large language models remain clumsy and unreliable. Silicon Valley skeptics like Gary Marcus and Andrej Karpathy acknowledge these limitations; Karpathy even referred to the period as the “Decade of the Agent.” The author notes that we still do not know how to build reliable digital employees, and urges a shift in focus from speculative future gains to the current modest capabilities. In 2026, the piece calls for realistic engagement: incremental integration rather than wholesale automation, encouraging companies to pilot small‑scale projects first and prompting policymakers to address present AI risks instead of hypothetical ones.

2026/01/06 1:47

**Show HN:** *Tailsnitch – Tailscale 用のセキュリティ監査ツール*

## Japanese Translation: **Tailsnitch** は、52項目を7つのカテゴリ(アクセス、認証、ネットワーク、SSH、ログ、デバイス、DNS)に分類した検査で、誤設定や過度に許容的なアクセス制御、ベストプラクティス違反を監査する軽量CLIツールです。 ユーザーは `tailsnitch` のようなシンプルなコマンドで実行し、結果を severity(`--severity`)、カテゴリ(`--category`)、特定のチェックID(`--checks`)または tailnet(`--tailnet`)でフィルタリングでき、SOC 2 証拠として JSON または CSV へエクスポートできます。 ツールは `tailsnitch --fix` による対話型修復をサポートし、dry‑run、auto‑select、および古いデバイス、保留中の承認、auth keys、タグなどの問題を自動的に修正するオプションがあります。 認証は OAuth(推奨)または API キーで行われます;監査モードでは `policy_file:read` と `devices:core:read` のスコープが必要で、修復モードではさらに `auth_keys` と `devices:core` が必要です。 インストールは簡単です:GitHub Releases から事前ビルドされたバイナリをダウンロードするか、`go install github.com/Adversis/tailsnitch@latest` を実行するか、ソースコード(`git clone https://github.com/Adversis/tailsnitch.git`)をビルドします。 既知のリスクは `.tailsnitch-ignore` ファイルで抑制できます(例:`ACL‑008` や `DEV‑006` のようなエントリー)。このファイルは現在とホームディレクトリに検索され、`--no-ignore` で無効化可能です。 Tailnet‑Lock チェック(`DEV‑010`、`DEV‑012`)にはローカルの Tailscale CLI が必要で、遠隔監査時にはマシンの状態を反映し、`--tailscale-path` を使用して上書きできます。 JSON エクスポートはポストプロセッシング(例:`jq` で失敗や severity の概要を一覧表示)用に設計されており、`--soc2 json` または `--soc2 csv` により SOC 2 証拠の生成もサポートします。 最後に、Tailsnitch は CI/CD パイプライン(GitHub Actions など)へ統合でき、重大または高 severity の発見があった場合にビルドを自動的に失敗させることで、チームが継続的にセキュリティポリシーを強制するのに役立ちます。

LLMRouter:LLMルーティング用オープンソースライブラリ | そっか~ニュース