速率限制
一个 Agent 能同时运行多少调用、能发起多少调用,如何读取等待时间,以及如何不超出限制。
限制按 Agent(或账户)计算,而不是按密钥计算:多建密钥并不会放宽限制。被拒绝的调用始终免费,也不会计入限制。
- Calls running at once
- 8 per agent
- The 9th waits for one to finish
- Calls started
- 600 a minute per agent
- Up to 60 at once after a quiet spell, then one every 100 ms
- Request body
- 4 MB
- Send images and files as URLs
- Streamed call
- 30 minutes
- Ends with a clean error event, charged for what was written
- Call that isn't streamed
- 13 minutes
- Stream anything long
- Smallest reserve
- $0.001
- Every paid call holds at least this while it runs
- Active keys
- 10 per agent or account
- Revoke one to make room
- Key spending limit
- $0.01 to $1,000,000
- Per day, week or month, reset at 00:00 UTC
- Waits we name
- 1 to 60 s
- In Retry-After and Retry-After-Ms, plus up to a fifth at random
试一试
先发起几个调用试试。
你可能遇到的限制
同时运行 8 个调用。第 9 个会被拒绝,返回 429 too_many_running_calls,并附带 2 到 8 秒的等待时间。等待时间是错开的,所以一批被拒绝的调用不会同时重新发起。任意一个调用结束,就会立刻空出一个名额。
每分钟发起 600 个调用。调用的发起按时间表错开:每 100 毫秒一个,空闲一段时间后最多可以一次发起 60 个。超过这个速度会被拒绝,返回 429 rate_limited 和确切的等待时间。
同时预留的金额最多为每日容量的四分之一。每个运行中的调用在计价之前,都会预留它最坏情况下的费用。一个 Agent 的调用同时最多只能预留网关每日容量的四分之一,这样任何单个 Agent 都无法挤占其他人。超出之后,调用会被拒绝,返回 429 too_much_reserved,并附带 2 到 8 秒的等待时间。如果单个请求自身的预留金额就超过这个上限,会返回 400 request_over_capacity。
免费模型:每分钟发起 5 个,每个 UTC 日 50 个,同时 2 个。这些只计算对免费模型的调用,并且是在上面各项限制之外的。全站还有一份所有 Agent 共享的免费调用每日限制。超出任意一项,免费调用都会被拒绝,返回 429 free_limit,错误消息会说明是哪一项限制,以及何时恢复。付费模型从不受它们影响。
如果调用耗时一秒或更长,你通常最先碰到的是 8 个调用的限制。大量极短的调用要注意速率,输出上限很高的调用要注意预留金额。
读取响应头
每个 429 和 503 都会给出等待时间:
HTTP/1.1 429 Too Many Requests
retry-after: 2
retry-after-ms: 1180retry-after-ms是精确值;retry-after是同样的时间,以整秒表示。- 等待时间从 1 秒到 60 秒不等。我们会随机加上最多五分之一,这样收到相同等待时间的客户端不会同时重新发起请求。
- OpenAI 和 Anthropic 的 SDK 会读取这些响应头,并自动等待。
繁忙日
所有 Agent 共享每天的 AI 容量。当其中 80% 已被用掉时,今天已经用完自己公平份额的 Agent 会收到 429 daily_share_used,需要等到 UTC 时间 00:00,这样剩下的容量留给所有人。这种情况很少见,增加容量后会更早解除。
不超出限制
- 在你这边排队。每个 Agent 同时最多运行 8 个调用。一个简单的信号量就能做到。
- 使用流式输出。流式调用占用名额的时间和其他调用一样长,但在慢速网络上更不容易失败。
- 只请求你需要的输出。
max_tokens越低,预留金额越小,能同时运行的调用就越多。 - 及时读取返回的内容。如果客户端停止读取超过 90 秒,调用会被结束,并按模型已生成的内容扣费。
- 让 SDK 来重试。它已经会遵循
Retry-After-Ms。参见重试。