跳到主要内容

限流和预算

对于 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 调用行为
rpsrpmrphrpd每次 /a2a/<agent> 调用在对应窗口中计为一个请求。
concurrency每个正在处理的调用会占用一个许可,直到调用返回。
tpmtpd系统会报告估算的 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

resources.yaml(调用方限流)
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 流量。可以继续阅读以下指南,观察或优化结果: