ARouter はモデルの可用性、プロバイダーの健全性、コスト効率に基づいて、各リクエストを最適なアップストリームプロバイダーに自動的にルーティングします。ほとんどのユースケースでは、設定なしで自動的に行われます。
高度な制御が必要な場合は、リクエストボディに provider オブジェクトを渡して、ルーティング決定のカスタマイズができます。
provider オブジェクト
任意の /v1/chat/completions リクエストに provider オブジェクトを含めて、ルーティングのデフォルトをオーバーライドします:
{
"model": "openai/gpt-5.4",
"messages": [{ "role": "user", "content": "Hello!" }],
"provider": {
"sort": "throughput",
"allow_fallbacks": true
}
}
フィールドリファレンス(全項目)
| フィールド | 型 | デフォルト | 説明 |
|---|
order | string[] | — | 順番に試すプロバイダースラッグのリスト。例:["openai", "azure"] |
allow_fallbacks | boolean | true | プライマリが利用不可の場合にバックアッププロバイダーを許可するか |
require_parameters | boolean | false | リクエスト内の全パラメータをサポートするプロバイダーのみを使用 |
data_collection | "allow" | "deny" | "allow" | リクエストデータを保存する可能性のあるプロバイダーの使用を制御 |
zdr | boolean | — | Zero Data Retention エンドポイントのみにルーティングを制限 |
only | string[] | — | このリクエストで許可するプロバイダースラッグのリスト |
ignore | string[] | — | このリクエストでスキップするプロバイダースラッグのリスト |
quantizations | string[] | — | 量子化レベルでフィルタリング。例:["int4", "int8"] |
sort | string | object | — | "price"、"throughput"、"latency" でプロバイダーをソート |
preferred_min_throughput | number | object | — | 優先する最低スループット(tokens/秒) |
preferred_max_latency | number | object | — | 優先する最大レイテンシー(秒) |
max_price | object | — | トークンあたりの支払い上限価格 |
デフォルト戦略:コストベースの負荷分散
デフォルトでは、ARouter はコストを優先しながら、正常なプロバイダー間でリクエストを負荷分散します。アルゴリズム:
- 過去30秒間に重大な障害があったプロバイダーを除外
- 安定したプロバイダーの中で、価格の逆数の二乗で重み付けして選択
- 残りのプロバイダーを自動フォールバックとして使用
例: プロバイダーAが1/Mトークン、プロバイダーBが2/M、プロバイダーCが$3/Mの場合:
- プロバイダーAはプロバイダーCより9倍選ばれやすい(逆数二乗重み付け)
- プロバイダーAが失敗した場合、次にプロバイダーCを試みる
- プロバイダーB(最近劣化)は最後に試みる
sort または order を設定すると、負荷分散は無効になり、プロバイダーは厳密な順序で試みられます。
プロバイダーソート
sort フィールドを使用してプロバイダー属性に明示的な優先度を付けます。負荷分散は無効になり、プロバイダーは順番に試みられます。
利用可能なソート値:
"price" — 最低トークンコストを優先
"throughput" — 最高 tokens/秒を優先
"latency" — 最低 Time-to-first-token を優先
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.arouter.ai/v1",
apiKey: "lr_live_xxxx",
});
const response = await client.chat.completions.create({
model: "openai/gpt-5.4",
messages: [{ role: "user", content: "Hello" }],
// @ts-ignore
provider: { sort: "throughput" },
});
from openai import OpenAI
client = OpenAI(
base_url="https://api.arouter.ai/v1",
api_key="lr_live_xxxx",
)
response = client.chat.completions.create(
model="openai/gpt-5.4",
messages=[{"role": "user", "content": "Hello"}],
extra_body={"provider": {"sort": "throughput"}},
)
curl https://api.arouter.ai/v1/chat/completions \
-H "Authorization: Bearer lr_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-5.4",
"messages": [{"role": "user", "content": "Hello"}],
"provider": {"sort": "throughput"}
}'
:nitro と :floor ショートカット
モデルスラッグにサフィックスを追加してソートの省略記法として使用:
| サフィックス | 同等の設定 |
|---|
:nitro | provider.sort = "throughput" |
:floor | provider.sort = "price" |
{"model": "openai/gpt-5.4:nitro"} // スループットでソート
{"model": "openai/gpt-5.4:floor"} // 価格でソート
パーティションを使った高度なソート
候補モデルリスト(models[])を使用する場合、sort フィールドは partition オプションを持つオブジェクトにして、エンドポイントがモデルをまたいでどのようにソートされるかを制御できます。
| フィールド | 型 | デフォルト | 説明 |
|---|
sort.by | string | — | "price"、"throughput"、"latency" |
sort.partition | string | "model" | "model"(プライマリモデルを最初に試みる)または "none"(グローバルにソート) |
デフォルト(partition: "model")では、エンドポイントはモデルごとにグループ化されます——最初のモデルのエンドポイントは常に2番目のモデルより先に試みられます。partition: "none" を設定すると、このグループ化が解除され、全候補モデルにわたるグローバルソートが可能になります。
ユースケース1:複数モデルにわたる最高スループットへのルーティング
複数の許容可能なモデルがあり、現在最も速いものを使いたい場合:
const response = await client.chat.completions.create({
// @ts-ignore
models: [
"anthropic/claude-sonnet-4.6",
"openai/gpt-5.4",
"google/gemini-2.5-flash",
],
messages: [{ role: "user", content: "Hello" }],
provider: {
sort: { by: "throughput", partition: "none" },
},
});
response = client.chat.completions.create(
model="anthropic/claude-sonnet-4.6",
messages=[{"role": "user", "content": "Hello"}],
extra_body={
"models": [
"anthropic/claude-sonnet-4.6",
"openai/gpt-5.4",
"google/gemini-2.5-flash",
],
"provider": {
"sort": {"by": "throughput", "partition": "none"},
},
},
)
curl https://api.arouter.ai/v1/chat/completions \
-H "Authorization: Bearer lr_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"models": [
"anthropic/claude-sonnet-4.6",
"openai/gpt-5.4",
"google/gemini-2.5-flash"
],
"messages": [{"role": "user", "content": "Hello"}],
"provider": {
"sort": {"by": "throughput", "partition": "none"}
}
}'
ユースケース2:パフォーマンス要件を満たす最安値モデル
partition: "none" とパフォーマンス閾値を組み合わせて、SLAを満たしながら最低コストのオプションを見つける:
const response = await client.chat.completions.create({
// @ts-ignore
models: [
"anthropic/claude-sonnet-4.6",
"openai/gpt-5.4",
"google/gemini-2.5-flash",
],
messages: [{ role: "user", content: "Hello" }],
provider: {
sort: { by: "price", partition: "none" },
preferred_min_throughput: { p90: 50 },
},
});
response = client.chat.completions.create(
model="anthropic/claude-sonnet-4.6",
messages=[{"role": "user", "content": "Hello"}],
extra_body={
"models": [
"anthropic/claude-sonnet-4.6",
"openai/gpt-5.4",
"google/gemini-2.5-flash",
],
"provider": {
"sort": {"by": "price", "partition": "none"},
"preferred_min_throughput": {"p90": 50},
},
},
)
curl https://api.arouter.ai/v1/chat/completions \
-H "Authorization: Bearer lr_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"models": [
"anthropic/claude-sonnet-4.6",
"openai/gpt-5.4",
"google/gemini-2.5-flash"
],
"messages": [{"role": "user", "content": "Hello"}],
"provider": {
"sort": {"by": "price", "partition": "none"},
"preferred_min_throughput": {"p90": 50}
}
}'
パフォーマンス閾値
プロバイダーをフィルタリングするための最低スループットまたは最大レイテンシーの設定。閾値を満たさないプロバイダーは優先度が下げられます(末尾に移動)が、完全に除外されるわけではありません。
| フィールド | 説明 |
|---|
preferred_min_throughput | 最低 tokens/秒。数値(p50 に適用)またはパーセンタイルキーを持つオブジェクト |
preferred_max_latency | 最大 Time-to-first-token(秒)。数値またはパーセンタイルキーを持つオブジェクト |
パーセンタイルの仕組み
ARouter はローリング5分間ウィンドウでプロバイダーパフォーマンスを追跡します:
| パーセンタイル | 意味 |
|---|
p50 | リクエストの50%がこの値より良い(中央値) |
p75 | リクエストの75%がこの値より良い |
p90 | リクエストの90%がこの値より良い |
p99 | リクエストの99%がこの値より良い |
高いパーセンタイル(p90/p99)は最悪ケースのパフォーマンスに対する信頼度を高めます。指定した全パーセンタイルカットオフを満たすプロバイダーが優先グループに入ります。
{
"provider": {
"preferred_min_throughput": {
"p50": 100,
"p90": 50
},
"preferred_max_latency": {
"p99": 3.0
}
}
}
preferred_min_throughput と preferred_max_latency はソフトな設定です——リクエストの処理を阻害することはありません。これは max_price とは異なります。max_price はハード制限です。
特定プロバイダーの順序指定
order を使用して、試みるプロバイダーとその順序を指定します。order が設定されると負荷分散は無効になります。
const response = await client.chat.completions.create({
model: "openai/gpt-5.4",
messages: [{ role: "user", content: "Hello" }],
// @ts-ignore
provider: {
order: ["openai", "azure"],
},
});
response = client.chat.completions.create(
model="openai/gpt-5.4",
messages=[{"role": "user", "content": "Hello"}],
extra_body={
"provider": {
"order": ["openai", "azure"],
}
},
)
curl https://api.arouter.ai/v1/chat/completions \
-H "Authorization: Bearer lr_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-5.4",
"messages": [{"role": "user", "content": "Hello"}],
"provider": {"order": ["openai", "azure"]}
}'
特定プロバイダーのみを許可
only を使用してルーティングを特定のプロバイダーセットに制限:
{
"model": "meta-llama/llama-4-maverick",
"messages": [{ "role": "user", "content": "Hello" }],
"provider": {
"only": ["groq", "together"]
}
}
プロバイダーの無視
ignore を使用してこのリクエストの特定プロバイダーをスキップ:
{
"model": "openai/gpt-5.4",
"messages": [{ "role": "user", "content": "Hello" }],
"provider": {
"ignore": ["azure"]
}
}
フォールバックの無効化
デフォルトでは、プライマリプロバイダーが利用不可の場合、ARouter は代替プロバイダーにフォールバックします。allow_fallbacks: false を設定すると、正確なプロバイダーを要求します:
{
"model": "openai/gpt-5.4",
"messages": [{ "role": "user", "content": "Hello" }],
"provider": {
"order": ["openai"],
"allow_fallbacks": false
}
}
指定したプロバイダーが利用不可の場合、ARouter は他の場所にルーティングする代わりに 503 エラーを返します。
パラメータサポートの要求
require_parameters: true を設定すると、リクエスト内の全パラメータをサポートするプロバイダーのみにルーティングします。デフォルトでは、ARouter はサポートされていないパラメータを無視するプロバイダーにルーティングする場合があります。
{
"model": "openai/gpt-5.4",
"messages": [{ "role": "user", "content": "Hello" }],
"tools": [...],
"provider": {
"require_parameters": true
}
}
量子化フィルタリング
プロバイダーが提供するモデルの量子化レベルでフィルタリングします。特定の精度/パフォーマンストレードオフが必要な場合に便利です:
{
"model": "meta-llama/llama-4-maverick",
"messages": [{ "role": "user", "content": "Hello" }],
"provider": {
"quantizations": ["fp16", "bf16"]
}
}
一般的な量子化値:"fp32"、"fp16"、"bf16"、"int8"、"int4"。
データ収集ポリシー
ARouter がリクエストデータを保存する可能性のあるプロバイダーにルーティングするかどうかを制御:
| 値 | 動作 |
|---|
"allow"(デフォルト) | データを保存する可能性があるプロバイダーを含む、あらゆるプロバイダーにルーティング |
"deny" | リクエスト/レスポンスデータを保存しないプロバイダーのみにルーティング |
{
"model": "anthropic/claude-sonnet-4.6",
"messages": [{ "role": "user", "content": "Sensitive content" }],
"provider": {
"data_collection": "deny"
}
}
Zero Data Retention(ZDR)
最大限のプライバシーのために、Zero Data Retention 保証のあるプロバイダーのみにルーティングを制限:
{
"model": "openai/gpt-5.4",
"messages": [{ "role": "user", "content": "Hello" }],
"provider": {
"zdr": true
}
}
ZDR プロバイダーはリクエストデータをログ記録、保存、またはトレーニングに使用しません。詳細はデータ収集を参照してください。
最大価格
トークンあたりの支払い上限を設定します。価格要件を満たすプロバイダーがない場合、リクエストは高価なプロバイダーにルーティングされる代わりに失敗します:
{
"model": "openai/gpt-5.4",
"messages": [{ "role": "user", "content": "Hello" }],
"provider": {
"max_price": {
"prompt": "0.000010",
"completion": "0.000030"
}
}
}
パフォーマンス閾値とは異なり、max_price はハード制限です。価格要件を満たすプロバイダーがない場合、リクエストはエラーを返します。
プロバイダーの健全性と可用性
ARouter はサーキットブレーカーメカニズムを使用してプロバイダーの健全性を継続的に追跡します:
| ステータス | 動作 |
|---|
| 正常 | プロバイダーはリクエストを通常通り受け付けている |
| 劣化 | 最近の障害が検出された;異なるキーでリクエストが再試行される場合がある |
| 利用不可 | 全てのキーがサーキットブレーク済み;ARouter は 503 を返す |
これは完全に透明です——アプリケーションはプロバイダーレベルの再試行ロジックを実装する必要はありません。
モデルプレフィックスによるプロバイダーの指定
どのプロバイダーがリクエストを処理するかを制御する主な方法は provider/model フォーマットです:
{
"model": "openai/gpt-5.4",
"messages": [{ "role": "user", "content": "Hello!" }]
}
サポートされるフォーマットの完全なリストはモデルルーティングを参照してください。
ネイティブプロバイダープロキシ
完全な制御のために、プロバイダープロキシエンドポイント /{provider}/{path} を使用して、ARouter のモデルルーティング層を完全にバイパスします:
# OpenAI に直接
curl https://api.arouter.ai/openai/v1/chat/completions \
-H "Authorization: Bearer lr_live_xxxx" \
-d '{"model": "gpt-5.4", "messages": [...]}'
# Anthropic に直接
curl https://api.arouter.ai/anthropic/v1/messages \
-H "Authorization: Bearer lr_live_xxxx" \
-d '{"model": "claude-sonnet-4.6", "messages": [...]}'
完全なリファレンスはプロバイダープロキシを参照してください。
サポートされるプロバイダー
| プロバイダー | プレフィックス | モデル例 |
|---|
| OpenAI | openai | openai/gpt-5.4 |
| Anthropic | anthropic | anthropic/claude-sonnet-4.6 |
| Google | google | google/gemini-2.5-flash |
| DeepSeek | deepseek | deepseek/deepseek-v3.2 |
| xAI | x-ai | x-ai/grok-4.20 |
| Mistral | mistralai | mistralai/mistral-large-2512 |
| Meta | meta-llama | meta-llama/llama-4-maverick |
| Qwen | qwen | qwen/qwen3-235b |
| MiniMax | minimax | minimax/minimax-m2.7 |
| Groq | groq | groq/llama-3.3-70b-versatile |
| Kimi | moonshotai | moonshotai/kimi-k2.5 |
| Dashscope | dashscope | dashscope/qwen-max |
機能の完全なリストはプロバイダーを参照してください。