API Key 与模型限流
限流可以保护模型服务提供方容量,并防止单个调用方或模型耗尽共享配额。当配额属于某个调用方时,请在调用方 API Key 上配置限制;当使用某个模型的所有调用方应共享配额时,请在模型上配置限制。
这些限制属于其所配置的 API Key 或模型。限流策略是独立规则,可以匹配团队、成员、API Key、模型、模型名称或模型服务提供方,并把匹配流量划分到彼此独立的配额桶中。同一请求可以同时匹配 API Key 限制、模型限制和策略。每个匹配的限制都会生效;只要有任一配额桶耗尽,网关就会在调用模型服务提 供方之前返回 429。
本指南介绍如何在 API Key 和模型上配置限制、验证限制是否生效,以及选择共享计数器存储。AISIX Cloud 和开源 AISIX 网关通过不同的管理路径提供相同能力。
准备工作
开始前,请准备以下内容:
- 可以发送代理请求的模型别名和调用方 API Key。如果尚未配置,请参阅模型服务提供方密钥、模型别名和调用方 API Key。
- 对于 AISIX Cloud:已接入网关的环境,以及具有写权限范围的 Admin Token。可以按照 AISIX Cloud 快速入门进行本地评估;如需申请混合云访问权限,请联系 API7。
- 对于开源 AISIX 网关:可验证并重新加载的声明式资源文件。参见重新加载资源文件。
导出用于验证本页任一示例的网关请求参数:
# AISIX_PROXY 末尾不包含 斜杠或 /v1 等端点路径。
# 本地快速入门使用 http://127.0.0.1:3000。
export AISIX_PROXY="YOUR_AISIX_GATEWAY_URL"
export AISIX_MODEL="gpt-4o-prod"
export AISIX_API_KEY="YOUR_CALLER_API_KEY"
对于 AISIX Cloud 示例,还需导出控制平面连接参数及待限制资源的 ID:
# AISIX_CP 包含 /api,末尾不包含斜杠。
# 本地 On-Premises 快速入门使用 http://localhost:8080/api。
export AISIX_CP="YOUR_AISIX_CLOUD_ADMIN_API_BASE_URL"
export AISIX_TOKEN="YOUR_ADMIN_TOKEN"
export ENV_ID="YOUR_ENVIRONMENT_ID"
# API_KEY_ID 标识明文值为 AISIX_API_KEY 的调用方 Key。
export API_KEY_ID="YOUR_CALLER_API_KEY_ID"
# MODEL_ID 标识别名为 AISIX_MODEL 的模型。
export MODEL_ID="YOUR_MODEL_ID"
选择限流配置方式
可以通过两种方式配置限流:
- 把
rate_limit块直接关联到调用方 API Key 或模型。当某个应用或租户需要独立配额时使用调用方限制;当某个别名的所有调用方应共享配额时使用模型限制。 - 当需要单独管理的配额、条件匹配,或需要为团队、成员、API Key、模型或模型服务提供方创建独立配额桶时,请创建限流策略。
调用方 API Key 还可以为其调用的每个 MCP 服务器设置单独的 请求数和并发限制。参见 MCP 限流与预算。
每个匹配的限制都会生效。例如,一个请求可以同时占用调用方 API Key、解析后的模型、团队策略和成员策略中的容量。只有所有匹配的配额桶都有剩余容量,请求才会继续。
配置调用方 API Key 限制
以下示例把一个调用方 API Key 限制为每分钟一次请求。
AISIX Cloud
在控制台中打开 API keys,展开调用方 API Key,然后使用其中的 Rate limits 控件。Admin API 为自动化提供相同配置能力。
更新调用方 API Key,为其设置每分钟一次请求的限制:
curl -sS -X PATCH "${AISIX_CP}/environments/${ENV_ID}/api_keys/${API_KEY_ID}" \
-H "Authorization: Bearer ${AISIX_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"rate_limit": {
"rpm": 1
}
}'
更改会自动投射到已接入的网关。
开源 AISIX 网关
在声明式资源文件已有的调用方 API Key 条目中添加相同限制,并保留其当前的 display_name、key_env 和 allowed_models。以下示例使用调用方 API Key 指南中的值:
api_keys:
- display_name: chat-app
key_env: CALLER_API_KEY
allowed_models:
- gpt-4o-prod
rate_limit:
rpm: 1
让验证命令可以访问调用方凭证:
# 使用与验证请求相同的明文值。
export CALLER_API_KEY="${AISIX_API_KEY}"
如果 AISIX 安装在主机上,请在重新加载网关之前验证完整资源文件:
aisix validate --resources resources.yaml
对于开源快速入门中的 Docker 环境,请使用基于容器的验证和重新加载命令。快速入门已让容器可以访问 CALLER_API_KEY。
配置模型限制
当某个别名的所有调用方都应共享同一配额时,请使用模型限制。以下示例允许使用 gpt-4o-prod 的所有调用方 API Key 每分钟总计发 送一次请求。
AISIX Cloud
在控制台中打开 Models,编辑模型,然后使用 Rate limits 字段。Admin API 为自动化提供相同配置能力。
更新模型:
curl -sS -X PATCH "${AISIX_CP}/environments/${ENV_ID}/models/${MODEL_ID}" \
-H "Authorization: Bearer ${AISIX_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"rate_limit": {
"rpm": 1
}
}'
开源 AISIX 网关
在直接模型条目中添加限制,并保留已有的模型服务提供方和密钥设置:
models:
- display_name: gpt-4o-prod
provider: openai
model_name: gpt-4o
provider_key: openai-prod
rate_limit:
rpm: 1
验证完整资源文件并重新加载网关。此后,使用不同调用方 API Key 的请求会从同一个模型配额桶中扣减容量。
验证限流
前面的调用方和模型示例都使用每分钟一次请求的限制。请一次只配置并测试一个直接限制,以便 429 响应能明确指向所测试的限制。也可以用相同的请求序列验证限流策略。
等待 AISIX Cloud 更改到达网关,或重新加载开源资源文件后,发送三个请求:
for i in 1 2 3; do
printf "request %s: " "${i}"
curl -sS -o /dev/null -w "%{http_code}\n" -X POST "${AISIX_PROXY}/v1/chat/completions" \
-H "Authorization: Bearer ${AISIX_API_KEY}" \
-H "Content-Type: application/json" \
--data-binary @- <<EOF
{
"model": "${AISIX_MODEL}",
"messages": [
{
"role": "user",
"content": "Hello from AISIX."
}
]
}
EOF
done
第一个请求应到达上游模型。同一固定窗口内的其余请求应超过限制:
request 1: 200
request 2: 429
request 3: 429
兼容 OpenAI 的限流拒绝会返回 429 Too Many Requests,并使用代理错误格式:
{
"error": {
"message": "request limit exceeded (requests)",
"type": "rate_limit_exceeded"
}
}
请求计数和 Token 限制的拒绝会包含 Retry-After