大促采购季,新用户首购低至5折点此了解

令牌限流

发布时间 2025-03-03


场景描述

AI网关能够对大模型使用的Token数量进行追踪,在消费者使用超额时进行限制,从而更好管理调用AI应用的用户额度,为Token使用分析提供数据支持。

令牌限流场景基于消费者认证、Token限流、Token配额插件,集合可观测能力,将Token资源转化为可量化、可管控、可优化的服务单元,基于自定义的策略,保障高并发下服务的稳定性、安全性与公平性。

部署Higress.AI

本指南中基于docker部署,如您需要其他部署方式(k8s、helm等),请参照快速开始

执行以下命令:

Terminal window
curl -sS https://higress.cn/ai-gateway/install.sh | bash

按照指引可以分别录入 Aliyun Dashscope或其他API-KEY;也可以键入回车后跳过,之后在控制台中修改。

上述命令的默认的HTTP的服务端口为8080,HTTPS的服务端口为8443,控制台的服务端口为8001。如您需要使用其他端口,可使用 wget https://higress.cn/ai-gateway/install.sh下载部署脚本后,修改DEFAULT_GATEWAY_HTTP_PORT/DEFAULT_GATEWAY_HTTPS_PORT/DEFAULT_CONSOLE_PORT结果;然后是使用bash执行脚本。

部署完成后,会出现以下界面:

控制台配置

通过浏览器访问控制台界面http://localhost:8001/,首次登录需要配置管理员及密码。

在AI服务提供者管理界面,可以配置已集成供应商的API-KEY。当前已集成的供应商有阿里云、DeepSeek、Azure OpenAI、OpenAI、豆包等。这里我们为阿里云配置API-KEY,如您在上一步中已经配置,则直接忽略。

配置消费者

在控制台中的消费者管理界面,为当前网关添加消费者以管理配额、发送请求。

点击创建消费者,基于Key Auth创建3个消费者,依次为aliyun-admin、aliyun-user1、aliyun-user2,基于HTTP Header中的x-api-key字段进行认证。

配置Redis存储服务

Token的信息需要临时存储以供访问,因此需要创建一个Redis服务用于缓存。本文示例基于docker搭建一个本地Redis服务,提供给Higress使用。

Redis服务构建

  1. 使用docker命令启动一个redis容器
docker run --name my-redis -p 6379:6379 -d redis
  1. 查看my-redis服务ip

    1. 使用docker network ls获取bridge网络的id

    2. 使用docker network inspect <netword-id>,检查bridge下是否有my-redis容器

      如果没有,通过docker network connect bridge my-redis命令连接到网络中

    3. 获取my-redis服务对应的ip

Redis服务配置

在控制台服务来源的界面,创建服务来源,填写对应的字段:

  • 类型:固定地址
  • 服务地址:my-redis的ip和服务端口拼接
  • 服务协议:HTTP

配置AI路由策略

消费者认证配置

在AI路由管理界面中,为阿里云配置消费者,点击编辑。

在编辑界面中,打开启用请求认证,添加刚刚创建的消费者。

Token配额配置

在AI路由管理界面中,为阿里云配置Token配额,点击策略进行配置,选择AI配额管理。

在AI配额管理插件配置界面中,参考以下字段填写:

redis_key_prefix: 'chat_quota:'
admin_consumer: aliyun-admin
admin_path: /quota
redis:
service_name: local-redis.static
service_port: 80
timeout: 2000

Token限流配置

在AI路由管理界面中,为阿里云配置Token限流,点击策略进行配置。

在AI Token限流插件配置界面中,参考以下字段填写:

rule_items:
- limit_by_per_header: x-api-key
limit_keys:
- key: "*"
token_per_minute: 5 #每分钟限流5个
rule_name: "default_rule"
redis:
service_name: local-redis.static
service_port: 80

调试

打开系统自带命令行,通过以下命令进行请求(如HTTP服务未部署在8080端口上,修改为对应端口即可)

#查询quota,x-api-key为aliyun-admin的凭证
curl 'http://localhost:8080/v1/chat/completions/quota?consumer=aliyun-user1' \
-H 'x-api-key:xxxxxxxxxxxx' \
-H 'x-higress-llm-model: qwen-max'
#刷新quota,x-api-key为aliyun-admin的凭证
curl 'http://localhost:8080/v1/chat/completions/quota/refresh' \
-d 'consumer=aliyun-user1&quota=100' \
-H 'x-api-key:xxxxxxxxxxxx' \
-H 'x-higress-llm-model: qwen-max'
#增加quota,x-api-key为aliyun-admin的凭证
curl 'http://localhost:8080/v1/chat/completions/quota/delta' \
-d 'consumer=aliyun-user1&value=100' \
-H 'x-api-key:xxxxxxxxxxxx' \
-H 'x-higress-llm-model: qwen-max'
#请求,x-api-key为aliyun-user1的凭证
curl 'http://localhost:8080/v1/chat/completions' \
-H 'x-api-key:xxxxxxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen-max",
"messages": [
{
"role": "user",
"content": "你是谁"
}
]
}'

请求结果示例:

结果观测

在AI监控面板界面,可以对AI请求进行观测。观测指标包括每秒输入输出Token数量、各供应商/模型Token使用数量、消费者使用Token情况等。

如您在部署过程中遇到问题,可在 Higress Github Issue 中留下您的信息。

如您对 Higress 后续更新感兴趣,或希望给 Higress 提供反馈,欢迎 Star Higress Github Repo