限流与预算
对于 Agent-to-Agent(A2A)流量,调用方 API Key 仍然是流量控制边界。A2A 调用与模型流量共用该 Key 的请求限制、并发限制和预算。其用量事件确实带有 Token 数,但这些数字只上报、不计费,因此不会计入 Token 窗口。预算限制的是美元花费,而 A2A 调用的成本为零,因此 也不会产生花费。
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 数是网关对消息文本的统计,而不是 Agent 计费的用量,因此只会记录在用量事件中,不会增加 Token 窗口计数。如果该调用方 Key 的模型流量已经耗尽 Token 窗口,该 Key 的 A2A 调用仍会以 HTTP 429 拒绝,直到窗口重置。 |
每个限流字段都是可选的。省略某个字段时,AISIX 不会执行对应限制。
请使用请求速率限制或 concurrency 限制 A2A 调用量。仅配置 Token 限制不会限制 A2A 调用数量。
完整的限流字段参考和计数器存储选项请参见 API Key 与模型限流。
配置限流
通过 AISIX Cloud Admin API 配置限制。请使用组织对应的控制面 URL、环境 ID 和具有写权限的 Admin Token。对于本地部署,请先完成 AISIX Cloud 快速入门;如需申请混合云访问权限,请联系 API7。然后设置:
export AISIX_CP="http://localhost:8080/api"
export AISIX_TOKEN="YOUR_ADMIN_TOKEN"
export ENV_ID="YOUR_ENVIRONMENT_ID"
创建带有 rate_limit 的调用方 API Key。下面的示例继续让该 Key 仅用于 Agent 访问,并将其限制为每分钟 1 次 A2A 调用。响应会在 plaintext 字段中返回且只返回一次明文 Bearer Key;该命令会捕获它,用于后续验证:
export AISIX_API_KEY=$(curl -sS -X POST "$AISIX_CP/environments/$ENV_ID/api_keys" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_name": "a2a-rate-limited-caller",
"allowed_models": [],
"allowed_agents": ["invoice-processor"],
"rate_limit": {
"rpm": 1
}
}' | jq -r '.plaintext')
❶ 当该 Key 仅用于 A2A 流量时,请使用空的模型允许列表。
❷ rpm: 1 将该调用方 API Key 限制为每分钟一次请求。
要为现有 Key 添加或修改限制,请在 PATCH $AISIX_CP/environments/$ENV_ID/api_keys/YOUR_API_KEY_ID 请求中发送相同的 rate_limit 对象;发送 null 可清除限制。更改会自动投射到已挂载的网关。
要验证限制,请在同一分钟内调用该 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 "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 Cloud 预算
预算在 AISIX Cloud 控制面中配置,并由 AISIX 网关执行。当覆盖某个调用方 API Key 的预算已耗尽时,网关会在联系上游 Agent 之前,以 budget_exceeded 错误拒绝该 Key 的 A2A 调用。这个检查与模型路径使用相同的预算机制。
A2A 调用没有成本,因此本身不会增加基于 Token 的花费。但如果该调用方的模型流量已经耗尽预算,同一个调用方 API Key 的 A2A 调用也会被阻断,因为二者共用同一个 Key 和预算边界。预算目标、拒绝响应和缓存行为请参见预算。
独立部署中,请使用调用方 API Key 限流来治理 A2A 调用量。预算配置详情请参见预算。
下一步
你现在已将调用方 API Key 控制应用到 A2A 流量。使 用以下指南观察结果或调整共享流量控制设置:
- 可观测性:查看 A2A 调用产生的用量事件和指标。
- 控制 Agent 访问:将调用方 API Key 的权限限定为特定 Agent 或全部 Agent。
- API Key 与模型限流:查看完整的限流字段和计数器存储选项。
- 预算:配置预算目标、拒绝行为和缓存设置。