メインコンテンツへスキップ

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.4OpenAIgpt-5.4
anthropic/claude-sonnet-4.6Anthropicclaude-sonnet-4.6
google/gemini-2.5-flashGooglegemini-2.5-flash
deepseek/deepseek-v3.2DeepSeekdeepseek-v3.2
x-ai/grok-4.20xAIgrok-4.20
mistralai/mistral-large-2512Mistralmistral-large-2512
meta-llama/llama-4-maverickMetallama-4-maverick
gpt-5.4OpenAI(デフォルト)gpt-5.4
プロバイダープレフィックスを省略すると、ARouter はデフォルトで OpenAI を使用します。 つまり "model": "gpt-5.4""model": "openai/gpt-5.4" と同等です。

ネイティブ SDK エンドポイント

独自の SDK フォーマットを持つプロバイダーには、ネイティブエンドポイントを直接使用します。 プロバイダーは model フィールドではなくエンドポイントパスで決定されます:
SDKエンドポイントモデルフォーマット
AnthropicPOST /v1/messagesネイティブ:claude-sonnet-4.6
GeminiPOST /v1beta/models/{model}:generateContentネイティブ:gemini-2.5-flash
MiniMaxPOST /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" }]
}

仕組み

  1. ARouter のルーティングサービスがリクエストを分析します(プロンプトの複雑さ、タスクタイプ、必要なモダリティなど)
  2. コスト効率と品質に基づいて、利用可能な正常なプロバイダーから最適なモデルを選択します
  3. リクエストを選択されたモデルに転送します
  4. レスポンスには、実際に使用されたモデルを示す 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"],
    },
  ],
});
パターン構文:
パターンマッチ対象
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 を確認してください。

コード例

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)

ユースケース

  • 汎用アプリ — ユーザーがどのようなプロンプトを送るか不明な場合
  • コスト最適化 — シンプルなタスクを効率的なモデルに自動ルーティング
  • ゼロ設定プロトタイピング — 特定のモデルを選択せずに即座に開始
  • アダプティブルーティング — まず 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!" }]
}

仕組み

  1. ARouter はリスト内の最初のモデルを試みます
  2. リクエストを処理できない場合(プロバイダーエラー、レート制限、キー使用不可)、次のモデルに移ります
  3. 全てのモデルが失敗した場合、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 を使用して渡します:
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)

アシスタントプリフィル

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 の注入、ヘルスチェック、フェイルオーバーを 完全に透過的に処理します。アプリケーションがアップストリームプロバイダーの認証情報を 見ることはありません。