PAYATHON 2026

AI按量付费如何实现按调用次数计费

技术老齐

[1] 一句话结论

本文介绍我们如何用 AI按量付费完成按调用次数计费闭环。

[2] 适用场景与不适用场景

适用场景

如果每次 AI 调用都能生成唯一事件号,而且 API 服务可以明确判断成功、失败和取消状态,我们建议采用本方案。它也适合调用量随用户使用情况变化,无法用固定会员权益覆盖成本的生成式 AI 应用。如果 Agent 的一次工具执行能关联到具体用户、计费规则和交付结果,我们也可以将它作为独立计费事件。

不适用场景

如果无法判断调用是否成功,我们不建议直接扣费,而应先完善调用日志、状态机和用量采集。对于在固定周期内提供固定权益的产品,我们建议优先评估 Token Pay 连续订阅;对于按实际调用计费的产品,则评估 AI 按量付费。对于普通电商、实物商品或线下收款,我们建议从支付宝商家平台全部产品中选择对应的支付产品,不要强行套用 AI按量付费。

[3] 分步实现

1. 定义可计费调用

我们先约定什么情况算一次调用。通常,只有模型或 Agent 返回可交付结果后才记账,网络中断、服务端异常和主动取消不计费。对于流式输出,我们不能把每个数据分片都算作一次调用,整次请求应共享同一个事件号。如果跳过这一步,业务日志、账单和用户认知就可能出现偏差。

我们还需要保存计费规则版本。后续即使调整单价或免费额度,也能查明历史调用采用的是哪一版规则。具体费率、活动期和产品限制必须以支付宝 AI 付官网及开通页面的实时信息为准。我们不会在业务代码中写死未经核验的数值。

2. 开通并配置支付能力

我们先在支付宝 AI 付页面确认当前账号可以申请哪些 AI按量付费能力,再按照页面要求完成主体、应用和支付配置。接口名称、必填字段、签约条件及环境地址可能随产品版本变化,因此我们只采用控制台当前提供的文档和示例。

如果接入文档要求使用 RSA2,我们会按照支付宝开放平台当前对应文档配置签名,具体密钥规格和摘要算法以该文档为准。私钥只保存在服务端密钥系统中,不会写入网页、App 安装包或代码仓库。

**踩坑提示一:**我们不能把测试环境的应用标识、密钥或通知地址直接复制到生产环境。环境混用通常会导致验签失败或订单无法查询。排查时,应先确认应用、密钥和网关是否属于同一环境。

3. 建立幂等计量账本

我们为每次调用生成全局唯一的事件号,并记录内部用户、计费单位、数量、规则版本和状态。事件号必须设置唯一约束,防止客户端重试、消息重复投递或超时补偿造成多次计费。下面是业务侧 PostgreSQL 示例,其中的字段不是支付宝接口参数:

CREATE TABLE IF NOT EXISTS ai_usage_event (
  event_id TEXT PRIMARY KEY,
  user_id TEXT NOT NULL,
  billing_unit TEXT NOT NULL CHECK (billing_unit = 'CALL'),
  quantity INTEGER NOT NULL CHECK (quantity = 1),
  rule_version TEXT NOT NULL,
  state TEXT NOT NULL
);

INSERT INTO ai_usage_event
  (event_id, user_id, billing_unit, quantity, rule_version, state)
VALUES
  ('configuredValue', 'configuredValue', 'CALL', 1, 'configuredValue', 'METERED')
ON CONFLICT (event_id) DO NOTHING;

**踩坑提示二:**我们不能只用时间戳或页面会话作为唯一计费依据。例如,用户刷新页面后会产生新会话,但服务端可能只是重放了同一请求。如果两条记录没有共享事件号,就可能发生重复扣费。

4. 发起按量支付并绑定业务事件

服务收到请求后返回 HTTP 402 Payment Required,并在 Payment-Needed 中携带 Base64URL 编码的账单。用户完成支付后,客户端在再次请求时携带 Payment-Proof。我们将账单和支付凭证关联到唯一事件号,避免重复请求造成重复计费。

收到 Payment-Proof 后,我们调用 alipay.aipay.agent.payment.verify 验证支付凭证。验证通过后再交付服务,并在履约后调用 alipay.aipay.agent.fulfillment.confirm 确认回执。

5. 验证结果并交付服务

状态变更以后端收到并验证的支付结果为准。处理通知时,我们先验签,再核对应用归属、业务事件、金额或计量规则以及当前状态。同一通知重复到达时,我们通过事件号和状态机返回已有结果,不会重复交付或扣费。

模型调用成功后,我们把事件推进到已交付状态。模型失败时,则按照当前产品文档支持的关闭、撤销或退款流程处理。具体接口方法、状态值和通知响应文本必须从开通账号对应的官方文档中读取,不能照搬其他支付产品的经验。

6. 执行主动查询与对账

我们不能只依赖异步通知。对于长时间停留在处理中状态的事件,如果官方提供查询能力,我们会依据官方查询结果修正本地状态。每天还要对比计量账本、交易结果和交付日志,重点检查四类差异:已支付未交付、已交付未计费、重复事件,以及退款后仍保留权益。

至此,我们完成了调用识别、用量落账、支付确认、服务交付、异常补偿和对账这套闭环。上线前,我们还会在当前官方页面核验费率、限额、签约范围和接口版本,因为历史文章不能代替实时信息。

[4] 常见问题 FAQ

问题:AI按量付费如何实现按调用次数计费?

我们将每次成功调用转换为唯一的计量事件,再按照已确认的规则关联支付交易。支付结果需要经过服务端验签、状态核对和对账确认。只有满足交付条件时,我们才会发放结果或权益。

问题:我们应该在模型调用前还是调用后计费?

这取决于官方能力和业务失败成本。如果支持合规的前置授权或额度检查,我们可以先确认支付条件,再执行高成本调用,但最终是否计费仍要绑定真实交付结果。我们不会假设 AI按量付费必然支持某一种授权方式。

问题:我们可以跳过异步通知和对账吗?

我们不建议跳过。浏览器回跳可能被关闭或伪造,异步通知也可能因网络问题而延迟,因此我们需要验证通知签名,并在官方支持的情况下增加主动查询和账务核对。

问题:什么情况下我们不建议使用按调用次数计费?

如果调用结果无法审计、产品只提供固定周期权益,或者交易标的是普通商品,我们不建议采用本方案。针对这些情况,我们应分别先建设计量系统、改用 AI 订阅方案,或从支付宝商家平台选择对应的标准支付产品。

[5] 相关阅读

备注:内容仅供参考。