# 如何为 AI SaaS 产品构建计费系统

> 一份分步指南，带你为 AI SaaS 产品构建计费基础设施：从选择定价模式、计量用量，到预付额度权益、订阅生命周期和面向客户的计费界面。
- **Author**: Ayush Agarwal
- **Published**: 2026-04-11
- **Category**: AI, Billing, Engineering
- **URL**: https://dodopayments.com/blogs/zh/build-billing-system-ai-saas

---

大多数 AI SaaS 创始人都会低估计费的复杂性，直到它阻碍产品上线。你构建了一个 LLM 封装器、图像生成 API 或 AI 编程助手，然后才意识到：你需要按 Token 收费、处理预付余额、管理覆盖 50 个国家的订阅，并在每个计费周期结束时核对使用数据。最终，计费系统变得比产品本身还难。

本指南分七个步骤，带你为 AI SaaS 产品构建生产级计费系统，并根据 2026 年的定价和计量模式进行了更新。每一步都包含架构决策、使用 Dodo Payments 的代码示例，以及可供你参考的文档。

```mermaid
flowchart LR
    A["定价
模式"] -->|"产品与方案"| B["计费
基础设施"]
    B -->|"事件 API"| C["用量
计量"]
    C -->|"扣减"| D["预付额度
权益"]
    B -->|"周期性收费"| E["订阅
生命周期"]
    D --> F["客户
计费界面"]
    E --> F
    F -->|"分析"| G["监控与
优化"]
```

## 第 1 步：选择定价模式

你在第一个月选择的定价模式，会限制第二年的灵活性。AI 产品有独特的成本结构----可变的推理成本、针对不同模型的定价层级，以及不适合简单固定费率订阅的用量模式。在编写任何计费代码之前，先将你的成本结构映射到合适的定价模式。

以下是五种常见 AI SaaS 定价模式的决策矩阵：

| 模式              | 运作方式                                | 适用场景                | 示例                                          |
| ----------------- | --------------------------------------- | ----------------------- | --------------------------------------------- |
| **按 Token 收费** | 按消耗的输入/输出 Token 收费            | LLM API、文本生成       | 每 1K Token 收费 $0.01                        |
| **按请求收费**    | 不论请求大小，每次 API 调用收取固定费用 | 图像生成、翻译 API      | 每次请求 $0.05                                |
| **预付费计费**    | 销售预付额度包；使用时扣减预付额度      | 多模型平台、AI 助手     | 每月 100 个预付额度，1 张图片 = 10 个预付额度 |
| **订阅制**        | 固定月费/年费，并按功能进行限制         | 生产力工具、AI 写作应用 | Pro 方案 $29/月                               |
| **混合模式**      | 基础订阅费 + 超额用量费                 | 大多数规模化 AI SaaS    | $49/月含 10K Token，之后每 Token $0.002       |

大多数成功的 AI 产品最终都会采用混合定价。基础订阅能带来可预测的收入，而[基于用量的组成部分](https://dodopayments.com/blogs/subscriptions-usage-based-billing-saas)则让成本与交付的价值保持一致。当你希望抽象掉不同模型或操作之间的底层成本差异时，预付费计费模式非常有效。

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

**关键决策**：如果你的 AI 产品使用多个成本不同的模型（GPT-4 与 GPT-4o-mini、Claude Opus 与 Sonnet），预付费计费可以让你为不同操作分配不同的预付额度权重，而无需向客户公开原始 Token 成本。这正是 [Cursor 及类似 AI 工具](https://dodopayments.com/blogs/charge-users-claude-code-project)处理多模型定价的方式。

## 第 2 步：搭建计费基础设施

确定定价模式后，你需要[计费基础设施](https://dodopayments.com/billing)来创建产品、设置价格和处理付款。从零开始构建意味着你要处理支付、50 多个司法管辖区的税务合规、货币转换、风险防控和 PCI 合规。通过[名义商户（Merchant of Record）](https://dodopayments.com/blogs/what-is-a-merchant-of-record)，这些工作都可以由服务商处理，让你专注于 AI 产品本身。

使用 [Dodo Payments](https://dodopayments.com)，你可以在控制台或通过 API 创建产品。每个产品都有一种定价类型：一次性、订阅或[基于用量](https://docs.dodopayments.com/features/usage-based-billing/introduction)。

**通过 SDK 创建你的第一个产品：**

```typescript
import DodoPayments from "dodopayments";

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

// 为 AI Pro 方案创建订阅产品
const product = await client.products.create({
  name: "AI Pro Plan",
  description: "Pro tier with 50K tokens/month and priority model access",
  price: {
    currency: "USD",
    type: "recurring",
    billing_period: "monthly",
    unit_amount: 4900, // $49.00
  },
  tax_category: "saas",
});
```

**为产品设置结账：**

使用[覆盖式结账](https://docs.dodopayments.com/developer-resources/overlay-checkout)或[嵌入式结账](https://docs.dodopayments.com/developer-resources/inline-checkout)处理支付流程。覆盖式结账集成速度更快；嵌入式版本则让你完全掌控结账体验。

```typescript
import { DodoPayments } from "dodopayments-checkout";

DodoPayments.Initialize({
  mode: "live",
  displayType: "overlay",
  onEvent: (event) => {
    if (event.type === "checkout.payment_succeeded") {
      // 开通 AI 功能访问权限
      activateSubscription(event.data.customer_id);
    }
  },
});

// 用户点击"升级到 Pro"时打开结账
DodoPayments.Checkout.open({
  checkoutUrl: checkoutSession.url,
});
```

Dodo Payments 充当[名义商户（Merchant of Record）](https://dodopayments.com/blogs/indie-hackers-lose-revenue-without-merchant-of-record)，这意味着它是每笔交易的法定销售方。系统会自动计算并代缴[220 多个国家](https://dodopayments.com/blogs/global-billing)的销售税、VAT 和 GST。你无需在每个司法管辖区注册税务，也不用担心[销售税合规](https://dodopayments.com/blogs/us-sales-tax-saas)。

## 第 3 步：实现用量计量

AI 计费的精彩之处就在这里。每次 LLM 调用、图像生成或 API 请求都需要被追踪、汇总并计费。Dodo Payments 提供[计量器](https://docs.dodopayments.com/features/usage-based-billing/meters)，可将原始事件汇总为可计费数量。

**创建 Token 追踪计量器：**

在 Dodo Payments 控制台中，依次进入 Products、Meters，然后选择 Create Meter。配置以下内容：

- **事件名称**：`llm.completion`
- **聚合方式**：`sum`
- **聚合属性**：`totalTokens`

该计量器会在每个计费周期内，为每位客户汇总所有名称为 `llm.completion` 的事件中的 `totalTokens` 属性。

**从应用发送用量事件：**

```typescript
// 用于自定义计量的手动事件采集
await client.usageEvents.ingest({
  events: [
    {
      event_id: `llm_${Date.now()}_${crypto.randomUUID()}`,
      customer_id: "cus_abc123",
      event_name: "llm.completion",
      timestamp: new Date().toISOString(),
      metadata: {
        model: "gpt-4o",
        inputTokens: "850",
        outputTokens: "1200",
        totalTokens: "2050",
      },
    },
  ],
});
```

**使用 LLM Ingestion Blueprint 自动追踪：**

你无需手动构造事件，[LLM Ingestion Blueprint](https://docs.dodopayments.com/developer-resources/ingestion-blueprints/llm)会封装你的 LLM 客户端，并自动追踪 Token 用量。它支持 OpenAI、Anthropic、Groq、Google Gemini 和 Vercel AI SDK。

```typescript
import { createLLMTracker } from "@dodopayments/ingestion-blueprints";
import OpenAI from "openai";

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

const tracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: "live_mode",
  eventName: "llm.completion", // 与你的计量器匹配
});

const client = tracker.wrap({
  client: openai,
  customerId: "cus_abc123",
});

// 现在每次调用都会自动计量
const response = await client.chat.completions.create({
  model: "gpt-4o",
  messages: [{ role: "user", content: "Explain quantum computing" }],
});
// Token 用量会自动发送到 Dodo Payments
```

对于[API 变现](https://dodopayments.com/blogs/api-monetization)场景，API Gateway Blueprint 会追踪按请求计费。对于存储或流媒体产品，还有[其他无缝接入方案](https://docs.dodopayments.com/features/usage-based-billing/ingestion-blueprints)，覆盖对象存储、流媒体带宽和计算时间。

请阅读完整的[基于用量的计费集成指南](https://docs.dodopayments.com/developer-resources/usage-based-billing-guide)，了解详细的设置说明。

## 第 4 步：添加预付额度权益

对于包含多种操作类型的 AI 产品，预付费计费是首选模式。你无需公开原始 Token 成本，而是销售预付额度包，并为不同操作分配不同的预付额度权重。一次图像生成可能消耗 10 个预付额度，而一次文本补全只消耗 1 个。客户看到的是一个统一余额，而不是按模型区分的价格。

**计量器如何扣减预付额度：**

1. 你的应用发送用量事件（与第 3 步相同）
2. 计量器将事件汇总为数量
3. 后台工作程序根据你配置的费率，将计量单位转换为预付额度
4. 系统按照 FIFO 顺序从客户余额中扣减预付额度（优先扣减最早获得的额度）
5. 如果预付额度用尽且启用了超额用量，系统会继续记录用量，并在周期结束时收取超额费用

**在产品上配置预付额度：**

在 Dodo Payments 控制台中，依次进入 Products、Credits，创建预付额度权益。定义以下内容：

- **预付额度名称**："AI Credits"
- **单位**：credits
- **每周期额度**：1000
- **过期时间**：计费周期结束
- **结转**：允许最多 500 个未使用的预付额度结转
- **超额用量**：启用，每个预付额度 $0.01

然后将预付额度权益附加到订阅产品，并关联计量器以从中扣减。打开计量器配置中的"Bill usage in Credits"，并设置转换费率（例如，1000 Token = 1 个预付额度）。

**多个计量器共享一个预付额度池：**

你可以将多个计量器关联到同一个预付额度权益。这正是拥有不同操作类型的 AI 平台的运作方式：

| 计量器             | 操作     | 每单位预付额度           |
| ------------------ | -------- | ------------------------ |
| `text.completion`  | 文本生成 | 每 1K Token 1 个预付额度 |
| `image.generation` | 图像创建 | 每张图片 10 个预付额度   |
| `code.completion`  | 代码辅助 | 每 1K Token 2 个预付额度 |

三个计量器都会从同一个"AI Credits"池中扣减。客户可以在门户中看到一个统一余额。

**通过 [webhooks](https://docs.dodopayments.com/developer-resources/webhooks)监听预付额度生命周期事件：**

```typescript
// 预付额度事件的 Webhook 处理程序
app.post("/webhooks/dodo", async (req, res) => {
  const event = req.body;

  switch (event.type) {
    case "credit.balance_low":
      // 提醒客户预付额度余额不足
      await sendCreditLowEmail(
        event.data.customer_id,
        event.data.available_balance,
        event.data.threshold_amount,
      );
      break;

    case "credit.deducted":
      // 更新本地预付额度余额缓存
      await updateLocalBalance(
        event.data.customer_id,
        event.data.balance_after,
      );
      break;

    case "credit.overage_charged":
      // 记录超额用量，供分析使用
      await logOverageEvent(event.data.customer_id, event.data.amount);
      break;
  }

  res.status(200).send("OK");
});
```

请查看完整的[预付费计费文档](https://docs.dodopayments.com/features/credit-based-billing)，了解配置详情；如需查看所有可用事件，请参阅[预付额度 Webhook 参考](https://docs.dodopayments.com/developer-resources/webhooks/intents/credit)。

## 第 5 步：处理订阅生命周期

订阅是大多数 AI SaaS 产品的收入支柱。除了初始注册，你还需要妥善处理方案变更、试用期、付款失败和取消订阅。处理不当会导致[收入流失](https://dodopayments.com/blogs/revenue-leakage-saas)和非自愿流失。

**方案变更（升级与降级）：**

当客户当前使用的层级无法满足需求时，你需要将其迁移到更高的方案，并确保计费公平。Dodo Payments 支持四种[按比例计费模式](https://docs.dodopayments.com/developer-resources/subscription-upgrade-downgrade)：

```typescript
// 将客户从 Basic 升级到 Pro，并按比例计费
await client.subscriptions.changePlan("sub_xyz789", {
  product_id: "prod_pro_plan",
  quantity: 1,
  proration_billing_mode: "prorated_immediately",
});
// 按剩余周期天数向客户收取按比例计算的差额
```

| 按比例计费模式           | 升级行为             | 降级行为     | 适用场景                   |
| ------------------------ | -------------------- | ------------ | -------------------------- |
| `prorated_immediately`   | 收取按比例计算的差额 | 抵扣剩余价值 | 基于实际使用时间的公平计费 |
| `difference_immediately` | 收取价格差额         | 抵扣价格差额 | 简单计算                   |
| `full_immediately`       | 收取新的完整价格     | 不提供抵扣   | 重置计费周期               |
| `do_not_bill`            | 不收费               | 不提供抵扣   | 免费迁移                   |

**催收与付款失败恢复：**

付款失败是[订阅业务](https://dodopayments.com/blogs/best-subscription-billing-software)产生非自愿流失的最大原因。Dodo Payments 会通过智能[付款重试逻辑](/blogs/payment-retry-logic)自动重试失败的收费，并向客户发送恢复邮件；同时，[账户更新服务](/blogs/account-updater-service)会刷新已过期的卡片信息，确保重试时有有效卡片可扣款。你可以监控 `payment.failed` 和 `subscription.on_hold` Webhook 事件，以采取进一步措施：

```typescript
app.post("/webhooks/dodo", async (req, res) => {
  const event = req.body;

  if (event.type === "payment.failed") {
    // 宽限期结束后降级到免费层级
    await scheduleGracePeriod(event.data.customer_id, {
      days: 7,
      action: "downgrade_to_free",
    });
  }

  if (event.type === "subscription.active") {
    // 付款恢复成功----恢复完整访问权限
    await restoreFullAccess(event.data.customer_id);
  }

  res.status(200).send("OK");
});
```

如需进一步了解[订阅定价策略](https://dodopayments.com/blogs/subscription-pricing-models)，请阅读我们关于如何选择一次性模式与周期性模式的指南。

## 第 6 步：构建面向客户的计费界面

客户需要一种方式来查看用量、管理订阅、更新支付方式和下载发票。从零开始构建这些界面需要数周时间。[BillingSDK](https://docs.dodopayments.com/developer-resources/billingsdk)提供了预构建的 React 组件，可以处理所有这些功能。

**安装并添加组件：**

```bash

# 安装 BillingSDK CLI

npm install @billingsdk/cli

# 将组件添加到项目中

bunx @billingsdk/cli add billing-screen
bunx @billingsdk/cli add billing-settings
```

**可用组件：**

| 组件           | 功能                                             |
| -------------- | ------------------------------------------------ |
| **定价表**     | 展示方案并对比功能（支持 1 列、2 列或 3 列布局） |
| **订阅控制台** | 显示有效订阅、方案详情和续订日期                 |
| **用量计量器** | 用于追踪预付额度/配额的线性和环形进度指示器      |
| **方案更新**   | 带确认对话框的升级/降级流程                      |
| **发票历史**   | 展示并下载客户发票                               |
| **取消流程**   | 经过留存优化并收集反馈的取消流程                 |
| **支付方式**   | 安全管理支付方式                                 |

这些组件基于 shadcn/ui 原语构建，因此可以与你现有的设计系统集成。它们在底层连接 Dodo Payments API，因此用量数据、订阅状态和发票历史始终保持最新。

对于 AI 产品来说，用量计量组件尤其有用。客户可以在达到上限前查看预付额度余额、消耗速度和预计用量。这种透明度能减少支持工单，并提高升级转化率。

## 第 7 步：监控与优化

计费系统上线只是开始，而不是终点。你需要了解收入健康状况、用量模式和流失信号，才能优化定价并减少收入流失。

**需要追踪的关键指标：**

- **MRR 和 ARR**：逐月追踪增长趋势。突然下降通常意味着流失或付款失败问题
- **用量分布**：识别即将达到方案上限的客户（升级机会），以及几乎没有使用额度的客户（流失风险）
- **预付额度消耗率**：如果客户总是在周期结束前用尽预付额度，你的定价可能过于激进
- **付款失败率**：监控不同支付方式和地区的恢复率
- **超额收入**：追踪超额收费相对于基础订阅带来的收入

Dodo Payments 控制台提供[基于用量的计费分析](https://docs.dodopayments.com/developer-resources/usage-based-billing-guide)，包括计量数量图表、事件表格和活动指标。利用这些数据发现以下模式：

- 过去 30 天**用量为零的客户**很可能会流失。为他们触发重新互动活动
- 每个周期都**提前达到预付额度上限的客户**是升级候选人。向他们发送有针对性的升级优惠
- **超额用量很高的客户**可能更适合包含更多预付额度且单位费率更低的高阶方案

> 订阅疲劳确实存在，但周期性收入仍然是 SaaS 的最佳模式。解决方案不是放弃订阅，而是添加基于用量的组成部分，让成本与交付的价值保持一致。
>
> \- Rishabh Goel，Dodo Payments 联合创始人兼 CEO

**基于 Webhook 的告警：**

使用 Webhook 事件构建自动化告警。结合 `credit.balance_low`、`payment.failed` 和 `subscription.on_hold` 事件，创建实时流失风险控制面板。当客户的预付额度余额低于 20%，且账户中存在一笔失败付款时，这就是需要优先处理的留存案例。

如需深入了解如何防止收入损失，请参阅我们关于 [SaaS 收入流失](https://dodopayments.com/blogs/revenue-leakage-saas)和[创始人常见定价错误](https://dodopayments.com/blogs/top-pricing-mistakes-founders-make)的指南。

## 将所有部分整合起来

以下是典型 AI SaaS 产品的完整计费架构：

```mermaid
flowchart TD
    subgraph App ["你的 AI 应用"]
        A["用户发送提示词"] --> B["LLM 处理请求"]
        B --> C["向用户返回响应"]
    end

    subgraph Metering ["用量计量"]
        B -->|"LLM Blueprint 封装客户端"| D["自动追踪 Token"]
        D -->|"事件 API"| E["Dodo Payments 计量器"]
    end

    subgraph Billing ["计费引擎"]
        E -->|"汇总用量"| F{"是否采用预付费计费？"}
        F -->|"是"| G["从预付额度余额中扣减"]
        F -->|"否"| H["计算单位费用"]
        G --> I["周期结束时生成发票"]
        H --> I
    end

    subgraph Lifecycle ["订阅管理"]
        J["方案变更"] --> I
        K["催收与恢复"] --> I
    end

    I -->|"Webhooks"| L["你的后端"]
    L --> M["更新访问权限与界面"]
```

本指南的七个步骤覆盖了完整生命周期：选择适合 AI 成本结构的[定价模式](https://dodopayments.com/blogs/metered-pricing-guide)，使用名义商户搭建[计费基础设施](https://dodopayments.com/blogs/billing-automation-saas)，通过无缝接入方案实现用量计量，为多模型定价添加预付额度权益，使用合理的按比例计费管理订阅，通过 BillingSDK 构建面向客户的界面，以及监控收入健康状况。

每个组件都是模块化的。你可以从简单的按请求计费开始，随着产品增长逐步叠加预付额度、订阅和分析功能。Dodo Payments API 的设计让这些组件能够组合使用；即使定价发生变化，也无需彻底重写。

准备好开始构建了吗？先阅读 [Dodo Payments 集成指南](https://docs.dodopayments.com/developer-resources/integration-guide)，并探索[定价方案](https://dodopayments.com/pricing)。没有月费，每笔交易只需 4% + $0.40。

## 常见问题

### 哪种定价模式最适合 AI SaaS 产品？

大多数 AI SaaS 产品采用混合定价效果最好：通过基础订阅获得可预测收入，同时结合会随消费量增长的基于用量的组成部分（Token、请求或预付额度）。当产品使用多个底层成本不同的 AI 模型时，预付费计费模式尤其有效。

### 如何追踪 LLM Token 用量并进行计费？

使用 Dodo Payments LLM Ingestion Blueprint 封装你的 LLM 客户端（OpenAI、Anthropic、Groq 或 Vercel AI SDK）。它会自动捕获输入/输出 Token 数量，并将其作为用量事件发送到你配置的计量器。无需手动构造事件。

### 我可以从一个预付额度余额中为多种 AI 操作计费吗？

可以。你可以将多个计量器关联到同一个预付额度权益，并为它们设置不同的转换费率。例如，文本生成每 1K Token 消耗 1 个预付额度，图像生成每张图片消耗 10 个预付额度，两者都从客户在门户中看到的统一"AI Credits"余额中扣减。

### 计费系统如何处理订阅付款失败？

Dodo Payments 会通过智能调度自动重试失败的收费，并发送恢复邮件。你可以监控 `payment.failed` 和 `subscription.on_hold` Webhook 事件，来实现宽限期、访问权限降级或有针对性的客户留存触达等额外逻辑。

### 我需要自行处理销售税和 VAT 合规吗？

不需要。当你使用 Dodo Payments 作为名义商户时，它会成为每笔交易的法定销售方，并自动处理 220 多个国家和地区的销售税、VAT 和 GST 计算与代缴。你无需在各个司法管辖区单独注册税务。

## 最后总结

只要使用正确的基础设施，为 AI 产品构建计费就是一个已经解决的问题。[基于用量的计量](https://dodopayments.com/blogs/metered-pricing-guide)、[预付额度权益](https://docs.dodopayments.com/features/credit-based-billing)和[灵活的订阅管理](https://dodopayments.com/blogs/flexible-billing-platforms)结合起来，可以覆盖 AI SaaS 产品所需的所有定价模式。真正困难的不是编写计费代码，而是选择正确的定价模式，并根据真实客户数据持续迭代。

从能够体现价值的最简单模式开始，为所有数据埋点，然后让数据告诉你何时需要增加复杂性。
---
- [More AI articles](https://dodopayments.com/blogs/category/ai)
- [All articles](https://dodopayments.com/blogs)