限流与预算
对于 Agent-to-Agent(A2A)流量,调用方 API Key 仍然是流量控制边界。A2A 调用与模型流量共用该 Key 的请求限制、并发限 制和预算,但不会消耗模型 Token。
A2A 没有单独的限流或预算资源。请配置调用方 API Key,然后在 A2A 路径上验证行为。
A2A 路径上的执行方式
网关会对 /a2a/<agent> 上的每个 JSON-RPC 调用执行限流和预算检查。/a2a/<agent>/.well-known/agent-card.json 的 Agent card 发现请求不会被限流,因此即使调用方已触发限流,也仍然可以获取其 Key 允许访问的 Agent card,只是要等窗口重置后才能再次调用 Agent。
当某个 A2A 调用因限流或预算被拒绝时,网关会在联系上游 Agent 之前返回错误,并且仍会把这次被拒绝的调用记录为用量事件。
由于 A2A 调用不会解析到模型,模型作用域的限流策略不会作用于它。请求级控制会生效,包括调用方 API Key 内联的 rate_limit,以及作用域为 API Key、团队、成员或团队中每个成员的策略。
哪些限流会生效
调用方 API Key 的 rate_limit 对象可以包含请求速率、Token 速率和并发限制。在 A2A 路径上:
| 限制 | 是否作用于 A2A 调用 | 说明 |
|---|---|---|
rps、rpm、rph、rpd | 是 | 每个 /a2a/<agent> 调用会在对应窗口中计为一次请求。 |
concurrency | 是 | 每个进行中的 A2A 调用会占用一个并发许可,直到调用返回。 |
tpm、tpd | 不消耗 | A2A 调用不携带模型 Token,因此不会增加 Token 窗口计数。如果该调用方 Key 的模型流量已经耗尽 Token 窗口,该 Key 的 A2A 调用仍会以 HTTP 429 拒绝,直到窗口重置。 |
每个限流字段都是可选的。省略某个字段时,AISIX 不会执行对应限制。
请使用请求速率限制或 concurrency 限制 A2A 调用量。仅配置 Token 限制不会限制 A2A 调用数量。
完整的限流字段参考和计数器存储选项请参见限流。
配置限流
使用 rate_limit 更新调用方 API Key。下面的自托管示例将某个调用方限制为每分钟 1 次 A2A 调用,并继续让该 Key 仅用于 Agent 访问。请同时带上需要保留的现有 Key 字段;Admin API 的 PUT 会替换整个资源。
# 请替换为实际值
export AISIX_ADMIN_KEY="YOUR_ADMIN_KEY"
curl -sS -X PUT "http://127.0.0.1:3001/admin/v1/apikeys/YOUR_API_KEY_ID" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
--data-binary @- <<EOF
{
"key_hash": "${AISIX_API_KEY_HASH}",
"allowed_models": [],
"allowed_agents": ["invoice-processor"],
"rate_limit": {
"rpm": 1
}
}
EOF
❶ 当该 Key 仅用于 A2A 流量时,请使用空的模型允许列表。
❷ rpm: 1 将该调用方 API Key 限制为每分钟一次请求。
要验证限制,请在同一分钟内调用该 Agent 两次:
export AISIX_API_KEY="sk-demo-caller"
for call in 1 2; do
curl -sS -o /tmp/a2a-rate-limit-${call}.json -w "call ${call}: HTTP %{http_code}\n" \
-X POST "http://127.0.0.1:3000/a2a/invoice-processor" \
-H "Authorization: Bearer ${AISIX_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "req-rate-limit",
"method": "message/send",
"params": {
"message": {
"role": "user",
"parts": [{"kind": "text", "text": "Review this vendor invoice."}],
"messageId": "msg-rate-limit"
}
}
}'
done
命令应显示第一次调用成功,第二次返回 HTTP 429。第二次调用会在 AISIX 联系上游 Agent 之前被拒绝;调用方被限流时仍可获取 Agent card。
在托管部署中,请在 AISIX 托管控制面中配置相同的调用方 API Key 限制。
在托管部署中应用预算
预算在 AISIX 托管控制面中配置,并由托管网关执行。当覆盖某个调用方 API Key 的预算已耗尽时,网关会在联系上游 Agent 之前,以 budget_exceeded 错误拒绝该 Key 的 A2A 调用。这个检查与模型路径使用相同的预算机制。
A2A 调用没有 Token 成本,因此本身不会增加基于 Token 的花费。但如果该调用方的模型流量已经耗尽预算,同一个调用方 API Key 的 A2A 调用也会被阻断,因为二者共用同一个 Key 和预算边界。预算目标、拒绝响应和缓存行为请参见预算。
自托管部署中,请使用调用方 API Key 限流来治理 A2A 调用量。预算配置详情请参见预算。
下一步
你现在已将调用方 API Key 控制应用到 A2A 流量。使用以下指南观察结果或调整共享流量控制设置:
- 可观测性:查看 A2A 调用产生的用量事件和指标。
- 控制 Agent 访问:将调用方 API Key 的权限限定为特定 Agent 或全部 Agent。
- 限流:查看完整的限流字段和计数器存储选项。
- 预算:配置预算目标、拒绝行为和缓存设置。