---
title: Provider Routing
description: 配置 OpenRouter provider 偏好，以优化成本、速度或质量。
sidebar_label: Provider Routing
sidebar_position: 7
---

# Provider Routing

使用 [OpenRouter](https://openrouter.ai) 作为 LLM provider 时，Hermes Agent 支持 **provider routing**（提供商路由）——对哪些底层 AI provider 处理你的请求以及如何排列优先级进行精细控制。

OpenRouter 将请求路由到多个 provider（例如 Anthropic、Google、AWS Bedrock、Together AI）。Provider routing 让你可以针对成本、速度、质量进行优化，或强制指定特定 provider。

## 配置

在 `~/.hermes/config.yaml` 中添加 `provider_routing` 部分：

```yaml
provider_routing:
  sort: "price"           # 如何对 provider 排序
  only: []                # 白名单：仅使用这些 provider
  ignore: []              # 黑名单：永不使用这些 provider
  order: []               # 显式 provider 优先级顺序
  require_parameters: false  # 仅使用支持所有参数的 provider
  data_collection: null   # 控制数据收集（"allow" 或 "deny"）
```

:::info
Provider routing 仅在使用 OpenRouter 时生效。直接连接 provider（例如直接连接 Anthropic API）时无效。
:::

## 选项

### `sort`

控制 OpenRouter 如何对可用 provider 排序。

| 值 | 说明 |
|-------|-------------|
| `"price"` | 最便宜的 provider 优先 |
| `"throughput"` | 每秒 token 数最高的 provider 优先 |
| `"latency"` | 首 token 延迟最低的 provider 优先 |

```yaml
provider_routing:
  sort: "price"
```

### `only`

Provider 名称白名单。设置后，**仅**使用这些 provider，其余全部排除。

```yaml
provider_routing:
  only:
    - "Anthropic"
    - "Google"
```

### `ignore`

Provider 名称黑名单。这些 provider **永远不会**被使用，即使它们提供最低价格或最快速度。

```yaml
provider_routing:
  ignore:
    - "Together"
    - "DeepInfra"
```

### `order`

显式优先级顺序。列在前面的 provider 优先使用，未列出的 provider 作为备选。

```yaml
provider_routing:
  order:
    - "Anthropic"
    - "Google"
    - "AWS Bedrock"
```

### `require_parameters`

设为 `true` 时，OpenRouter 仅路由到支持请求中**所有**参数（如 `temperature`、`top_p`、`tools` 等）的 provider，避免参数被静默丢弃。

```yaml
provider_routing:
  require_parameters: true
```

### `data_collection`

控制 provider 是否可将你的 prompt（提示词）用于训练。可选值为 `"allow"` 或 `"deny"`。

```yaml
provider_routing:
  data_collection: "deny"
```

## 实用示例

### 优化成本

路由到最便宜的可用 provider，适合高频使用和开发场景：

```yaml
provider_routing:
  sort: "price"
```

### 优化速度

优先选择低延迟 provider，适合交互式使用：

```yaml
provider_routing:
  sort: "latency"
```

### 优化吞吐量

适合长文本生成，token 每秒速率至关重要的场景：

```yaml
provider_routing:
  sort: "throughput"
```

### 锁定特定 Provider

确保所有请求都通过特定 provider 处理，以保证一致性：

```yaml
provider_routing:
  only:
    - "Anthropic"
```

### 排除特定 Provider

排除不希望使用的 provider（例如出于数据隐私考虑）：

```yaml
provider_routing:
  ignore:
    - "Together"
    - "Lepton"
  data_collection: "deny"
```

### 带备选的优先顺序

优先尝试首选 provider，不可用时回退到其他 provider：

```yaml
provider_routing:
  order:
    - "Anthropic"
    - "Google"
  require_parameters: true
```

## 工作原理

Provider routing 偏好通过每次 API 调用的 `extra_body.provider` 字段传递给 OpenRouter API，适用于以下两种模式：

- **CLI 模式** — 在 `~/.hermes/config.yaml` 中配置，启动时加载
- **Gateway 模式** — 同一配置文件，gateway 启动时加载

路由配置从 `config.yaml` 读取，并在创建 `AIAgent` 时作为参数传入：

```
providers_allowed  ← 来自 provider_routing.only
providers_ignored  ← 来自 provider_routing.ignore
providers_order    ← 来自 provider_routing.order
provider_sort      ← 来自 provider_routing.sort
provider_require_parameters ← 来自 provider_routing.require_parameters
provider_data_collection    ← 来自 provider_routing.data_collection
```

:::tip
可以组合使用多个选项。例如，按价格排序，同时排除某些 provider 并要求参数支持：

```yaml
provider_routing:
  sort: "price"
  ignore: ["Together"]
  require_parameters: true
  data_collection: "deny"
```
:::

## 默认行为

未配置 `provider_routing` 部分时（默认情况），OpenRouter 使用其自身的默认路由逻辑，通常会自动在成本和可用性之间取得平衡。

:::tip Provider Routing 与 Fallback Models
Provider routing 控制 OpenRouter **内部的子 provider** 如何处理你的请求。若需要在主模型失败时自动故障转移到完全不同的 provider，请参阅 [Fallback Providers](/user-guide/features/fallback-providers)。
:::