> **目标**：6 个上游渠道 × 6 个模型，价格各不相同。本方案先定**基准价**（渠道报价中位数，**内部**用来对上游价格做分类），再定**平台统一模型定价**（对用户的价格：一个模型一个价，不分渠道），并按倍率划分三个分组 **cost-effective（<1）/ auto（=1）/ high-performance（>1）**，让**一个渠道可以同时属于多个组**。路由采用 **Priority（利润分层）+ Weight（利润分流）** 两层机制——最终实现：**无论用户创建的 Key 落在哪个分组，平台都能获得商业利益最大化**。

---

## 一、问题：多渠道多模型价格不同，怎么定价？

接入多个上游渠道、提供多个模型时，最头疼的问题就是**价格五花八门**：

- 同一个模型，不同渠道报价差异很大（有的便宜、有的贵）；
- 渠道成本差直接决定利润空间；
- 对所有用户收一个价，要么价高吓跑价格敏感用户，要么价低损失利润；
- 按渠道分别定价，价格体系混乱、难以维护。

因此需要：**① 用「基准价」在内部把上游渠道/模型价格分好类；② 给用户定一个平台统一的模型价格（ModelRatio，一个模型一个价，不分渠道）；③ 再围绕用户价按分组倍率（GroupRatio）分档，让不同 Key 各取所需；④ 用 Priority + Weight 两层路由保证每个分组内都按利润最大化分配流量。**

> **核心原则：内部价格（基准价）与对外价格（ModelRatio × GroupRatio）是两套不同的价格，不要混用。**

---

## 二、基准价（内部）：怎么定、用来干什么

**基准价 = 该模型在全部渠道报价的「中位数」**。

> **基准价是内部管理价，只用来对上游价格做分类，不是对用户的售价**。对用户的价格见第三节。

**内部用途（对上游价格分类）**：

- 对每个模型，把渠道报价与基准价比较：**报价 < 基准价** → 低成本渠道（便宜，天然适合进 cost-effective 等低倍率组）；**报价 ≥ 基准价** → 高成本渠道（贵，只能进高倍率组或被剔除）；
- 这是内部**粗分类**，某渠道×模型最终能否进某个组，仍以**利润 > 0** 判断为准；
- 基准价还用来理解渠道成本结构、指导 Priority 分层与 Weight 分配。

为什么用**中位数**而不是平均价？

- **抗极端值**：个别渠道恶意报高价/低价不会拉偏基准价；
- **代表市场普遍行情**：反映大多数渠道的真实成本水平；
- **可解释**：规则简单透明，人人能算。

例：某模型 6 渠道报价 `[8, 9, 10, 11, 12, 14]`，中位数 = `(10+11)/2 = 10.5`，即为该模型的内部**基准价**。

---

## 三、对用户的价格：平台统一模型定价

> **平台统一模型定价（对应系统参数 ModelRatio）：一个模型，不管用户请求最终被路由到哪个渠道，对用户的计费基准都是同一个 ModelRatio**。

- **定价权在平台**：参考市场价、竞品价、目标利润率自主设定，**不必等于基准价**（两套价格互相独立）；
- 示例：在基准价基础上上浮 10%~15% 取整（如 M1 基准 10.5 → ModelRatio 12.0）；
- **用户实际扣费 = ModelRatio × GroupRatio × TokenCount**（简化为 quota 单位，见下节）；
- 渠道成本差异只影响平台利润与路由选择，用户完全感知不到渠道差异。

---

## 四、三个分组：倍率档位（每个分组设置多少合适？）

围绕**平台统一模型定价（ModelRatio）**，划分三个分组（倍率 = 对 ModelRatio 的应用系数，对应系统参数 **GroupRatio**）：

| 分组 | GroupRatio | 实付 = ModelRatio × GroupRatio | 定位 |
|------|----------|-------------------------------|------|
| **cost-effective** | **< 1**（取 0.9） | 低于 ModelRatio | 性价比 |
| **auto** | **= 1**（取 1.0） | **取决于路由到哪个组**（见第五节） | 均衡型（默认） |
| **high-performance** | **> 1**（取 1.1） | 高于 ModelRatio | 高性能/稳定偏好 |

> **Key 选到哪个分组 → 就按对应 GroupRatio 扣费**；**平台只需保证每个组内都有盈利渠道，并用 Priority+Weight 两层路由分配流量**，即可做到「用户选哪个组，平台都利益最大化」。

### 倍率怎么定：每个分组设置多少合适？

倍率没有绝对标准，**0.9 / 1.0 / 1.1 是推荐起步值**，可按以下原则调整：

| 分组 | 建议区间 | 调整原则 |
|------|---------|---------|
| **cost-effective** | **0.8 ~ 0.95** | 下限受成本约束：必须满足 **GroupRatio ≥ 组内最便宜渠道成本 ÷ ModelRatio**，保证 ce 组至少有一个渠道盈利；建议再留冗余，让**组内至少有 2~3 个盈利渠道**（即 GroupRatio ≥ 第 3 便宜渠道成本 ÷ ModelRatio），避免渠道故障时无路可走。 |
| **auto** | **不单独设置** | **auto 不是一个独立倍率**：auto Key 的实付 = 路由到的渠道所在组的 GroupRatio（见第五节）。 |
| **high-performance** | **1.05 ~ 1.2** | 上限参考用户对高性能/稳定性的付费意愿与竞品价格；定太高会把用户推向 ce 或直接劝退，定太低与 auto 拉不开差距。 |

> **每次调整倍率后，都要重跑一遍利润判断**（见 Step 4），确认每个分组至少保留多个盈利渠道、组内不存在赔本渠道。

---

## 五、分组设置在 Key 上（重要修正：用户本身不分组）

> 旧观点：「把用户分到某个组」——**不准确**。**用户本身不分组**，分组是 **API Key 的属性**。

- 用户在**创建 Key** 时，为这个 Key 选择分组：**cost-effective（性价比）/ auto（均衡型）/ high-performance（高性能）**；
- **同一个用户可以创建多个 Key**，分别挂不同分组（例如：自己日常用 ce 的 Key，给高要求客户发 hp 的 Key）；
- Key 属于哪个组，该 Key 发出的请求就按对应逻辑路由并计费；
- **auto（均衡型）的正确理解**：auto Key 不固定分配一个 GroupRatio——它的**实付 GroupRatio = 实际路由到的渠道所在组的 GroupRatio**。系统按 `AutoGroups` 顺序依次尝试各组（当前配置：先 cost-effective、后 high-performance），auto Key 会被优先路由到 ce 组渠道、按 ce 倍率计费（如 0.9×）；ce 组渠道全部不可用时才降级到 hp 组、按 hp 倍率计费（如 1.1×）。对平台来说 **auto 同样是利益最大化**——用户不挑档位，平台可以**按利润导向在两组内自由路由**，自由度最大。

---

## 六、渠道与分组的关系：渠道×模型如何分类？

> 旧观点：「一个渠道只能属于一个组」——**不准确**。

在支持多分组的平台中，**一个渠道可以同时属于多个组**，实现方式：

1. **渠道条目拆分**：一个上游渠道按分组拆成多个渠道条目（如 `甲-ce`、`甲-auto`、`甲-hp`），复用**同一个上游 key**，分别挂到不同组；
2. **渠道配置多组**：若平台渠道的 group 字段支持多个值，直接让一个渠道记录归属多个组。

**渠道×模型分类规则（商业利益最大化的关键）**：

> 对某个模型，渠道能否加入某个组，取决于该组实付下**利润是否为正**：
> **利润 = ModelRatio × GroupRatio − 渠道成本 > 0** → 可以加入该组（拆成对应条目）。
> 利润 ≤ 0 → 不加入该组。

因此，**便宜渠道往往同时出现在多个组**（它在任何档位都盈利），而昂贵渠道只出现在高倍率组（甚至任何组都不进、彻底剔除）。

### 路由规则详解：Priority（利润分层）+ Weight（利润分流）

系统实际的路由机制是 **两层架构**，需要同时配置 Priority 和 Weight 才能实现利润最大化：

**第一层：Priority（优先级）——按利润分层，高利润渠道先选**

- 同一 `group × model` 下，channels 按 **Priority 从高到低**排序；
- 请求先尝试 **最高 Priority** 的渠道；如果失败（retry 递增），逐步降级到更低 Priority 的渠道；
- **映射规则**：单位利润最高的渠道 → Priority=高值（如 5）；中利润 → Priority=中值（如 1）；低利润兜底 → Priority=0。
- Priority 层级必须覆盖不同的利润梯队，保证正常时流量走最赚钱渠道、故障时自动降级到次优渠道而非直接失败。

**第二层：Weight（权重）——同一 Priority 层内按利润分流**

- 同一 Priority 层级内，**Weight 控制加权随机分流**比例；
- Weight=0 表示等权（所有该层渠道等效各 100，适合利润相近的渠道组）；
- **映射规则**：单位利润越高 → Weight 越大（如文档示例 100/65/30）。
- 同层多个渠道用 weight 分散负载、提高容错。

### 系统参数速查表

| 文档概念 | 系统参数 | 存储位置 | 说明 |
|---------|---------|---------|------|
| 平台统一模型定价（用户价） | **ModelRatio** | `options` 表 key=`ModelRatio` | 一个模型一个折扣系数 |
| 分组倍率 | **GroupRatio** | `options` 表 key=`GroupRatio` | `{"cost-effective":0.9, "auto":1, "high-performance":1.1}` |
| 渠道×模型 分组归属 | **Channel.group + .models** | `channels` 表 | 逗号分隔；支持多组 |
| 利润分层（第一层路由） | **Channel.priority** | `channels` 表 | 高利润→高值；不同层兜底 |
| 同层流量分配（第二层路由） | **Channel.weight** | `channels` 表 | 利润越高 weight 越大；0=等权 |

---

## 七、完整示例：6 渠道 × 6 模型，一步步实现商业利益最大化

### Step 1：输入 6 个渠道对 6 个模型的成本报价（元 / 百万 tokens）

| 渠道 | M1 | M2 | M3 | M4 | M5 | M6 |
|------|----|----|----|----|----|----|
| **甲** | 8.0 | 15.0 | 12.0 | 14.0 | 13.0 | 16.0 |
| **乙** | 9.0 | 10.0 | 16.0 | 11.0 | 12.0 | 13.0 |
| **丙** | 11.0 | 12.0 | 13.0 | 12.0 | 14.0 | 15.0 |
| **丁** | 14.0 | 9.0 | 15.0 | 13.0 | 16.0 | 12.0 |
| **戊** | 10.0 | 11.0 | 14.0 | 15.0 | 9.0 | 14.0 |
| **己** | 12.0 | 13.0 | 10.0 | 16.0 | 11.0 | 17.0 |

### Step 2：内部定基准价 + 对外定 ModelRatio（两套价格）

| 模型 | 6 渠道报价排序 | 基准价（内部，中位数） | ModelRatio（用户价，示例上浮后取整） |
|------|---------------|----------------------|--------------------------------------|
| M1 | 8, 9, 10, 11, 12, 14 | **10.5** | **12.0** |
| M2 | 9, 10, 11, 12, 13, 15 | **11.5** | **13.0** |
| M3 | 10, 12, 13, 14, 15, 16 | **13.5** | **15.0** |
| M4 | 11, 12, 13, 14, 15, 16 | **13.5** | **15.0** |
| M5 | 9, 11, 12, 13, 14, 16 | **12.5** | **14.0** |
| M6 | 12, 13, 14, 15, 16, 17 | **14.5** | **16.0** |

> 基准价只用于内部把渠道分成低成本/高成本两类；**用户按 ModelRatio × GroupRatio 扣费**。

### Step 3：设定三个分组的实付价（ModelRatio × GroupRatio）

以 **M1（ModelRatio 12.0）** 为例，GroupRatio = {ce:0.9, hp:1.1}：

| 分组 | GroupRatio | M1 用户实付 |
|------|-----------|------------|
| cost-effective | 0.9 | **10.8** |
| high-performance | 1.1 | **13.2** |

> auto Key 不固定一个实付——路由到 ce 渠道时付 10.8，路由到 hp 渠道时付 13.2（见第五节）。

### Step 4：判断每个渠道在各分组的利润，决定归属（利润 > 0 才入组）

M1 两档实付价下的利润矩阵：

| 渠道 | 成本 | ce 10.8 利润 | hp 13.2 利润 |
|------|------|-------------|-------------|
| 甲 | 8.0 | **+2.8** ✓ | **+5.2** ✓ |
| 乙 | 9.0 | **+1.8** ✓ | **+4.2** ✓ |
| 戊 | 10.0 | **+0.8** ✓ | **+3.2** ✓ |
| 丙 | 11.0 | −0.2 ✗ | **+2.2** ✓ |
| 己 | 12.0 | −1.2 ✗ | **+1.2** ✓ |
| 丁 | 14.0 | −3.2 ✗ | −0.8 ✗ |

**结论**：
- **甲、乙、戊**：两组全部盈利 → 同时属于 **ce / hp** 两组；
- **丙、己**：仅 hp 盈利 → 只属于 **hp** 组；
- **丁**：任何组都亏损 → **剔除**。

> 注意：甲、乙、戊是**便宜渠道**（成本 < 基准价 10.5），天然适合进 ce 低倍率组——这也是对平台最有利的安排：auto Key 优先路由到 ce 时，用户付 10.8，平台利润 0.8~2.8。

### Step 5：渠道拆分配置（一个渠道 → 多个组条目）

| 渠道条目 | 分组 | M1 成本 | 组内实付 | 单位利润 |
|---------|------|--------|---------|---------|
| 甲-ce | cost-effective | 8.0 | 10.8 | **2.8** |
| 乙-ce | cost-effective | 9.0 | 10.8 | **1.8** |
| 戊-ce | cost-effective | 10.0 | 10.8 | **0.8** |
| 甲-hp | high-performance | 8.0 | 13.2 | **5.2** |
| 乙-hp | high-performance | 9.0 | 13.2 | **4.2** |
| 戊-hp | high-performance | 10.0 | 13.2 | **3.2** |
| 丙-hp | high-performance | 11.0 | 13.2 | **2.2** |
| 己-hp | high-performance | 12.0 | 13.2 | **1.2** |

> 各条目复用同一上游 key，仅分组与绑定模型不同。

### Step 6：两层路由配置——Priority（利润分层）+ Weight（利润分流）

这是与单层 weight 方案的关键区别。先把组内渠道按单位利润**分层**，再在每层内按利润分配权重。

**cost-effective 组（M1）**：

| Priority 层 | 渠道条目 | 单位利润 | Weight | 说明 |
|-----------|---------|---------|--------|------|
| **3** | 甲-ce | 2.8 | **100** | 高利润层：先选，吃大部分流量 |
| **2** | 乙-ce | 1.8 | **65** | 中利润层：甲-ce 故障时降级使用 |
| **1** | 戊-ce | 0.8 | **30** | 低利润层：最后兜底，防止无渠道可用 |

**high-performance 组（M1）**：

| Priority 层 | 渠道条目 | 单位利润 | Weight | 说明 |
|-----------|---------|---------|--------|------|
| **3** | 甲-hp | 5.2 | **100** | retry=0：最高利润渠道 |
| **2** | 乙-hp | 4.2 | **80** | retry=1：次优降级 |
| **1** | 戊-hp | 3.2 | **60** | retry=2：继续降级 |
| **1** | 丙-hp | 2.2 | **40** | retry=2：与戊-hp 同层权重分流 |
| **0** | 己-hp | 1.2 | **25** | retry=3：最低利润兜底 |

> **效果**：无论用户创建的 Key 选 ce / hp 哪个分组，组内都是**最赚钱渠道优先选、故障自动降级、同层权重分散负载**——这是两层路由方案的可靠性保证。单层 weight 方案的问题：如果 weight=100 的渠道故障，所有流量都往 weight 低的渠道走，低利润渠道可能承担过高负载；而 priority 分层可在高利润层故障时整层跳过、直接落到下一层。

### Step 7：对 M2–M6 重复 Step 2–6，得到全量方案

每个模型执行同一套流程：**内部基准价 → 对外 ModelRatio → 两档实付（ModelRatio × GroupRatio）→ 利润判断 → 渠道按组拆分 → Priority 分层 + 同层 Weight 分配**。

---

## 八、代码实现（可复用工具）

以上「ModelRatio 定价 → 分组规划 → Priority+Weight 分配」已封装为脚本：**`scripts/channel_pricing_plan.py`**。你只需提供价格矩阵 CSV 和一个**收益预期值**，即可自动生成完整方案（Markdown 报告 + 结构化 JSON）。

### 1. 输入文件（价格矩阵 CSV）

示例文件：`docs/example_prices.csv`

```csv
渠道, M1, M2, M3, M4, M5, M6
甲, 8.0, 15.0, 12.0, 14.0, 13.0, 16.0
乙, 9.0, 10.0, 16.0, 11.0, 12.0, 13.0
丙, 11.0, 12.0, 13.0, 12.0, 14.0, 15.0
丁, 14.0, 9.0, 15.0, 13.0, 16.0, 12.0
戊, 10.0, 11.0, 14.0, 15.0, 9.0, 14.0
己, 12.0, 13.0, 10.0, 16.0, 11.0, 17.0
```

> 若某渠道不支持某模型，价格留空即可；脚本会跳过该「渠道×模型」组合。

### 2. 用法

```bash
# 收益预期 20%（毛利率），ModelRatio 按 0.5 取整，输出 Markdown 报告
python3 scripts/channel_pricing_plan.py docs/example_prices.csv --margin 0.2 --round 0.5

# 输出到文件 + 结构化 JSON（定价/分组/Priority+Weight，便于程序化落地）
python3 scripts/channel_pricing_plan.py docs/example_prices.csv --margin 0.25 --out plan.md --json plan.json

# 收益预期口径：gross = 毛利率 利润/售价（默认）；markup = 加成率 利润/成本
python3 scripts/channel_pricing_plan.py prices.csv --margin 0.2 --mode markup

# 自定义分组倍率（顺序：ce hp）
python3 scripts/channel_pricing_plan.py prices.csv --margin 0.2 --ratio 0.9 1.0 1.1
```

### 3. 计算流程（与本文档完全一致）

```python
base[m]     = median(全部渠道对 m 的报价)              # ① 基准价（内部，只做分类）
modelRatio[m] = base[m] / (1 - margin)                  # ② ModelRatio（对外，一个模型一个价）
price[m][g] = modelRatio[m] × groupRatio[g]             # ③ 分组实付 = ModelRatio × GroupRatio
入组: price[m][g] - 渠道成本 > 0                        # ④ 分组规划（利润 > 0 才入组）
priority    = 利润梯队（高利润→高值，不同利润→不同层级）  # ⑤ Priority 利润分层
weight      = 100 × 同层利润占比（按绑定模型取平均）     # ⑥ 同层 Weight 利润分流
```

> 完整实现见 `scripts/channel_pricing_plan.py`，包含：中位数基准价、收益预期反推 ModelRatio、两分组利润判断、渠道按组拆分、Priority+Weight 两层路由配置、覆盖度检查与警告（空组 / 单点风险）、Markdown 报告与 JSON 输出。

---

## 九、总结

1. **基准价（内部）**：渠道报价中位数，**只用于内部对上游价格做分类**（低成本/高成本渠道），**不对用户收费**；
2. **ModelRatio（平台统一模型定价）**：一个模型一个价、不分渠道，对应系统参数 `options.ModelRatio`，平台自主定价（参考市场/竞品/目标利润率）；
3. **GroupRatio（分组倍率）**：作用在 ModelRatio 上，ce（建议 0.8~0.95）/ hp（建议 1.05~1.2）；调整倍率后务必重跑利润判断，保证每组多个盈利渠道；
4. **auto 不固定倍率**：auto Key 的实付 GroupRatio = 实际路由到的渠道组的倍率；系统按 `AutoGroups` 顺序依次尝试各组（默认先 ce 后 hp）；
5. **用户不分组（重要修正）**：分组挂在 **Key** 上，创建 Key 时选 cost-effective / auto / high-performance；同一用户可创建多个不同分组的 Key；
6. **渠道可属多组**：一个渠道按分组拆分成多个条目（复用同一上游 key），或直接配置多组；归属条件是**该组实付下利润 > 0**；
7. **两层路由：Priority（利润分层）+ Weight（利润分流）**：Priority 决定谁先被选（高利润→高值，不同层兜底）；Weight 在同一 Priority 层内按单位利润加权分流；两层配合才能真正做到「高利润渠道优先、故障自动降级、同层分散负载」；
8. **商业利益最大化**：用户创建的 Key 无论落在哪个分组，组内都是高利润渠道优先路由、同层利润高的渠道吃更多流量，亏损渠道一律剔除——**无论用户选哪个分组，平台都赚取最大利润**。
