跳到主要内容

限流与预算

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