限流
限制是为了不让某一个调用方挤占其他人。每一种限制被触发时,返回的信息都足以让你采取行动。
请求
| 限制 | 适用对象 |
|---|---|
| 每分钟 300 个请求 | 每个调用方:按终端用户(令牌)计算,否则按客户端地址计算——包括项目密钥的调用。 |
| 每分钟 60 次上传 | 每个调用方的文件上传,在请求限制之外另算。 |
超过限制的请求会被拒绝,返回 429 rate_limited,并带上 Retry-After 响应头,给出需要等待的秒数。等待相应时间后重试即可。
进行中的工作
| 限制 | 超出时 |
|---|---|
| 每个会话一次只运行一个任务。 会话一次只回答一条消息。 | 任务运行时发送新消息:409 session_busy。等任务结束,或先停止它。 |
每个项目同时运行的任务数。 一个项目同时最多运行一定数量的任务(其 concurrent_tasks_max,控制台可见)。 | 429 rate_limited,带 Retry-After。 |
| 每个终端用户最多三个未完成的生成。 图片、视频和音乐合并计算。 | 429 rate_limited,带 Retry-After。等其中一个完成。 |
| 每个终端用户最多 16 条事件流,每个会话最多 4 条。 | 超过任一上限时,新的事件流会顶替最早的一条:先结束该会话最早的一条,否则结束该终端用户最早的一条。只有该终端用户的所有事件流都是最近 10 秒内打开的,新的事件流才会被拒绝,返回 429 rate_limited;请几秒后重试。服务整体的事件流已满时,新的事件流会被拒绝,返回 503 service_unavailable;请稍后重试。 |
积分
启动工作——一条消息、一次生成、一次转写、一个语音会话——需要项目的计费账户有可用余额。没有余额时请求会被直接拒绝,返回 429 insufficient_credits,而且不带 Retry-After:在项目加上积分之前,重试也没有用。正在运行的任务若积分耗尽,会以 task.failed 帧结束,其 error.code 为 insufficient_credits。
429 insufficient_available_credits 表示项目还有积分,但都被进行中的工作占用了。这些工作完成后就会恢复。
正确地重试
- 有
Retry-After时按它等待。 - 否则用带随机抖动的指数退避,并限制重试次数。
- 对会启动工作的请求带上
Idempotency-Key,这样超时后的重试永远不会把同一件工作启动两次。