> ## Documentation Index
> Fetch the complete documentation index at: https://docs.arouter.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# モデルルーティング

> ARouter が provider/model フォーマット、`auto`、および優先順位付き候補モデルリストを使用してリクエストを適切なプロバイダーにルーティングする方法。

## `provider/model` フォーマット

OpenAI 互換エンドポイント（`/v1/chat/completions`、`/v1/embeddings`）を使用する場合、
`provider/model` フォーマットでモデルを指定します：

```json theme={null}
{
  "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`            |

<Tip>
  プロバイダープレフィックスを省略すると、ARouter はデフォルトで **OpenAI** を使用します。
  つまり `"model": "gpt-5.4"` は `"model": "openai/gpt-5.4"` と同等です。
</Tip>

## ネイティブ 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`      |

<Note>
  ネイティブエンドポイントは `provider/model` プレフィックスを**使用しません**——エンドポイントパスでプロバイダーが既に特定されているため、プロバイダーのオリジナルモデル名を使用します。
</Note>

## 汎用プロバイダープロキシ

どのプロバイダーでも、汎用プロキシフォーマットを使用できます：

```
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 がプロンプトに最適なモデルを自動的に選択します。モデルの設定は不要です。

```json theme={null}
{
  "model": "auto",
  "messages": [{ "role": "user", "content": "Explain quantum entanglement in simple terms" }]
}
```

### 仕組み

1. ARouter のルーティングサービスがリクエストを分析します（プロンプトの複雑さ、タスクタイプ、必要なモダリティなど）
2. コスト効率と品質に基づいて、利用可能な正常なプロバイダーから最適なモデルを選択します
3. リクエストを選択されたモデルに転送します
4. レスポンスには、実際に使用されたモデルを示す `model` フィールドが含まれます

### 許可モデルの制限

`auto-router` プラグインを使用して、ワイルドカードパターンで `auto` が選択できるモデルを制限します：

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    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"],
        },
      ],
    });
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    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"],
                }
            ]
        },
    )
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    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"]
          }
        ]
      }'
    ```
  </Tab>
</Tabs>

**パターン構文：**

| パターン             | マッチ対象                     |
| ---------------- | ------------------------- |
| `anthropic/*`    | 全ての Anthropic モデル         |
| `openai/gpt-5*`  | 全ての GPT-5 バリアント           |
| `google/*`       | 全ての Google モデル            |
| `openai/gpt-5.4` | 完全一致のみ                    |
| `*/claude-*`     | モデル名に "claude" を含む全プロバイダー |

```json theme={null}
{
  "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` を確認してください。

### コード例

<Tabs>
  <Tab title="Python (OpenAI)">
    ```python theme={null}
    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)
    ```
  </Tab>

  <Tab title="Node.js (OpenAI)">
    ```typescript theme={null}
    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);
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    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)
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    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"}]
      }'
    ```
  </Tab>
</Tabs>

### ユースケース

* **汎用アプリ** — ユーザーがどのようなプロンプトを送るか不明な場合
* **コスト最適化** — シンプルなタスクを効率的なモデルに自動ルーティング
* **ゼロ設定プロトタイピング** — 特定のモデルを選択せずに即座に開始
* **アダプティブルーティング** — まず ARouter に任せ、明示的な制御が必要な場合のみ候補リストに切り替え

### 制限事項

* 自動ルーティングは標準の `messages` リクエストフォーマットを使用します
* 自動ルーティングはアカウントで利用可能なモデルから選択します
* ストリーミングは `"model": "auto"` で完全にサポートされています
* ARouter が選択したモデルの通常料金をお支払いいただきます。追加のルーティング料金はありません
* 選択されたモデルは常にレスポンスの `model` フィールドに反映されます

***

## 候補モデルリスト

`models` 配列と `route` を組み合わせて、ARouter が優先順位付き候補リストを順番に処理するようにします。

```json theme={null}
{
  "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` でこの動作を変更できます：

```json theme={null}
{
  "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"` を設定すると、全候補モデルにわたってエンドポイントをグローバルに並べ替えます——リスト順に関わらず、現在最も速いモデルを使用したい場合に便利です。完全なリファレンスは[プロバイダールーティング](/jp/provider-routing#advanced-sorting-with-partition)を参照してください。

### OpenAI SDK での候補リストの使用

OpenAI SDK にはネイティブの `models` パラメータがありません。`extra_body` を使用して渡します：

<Tabs>
  <Tab title="Python (OpenAI)">
    ```python theme={null}
    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)
    ```
  </Tab>

  <Tab title="Node.js (OpenAI)">
    ```typescript theme={null}
    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);
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    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!"}]
      }'
    ```
  </Tab>
</Tabs>

## アシスタントプリフィル

ARouter は、モデルに部分的なレスポンスの続きを生成させる機能をサポートしています。`messages` 配列の末尾に `role: "assistant"` のメッセージを追加することで、中断した箇所から継続できます：

```json theme={null}
{
  "model": "anthropic/claude-sonnet-4.6",
  "messages": [
    { "role": "user", "content": "Name 3 popular programming languages." },
    { "role": "assistant", "content": "1." }
  ]
}
```

モデルはプリフィルされたアシスタントメッセージから続きを生成します。このテクニックは以下に役立ちます：

* 特定の出力フォーマットを強制する
* マルチターン補完を再開する
* モデルを特定のレスポンス構造に誘導する

<Note>
  全てのモデルがアシスタントプリフィルをサポートしているわけではありません。Anthropic Claude とほとんどのオープンソースモデルはサポートしています。OpenAI モデルのサポートは限定的です。
</Note>

## ルーティングの内部動作

```
1. model フィールドを解析 → プロバイダー ID を抽出
2. API key の権限を確認 → このプロバイダーは許可されているか？
3. ルーターサービスを呼び出す → リージョンを選択、プールから正常なキーを選択
4. model フィールドを書き換え → プロバイダープレフィックスを除去
5. リバースプロキシ → プロバイダーの API key でアップストリームに転送
6. レスポンスをストリーミングで返す → 使用量を非同期で記録
```

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