限流与配额
为保证各账户之间公平使用平台产能,开放 API 对提交任务设有并发和速率限制,对请求本身设有大小限制。
| 限制 | 默认值 | 计算范围 | 超出时 |
|---|---|---|---|
| 同时进行的任务数 | 5 | 账户内状态为 queued、dispatching、running 的任务 |
提交返回 1024 |
| 每分钟提交次数 | 120 | 账户内最近 60 秒提交的任务(滚动窗口) | 提交返回 1025 |
| API Key 数量 | 10 | 账户内未删除的 Key(含停用、过期的) | 控制台无法创建新 Key |
| 请求体大小 | 64 KiB | 单个请求 | 返回 1001 |
query 长度 |
4096 个字符 | 单个任务 | 返回 1001 |
wait_seconds |
0–120 秒 | 单个请求 | 返回 1001 |
任务列表 page_size |
最大 100 | 单个请求 | 返回 1001 |
- 你账户当前生效的并发、每分钟请求数和 Key 数量上限,以控制台「用量统计 → 额度与限制」显示为准。需要更高的额度请联系商务。
- 限制按账户计算:同一账户下所有 API Key、MCP 调用和控制台的在线调试共享这些额度。
- 只有提交任务计入并发和速率。 查询平台列表、查询任务、任务列表不占用这两项额度,但请保持合理的轮询频率(建议每个任务 15 秒查一次)。
- 被限流拒绝的提交不会创建任务,也不扣点数,等待后重试是安全的。
并发上限的口径
Section titled “并发上限的口径”并发只统计 queued、dispatching、running 三种状态,不包括 pending(已派发、在平台队列中排队)。也就是说:
- 提交后,任务一旦被派发进入
pending,就不再占用并发额度。 - 大量 P2 任务在平台繁忙时长时间
pending,不会把你的并发额度占满。 - 真正占用额度的是「刚提交还没派发」和「正在执行」的任务。
在客户端控制速率
Section titled “在客户端控制速率”批量提交时,与其等服务端拒绝,不如在客户端主动控制:
- 节流:两次提交之间留出间隔,让每分钟提交数低于上限(例如每 0.6 秒最多提交一个)。
- 遇到
1024/1025时退避:暂停一段时间(如 15 秒起,逐次加倍)后再提交同一个任务。 - 提交和轮询分开:用一个队列负责提交,另一个定时循环批量查询未结束的任务。
# 依次提交一批问题:主动节流,遇到限流时退避重试import time
SUBMIT_INTERVAL = 0.6 # 秒,约每分钟 100 次
def submit_batch(platform, queries): task_ids = [] for query in queries: delay = 15 while True: try: task = post("/task/submit", {"platform": platform, "query": query}) task_ids.append(task["task_id"]) break except MaxAEOError as e: if e.ret not in (1024, 1025): raise time.sleep(delay) # 没有创建任务,等待后重试同一个问题 delay = min(delay * 2, 120) time.sleep(SUBMIT_INTERVAL) return task_ids// 依次提交一批问题:主动节流,遇到限流时退避重试const SUBMIT_INTERVAL = 600; // 毫秒,约每分钟 100 次
async function submitBatch(platform, queries) { const taskIds = []; for (const query of queries) { let delay = 15_000; for (;;) { try { const task = await post("/task/submit", { platform, query }); taskIds.push(task.task_id); break; } catch (e) { if (!(e instanceof MaxAEOError) || (e.ret !== 1024 && e.ret !== 1025)) throw e; await sleep(delay); // 没有创建任务,等待后重试同一个问题 delay = Math.min(delay * 2, 120_000); } } await sleep(SUBMIT_INTERVAL); } return taskIds;}示例中的 post、MaxAEOError、sleep 见错误处理。生产环境里,提交遇到超时或 -1 时还要按该页的方法先确认任务是否已创建。
