#AI#AI Agent#DevOps

多 Agent 能力路由:容量准入、背压与负载卸载

按角色名把任务发给“最强 Agent”会忽略工具权限、版本兼容和实时容量。本文用版本化 capability descriptor、分层准入与截止期感知卸载保护交互和关键任务。

本文要点

  • 主题聚焦:AI、AI Agent、DevOps
  • 适合人群:独立开发者、全栈工程师、AI 应用开发者
  • 核心价值:快速理解背景、实践路径、常见误区和工程建议
作者 @admin·发布于 2026年3月18日·更新于 2026年7月20日

“代码任务交给 coding Agent,研究任务交给 research Agent”只适合演示。生产任务还要求特定仓库读取能力、浏览器版本、模型上下文、地区、数据级别、工具 schema 和安全策略;候选 worker 即使功能匹配,也可能已经占满模型并发或下游连接。路由只按角色名,会让任务在错误队列里等待到超时,再由重试制造更大压力。

Agent 的并发与调度 介绍池、限流和优先级,AI 平台租户配额隔离 约束共享推理资源。本篇关注协调器如何同时判断“能不能做、现在该不该接、压力下先丢什么”,并保证换池不会扩大权限或改变结果契约。

capability-descriptor.v1 是可验证事实

每个执行池由可信控制面发布 descriptor:poolId、descriptorEpoch、runtimeDigest、task/result schema 范围、工具版本、数据分类与租户隔离 profile、地区、模型上限、沙箱、策略 generation、健康证据和过期时间。worker 心跳只能报告动态占用,不能自报更高权限。

任务提交 TaskRequirements.v1,包含能力、输入分类、结果 schema、预估 token/工具槽位/时长、deadline、可信租户、优先级来源和降级集合。匹配使用版本、标签与隔离策略,不是 embedding;未知字段、过期 descriptor、租户不兼容或 epoch/generation 落后都不准入。

text
eligible = schemaCompatible
  && requiredTools subsetOf allowedTools
  && classificationPolicy.allows(inputLabels, poolLabels)
  && tenantIsolationCompatible
  && region in allowedRegions
  && descriptorEpoch == activeDescriptorEpoch
  && policyGeneration == activeGeneration

admit = eligible && activate(admissionId, requirementDigest, grants)

这里的 descriptor 说明池具备什么能力,短期 capability lease 才授权某 attempt 实际调用哪一个资源。不能因为路由到“高权限池”就把整池凭证交给任务;领取后仍签发更窄的调用 lease。Agent 委派协议 中的预算也必须向下收缩。

一次准入要预留整条关键资源

ReservationLedger 以稳定 admissionId + requirementDigest 保存 PREPARING/ACTIVE/RELEASED/EXPIRED、descriptor epoch、资源 grants、TTL 和 fence。同 ID 不同摘要直接冲突。由本平台控制的模型槽、工具 permit、沙箱和租户预算在一个事务内以条件计数预留;两个调度器只能一个 CAS 成功。

外部资源不能与账本同事务时,协调器处于 PREPARING,按全局固定顺序用 admission ID 幂等申请不可消费、短 TTL 的 provisional grant;任一失败就补偿释放。部分 grant 会短暂占容量,但不能启动任务或无限等待。全部到齐后 CAS 为 ACTIVE,签发含 admission、pool、descriptor epoch、fence 和 grant IDs 的 AdmissionGrant;task claim、池派发及每个资源消费点都重验这些字段与 TTL。过期回收使用更高 fence,旧 holder 不能消费或释放新 grant。运行阶段确需 hold-and-wait 的关系进入 多 Agent 等待图。

容量估计来自实际服务时间和 token 分布;执行按阶段结算并将不再需要的 grant 原子转为 RELEASED。换阶段重新准入,不能沿用隐含权限。队列按租户和服务等级公平分层,预计无法赶上 deadline 就拒绝或降级。Kubernetes Scheduling Framework 的 filter/score/reserve/permit 可解释阶段,但账本线性化点必须由业务层实现。

背压必须一路返回生产者

池进入压力状态时,先停止低优先级 fan-out 和推测性分支,再暂停可延迟批任务,收紧每 run 并发,最后拒绝新交互请求。不要继续接收并在内部静默排队。响应携带 reason code、可安全重试时间、已接受的 admission ID 和允许的降级选项;SDK 使用带抖动退避并服从 deadline。

负载卸载按成本和可恢复性排序:尚未开始的推测任务、可重建缓存、无保障批任务先丢;已产生未知外部副作用、人工已批准或接近 canonical commit 的任务不得随意驱逐。Envoy Overload Manager 展示了按资源压力触发动作的机制,Google SRE 的过载处理强调尽早拒绝以保存健康容量。对 Agent 而言还需禁止把超载回退变成安全降级,例如从受控私网池切到公共模型。

备用池必须在任务 descriptor 的显式 allowedFallbacks 内,且输出 schema、地区、数据级别和工具语义兼容。降级可减少检索扇出、降低非关键评审次数或返回部分结果,但要标记缺失证据;不能偷偷换成权限更宽、质量未门禁的 Agent。多模型 fallback 负责供应商容灾,这里的路由仍决定整个多 Agent 执行池的准入边界。

压力测试、指标与安全回滚

测试伪造 capability、过期 descriptor、同 admission ID 不同 payload、外部 grant 取得一半后失败、两个调度器竞争、ACTIVE 前取消、TTL 回收与旧 holder 释放竞争,并覆盖单租户突发和越区 fallback。阶梯与脉冲压测断言账本计数守恒、有界队列不超容量、低优先级 fan-out 先停、重试有抖动且 fallback 不扩大权限。

观测包括每能力的 eligible pool 数、匹配失败 reason、reservation 利用率、估计/实际成本比、队列年龄、deadline miss、按租户公平偏差、各卸载阶段触发时间、fallback 比例和取消后资源释放延迟。仅看总成功率会隐藏关键流量被批任务挤压,必须按服务等级和 capability 切片。

上线先 shadow 路由,再对低风险只读任务启用 ledger。回滚先停止新准入并提高 activeDescriptorEpoch;释放未 ACTIVE reservation。已领取 attempt 的 pinned epoch 仅在显式 draining allowlist 中继续消费原 grants,新阶段必须按当前 epoch 重准入;安全撤销则移除 allowlist 并取消 attempt。旧二进制不识别 epoch 就不得回流。确认重复 reservation、越区 fallback 和泄漏 permit 为零后再恢复路由;评分可回退,硬容量与安全匹配不能关闭。

Related

相关推荐