限流和预算
对于 Agent-to-Agent(A2A)流量,调用方级限制配置在调用方 API Key 上。A2A 调用与模型流量共享 API Key 的请求和并发限制。涵盖该 API Key 的 AISIX Cloud 预算同样适用,但 A2A 调用报告的成本为零,不会增加已跟踪的支出。
A2A 没有单独的流量控制资源。请在调用方 API Key 上配置限流,并在 AISIX Cloud 中为涵盖该 API Key 的范围配置预算,然后在 /a2a/<agent> 上验证行为。
前置条件
请完成 AISIX Cloud 或开源 AISIX 网关的配置 Agent 网关。保持 Shell、网关和测试 Agent 运行,以便验证限制。
控制生效的位置
网关会对 /a2a/<agent> 上的每个 JSON-RPC 调用应用流量控制。Agent Card 发现请求不受限流影响。被限流的调用方仍可以获取其 API Key 有权访问的 Agent Card,但在窗口重置前无法再次调用该 Agent。
当限流或预算拒绝调用时,AISIX 会在联系上游 Agent 前返回,并将被拒绝的调用记录为用量事件。
由于 A2A 调用不会解析模型,因此模型范围的限流策略不适用。调用方 API Key 上的请求级控制仍然适用。
适用的限 流
调用方 API Key 的 rate_limit 对象支持请求速率、Token 速率和并发限制。只有请求速率和并发限制会直接计量 A2A 调用:
| 限制 | 是否适用于 A2A 调用 | 行为 |
|---|---|---|
rps、rpm、rph、rpd | 是 | 每次 /a2a/<agent> 调用在对应窗口中计为一个请求。 |
concurrency | 是 | 每个正在处理的调用会占用一个许可,直到调用返回。 |
tpm、tpd | 否 | 系统会报告估算的 A2A Token 数量,但不会将其加入 Token 窗口。如果 API Key 的模型流量已耗尽共享 Token 窗口,A2A 调用仍可能被拒绝。 |
使用请求速率限制或 concurrency 控制 A2A 调用量。仅配置 Token 限制无法限制 A2A 调用。
有关完整字段参考和计数器存储选项,请参阅 API Key 和模型限流。
设置调用方限流
以下示例将配置指南中的调用方 API Key 限制为每分钟一个请求。
AISIX Cloud
更新现有的调用方 API Key:
curl -fsS -X PATCH \
"$AISIX_CP/environments/$ENV_ID/api_keys/$API_KEY_ID" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rate_limit": {
"rpm": 1
}
}' | jq
该部分更新会保留 API Key 的模型、MCP 和 Agent 授权。控制面会自动将更改下发到已连接的网关。发送 "rate_limit": null 可清除内联限制。
开源 AISIX 网关
在 resources.yaml 的调用方条目中添加 rate_limit:
api_keys:
- display_name: quickstart-caller
key_env: CALLER_API_KEY
allowed_models:
- gpt-4o-mini
allowed_agents:
- echo-agent
rate_limit:
rpm: 1
验证完整文件并重新加载:
docker exec aisix-quickstart \
aisix validate --resources /etc/aisix/resources.yaml
docker kill --signal HUP aisix-quickstart
删除 rate_limit 可清除内联限制。
验证限流
配置生效后,在一分钟内调用 Agent 两次:
for call in 1 2; do
curl -sS -o "/tmp/a2a-rate-limit-${call}.json" \
-w "call ${call}: HTTP %{http_code}\n" \
-X POST "$AISIX_PROXY/a2a/echo-agent" \
-H "Authorization: Bearer $AISIX_A2A_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "req-rate-limit",
"method": "SendMessage",
"params": {
"message": {
"messageId": "msg-rate-limit",
"role": "ROLE_USER",
"parts": [{"text": "Test the caller rate limit"}]
}
}
}'
done
命令会为第一次调用输出 HTTP 200,为第二次调用输出 HTTP 429。被拒绝的调用不会到达上游 Agent。
应用 AISIX Cloud 预算
预算在 AISIX Cloud 中配置,并由其连接的网关执行。当涵盖调用方 API Key 的预算已耗尽时,AISIX 会在联系上游 Agent 前拒绝该 API Key 的 A2A 调用,并返回 budget_exceeded 错误。
A2A 协议没有模型服务提供方用量块,因此 AISIX 会估算文本 Token 以用于遥测,并将 cost_usd 记录为零。所以 A2A 调用不会增加预算支出。如果调用方的模型流量已耗尽预算,该调用方的 A2A 调用仍会被阻止,因为两者使用同一个调用方 API Key。
开源 AISIX 网关不提供预算管理服务。请使用调用方 API Key 的请求和并发限制控制 A2A 调用量。有关 AISIX Cloud 预算目标、拒绝行为和缓存,请参阅预算。
后续步骤
你已将调用方 API Key 控制应用到 A2A 流量。可以继续阅读以下指南,观察或优化结果:
- 可观测性:查看 A2A 调用生成的用量事件和指标。
- 控制 Agent 访问权限:将调用方 API Key 的权限范围限定为特定 Agent 或模式。
- API Key 和模型限流:查看所有限流字段。
- 预算:配置 AISIX Cloud 预算目标和拒绝行为。