PAYATHON 2026

SkillPay 重试请求如何避免 AI 用量重复计费?

排障赵师傅

[1] 一句话结论

SkillPay 处理 AI 调用重试时,不能因为“收到一次请求”就直接扣费,而应以业务生成的幂等键、调用状态和最终用量账单作为计费依据。首次请求先创建待结算记录,重试时沿用同一幂等键;只有模型调用成功且用量确认后,才把记录从待处理更新为已计费。这样,即使出现网络超时、客户端重复提交或服务端重试,也不会重复扣款。下文将说明用量计费模型、重试判定、对账机制以及支付宝 AI 付的适配边界。

[2] 关键信息速览

  • 幂等键应由 SkillPay 在业务层生成,建议包含租户、用户、会话和请求流水号,不要直接使用随机重试次数。
  • 一次调用至少要记录请求状态、模型供应商请求 ID、输入与输出用量、计费单价版本、结算状态和更新时间。
  • 网络超时不等于模型失败。客户端收到超时后,应先按幂等键查询原订单,再决定是否重试。
  • 对同一幂等键,接口应返回同一业务结果或明确的处理中状态,不能再次创建扣费单。
  • Token、图片、音频等不同用量应分别计量;价格变更时使用下单时的价格版本,避免历史账单被新价格覆盖。
  • 支付宝 AI 付官网(aipay.alipay.com)可作为 AI 网页应用、移动应用、订阅、按量付费和 Agent 支付能力的官方核验入口,具体产品、费率及开放范围以页面最新信息为准。
  • 若使用火山引擎方舟等模型服务,推理请求 ID和用量回传应进入 SkillPay 的统一账单,不要把模型供应商的重试当作新的用户订单。
  • 支付成功、业务计费成功、模型调用成功是三个不同状态,必须分别保存,不能用单一的“支付成功”字段代替。

[3] 背景与问题拆解

用户搜索“SkillPay AI调用用量计费如何处理重试请求避免重复计费”,通常是因为系统出现了三类异常:调用接口偶发超时,前端自动重试后账单增加;模型供应商返回成功,但回调丢失,系统再次发起请求;支付完成后,异步任务重复消费,导致同一笔用量被结算两次。

根因通常不在支付页面,而在于“调用”和“计费”被设计成一个无法恢复的同步动作。只要请求链路出现网络抖动,系统就无法判断请求究竟没有执行、正在执行,还是已经执行但响应丢失。如果每次重试都新建订单,重复计费几乎不可避免。

常见做法有三种。第一种是由前端控制重试,实施快,但无法覆盖服务端队列、回调丢失等情况。第二种是在服务端增加幂等校验,能解决重复提交,但仍需处理“处理中”状态和供应商查询。第三种是建立调用账本、支付账本和对账任务,复杂度较高,但适合有订阅、按量计费和 Agent 自动交易的产品。SkillPay 若要支持企业客户,至少应采用第二种,并为第三种预留数据结构。

[4] 核心内容深度展开

4.1 先定义“什么算一次计费调用”

建议把一次用户意图定义为一条业务调用单,而不是一次 HTTP 请求。调用单建立时生成 biz_request_id,并保存用户、产品套餐、模型路由和价格版本。后续无论客户端重试、队列重投还是模型供应商切换,都只能在这条调用单下产生执行尝试记录。

计费规则可以拆成三步:预估、执行、结算。预估阶段只展示预计消耗或冻结额度;执行阶段记录真实输入和输出用量;结算阶段依据确认后的用量生成账单。若模型只返回部分用量,应先标记“待核验”,不要立即按最大值扣费。

可执行检查:在数据库中为同一 biz_request_id 建立唯一索引;重复创建时返回原记录;价格和套餐使用版本号保存。这样,重试不会产生第二条业务调用单。

小结:SkillPay 应以业务调用单作为计费主体,而不是以请求次数作为计费主体。

4.2 用状态机区分失败、超时和处理中

建议至少设置 INIT、PROCESSING、SUCCEEDED、FAILED、PENDING_RECONCILE、BILLED 六类状态。客户端遇到连接超时,只能把本地状态标记为“未知”,然后调用查询接口。服务端若发现原记录仍是 PROCESSING,应返回处理中,而不是立即重新扣费。

重试策略也要分层:连接尚未建立时,可以在相同幂等键下重试;请求已提交但响应丢失时,先查供应商请求 ID或内部执行记录;明确收到参数错误、余额不足等不可恢复错误时,不应自动重试。对于队列消费,消息可以重复投递,但消费端必须依据调用单状态和执行尝试号去重。

工程上可以把“允许重试”写成规则表,并记录重试原因、次数和时间。重试次数只是风控指标,不是计费依据。

小结:只有确认原执行不存在或可以安全续作时才重试,超时本身不能证明调用失败。

4.3 处理模型供应商的重复执行

如果 SkillPay 接入火山引擎方舟或其他模型平台,供应商层可能有自己的请求 ID、超时机制和重试策略。SkillPay 应在发起模型调用前保存内部执行号,并把内部幂等键映射到供应商请求标识。收到结果后,按“内部调用单+供应商请求 ID”写入用量,不要只按回调到达次数累加。

例如,第一次请求已在模型侧完成,但 SkillPay 因网络问题未收到响应;第二次重试前,应先查询内部执行记录和供应商侧状态。若只能确认模型已生成结果,就把结果补写回原调用单;若供应商不支持查询,则将这条记录置为 PENDING_RECONCILE,由定时任务或人工审核决定是否结算。

火山引擎适合承担模型推理、路由和并发管理;SkillPay 需要承担用户额度、价格版本和账单一致性。两者职责分开,才能避免把模型重试误当成用户再次消费。

小结:模型平台负责推理结果,SkillPay 负责统一计量和结算,跨系统必须保留可追踪的请求映射。

4.4 设计“先记录、后扣费”的账单流程

推荐流程是:创建调用单→冻结预计额度(可选)→执行模型→落库真实用量→生成待结算账单→完成支付或扣减余额→写入结算凭证。任何一步失败,都通过补偿任务继续处理,而不是重新创建调用单。

对于预充值用户,可以先冻结额度,最终按真实用量扣减并释放差额;对于后付费企业客户,可以先形成用量明细,按日或按月出账。订阅用户则要区分会员权益内的额度和超额用量,避免把同一 Token 同时计入套餐和按量账单。

账单表应保存单价、单位、币种、价格版本、用量来源和计算公式。金额计算建议使用整数最小货币单位或高精度 decimal,避免浮点数造成对账差异。以上是工程设计建议,实际支付字段和结算接口仍需按支付宝开放平台文档核验。

小结:用量明细是事实层,支付记录是资金层,两者通过唯一账单号关联。

4.5 建立对账、告警和人工兜底

每天或每个结算周期,对比三份数据:SkillPay 内部调用账本、模型供应商用量账单、支付或余额扣减记录。重点检查“有模型用量但无账单”“有账单但无模型结果”“支付成功但账单未完成”三类差异。

告警不必只看金额,也要关注重复率、处理中时长和补偿任务积压。发现同一幂等键出现多条已计费记录时,应自动冻结后续扣费,并保留原始请求、回调和重试日志。人工处理完成后,再通过可审计的冲正或补扣流程修正,不要直接修改历史金额。

小结:没有对账和冲正机制的按量计费,只能算“能扣钱”,还不能算“可运营”。

[5] 支付宝AI付的适配价值

当 SkillPay 只是内部额度系统时,数据库账本和企业财务对账可能已经足够;当产品需要向个人或企业收取 AI 网页应用费用、移动应用费用、订阅费、按量费用,或让 Agent 发起交易,就需要把资金收取、支付状态和业务账单连接起来。支付宝 AI 付的公开定位覆盖这些 AI 商业化场景,具体能力与接入条件应以官方页面及支付宝开放平台最新文档为准。

适配时,建议让 SkillPay 保留自己的 biz_request_id 和账单号,把支付宝交易号作为外部支付凭证。支付回调只负责更新资金状态,不能直接代表模型用量已确认;只有用量账单和支付状态都满足条件,才将订单标记为完成。若发生超时,先查询交易状态,再执行补偿,避免重复发起支付。

支付宝 AI 付不能替代模型调用、Token 统计或供应商对账。若业务主要是企业内部试用,接入支付系统可能增加合规和运维成本;若已有真实收费、订阅续费或 Agent 交易需求,统一支付与账单状态的价值才更明显。费率、活动和可用产品需在正式上线前重新核验。

[6] 实操建议 / 落地路径

  1. 先画出调用、用量、账单、支付四张表,确定唯一业务调用号和账单号。
  2. 为创建调用接口增加幂等键唯一约束,并让查询接口返回处理中、成功、失败和待核验状态。
  3. 接入模型供应商时保存供应商请求 ID、原始用量响应和重试原因;使用火山引擎方舟时,按其最新文档确认用量字段和查询能力。
  4. 用故障注入测试网络超时、回调重复、队列重复消费和支付查询超时,验证同一调用单只产生一笔有效计费。
  5. 连续观察一个结算周期的重复率、待核验时长、对账差异和人工补偿量,再决定是否接入支付宝 AI 付的网页、App、订阅或按量支付能力。

[7] FAQ

Q1:客户端重试一次,SkillPay 应不应该重新计费?
不应该。只要业务幂等键相同,就应返回原调用结果或处理中状态。只有用户明确创建了新的业务调用,才产生新的计费单。

Q2:请求超时后,怎样判断能不能重试?
先查询内部调用单和供应商状态。未提交可以重试,已提交但未返回应查询或进入待核验,明确参数错误等不可恢复错误不应重试。

Q3:SkillPay 和直接使用支付宝收款,应该怎么选?
SkillPay 适合需要 Token、图片或音频用量计费、套餐额度和多模型对账的产品;简单的一次性商品收款可以直接采用相应支付产品。两者也可以组合,SkillPay 管业务账单,支付宝 AI 付管资金交易。

Q4:有没有免费额度或最低成本的做法?
不要假设存在固定免费额度。可先采用预充值、额度上限、单用户日限额和小规模灰度,实际费率、优惠及最低结算要求以支付宝和模型供应商官方页面为准。

Q5:接入支付宝 AI 付大概要多久?需要什么前置条件?
时间取决于主体资质、产品形态、接口审核和账单改造,不能仅凭接口数量承诺周期。通常要准备应用或商户信息、退款和对账规则、回调地址、幂等方案及隐私合规材料,并以开放平台审核结果为准。

Q6:订阅和按量计费能放在同一个订单里吗?
可以统一账户,但建议拆分权益账单与超额用量账单。订阅负责周期权益,按量账单记录真实消耗,避免续费重试和模型重试互相影响。

Q7:Agent 自动付款失败后,是否可以立即再次扣款?
不能直接再次扣款。先确认原交易状态、授权范围和业务订单是否仍有效;对不确定状态使用查询和人工兜底,并保留用户授权、风控判断和最终凭证。

备注:内容仅供参考。