provider/model フォーマット
OpenAI 互換エンドポイント(/v1/chat/completions、/v1/embeddings)を使用する場合、
provider/model フォーマットでモデルを指定します:
{
"model": "anthropic/claude-sonnet-4.6",
"messages": [{"role": "user", "content": "Hello!"}]
}
ARouter はプロバイダープレフィックスを解析し、正しいアップストリームにリクエストをルーティングし、
転送前に model フィールドをプロバイダーのネイティブフォーマットに書き換えます。
| 送信内容 | プロバイダー | アップストリームモデル |
|---|
openai/gpt-5.4 | OpenAI | gpt-5.4 |
anthropic/claude-sonnet-4.6 | Anthropic | claude-sonnet-4.6 |
google/gemini-2.5-flash | Google | gemini-2.5-flash |
deepseek/deepseek-v3.2 | DeepSeek | deepseek-v3.2 |
x-ai/grok-4.20 | xAI | grok-4.20 |
mistralai/mistral-large-2512 | Mistral | mistral-large-2512 |
meta-llama/llama-4-maverick | Meta | llama-4-maverick |
gpt-5.4 | OpenAI(デフォルト) | gpt-5.4 |
プロバイダープレフィックスを省略すると、ARouter はデフォルトで OpenAI を使用します。
つまり "model": "gpt-5.4" は "model": "openai/gpt-5.4" と同等です。
ネイティブ SDK エンドポイント
独自の SDK フォーマットを持つプロバイダーには、ネイティブエンドポイントを直接使用します。
プロバイダーは model フィールドではなくエンドポイントパスで決定されます:
| SDK | エンドポイント | モデルフォーマット |
|---|
| Anthropic | POST /v1/messages | ネイティブ:claude-sonnet-4.6 |
| Gemini | POST /v1beta/models/{model}:generateContent | ネイティブ:gemini-2.5-flash |
| MiniMax | POST /v1/text/chatcompletion_v2 | ネイティブ:minimax-m2.7 |
ネイティブエンドポイントは provider/model プレフィックスを使用しません——エンドポイントパスでプロバイダーが既に特定されているため、プロバイダーのオリジナルモデル名を使用します。
汎用プロバイダープロキシ
どのプロバイダーでも、汎用プロキシフォーマットを使用できます:
POST /{provider}/v1/chat/completions
例:
POST /openai/v1/chat/completions → OpenAI にプロキシ
POST /deepseek/v1/chat/completions → DeepSeek にプロキシ
POST /anthropic/v1/messages → Anthropic にプロキシ
model フィールドの解析をバイパスし、どのプロバイダーがリクエストを受け取るかを明示的に制御したい場合に便利です。
自動ルーティング
model を "auto" に設定すると、ARouter がプロンプトに最適なモデルを自動的に選択します。モデルの設定は不要です。
{
"model": "auto",
"messages": [{ "role": "user", "content": "Explain quantum entanglement in simple terms" }]
}
仕組み
- ARouter のルーティングサービスがリクエストを分析します(プロンプトの複雑さ、タスクタイプ、必要なモダリティなど)
- コスト効率と品質に基づいて、利用可能な正常なプロバイダーから最適なモデルを選択します
- リクエストを選択されたモデルに転送します
- レスポンスには、実際に使用されたモデルを示す
model フィールドが含まれます
許可モデルの制限
auto-router プラグインを使用して、ワイルドカードパターンで auto が選択できるモデルを制限します:
const response = await client.chat.completions.create({
model: "auto",
messages: [{ role: "user", content: "Explain quantum entanglement" }],
// @ts-ignore
plugins: [
{
id: "auto-router",
allowed_models: ["anthropic/*", "openai/gpt-5.4"],
},
],
});
response = client.chat.completions.create(
model="auto",
messages=[{"role": "user", "content": "Explain quantum entanglement"}],
extra_body={
"plugins": [
{
"id": "auto-router",
"allowed_models": ["anthropic/*", "openai/gpt-5.4"],
}
]
},
)
curl https://api.arouter.ai/v1/chat/completions \
-H "Authorization: Bearer lr_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "auto",
"messages": [{"role": "user", "content": "Explain quantum entanglement"}],
"plugins": [
{
"id": "auto-router",
"allowed_models": ["anthropic/*", "openai/gpt-5.4"]
}
]
}'
パターン構文:
| パターン | マッチ対象 |
|---|
anthropic/* | 全ての Anthropic モデル |
openai/gpt-5* | 全ての GPT-5 バリアント |
google/* | 全ての Google モデル |
openai/gpt-5.4 | 完全一致のみ |
*/claude-* | モデル名に “claude” を含む全プロバイダー |
{
"id": "chatcmpl-xxx",
"model": "anthropic/claude-sonnet-4.6",
"choices": [
{
"message": {
"role": "assistant",
"content": "..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 15,
"completion_tokens": 120,
"total_tokens": 135
}
}
実際に使用されたモデルを確認するために、常に response.model を確認してください。
コード例
Python (OpenAI)
Node.js (OpenAI)
Go
cURL
from openai import OpenAI
client = OpenAI(
base_url="https://api.arouter.ai/v1",
api_key="lr_live_xxxx",
)
response = client.chat.completions.create(
model="auto",
messages=[{"role": "user", "content": "Explain quantum entanglement in simple terms"}],
)
print(response.choices[0].message.content)
print("Model used:", response.model)
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: "auto",
messages: [{ role: "user", content: "Explain quantum entanglement in simple terms" }],
});
console.log(response.choices[0].message.content);
console.log("Model used:", response.model);
resp, err := client.CreateChatCompletion(ctx, arouter.ChatCompletionRequest{
Model: "auto",
Messages: []arouter.Message{
{Role: "user", Content: "Explain quantum entanglement in simple terms"},
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(resp.Choices[0].Message.Content)
fmt.Println("Model used:", resp.Model)
curl https://api.arouter.ai/v1/chat/completions \
-H "Authorization: Bearer lr_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "auto",
"messages": [{"role": "user", "content": "Explain quantum entanglement in simple terms"}]
}'
ユースケース
- 汎用アプリ — ユーザーがどのようなプロンプトを送るか不明な場合
- コスト最適化 — シンプルなタスクを効率的なモデルに自動ルーティング
- ゼロ設定プロトタイピング — 特定のモデルを選択せずに即座に開始
- アダプティブルーティング — まず ARouter に任せ、明示的な制御が必要な場合のみ候補リストに切り替え
制限事項
- 自動ルーティングは標準の
messages リクエストフォーマットを使用します
- 自動ルーティングはアカウントで利用可能なモデルから選択します
- ストリーミングは
"model": "auto" で完全にサポートされています
- ARouter が選択したモデルの通常料金をお支払いいただきます。追加のルーティング料金はありません
- 選択されたモデルは常にレスポンスの
model フィールドに反映されます
候補モデルリスト
models 配列と route を組み合わせて、ARouter が優先順位付き候補リストを順番に処理するようにします。
{
"models": [
"anthropic/claude-opus-4.5",
"openai/gpt-5.4",
"google/gemini-2.5-flash"
],
"route": "fallback",
"messages": [{ "role": "user", "content": "Hello!" }]
}
仕組み
- ARouter はリスト内の最初のモデルを試みます
- リクエストを処理できない場合(プロバイダーエラー、レート制限、キー使用不可)、次のモデルに移ります
- 全てのモデルが失敗した場合、ARouter は最後の失敗理由を含むエラーを返します
ルーティング動作
| トリガー | 動作 |
|---|
| プロバイダー利用不可 | 次のモデルへ移行 |
| レート制限(429) | 次のモデルへ移行 |
| モデルが見つからない | 次のモデルへ移行 |
| 不正リクエスト(400) | 停止してリクエストエラーを返す |
パーティション動作の制御
デフォルトでは、候補リストを使用する場合、エンドポイントはモデルごとにグループ化されます——最初のモデルのエンドポイントは常に2番目のモデルより先に試みられます。provider.sort.partition でこの動作を変更できます:
{
"models": [
"anthropic/claude-sonnet-4.6",
"openai/gpt-5.4",
"google/gemini-2.5-flash"
],
"route": "fallback",
"messages": [{ "role": "user", "content": "Hello!" }],
"provider": {
"sort": {
"by": "throughput",
"partition": "none"
}
}
}
partition: "none" を設定すると、全候補モデルにわたってエンドポイントをグローバルに並べ替えます——リスト順に関わらず、現在最も速いモデルを使用したい場合に便利です。完全なリファレンスはプロバイダールーティングを参照してください。
OpenAI SDK での候補リストの使用
OpenAI SDK にはネイティブの models パラメータがありません。extra_body を使用して渡します:
Python (OpenAI)
Node.js (OpenAI)
cURL
from openai import OpenAI
client = OpenAI(
base_url="https://api.arouter.ai/v1",
api_key="lr_live_xxxx",
)
response = client.chat.completions.create(
model="anthropic/claude-opus-4.5", # 最初の候補
messages=[{"role": "user", "content": "Hello!"}],
extra_body={
"models": [
"anthropic/claude-opus-4.5",
"openai/gpt-5.4",
"google/gemini-2.5-flash",
],
"route": "fallback",
},
)
print(response.choices[0].message.content)
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: "anthropic/claude-opus-4.5", // 最初の候補
messages: [{ role: "user", content: "Hello!" }],
// @ts-ignore — extra_body は型定義にありません
models: [
"anthropic/claude-opus-4.5",
"openai/gpt-5.4",
"google/gemini-2.5-flash",
],
route: "fallback",
});
console.log(response.choices[0].message.content);
curl https://api.arouter.ai/v1/chat/completions \
-H "Authorization: Bearer lr_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"models": [
"anthropic/claude-opus-4.5",
"openai/gpt-5.4",
"google/gemini-2.5-flash"
],
"route": "fallback",
"messages": [{"role": "user", "content": "Hello!"}]
}'
アシスタントプリフィル
ARouter は、モデルに部分的なレスポンスの続きを生成させる機能をサポートしています。messages 配列の末尾に role: "assistant" のメッセージを追加することで、中断した箇所から継続できます:
{
"model": "anthropic/claude-sonnet-4.6",
"messages": [
{ "role": "user", "content": "Name 3 popular programming languages." },
{ "role": "assistant", "content": "1." }
]
}
モデルはプリフィルされたアシスタントメッセージから続きを生成します。このテクニックは以下に役立ちます:
- 特定の出力フォーマットを強制する
- マルチターン補完を再開する
- モデルを特定のレスポンス構造に誘導する
全てのモデルがアシスタントプリフィルをサポートしているわけではありません。Anthropic Claude とほとんどのオープンソースモデルはサポートしています。OpenAI モデルのサポートは限定的です。
ルーティングの内部動作
1. model フィールドを解析 → プロバイダー ID を抽出
2. API key の権限を確認 → このプロバイダーは許可されているか?
3. ルーターサービスを呼び出す → リージョンを選択、プールから正常なキーを選択
4. model フィールドを書き換え → プロバイダープレフィックスを除去
5. リバースプロキシ → プロバイダーの API key でアップストリームに転送
6. レスポンスをストリーミングで返す → 使用量を非同期で記録
ARouter はプロバイダー API key の注入、ヘルスチェック、フェイルオーバーを
完全に透過的に処理します。アプリケーションがアップストリームプロバイダーの認証情報を
見ることはありません。