AI agent 准入控制与配额闸门:谁能进队列、谁该延后、谁该直接拒绝

HTMLPAGE 团队
20 分钟阅读

不是所有 AI agent 请求都应该进入执行队列。本文讲清 admission policy、quota bucket、protected capacity 与拒绝策略,避免高峰期把系统拖死。

#AI agent #admission control #quota #工程实践

很多团队做 AI agent 时,会默认把“收到请求”理解成“应该开始执行”。这个假设在低流量阶段没问题,但一旦进入多人使用、批量任务和高成本工具并行的阶段,系统最重要的问题就会变成:哪些请求应该立刻进队列,哪些应该延后,哪些根本不该在当前窗口执行。

准入控制与配额闸门真正要解决的,不是简单限流,而是把“系统资源、业务优先级、风险等级和租户公平”翻译成明确的入场规则。否则再好的模型和工具,也会在错误的流量面前被拖垮。

建议先配合 AI agent 任务优先级队列AI agent 成本控制与预算治理AI Agent 并发与可靠性AI agent 产品成功指标 一起看。

先给结论:准入控制先回答 3 个问题

问题典型判断
这个请求现在能不能执行当前是否还有容量
这个请求值不值得占用容量业务优先级和风险等级
这个请求该走哪条通道实时、延后、批处理或直接拒绝

如果系统只有“是否超过 QPS”这一条规则,就还谈不上真正的 admission control。

一、准入控制先看请求分类,不要所有任务共用一条门

一个最小分类法通常至少包括:

  • 实时交互请求
  • 需要人工等待的半实时请求
  • 批量异步任务
  • 高风险写操作前的校验请求

这些请求抢占资源的合理性完全不同。把它们混在一个入口,只会让系统在高峰期失去业务判断。

二、Quota bucket 最好分层,而不是全站一个总额度

更稳的配额模型通常会拆成:

配额层解决什么问题
全局 quota保护整体供应商配额
tenant quota防止大客户或单租户挤占全部资源
user quota防止单用户刷爆系统
workload quota保护实时交互不被离线任务吃光

只有拆层以后,你才能同时做到“保护平台”和“保护关键业务”。

除此之外,admission 决策本身也值得落成一份 decision envelope,而不是只返回 allow / reject:

{
  "runId": "run_123",
  "decision": "defer",
  "quotaSnapshot": {
    "globalRemaining": 42,
    "tenantRemaining": 5,
    "protectedCapacityRemaining": 2
  },
  "reasonCodes": ["background_quota_exhausted"],
  "retryAfterMs": 30000
}

有了这份记录,后面无论是解释用户为什么被挡、复盘哪个 bucket 经常耗尽,还是分析 admission policy 是否误杀,都更容易落到事实层面。

三、不要只做拒绝,也要设计 defer 与 protected capacity

准入控制常见错误是只会两种动作:放行或拒绝。现实里更有用的通常是四种:

动作适用场景
allow容量充足且请求优先级合理
defer当前不急,可转后台队列
degrade可进入低成本或低能力链路
reject当前不应继续占用资源

此外,关键任务最好永远有保留容量。例如审批辅助、风控审查或人工正在等待的请求,不应该和离线批量回放争抢同一个 bucket。

更稳的做法通常会把容量拆成三层:

容量层用途
reserved capacity只服务关键交互任务
shared capacity服务大多数普通请求
emergency spillover只在异常窗口临时接管

这样系统就不只是知道“要保护关键任务”,而是把保护变成了明确的容量布局。

四、Admission policy 要显式看成本与风险,而不是只看并发数

两个请求同时到来,不一定等价:

  • 一个只是摘要改写
  • 一个要调用 3 个工具并触发高风险写入

如果 admission policy 只看“当前并发数”,系统会把这两类任务当成完全一样的负载,这是不对的。更合理的做法是先估算:

{
  "taskType": "external_send_review",
  "estimatedCostTier": "high",
  "riskLevel": "high",
  "capacityClass": "protected"
}

这样入口层就能在真正执行前决定:允许进入、改走低成本链路,还是直接转人工。

五、被拒绝的请求也要有清晰用户语义,不要让前端只收到 429

很多系统的 admission control 做到了保护后端,却把前端变成黑盒。更健康的返回语义通常包括:

  • 当前是容量问题还是配额问题
  • 是临时延后还是今天额度已用尽
  • 还有没有替代路径,例如改走异步、低成本模式或人工入口

准入控制的目标不是“挡住用户”,而是让用户知道现在该怎么继续。

六、上线后要看“谁被挡住了”,而不是只看拒绝率

建议持续观察:

指标用途
admission reject ratio by workload看是不是挡错了流量
deferred queue completion rate看延后任务有没有被真正完成
protected capacity hit ratio看保留容量是否被有效使用
protected capacity starvation rate看关键任务是否仍然被挤压
admission decision latency看入口判断是否本身太慢
cost saved vs accepted run loss看准入策略是节流还是误杀

如果拒绝率下降了,但关键业务 accepted run 也下降,说明 admission policy 只是把流量压低,不是把系统变聪明。

七、失败案例:批量回放占满队列,人工等待的审批请求全部超时

某团队晚上跑评测回放时,没有和白天的实时审批辅助分开配额。结果第二天上班后,虽然总体 QPS 不高,但重任务队列仍然占满 worker,导致需要人工等待的审批请求持续超时。

修复后,他们把 admission policy 改成:

  • 交互型审批辅助走 protected capacity
  • 批量回放只能吃 background quota
  • 超出预算的回放任务直接 defer 到低峰窗口

问题的关键不是资源不够,而是入口没有区分“谁更应该先被服务”。

八、准入控制与配额闸门 Checklist

  • 是否先按请求类型区分实时、半实时和离线任务
  • quota 是否至少分成全局、租户、用户或 workload 几层
  • 是否除了 reject 之外,还支持 defer 与 degrade
  • admission decision 是否记录 quotaSnapshot、reasonCodes 和 retryAfter
  • 关键业务是否有 protected capacity
  • 是否显式划分 reserved、shared 和 emergency spillover 容量
  • admission policy 是否显式看成本和风险等级
  • 被拒请求是否返回可解释的下一步路径
  • 是否设置最大 defer 窗口,避免低优先级任务被永久饿死
  • 是否持续监控被挡住的是哪类业务请求

结语

AI agent 的准入控制,不是“加一层限流”,而是决定系统应该把稀缺资源优先给谁。只有把业务优先级、风险等级、成本预算和容量边界一起写进入口规则,平台才不会在高峰时用最贵的方式服务最不重要的任务。

延伸阅读: