当 API 网关承接大语言模型调用时,单个调用方可能在短时间内消耗大量 Token。通过 Token 限流插件,可以在指定的时间窗口内,基于路由、服务级别,按消费者分配 Token 配额,更稳妥地控制资源使用与成本。本文为您说明 AI 场景下的 Token 限流配置方法和示例。
如果同一套 AI 能力需要面向多个调用方开放,且不同调用方的调用频率、预算或优先级不同,建议使用 Token 限流插件进行配额控制。该插件属于流量管控类插件,可绑定在服务或路由上,支持多时间窗口的复合限流策略,针对不同消费者配置独立的 Token 配额,实现差异化的流量管控。
创建 AI Token 限流插件仅支持通过使用 API 接口的方式,以下为您提供 Go 语言 SDK 方式进行创建。相关 API 接口说明和 SDK 示例如下:
Token 限流插件的配置以规则(Rules)为核心,支持为不同的消费者设置差异化的 Token 配额。当配置多个规则时,规则同时生效,规则中的匹配规则按从上到下的顺序匹配,第一个命中的匹配规则生效并执行限流。
注意
- 同一匹配规则下可配置多条限流策略,任一策略触发限流,请求即被拒绝并返回 HTTP 429。
- 时间窗口计算时会默认带上一定的偏移值,使得按天或按周限流能够在每周一北京时间 0 点统一重置。
- 您可以通过TimeWindow或Period参数配置时间窗口的大小,两个参数不可同时配置。
- 通过TimeWindow参数配置月度限流时,需要配置具体天数所对应的秒数,例如:30 天所对应的秒数为 2592000 秒。为方便您更便捷的配置月度限流,可以通过配置参数Period按自然月限流。配置示例如下:
- 您在 9 月 2 日 12 时 00 分 00 秒通过TimeWindow参数配置了 30 天的秒数时间窗口(2592000 秒),那么本次限流的截止日期为 10 月 2 日 11 时 59 分 59 秒,为期 30 天。
- 您在 9 月 2 日 12 时 00 分 00 秒通过Period参数配置月度限流,那么本次限流的截止日期为 9 月 30 日 23 时 59 分 59 秒。
为消费者user-a配置限流:每天 10,000,000 Token,每周 50,000,000 Token。
为消费者user-a、user-b配置每月 100,000,000 Token 限流;为消费者user-c配置每月 200,000,000 Token 限流。同一规则内通过多条 Match 实现分组,按从上到下顺序匹配,第一个命中的 Match 生效。
为消费者user-a配置每天 10,000,000 Token 限流;其他所有消费者默认每天 20,000,000 Token。通过两条 Match 实现:第一条精确匹配user-a,第二条使用Any模式作为兜底。规则按从上到下顺序匹配,第一个命中的 Match 生效。
配置 Namespace 后,限流值将在同一网关内、相同命名空间下的所有服务和路由之间共享。多个绑定了相同 Namespace 的插件实例会共同消耗同一个限流配额,适用于需要跨服务或跨路由统一限流的场景。以下示例配置了名为shared-quota的命名空间,该命名空间下所有服务和路由的消费者将共享每天 50,000,000 Token 的限流配额。
自定义限流响应(RateLimitedResponseOverride)
默认情况下,请求触发限流时网关返回Rate limited.。如需给调用方返回更清晰的提示,可以配置 RateLimitedResponseOverride。该配置支持以下优先级,优先级从高到低依次为:Limit.RateLimitedResponseOverride、Match.RateLimitedResponseOverride、Rule.RateLimitedResponseOverride。
说明
优先使用 Limit 层配置的响应;如果 Limit 层未配置,再使用 Match 层;Match 层也未配置时,再使用 Rule 层;都未配置时使用默认响应。
模版中支持以下两个字段: