应用安全

AI SaaS 如何控制 API 调用成本和异常流量?

AI 接口的成本不在请求数,而在 token 与算力。本文给出按成本维度限流、分层配额、异常识别、缓存去重与账单熔断的完整控制链路,以及配额阈值该怎么反推。

成本失控的三种形态

形态 表象 真正的归因
账单型 月末账单翻倍,但 DAU 平稳 爬虫或薅额度产生的调用不体现在活跃用户上
单租户型 少数账号吃掉大部分额度 免费额度无上限,或配额只按请求数不按成本计
端点型 某个高成本接口消耗异常 视频/高清图像/长上下文接口的单次成本是普通接口的数十倍

三种形态对应的控制点不同,但根因是同一个:你按「请求数」计费,而成本按「token 与算力」发生。只要度量口径和成本口径不一致,成本就一定会失控。

为什么按请求数限流在 AI 接口上会失效

维度 传统 Web 接口 AI 接口
单次请求成本 基本恒定 相差可达数十倍(取决于上下文长度、分辨率、步数)
合理频率 用户操作决定,有天然上限 脚本可无限循环,无天然上限
重试放大 影响小 一次失败重试可能重复消耗整段上下文

一个「每分钟 60 次请求」的限流规则,在传统接口上等于 60 次廉价查询;在 AI 接口上可能是 60 次最长上下文推理。把限流的计数单位从「次」换成「成本单位」,是 AI 场景成本治理的第一步,也是最容易漏掉的一步。

五个控制点

1. 按成本维度计数。 给每类请求折算一个成本点数(例如:文本补全按输入+输出 token 折算,图像按分辨率×步数折算,视频按秒数折算),限流规则统计的是点数而不是请求数。Cloudflare 的 Rate Limiting rules 支持基于路径、请求头和请求正文/JWT 声明组合计数,并可对超限请求返回自定义响应,这让「按声明里的套餐档位计数」成为可能。

2. 分层配额。 三层同时存在:租户层(每个客户的总预算)、端点层(高成本接口单独限次)、模型层(贵模型单独配额)。缺任何一层,成本都会从缺口漏出去。

3. 异常流量识别与降速。 限流只能限制速率,不能区分好坏。要先识别再降速:来源集中、无浏览器环境、请求节奏机械、只调用生成接口从不读取结果的流量,优先降级到便宜模型或直接挑战,而不是一律 429。

4. 缓存与去重。 完全相同的请求(图生图同一参数、同一 prompt 的补全)直接返回缓存结果,是最便宜的成本优化。配合边缘缓存规则,热门请求连源站都不用回。

5. 账单级告警与熔断。 把「按目录/租户/端点的消耗」接入告警,并设硬熔断:达到阈值后自动降级到低档模型或排队。没有熔断,告警只是通知你钱已经花出去了。

配额阈值怎么反推

参数 反推方式 示例
单租户月额度 该套餐毛利 ÷ 单位调用成本 × 可承受成本占比 月费 100 元、毛利 60%、单位成本 0.02 元、可承受 30% → 900 次
单端点限次 按该端点单次成本是基准接口的倍数缩放 视频接口单次成本≈文本 40 倍 → 限次取 1/40
每分钟速率 正常用户峰值节奏 × 1.5 人工操作峰值 20 次/分 → 限 30 次/分
熔断阈值 月度预算的 80% 触发告警,100% 触发降级 预算 5000 元 → 4000 元告警

关键是阈值来自单位经济模型,而不是拍脑袋或抄默认值。同一套参数在不同毛利结构下的最优解完全不同。

边界与不适用情况

  • 长任务异步接口(视频生成、批量推理)不适合用每分钟速率限制,应该按「并发队列长度」限制,否则正常排队任务会被误判。
  • 合作方集成的调用节奏由对方系统决定,速率限制容易误伤,应改为总额度 + 单独告警。
  • 免费试用必须有硬上限,且上限要低于获客成本,否则增长越多亏得越多。

FAQ

限流返回 429 会不会伤害真实用户? 会,所以 429 应该是最后一道。正确顺序是:缓存命中 → 识别后降级/排队 → 挑战 → 最后才是拒绝。把 429 当前置手段说明前四层没做。

免费档能支撑到什么规模? 边缘限流的基础能力在免费档即可用,但规则数量、统计窗口与自定义响应通常需要付费档。规模化的判断标准是「能否按业务声明(套餐、租户)计数」,而不是规则条数。

异常流量和正常高峰怎么区分? 看三个不变量:请求来源分布是否与历史一致、请求节奏是否符合人类操作间隔、调用端点组合是否合理。高峰期这三个特征仍然成立,攻击期至少有一个不成立。

已经超支了怎么办? 先熔断(切降级模型或排队)止血,再按端点维度拆账单定位消耗源头,最后补配额。顺序反了会一边修一边继续烧钱。

← 返回文章列表

Cloudflare 官方合作伙伴

正在为海外业务做架构决策?

企业版选型、架构咨询、风险评估——把你的场景告诉我们,我们给出可落地的方案和路径。

作为 Cloudflare 合作伙伴,我们可以为你提供:

预约咨询