功能说明

ai-quota 插件实现给特定 consumer 根据分配固定的 quota 进行 quota 策略限流,同时支持 quota 管理能力,包括查询 quota 、刷新 quota、增减 quota。

ai-quota 插件需要配合 认证插件比如 key-authjwt-auth 等插件获取认证身份的 consumer 名称,同时需要配合 ai-statistics 插件获取 AI Token 统计信息。

运行属性

插件执行阶段:默认阶段 插件执行优先级:750

配置说明

名称数据类型填写要求默认值描述
redis_key_prefixstring选填chat_quota:qutoa redis key 前缀
admin_consumerstring必填管理 quota 管理身份的 consumer 名称
admin_pathstring选填/quota管理 quota 请求 path 前缀
redisobjectredis相关配置

redis中每一项的配置字段说明

配置项类型必填默认值说明
service_namestring必填-redis 服务名称,带服务类型的完整 FQDN 名称,例如 my-redis.dns、redis.my-ns.svc.cluster.local
service_portint服务类型为固定地址(static service)默认值为80,其他为6379输入redis服务的服务端口
usernamestring-redis用户名
passwordstring-redis密码
timeoutint1000redis连接超时时间,单位毫秒

配置示例

识别请求参数 apikey,进行区别限流

  1. redis_key_prefix: chat_quota:”
  2. admin_consumer: consumer3
  3. admin_path: /quota
  4. redis:
  5. service_name: redis-service.default.svc.cluster.local
  6. service_port: 6379
  7. timeout: 2000

刷新 quota

如果当前请求 url 的后缀符合 admin_path,例如插件在 example.com/v1/chat/completions 这个路由上生效,那么更新 quota 可以通过 curl https://example.com/v1/chat/completions/quota/refresh -H “Authorization: Bearer credential3” -d “consumer=consumer1&quota=10000”

Redis 中 key 为 chat_quota:consumer1 的值就会被刷新为 10000

查询 quota

查询特定用户的 quota 可以通过 curl https://example.com/v1/chat/completions/quota?consumer=consumer1 -H “Authorization: Bearer credential3” 将返回: {“quota”: 10000, “consumer”: “consumer1”}

增减 quota

增减特定用户的 quota 可以通过 curl https://example.com/v1/chat/completions/quota/delta -d “consumer=consumer1&value=100” -H “Authorization: Bearer credential3” 这样 Redis 中 Key 为 chat_quota:consumer1 的值就会增加100,可以支持负数,则减去对应值。