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

# 计费公式

> 五种计费单位的完整算法、积分扣减顺序与收益分成公式

# 计费公式

这一页写**公式**，不写费率。

原因很直接：费率是运营数据，随模型上下线和供应商调价变动，写进文档次日就可能过期；而公式是代码，改它要发版。你需要的是"知道钱怎么算出来的"，这样看到账单能自己复核。

<Info>
  所有金额在系统内以**积分**结算。汇率固定：**1 元 = 100 积分**（代码常量 `CREDITS_PER_YUAN = 100`）。
</Info>

## 通用管线

不论哪种计费单位，都走同一条链：

<Steps>
  <Step title="解析计费单位">
    模型配置声明它按哪种单位计费：`token_split` / `per_call` / `per_ten_thousand_characters` / `duration_second` / `cost_matrix`。
  </Step>

  <Step title="算供应商成本或直接算费率">
    走成本矩阵的，先按参数条件匹配规则拿到成本（元）；未启用成本矩阵的，直接用配置的费率算。
  </Step>

  <Step title="加价">
    `售价(元) = 成本(元) × (1 + marginPercent / 100)`
  </Step>

  <Step title="换算积分并向上取整">
    `积分 = max(1, ceil(售价 × 100))`
  </Step>

  <Step title="乘参数系数">
    某些参数（分辨率、模式等）配了系数时：`最终积分 = ceil(基础积分 × 系数)`
  </Step>
</Steps>

<Warning>
  每一步都是 `ceil` 而非四舍五入，且**最低消耗 1 积分**（`max(1, ...)`）。所以一次极小的调用不会是 0 积分。多次微小调用累计出的费用会略高于按总量一次算——取整发生在每一次，不是最后。
</Warning>

## 一、`token_split`：按 token 分别计价

用于对话模型。输入与输出分别有费率，单位是**积分 / 百万 token**。

```
输入消耗 = ceil(inputTokens × inputRate / 1,000,000)
输出消耗 = ceil(outputTokens × outputRate / 1,000,000)
基础消耗 = 输入消耗 + 输出消耗
最终消耗 = max(1, hasFactors ? ceil(基础消耗 × 系数) : 基础消耗)
```

<Warning>
  注意 `ceil` 在**输入和输出上各做一次**，然后才相加。这意味着一次调用最少 2 积分（各 1），即使 token 数极少。
</Warning>

### 没有分项 token 时的回落

有些供应商只回总 token，不分输入输出。此时用混合费率：

```
混合费率 = tokenRate > 0
            ? tokenRate
            : ceil((inputRate + outputRate) / 2)

基础消耗 = ceil(总tokens × 混合费率 / 1,000,000)
```

混合费率取的是**输入与输出费率的算术平均**。实际对话里输出 token 远少于输入，所以走回落路径通常比走分项路径贵。看到某个模型的账单明显高于预期，可以先确认它有没有回传分项 token。

### 供应商成本记录

有配供应商成本时，同时记账（不影响你的扣费，用于平台对账）：

```
供应商成本(元) = (inputTokens × costInputYuan + outputTokens × costOutputYuan) / 1,000,000
```

## 二、`duration_second`：按秒计价

用于视频生成、沙箱运行时长等。

```
基础消耗 = ceil(时长秒数 × durationRate)
最终消耗 = max(1, hasFactors ? ceil(基础消耗 × 系数) : 基础消耗)
```

走成本矩阵时：

```
成本(元) = mode === "per_unit" ? unitCostYuan × 秒数 : unitCostYuan   // flat 为固定值
售价(元) = 成本 × (1 + margin / 100)
积分     = max(1, ceil(售价 × 100))
```

`flat` 模式的存在是因为部分供应商按"一次生成"收费而不按时长——同样是 duration 单位，规则里选 `flat` 就退化成固定价。

## 三、`per_call`：按次计价

用于图片生成等一次一结果的调用。

```
基础消耗 = ceil(调用次数 × perCallRate)
最终消耗 = max(1, hasFactors ? ceil(基础消耗 × 系数) : 基础消耗)
```

批量生成（`generate_batch`）按实际张数计次，不打折。

## 四、`per_ten_thousand_characters`：按万字符计价

用于 TTS、翻译等按文本量计费的能力。与 `per_call` 共用同一段实现，只多一个除数：

```
计费量  = 字符数 / 10,000
基础消耗 = ceil(计费量 × rate)
最终消耗 = max(1, hasFactors ? ceil(基础消耗 × 系数) : 基础消耗)
```

<Note>
  匹配成本规则时用的是**原始字符数**（`callCount`），只有计算金额时才除以 10,000。所以"超过 5 万字符换一档费率"这类阶梯规则要按原始字符数写，不是按万字。
</Note>

## 五、`cost_matrix`：参数条件 → 成本

不是第五种计费单位，而是**前四种之上的一层定价策略**。它让同一个模型按参数走不同价格（如 1024x1024 与 4K 不同价）。

规则结构：

```json theme={null}
{
  "rules": [
    {
      "conditions": [
        { "key": "resolution", "values": ["4k", "2160p"] }
      ],
      "unitCostYuan": 0.5,
      "mode": "per_unit"
    },
    {
      "conditions": [],
      "unitCostYuan": 0.1,
      "mode": "per_unit"
    }
  ]
}
```

匹配规则：

* 规则**按顺序求值，第一条全部条件命中的规则胜出**
* 同一条规则内的多个条件是 **AND** 关系
* `conditions` 为空数组的规则**匹配一切**，作为兜底
* 条件有三种形态：枚举（`values` 任一命中）、区间（`min` / `max`，可配 `minExclusive` / `maxExclusive` 决定开闭）、精确相等（`equals`）

<Warning>
  兜底规则必须放在**最后**。放前面会让它先命中，后面所有精细规则永远走不到——而且不报错，只是所有人都按兜底价计费。
</Warning>

token 单位与 per\_call / duration 单位在规则里的成本字段不同：

| 单位                   | 成本字段                                               |
| -------------------- | -------------------------------------------------- |
| token                | `inputCostYuan` + `outputCostYuan`（元 / 百万 token）   |
| per\_call / duration | `unitCostYuan` + `mode`（`per_unit` 按量 / `flat` 固定） |

**售价不存库**：只存成本 + 加价率，计费时现算。这样调整毛利只改一个数，不用回填历史定价。

## 积分扣减顺序（六桶优先级）

账户里的积分不是一个数字，而是**六个桶**。扣费时严格按以下顺序消耗：

<Steps>
  <Step title="1. 每日签到（daily）">
    次日零点（东八区）过期。最先扣，因为它最快作废。
  </Step>

  <Step title="2. 注册赠送（signup）">
    90 天有效。
  </Step>

  <Step title="3. 套餐赠送（plan_bonus）">
    一个订阅周期内有效。
  </Step>

  <Step title="4. 邀请奖励（referral）">
    长期未活跃 100 天后回收。
  </Step>

  <Step title="5. 充值赠送（recharge bonus）">
    永久有效。
  </Step>

  <Step title="6. 充值本金（purchase）">
    永久有效，**最后才动**。
  </Step>
</Steps>

原则一句话：**先花快过期的，最后花你真金白银买的**。同一桶内按到期时间先后消耗。

<Info>
  过期回收是"定向扣某一笔"而不是走优先级——回收记录携带来源交易 ID，精确扣那一笔的剩余量。找不到对应笔时才回落到按优先级扣。这保证了"注册赠送过期"不会误伤你的充值余额。
</Info>

未知或历史遗留的赠送类型归入充值本金桶（永久、最低优先级）——保守处理，宁可晚扣也不误吞用户余额。

## 专家收益分成

创作者收益按两条独立路径计算。

### 买断（解锁专家）

```
创作者收益(钻石) = 解锁价格 × buyoutSharePpm / 1,000,000
```

分成比例按创作者等级（ppm，百万分之一）：

| 等级             | 门槛（累计钻石）  | `buyoutSharePpm` | 实际比例 |
| -------------- | --------- | ---------------- | ---- |
| `rising`       | 0         | 750,000          | 75%  |
| `growing`      | 300,000   | 850,000          | 85%  |
| `professional` | 1,000,000 | 900,000          | 90%  |
| `master`       | 5,000,000 | 950,000          | 95%  |

### 按量分成（消耗）

```
profit          = 用户消耗积分 − 模型与工具成本
创作者收益(钻石) = profit × consumptionSharePpm / 1,000,000
```

| 等级             | `consumptionSharePpm` | 实际比例 |
| -------------- | --------------------- | ---- |
| `rising`       | 100,000               | 10%  |
| `growing`      | 150,000               | 15%  |
| `professional` | 200,000               | 20%  |
| `master`       | 200,000               | 20%  |

<Warning>
  两个要点常被误解：

  1. **按量分成从 profit 算，不是从消耗总额算。** 用户花 1,000 积分、其中 700 是模型成本，`professional` 创作者拿的是 `300 × 20% = 60` 钻石，不是 `1,000 × 20% = 200`。
  2. **自购不计收益。** 用自己账号买自己的专家不产生分成，避免刷量。
</Warning>

消耗分成在 `professional`（20%）之后不再提升——升到 `master` 只提高买断分成。

## 提现换算

```
可提现金额(元) = 已解冻钻石 / exchangeRate      // 默认 exchangeRate = 100
```

即 **100 钻石 = 1 元**。冻结期与门槛见 [限额表](/zh/documentation/reference/limits)。

<Warning>
  提现功能当前在代码层硬关闭，任何申请返回 `WITHDRAWAL_NOT_OPEN`。上面的公式是开放后生效的规则。
</Warning>

## 自己复核账单

<Steps>
  <Step title="拿到本次调用的单位与费率">
    消费记录里带 `pricingUnit` 与费率快照。
  </Step>

  <Step title="按本页公式手算">
    注意每一步都 `ceil`，且最低 1 积分。
  </Step>

  <Step title="对不上时先查三件事">
    * 是否命中了参数系数（`factorCoefficient` 不为 1）
    * 是否走了成本矩阵而不是固定费率
    * token 单位是否因为供应商没回分项而走了混合费率回落
  </Step>
</Steps>

这三处是绝大多数"算不对"的来源，且都会体现在消费记录的字段里。

## 相关页面

<CardGroup cols={2}>
  <Card title="限额表" icon="gauge" href="/zh/documentation/reference/limits">
    额度、有效期、频率限制
  </Card>

  <Card title="积分与消耗" icon="coins" href="/zh/documentation/billing/credits">
    积分的获取与查询
  </Card>

  <Card title="收益体系" icon="chart-line" href="/zh/creators/revenue-system">
    创作者收益的完整说明
  </Card>

  <Card title="定价与计费" icon="tag" href="/zh/creators/pricing-and-billing">
    给自己的专家定价
  </Card>
</CardGroup>

<Note>
  核对日期 2026-08-11。来源：`services/core/src/db/service/credit-consume.ts`（计费管线与六桶优先级）、`services/core/src/constants/cost-matrix.ts`（成本规则）、`services/core/src/db/service/platform-config.ts`（分成比例与提现规则）。费率与成本数值属运营数据，本页刻意不写。
</Note>
