# 如何为 GPT 封装应用设置按量计费

> 介绍如何为 GPT 和 LLM 封装应用实现按用量计费的技术指南。跟踪 API 调用、接收用量事件，并根据实际消耗向客户收费。
- **Author**: Ayush Agarwal
- **Published**: 2026-03-26
- **Category**: Payments, AI, How-To
- **URL**: https://dodopayments.com/blogs/zh/metered-billing-gpt-wrapper

---

为 GPT 封装应用设置按量计费，归结起来有三件事：选择一个能跟踪令牌成本的指标、在每次 LLM 调用时发送幂等的用量事件，以及让计费引擎据此汇总并开具发票。完成这三步后，你的收入就会随着成本变化，而不是与成本背道而驰。本指南的其余部分将通过代码介绍每个步骤。

GPT 封装应用是如今最常见的新型 SaaS 类型，它们在 OpenAI、Anthropic 或 Google Gemini 等 LLM 之上提供一层增值服务。然而，许多此类应用一开始采用固定费率定价，这很容易导致亏损。当每次请求都产生实际的令牌成本时，一个高频用户就可能吞噬你的全部利润空间。

固定定价要么让轻度用户支付过高费用，要么让重度用户获得补贴。如果你每月收费 20 美元，一个只发出五次请求的用户支付了巨额溢价，而一个自动发出数千次请求的用户可能会让你承担 50 美元的 API 费用。按量计费可以解决这一问题，让你的收入与成本保持一致。

本指南将介绍如何使用 Dodo Payments 为你的 AI 应用实现按量计费。我们将涵盖如何定义按量计费产品、接收用量事件，以及处理计费生命周期。

## 为什么 AI 需要按量计费？

AI SaaS 的经济模型不同于传统软件。在标准的 CRUD 应用中，一次用户请求的边际成本接近于零。而在 AI 应用中，每次请求都会产生实实在在的令牌成本。

> 你在第一个月选择的计费模式，会限制第二年的定价灵活性。从一开始就构建在支持订阅、用量、预付额度和混合模式的基础设施之上。
>
> \- Ayush Agarwal，Dodo Payments 联合创始人兼 CPTO

不同用户之间的用量可能相差 10 到 100 倍。普通用户可能每周只使用一次你的工具，而高频用户可能会将它集成到日常工作流中。如果你不跟踪这些用量，就等于在盲目经营。

按量计费可以帮助你：

- **保护利润空间**：确保你支付的 API 费用不会高于收取的收入。
- **随用户规模增长**：用户数量增加、使用频率提高时，你的收入会自动增长。
- **提供更低的入门价格**：你可以提供较低的基础费用，甚至采用吸引不愿承诺高额月度订阅用户的"按需付费"模式。

如需了解更多战略层面的内容，请阅读我们的文章：[AI SaaS：按用量计费与固定费用](https://dodopayments.com/blogs/usage-based-billing-vs-flat-fees-ai-saas)。

## 选择你的计费指标

在编写任何代码之前，你需要决定要针对什么内容收费。如果你还没有确定定价形式，我们的 [AI 定价模式](https://dodopayments.com/blogs/ai-pricing-models)概览对比了常见方案。对于 GPT 封装应用来说，可计费指标通常有以下三种：

### 1. API 调用次数（计数）

这是最简单的模式。无论使用了多少令牌，你都按每次请求收取固定费用。如果你的提示词和回复长度相对稳定，这种模式就很适用。用户容易理解，但也存在风险：少数特别长的回复可能会让你的成本超过收取的费用。

### 2. 令牌数（求和）

这是最准确的模式。你根据消耗的令牌总数（输入 + 输出）收费。这能让你的收入与 OpenAI 等服务商产生的成本完全匹配。虽然这种模式最公平，但非技术用户可能难以直观理解。常见做法是在 UI 中将其呈现为"预付额度"。

### 3. 计算时间（求和）

如果你在 GPU 上运行自己的模型，或使用按秒计费的服务商，可以根据使用的计算时间（秒或分钟数）收费。这在图像生成或视频合成应用中很常见。

大多数 GPT 封装应用会选择令牌数，因为对开发者和用户来说，这都是最透明、公平的指标。

## 按量计费如何与 Dodo Payments 配合

Dodo Payments 让你可以轻松实现[按用量计费](https://docs.dodopayments.com/features/usage-based-billing/introduction)。整个流程非常简单：

1. **定义按量计费产品**：在 Dodo 控制台中创建产品，并定义一个"计量器"（例如已使用的令牌数或 API 调用次数）。
2. **接收用量事件**：每当用户发出 API 调用时，你的应用都会向 Dodo 发送一个用量事件。
3. **汇总**：Dodo 根据你的配置（Sum、Count、Max 等）汇总这些事件。
4. **计费**：计费周期结束时，Dodo 会计算总用量、生成发票并处理付款。

```mermaid
flowchart TD
    A[User Request] --> B[Process LLM Call]
    B --> C[Calculate Tokens Used]
    C --> D[Ingest Event to Dodo]
    D --> E[Dodo Aggregates Usage]
    E --> F[Period Ends]
    F --> G[Invoice Generated]
    G --> H[Payment Processed]
```

## 分步实现

### 1. 定义计量器

首先，你需要决定要针对什么内容收费。对于 GPT 封装应用，通常是"API 调用次数"或"令牌数"。

在 Dodo Payments 控制台中，进入 Usage Billing 部分并创建新的计量器。

- **事件名称**：`gpt_request`
- **汇总类型**：如果按令牌数计费，使用 `Sum`；如果按请求计费，使用 `Count`。
- **属性名称**：如果使用 Sum，则填写 `tokens_used`。

### 2. 创建按量计费产品

接下来，创建一个产品并将其关联到你的计量器。你可以设置基础价格（例如每月 10 美元），再设置按用量计费的单价（例如每 1,000 个令牌 0.01 美元）。你还可以在基础价格中包含一定的免费用量。例如，前 100,000 个令牌包含在 10 美元的基础费用中，超出部分再收取额外费用。

### 3. 接收用量事件

技术实现就在这一步发生。每当用户使用你的服务时，你都需要向 Dodo 发送一个事件。最好的方式是在 LLM 调用后通过中间件或后处理步骤完成。

下面是使用 [Dodo Payments TypeScript SDK](https://docs.dodopayments.com/developer-resources/sdks/typescript) 的示例。

```typescript
import DodoPayments from "dodopayments";

const client = new DodoPayments({
  bearerToken: process.env["DODO_PAYMENTS_API_KEY"],
});

async function handleGptRequest(userId: string, prompt: string) {
  // 1. Call your LLM (e.g., OpenAI)
  const response = await openai.chat.completions.create({
    model: "gpt-4",
    messages: [{ role: "user", content: prompt }],
  });

  const tokensUsed = response.usage.total_tokens;
  const customerId = await getDodoCustomerId(userId);

  // 2. Ingest the usage event to Dodo
  await client.usageEvents.ingest({
    events: [
      {
        event_id: `req_${Date.now()}_${userId}`, // Unique ID for idempotency
        customer_id: customerId,
        event_name: "gpt_request",
        metadata: {
          tokens_used: tokensUsed.toString(),
          model: "gpt-4",
        },
      },
    ],
  });

  return response.choices[0].message.content;
}
```

### 4. 处理幂等性

注意 `event_id` 字段。它至关重要。如果你的应用重试请求，你不希望因同一次用量而向用户重复收费。Dodo 使用 `event_id` 确保每个事件只计算一次。请始终为每个可计费操作生成唯一 ID。通常，将请求 ID 与用户 ID 组合起来是一种安全做法。

## 高级计费策略

### 用量上限与提醒

用户对按量计费最大的担忧之一就是"意外账单"。为了建立信任，你应该实现用量上限和提醒功能。

你可以使用 Dodo 的 [webhooks](https://docs.dodopayments.com/developer-resources/webhooks) 监控用量。虽然 Dodo 会处理计费，但你的应用应该跟踪当前周期的用量，并在 UI 中显示。

当用户接近上限时，向他们发送电子邮件或显示通知。如果用户达到硬性上限，你可以暂停其访问权限，直到下一个计费周期，或直到他们提高上限。这是[计费体验与用量上限](https://dodopayments.com/blogs/billing-ux-usage-caps-alerts)的重要组成部分。

### 基于预付额度的计费

对于 AI 应用，[基于预付额度的计费](https://docs.dodopayments.com/features/credit-based-billing)通常比纯粹的按量计费更合适。用户不是在月底结算，而是提前购买"预付额度"。

使用应用时，预付额度会逐步扣减。这有利于现金流，也能降低月底付款失败的风险，而月底收取大额可变欠款正是后付费模式的主要弱点。如果你采用后付费模式，定期收款渠道的稳定性就非常重要；我们的[GoCardless 定期付款和直接借记支付替代方案](https://dodopayments.com/blogs/gocardless-alternatives)文章详细介绍了这些权衡。Dodo 原生支持这种模式。你可以将计量器关联到预付余额，Dodo 会自动处理扣减。对于 AI 工具来说，这种模式非常受欢迎，因为它类似于用户已经熟悉的"预付费"手机套餐。

更多详情请查看我们的[计费预付额度与定价现金流指南](https://dodopayments.com/blogs/billing-credits-pricing-cashflow)。

### 展示实时用量

不要让用户等到收到发票后才知道自己花了多少钱。使用 Dodo API 获取客户当前的用量，并将其显示在客户的控制面板中。

```typescript
const usage = await client.usageEvents.list({
  customer_id: "cus_abc123",
  event_name: "gpt_request",
  start: currentPeriodStart,
  end: currentPeriodEnd,
});

// Calculate total from the list or use Dodo's aggregation endpoints
```

## AI SaaS 的全球税务合规

当你在全球范围内销售 AI 应用时，你会突然需要负责欧盟的 VAT、印度的 GST 以及美国的销售税。对于小型团队来说，这是一项巨大的负担。每个国家都有不同的起征点、申报要求和税率。

通过使用[面向 AI 的名义商户](https://dodopayments.com/blogs/saas-payments-merchant-of-record)，你可以将这些工作全部外包。Dodo Payments 作为你服务的法定销售方，会在用户所在的每个国家计算、收取并缴纳税款。这意味着你不必仅仅因为在 20 个不同国家各有几名用户，就分别注册 VAT。

这对 AI 应用尤其重要，因为你的用户可能遍布世界各地。巴西的开发者可能和德国的开发者一样频繁地使用你的工具。无论交易发生在哪里，Dodo 都能确保其合规。这样，你就可以专注于改进 LLM 提示词，而不是用外语填写税务表格。

## 名义商户的优势

除了税务合规之外，MoR（名义商户）还能为 AI 初创公司提供其他多项优势：

- **本地化支付方式**：Dodo 支持印度的 UPI、巴西的 Pix，以及 220 多个国家和地区的本地银行卡。与只接受美国信用卡相比，这能显著提高转化率。在许多新兴市场，信用卡普及率较低，本地支付方式是获得付款的唯一途径。
- **风控保护**：我们负责处理欺诈交易和拒付风险，这些问题在 AI 领域可能很常见。我们的系统经过训练，能够在可疑模式造成问题之前识别出来。
- **简化收款**：你可以使用本地货币收款，跨境转账由我们处理。这能帮你节省汇率损失和电汇费用。

如需进一步了解其重要性，请阅读我们的文章：[AI 商业化](https://dodopayments.com/blogs/monetize-ai)。

## 如何选择计费指标

选择合适的指标，需要在准确性和简洁性之间取得平衡。

### 令牌数与请求次数

令牌数更准确，但用户更难理解。请求次数更简单，但如果你的成本差异很大，就可能存在风险。一个不错的折中方案是使用"预付额度"，其中 1 个预付额度 = 1,000 个令牌。这样既能让用户更直观地理解计费，也能保持对你而言的准确性。你还可以在文档中展示"令牌到预付额度"的换算表。

### 分层用量

你还可以实现分层用量。例如：

- **免费版**：每月 10,000 个令牌
- **专业版**：每月 20 美元，包含 1,000,000 个令牌；超出部分每 1,000 个令牌收取 0.01 美元。

这种方式可以通过基础订阅获得可预测的收入，同时从高频用户身上获得额外收益。这是许多成功 AI 公司采用的"两全其美"方案。

## 常见误区

- **不跟踪令牌数**：如果你按请求收费，但成本按令牌计算，你仍然会面临利润空间被压缩的风险。应始终尽量选择与成本最匹配的指标进行收费。
- **忽略失败事件**：如果向 Dodo 发送事件失败，你就会损失收入。实现简单的重试逻辑或后台工作进程，确保事件最终送达。
- **沟通不足**：按量计费需要透明度。如果用户不明白自己为什么被收取 50 美元而不是 20 美元，他们就会流失。
- **无法查看用量**：如果用户无法实时查看用量，他们会对账单感到不安。务必提供展示当前消耗量的控制面板。
- **忘记输入令牌**：许多开发者只考虑输出令牌，但输入令牌（提示词）同样会产生费用。确保你的计量器跟踪消耗的全部令牌。

## 结语

实现按量计费，是构建可持续 AI 业务最有效的方式。它可以保护你的利润空间，随用户规模增长，并为所有人提供公平的定价模式，同时将可变成本转化为可预测的收入来源。

通过使用 Dodo Payments 这样的[面向 AI 的名义商户](https://dodopayments.com/blogs/saas-payments-merchant-of-record)，你获得的不只是一个计费引擎。你还获得了一个合作伙伴，由其处理全球税务合规、本地化支付方式以及按用量计费的复杂性，让你可以专注于构建产品。

准备开始了吗？查看我们的[按用量计费实现指南](https://dodopayments.com/blogs/implement-usage-based-billing)，或深入阅读 [Dodo Payments 文档](https://docs.dodopayments.com)。

## 常见问题

### 按量计费与按用量计费有什么区别？

按量计费是一种按用量计费模式，其中用量会被跟踪（计量），并在周期结束时收费。按用量计费是一个更宽泛的术语，还包括预付额度或分层用量等模式。

### 如何处理 OpenAI 不同模型的不同令牌成本？

你可以为不同模型创建不同的计量器（例如 `gpt-4-usage` 和 `gpt-3.5-usage`），并分别设置价格。或者，也可以在向 Dodo 发送数据前，将用量标准化为一个统一的"预付额度"数值。例如，1 个 GPT-4 令牌可能等于 10 个预付额度，而 1 个 GPT-3.5 令牌等于 1 个预付额度。这样既能让用户的计费保持简单，又能准确反映你的成本。这也有助于你理解上游服务商最初是如何向你收费的；我们在[OpenAI 计费模式](https://dodopayments.com/blogs/openai-billing-model)分析中对此进行了拆解。

### 我可以为用户设置每月最高收费金额吗？

可以。你可以在应用逻辑中跟踪用量，并在达到特定阈值后停止接收事件（并停止提供服务）。Dodo 还允许你为特定产品配置用量上限，防止客户产生失控费用。这是建立用户信任的好方法。

### 如果用量事件发送到 Dodo 失败，会发生什么？

你应该在应用中实现重试机制。Dodo 的接收 API 具有高可用性，但网络问题仍可能发生。使用后台任务队列发送事件，是提高可靠性的最佳实践。Dodo API 具有幂等性，因此你可以安全地多次重试同一个事件 ID，而不必担心重复收费。

### 对 AI 应用来说，按量计费比固定订阅更好吗？

对大多数 AI 应用来说，是的。它可以确保你的收入始终覆盖可变成本（令牌）。不过，基础订阅费加按量计费超额部分的混合模式，通常最适合获得稳定且可预测的收入。这样既能提供基础收入，又能从高频用户身上获得收益。

### Dodo Payments 如何为我的 AI 应用处理全球税务？

Dodo Payments 是 MoR（名义商户）。这意味着我们是你服务的法定销售方。我们会根据客户所在地计算正确的税款，在结账时收取税款，并将其缴纳给相应的税务机关。你不必担心 VAT、GST 或销售税合规问题。我们会处理注册和申报，让你无需操心。

### 我可以为按量计费提供免费试用吗？

当然可以。你可以将按量计费产品配置为具有"免费阈值"。例如，每月前 50,000 个令牌免费，只有当用户超过该数量后才开始收费。这是让用户在承诺付费之前试用产品的好方法。

---

如需了解更多定价策略，请访问 [dodopayments.com/pricing](https://dodopayments.com/pricing)。
---
- [More Payments articles](https://dodopayments.com/blogs/category/payments)
- [All articles](https://dodopayments.com/blogs)