跳到主要内容

限流与预算

对于 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 调用说明
rpsrpmrphrpd每个 /a2a/<agent> 调用会在对应窗口中计为一次请求。
concurrency每个进行中的 A2A 调用会占用一个并发许可,直到调用返回。
tpmtpd不消耗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。
  • 限流:查看完整的限流字段和计数器存储选项。
  • 预算:配置预算目标、拒绝行为和缓存设置。