使用令牌限流控制 AI 成本
本文介绍如何使用 ai-rate-limiting 插件为大模型流量配置基于令牌的限流策略。相比只按请求数限流,令牌限流更适合大模型计费和资源治理场景。
为什么需要令牌限流
传统 API 通常按请求数限流,但大模型调用的成本和资源消耗主要取决于令牌数量。一个请求可能只消耗几十个令牌,也可能因为长上下文和长输出消耗数万令牌。
| 对比项 | 请求数限流 | 令牌限流 |
|---|---|---|
| 计量单位 | HTTP 请求数 | 大模型消耗的令牌数 |
| 精细度 | 较粗,所有请求权重相同 | 更细,贴近实际资源消耗 |
| 成本控制 | 难以识别超长请求 | 与模型计费方式更一致 |
| 适用场景 | 传统 API | 大模型调用 |
配置令牌限流
以下示例将路由的总令牌预算限制为每小时 10,000 个令牌:
- Admin API
- ADC
curl "http://127.0.0.1:7080/apisix/admin/routes?gateway_group_id=default" -X PUT \
-H "X-API-KEY: $ADMIN_API_KEY" \
-d '{
"id": "ai-rate-limited",
"service_id": "'"$SERVICE_ID"'",
"paths": ["/ai"],
"plugins": {
"ai-proxy": {
"provider": "openai",
"auth": { "header": { "Authorization": "Bearer '"$OPENAI_API_KEY"'" } },
"options": { "model": "gpt-4o" }
},
"ai-rate-limiting": {
"limit_strategy": "total_tokens",
"limit": 10000,
"time_window": 3600
}
}
}'
adc.yaml
services:
- name: AI Rate Limited Service
routes:
- name: ai-rate-limited
uris:
- /ai
plugins:
ai-proxy:
provider: openai
auth:
header:
Authorization: Bearer ${OPENAI_API_KEY}
options:
model: gpt-4o
ai-rate-limiting:
limit_strategy: total_tokens
limit: 10000
time_window: 3600
常见策略
total_tokens:同时统计提示词令牌和生成令牌,适合预算控制。prompt_tokens:限制输入上下文,适合防止超长提示词。completion_tokens:限制输出消耗,适合防止异常长回答。
配额设计建议
- 按消费者或消费者组设置配额,区分团队、业务线和环境。
- 对测试环境设置较小配额,避免压测或调试请求误用生产预算。
- 对高成本模型设置更严格的令牌预算。
- 将限流命中写入日志和告警系统,便于发现异常调用。