# 多渠道·多模型价格分流配置示例

> **目标**：6 个上游渠道 × 6 个模型，价格各不相同。通过合理设置 **分组(Group)**、**优先级(Priority)**、**权重(Weight)**，让每个模型按价格自动分流到 `cost-effective`（性价比）或 `high-performance`（高性能）组，并让权重分配**贴合最大收益**——即把更多流量导向上游成本更低的渠道，从而放大利润。

---

## 一、核心规则

### 1. 分组分界：每个模型取 6 个渠道价格的**中位数**

```
价格 < 中位数  → 归入 cost-effective（性价比组，追求便宜）
价格 ≥ 中位数  → 归入 high-performance（高性能组，追求稳定/不惜成本）
```

### 2. 渠道拆分：一个渠道只能属于一个组

new-api 中 `group` 是**渠道级**属性，一个渠道只能属于一个组，但可以绑定多个模型。
因此，当某个上游渠道的不同模型落入不同价格档时，将它**拆成两个渠道条目**（复用同一上游 key），各自放入对应组、只绑定该组的模型。

### 3. 权重 = 最大收益导向

在**销售价固定**的前提下，利润 = 售价 − 上游成本。因此：

- **上游成本越低 → 利润率越高 → 应分配更多流量 → weight 越大**
- 同一组内同一模型，最便宜的渠道 weight 最高，最贵的渠道 weight 最低（保留最小兜底，避免单点故障）

> 权重具体算法：组内对每个模型计算「归一化利润占比」`(组内最高成本 − 本渠道成本) / (组内最高成本 − 最低成本)`，越便宜越接近 1；取渠道所绑全部模型的平均，映射到 **10～100** 区间。

---

## 二、输入：价格矩阵（单位：元 / 百万 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 |

---

## 三、分界计算（每个模型独立取中位数）

| 模型 | 6 渠道价格排序 | 中位数分界 | → cost-effective | → high-performance |
|------|---------------|-----------|------------------|---------------------|
| M1 | 8, 9, 10, 11, 12, 14 | **10.5** | 甲, 乙, 戊 | 丙, 丁, 己 |
| M2 | 9, 10, 11, 12, 13, 15 | **11.5** | 乙, 丁, 戊 | 甲, 丙, 己 |
| M3 | 10, 12, 13, 14, 15, 16 | **13.5** | 甲, 丙, 己 | 乙, 丁, 戊 |
| M4 | 11, 12, 13, 14, 15, 16 | **13.5** | 乙, 丙, 丁 | 甲, 戊, 己 |
| M5 | 9, 11, 12, 13, 14, 16 | **12.5** | 乙, 戊, 己 | 甲, 丙, 丁 |
| M6 | 12, 13, 14, 15, 16, 17 | **14.5** | 乙, 丁, 戊 | 甲, 丙, 己 |

---

## 四、输出：渠道设置表（最大收益权重）

> 共 12 个渠道条目（6 个上游 × 按组拆分）。`priority` 统一为 `0`（同组同优先级，全靠 weight 分流）。

| 渠道条目 | 分组 | 绑定模型 | priority | weight（利润优化） |
|----------|------|---------|:--------:|:------------------:|
| 甲-ce  | cost-effective | M1, M3 | 0 | **70** |
| 甲-hp  | high-performance | M2, M4, M5, M6 | 0 | **66** |
| 乙-ce  | cost-effective | M1, M2, M4, M5, M6 | 0 | **55** |
| 乙-hp  | high-performance | M3 | 0 | **10** |
| 丙-ce  | cost-effective | M3, M4 | 0 | **32** |
| 丙-hp  | high-performance | M1, M2, M5, M6 | 0 | **92** |
| 丁-ce  | cost-effective | M2, M4, M6 | 0 | **70** |
| 丁-hp  | high-performance | M1, M3, M5 | 0 | **25** |
| 戊-ce  | cost-effective | M1, M2, M5, M6 | 0 | **32** |
| 戊-hp  | high-performance | M3, M4 | 0 | **78** |
| 己-ce  | cost-effective | M3, M5 | 0 | **70** |
| 己-hp  | high-performance | M1, M2, M4, M6 | 0 | **40** |

---

## 五、权重解读（最大收益导向）

以 **cost-effective 组的 M1 为例**（组内渠道：甲=8.0，乙=9.0，戊=10.0）：

| 渠道 | 成本 | 利润占比 | 对权重贡献 |
|------|------|---------|-----------|
| 甲 | 8.0（最便宜） | (10−8)/(10−8) = **1.0** | 最高 → 组内吃最多流量 |
| 乙 | 9.0 | (10−9)/(10−8) = **0.5** | 居中 |
| 戊 | 10.0（最贵） | (10−10)/(10−8) = **0.0** | 最小兜底 |

**效果**：同一个模型，用户支付相同的售价，但流量优先压给上游成本最低的甲渠道 → **单次利润最大化**。乙、戊保留少量权重仅作降级/容灾兜底，避免渠道故障时无路可走。

---

## 六、分组覆盖度检查

每个模型在两个组内都至少有 3 个可用渠道，保证降级 / 重试有余量：

| 模型 | cost-effective 可用渠道 | high-performance 可用渠道 |
|------|------------------------|--------------------------|
| M1 | 甲, 乙, 戊 | 丙, 丁, 己 |
| M2 | 乙, 丁, 戊 | 甲, 丙, 己 |
| M3 | 甲, 丙, 己 | 乙, 丁, 戊 |
| M4 | 乙, 丙, 丁 | 甲, 戊, 己 |
| M5 | 乙, 戊, 己 | 甲, 丙, 丁 |
| M6 | 乙, 丁, 戊 | 甲, 丙, 己 |

---

## 七、配置落地步骤

1. **创建分组**：在后台准备好 `cost-effective`、`high-performance` 两个分组，并把相应用户归入对应组。
2. **创建渠道**：为每个上游渠道创建 1～2 个渠道记录（`甲-ce` / `甲-hp` …），填入**相同的上游 key**。
3. **填绑定模型**：每条目只填该组归属的模型（见上表）。
4. **填 group / priority / weight**：分别选对应分组、priority=`0`、weight=`上表数值`。

> 提示：若某渠道你希望「绝对优先」，可单独提高 priority；weight 负责同优先级下的利润导向分流。

---

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

以上所有计算逻辑均已封装为可复用脚本：**`scripts/channel_price_plan.py`**。你只需提供一个价格矩阵 CSV，即可自动生成渠道设置表（含最大收益权重）。

### 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
# 读取价格矩阵，输出 Markdown 报告到控制台
python3 scripts/channel_price_plan.py docs/example_prices.csv

# 输出到文件
python3 scripts/channel_price_plan.py docs/example_prices.csv --out plan.md

# 切换权重策略（默认 profit=最大收益；rank=按价格排名）
python3 scripts/channel_price_plan.py prices.csv --strategy rank

# 调整「等于中位数」的价格归入哪一侧（默认 high=高性能组）
python3 scripts/channel_price_plan.py prices.csv --median low

# 自定义分组显示名
GROUP_CE=性价比 GROUP_HP=高性能 python3 scripts/channel_price_plan.py prices.csv
```

### 3. 核心实现（伪代码）

```python
def build_plan(prices):
    """prices: {渠道: {模型: 成本}}——返回渠道设置表"""
    for model in models:
        # ① 每个模型取所有渠道价格的中位数作为分界
        th[model] = median(渠道价格列表)

        # ② 按分界把每个「渠道×模型」归入 ce / hp
        for channel in channels:
            group = "hp" if prices[channel][model] >= th[model] else "ce"
            assign[channel][group].append(model)

    # ③ 最大收益权重：组内归一化利润占比，越便宜分越多流量
    for channel, group in split_by_group(assign):
        for model in assign[channel][group]:
            costs = group_costs(model, group)          # 该模型在组内各渠道成本
            share = (max(costs) - costs[channel]) / (max(costs) - min(costs))
        weight = round(10 + 90 * mean(shares))          # 映射到 10~100
```

> 完整实现见 `scripts/channel_price_plan.py`，包含：中位数分界、渠道按组拆分、两种权重策略（`profit` / `rank`）、分组覆盖度检查、Markdown 报告输出。

### 4. 验证

脚本针对本文示例生成的权重与上表**逐项一致**（70/66/55/10/32/92/70/25/32/78/70/40），确保文档与工具逻辑完全对齐。