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

# 计费对账

> 导出日志字段说明与各模型系列核算公式

## 导出字段说明

通过日志导出功能获取 CSV 文件后，可使用以下字段进行计费核算：

| 字段          | 含义                                  |
| ----------- | ----------------------------------- |
| 提示Token     | 上游返回的原始输入总量（校验用）                    |
| 输入Token     | 按普通文本输入单价计费的非缓存输入；无缓存、无图片时等于提示Token |
| 缓存命中Token   | 命中缓存的输入 token                       |
| 缓存写入Token   | 写入缓存的 token（5分钟有效期）                 |
| 缓存写入1hToken | 写入缓存的 token（1小时有效期）                 |
| 输出Token     | 总输出 token 数（含推理）                    |
| 推理Token     | 模型内部推理消耗的输出 token                   |
| 输入单价        | CNY/百万Token                         |
| 输出单价        | CNY/百万Token                         |
| 缓存命中单价      | CNY/百万Token                         |
| 缓存写入单价      | CNY/百万Token                         |
| 缓存写入1h单价    | CNY/百万Token                         |
| 推理单价        | CNY/百万Token                         |
| 搜索次数        | Claude Web Search 调用次数              |
| 搜索单价        | CNY/次（按次计费）                         |
| 图片输入Token   | 图片模态的输入 token 数                     |
| 图片输入单价      | CNY/百万Token（图片输入）                   |
| 缓存图片Token   | 缓存命中的图片输入 token 数                   |
| 缓存图片单价      | CNY/百万Token（缓存图片）                   |

### 校验关系

```
普通文本:
提示Token = 输入Token + 缓存命中Token + 缓存写入Token + 缓存写入1hToken

含图片输入:
提示Token = 输入Token + 图片输入Token + 缓存命中Token + 缓存图片Token + 缓存写入Token + 缓存写入1hToken
```

<Note>提示Token用于校验上游输入总量。财务核算统一使用各分项 Token 乘对应单价，不使用提示Token直接计费。</Note>

### 精度说明

公式计算金额与实际计费可能存在 \< ￥0.0001 的差异，来源于内部额度单位的向上取整（`ceil`），属于正常精度损失。

***

## Claude 系列

适用模型：`claude-sonnet-4-6`、`claude-opus-4-6`、`claude-haiku-4-5` 等

**计费特点：** 缓存分为 5分钟 和 1小时 两档，写入缓存比普通输入贵，读取缓存大幅折扣。支持 Web Search 按次附加计费。

### 上游响应体结构

Claude 原生 Messages API 返回的 `usage` 结构如下：

```json theme={null}
{
  "usage": {
    "input_tokens": 465,
    "output_tokens": 572,
    "cache_creation_input_tokens": 46109,
    "cache_read_input_tokens": 11944,
    "cache_creation": {
      "ephemeral_5m_input_tokens": 29762,
      "ephemeral_1h_input_tokens": 16347
    },
    "server_tool_use": {
      "web_search_requests": 1
    }
  }
}
```

| 字段                                         | 对账映射             |
| ------------------------------------------ | ---------------- |
| `input_tokens`                             | 输入Token（非缓存普通输入） |
| `output_tokens`                            | 输出Token          |
| `cache_read_input_tokens`                  | 缓存命中Token        |
| `cache_creation_input_tokens`              | 写缓存总量（校验用）       |
| `cache_creation.ephemeral_5m_input_tokens` | 缓存写入Token        |
| `cache_creation.ephemeral_1h_input_tokens` | 缓存写入1hToken      |
| `server_tool_use.web_search_requests`      | 搜索次数             |

<Note>如果上游没有返回 `cache_creation` 分桶，平台会把 `cache_creation_input_tokens` 作为默认/5分钟写缓存处理。通过 OpenAI 兼容接口返回给客户端时，缓存命中会映射到 `usage.prompt_tokens_details.cached_tokens`；写缓存分桶以日志 metadata 和导出字段为准。</Note>

### 公式

```
金额 = 输入Token / 1M × 输入单价
     + 缓存命中Token / 1M × 缓存命中单价
     + 缓存写入Token / 1M × 缓存写入单价
     + 缓存写入1hToken / 1M × 缓存写入1h单价
     + 输出Token / 1M × 输出单价
     + 搜索次数 × 搜索单价
```

<Note>搜索次数和搜索单价为可选导出字段，仅在请求使用了 Claude Web Search 工具时有值。未使用时为空，不影响总金额。</Note>

### 示例

以 `claude-haiku-4-5` 一次真实请求为例：

| 字段          | 值        |
| ----------- | -------- |
| 提示Token     | 58,518   |
| 输出Token     | 572      |
| 输入Token     | 465      |
| 缓存命中Token   | 11,944   |
| 缓存写入Token   | 29,762   |
| 缓存写入1hToken | 16,347   |
| 输入单价        | ￥3.5/M   |
| 输出单价        | ￥17.5/M  |
| 缓存命中单价      | ￥0.35/M  |
| 缓存写入单价      | ￥4.375/M |
| 缓存写入1h单价    | ￥7.0/M   |

**计算：**

```
465 / 1M × 3.5       = ￥0.001628
11,944 / 1M × 0.35   = ￥0.004180
29,762 / 1M × 4.375  = ￥0.130209
16,347 / 1M × 7.0    = ￥0.114429
572 / 1M × 17.5      = ￥0.010010
─────────────────────────────────
合计                   = ￥0.260456
```

***

## GPT-5 系列

适用模型：`gpt-5`、`gpt-5.4`、`gpt-5.4-mini` 等

**计费特点：** 有推理 token（reasoning），推理单价通常等于输出单价。支持缓存读取。

### 响应体 usage 结构

Chat Completions 接口常见 `usage` 结构如下：

```json theme={null}
{
  "usage": {
    "prompt_tokens": 26672,
    "completion_tokens": 3791,
    "total_tokens": 30463,
    "prompt_tokens_details": {
      "cached_tokens": 0,
      "text_tokens": 26672,
      "audio_tokens": 0,
      "image_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 2478,
      "text_tokens": 1313,
      "audio_tokens": 0
    }
  }
}
```

Responses 接口常见 `usage` 结构如下：

```json theme={null}
{
  "usage": {
    "input_tokens": 26672,
    "output_tokens": 3791,
    "total_tokens": 30463,
    "input_tokens_details": {
      "cached_tokens": 0,
      "text_tokens": 26672
    },
    "output_tokens_details": {
      "reasoning_tokens": 2478
    }
  }
}
```

| Chat Completions 字段                          | Responses 字段                             | 对账映射                |
| -------------------------------------------- | ---------------------------------------- | ------------------- |
| `prompt_tokens`                              | `input_tokens`                           | 提示Token（输入总量，含缓存命中） |
| `completion_tokens`                          | `output_tokens`                          | 输出Token（含推理）        |
| `prompt_tokens_details.cached_tokens`        | `input_tokens_details.cached_tokens`     | 缓存命中Token           |
| `completion_tokens_details.reasoning_tokens` | `output_tokens_details.reasoning_tokens` | 推理Token             |

<Note>`cached_tokens` 是输入总量里的子项，不是额外 token。财务核算时，输入Token = 提示Token - 缓存命中Token；推理Token 已包含在输出Token中。</Note>

### 公式

```
金额 = 输入Token / 1M × 输入单价
     + 缓存命中Token / 1M × 缓存命中单价
     + (输出Token - 推理Token) / 1M × 输出单价
     + 推理Token / 1M × 推理单价
```

<Note>当推理单价 = 输出单价时（大多数 GPT 模型），可简化为 `输入Token/1M × 输入单价 + 输出Token/1M × 输出单价`。</Note>

### 示例

以 `gpt-5.4` 一次真实请求为例：

| 字段        | 值       |
| --------- | ------- |
| 提示Token   | 26,672  |
| 输出Token   | 3,791   |
| 输入Token   | 26,672  |
| 缓存命中Token | 0       |
| 推理Token   | 2,478   |
| 输入单价      | ￥8.75/M |
| 输出单价      | ￥52.5/M |
| 推理单价      | ￥52.5/M |

**计算：**

```
26,672 / 1M × 8.75    = ￥0.233380
(3,791 - 2,478) / 1M × 52.5 = ￥0.068933
2,478 / 1M × 52.5     = ￥0.130095
─────────────────────────────────
合计                    = ￥0.432408
```

***

## GPT-Image 系列

适用模型：`gpt-image-2`、`gpt-image-1`、`gpt-image-1-mini`、`gpt-image-1.5`、`chatgpt-image-latest`

**计费特点：** 输入按文本/图片分别计价，图片缓存有独立折扣。输出 token 全部为图片 token，直接使用输出单价核算。需勾选图片计费字段进行导出。

### 上游响应体结构

OpenAI 返回的 usage 结构如下：

```json theme={null}
{
  "input_tokens": 1041,
  "output_tokens": 1756,
  "total_tokens": 2797,
  "input_tokens_details": {
    "text_tokens": 236,
    "image_tokens": 805,
    "cached_tokens": 500
  },
  "output_tokens_details": null
}
```

| 字段                                   | 含义                          |
| ------------------------------------ | --------------------------- |
| `input_tokens`                       | 输入总量（文本 + 图片 + 缓存）          |
| `input_tokens_details.text_tokens`   | 纯文本输入 token                 |
| `input_tokens_details.image_tokens`  | 图片输入 token                  |
| `input_tokens_details.cached_tokens` | 缓存命中 token（文本+图片混合，平台按比例拆分） |
| `output_tokens`                      | 输出 token（全部为图片，无拆分）         |
| `output_tokens_details`              | 始终为 null，上游不区分输出类型          |

<Note>`cached_tokens` 是文本和图片缓存的混合值。平台按 `cached × image / (text + image)` 比例拆分为文本缓存和图片缓存，分别适用不同折扣。纯文本生图时无 `image_tokens` 和 `cached_tokens` 字段。</Note>

### 公式

```
金额 = 输入Token / 1M × 输入单价
     + 图片输入Token / 1M × 图片输入单价
     + 缓存命中Token / 1M × 缓存命中单价
     + 缓存图片Token / 1M × 缓存图片单价
     + 输出Token / 1M × 输出单价
```

<Note>图片计费字段为可选导出列，不在 billing\_detail 预设中。需单独勾选 `input_image_tokens`、`input_image_price`、`cached_image_tokens`、`cached_image_price`。非图片模型这些列为空。上游不单独返回"图片输出 token"，输出Token 本身即为图片输出。</Note>

### 示例

以 `gpt-image-2` 改图请求为例（图片输入 + 部分缓存命中）：

| 字段        | 值         |
| --------- | --------- |
| 提示Token   | 1,010     |
| 输出Token   | 500       |
| 输入Token   | 0         |
| 图片输入Token | 10        |
| 缓存命中Token | 10        |
| 缓存图片Token | 990       |
| 输入单价      | \$5.00/M  |
| 图片输入单价    | \$8.00/M  |
| 缓存命中单价    | \$1.25/M  |
| 缓存图片单价    | \$2.00/M  |
| 输出单价      | \$30.00/M |

**计算：**

```
0 / 1M × 5.00       = $0.000000
10 / 1M × 8.00      = $0.000080
10 / 1M × 1.25      = $0.000013
990 / 1M × 2.00     = $0.001980
500 / 1M × 30.00    = $0.015000
─────────────────────────────────
合计                  = $0.017073
```

***

## Gemini 系列

适用模型：`gemini-3.5-flash`、`gemini-3-pro-image-preview` 等

**计费特点：** 支持缓存读取/写入，部分模型有推理 token。图像生成模型有多模态 token 分项。

### 纯文本/推理模型公式

```
金额 = 输入Token / 1M × 输入单价
     + 缓存命中Token / 1M × 缓存命中单价
     + 缓存写入Token / 1M × 缓存写入单价
     + (输出Token - 推理Token) / 1M × 输出单价
     + 推理Token / 1M × 推理单价
```

### 图像生成模型

图像生成模型（如 `gemini-3-pro-image-preview`）的输入/输出包含多模态 token，当前导出按总量计费，公式同上。

### Gemini 图像 no-image 失败对账

当 Gemini 图像请求被上游封控或未产出图片，但上游返回了 prompt/input token usage 且平台已按 token 结算时，API 错误响应会携带本次 usage，方便与消费日志对齐。

OpenAI 风格图片接口示例：

```json theme={null}
{
  "error": {
    "message": "no image generated (request id: 20260608235925678097275ZgRxuG4y)",
    "type": "one_hub_error",
    "code": "no_image_generated"
  },
  "usage": {
    "input_tokens": 353,
    "output_tokens": 0,
    "total_tokens": 353,
    "input_tokens_details": {
      "text_tokens": 95,
      "image_tokens": 258
    }
  }
}
```

对账时可按以下关系核对：

| API 响应字段                                     | 消费日志/导出字段                        |
| -------------------------------------------- | -------------------------------- |
| `usage.input_tokens` 或 `usage.prompt_tokens` | 提示Token / `prompt_tokens`        |
| `usage.input_tokens_details.image_tokens`    | 图片输入Token / `input_image_tokens` |
| `usage.output_tokens`                        | 输出Token / `completion_tokens`    |
| 无图片输出                                        | `output_image_tokens=0`          |

<Note>只有已结算的 no-image 失败会返回 usage。未扣费失败、本地校验失败、平台额度失败或上游未返回 usage 的普通失败不会返回 usage。</Note>

***

## DeepSeek 系列

适用模型：`deepseek-v4-pro`、`deepseek-v4-flash` 等

**计费特点：** 支持缓存读取，缓存命中折扣极大。无写入分桶。

### 公式

```
金额 = 输入Token / 1M × 输入单价
     + 缓存命中Token / 1M × 缓存命中单价
     + 输出Token / 1M × 输出单价
```

***

## 通用核算模板

对于任意模型，以下公式均适用（空字段视为 0）：

```
金额 = 输入Token / 1M × 输入单价
     + 图片输入Token / 1M × 图片输入单价
     + 缓存命中Token / 1M × 缓存命中单价
     + 缓存图片Token / 1M × 缓存图片单价
     + 缓存写入Token / 1M × 缓存写入单价
     + 缓存写入1hToken / 1M × 缓存写入1h单价
     + (输出Token - 推理Token) / 1M × 输出单价
     + 推理Token / 1M × 推理单价
     + 搜索次数 × 搜索单价
```

<Tip>在 Excel 中可直接使用此公式对每行数据进行验算，空单价列视为 0 即可。图片输入计费字段仅 GPT-Image 系列有值（输出直接用输出单价），搜索字段仅 Claude 使用 Web Search 时有值。</Tip>
