限流与配额
按 API Key / 组织维度的速率与配额限制,429 与 retry-after 处理。
无界模型云(Wujie Model Cloud)在每个能力路由(LLM / 图像 / ASR / TTS / OCR)处理请求之前统一做限流检查(checkGatewayLimit),保护后端容量并约束组织用量。
私有化部署的限流机制一致,阈值在自有控制台内管理 → 企业私有化部署。
限流维度
限流按以下维度组合判定,具体配额与告警阈值在控制台管理:
- API Key:每个 Key 独立的速率 / 配额,便于按应用隔离、审计和停用。
- 组织:组织级总额度与预算(余额 / 配额驱动),跨该组织所有 Key 汇总。
- 应用配置:控制台为不同用途配置不同限额与告警。
给不同应用使用不同的 API Key,既能隔离限流域,也方便审计与停用。配额、告警与预算的具体数值以控制台展示为准。
触发限流:429
请求被限流时返回 429,错误 type 为 rate_limit_exceeded,并在响应头 retry-after 给出建议等待秒数:
HTTP/1.1 429 Too Many Requests
retry-after: 12
content-type: application/json{
"error": {
"message": "rate limit exceeded",
"type": "rate_limit_exceeded"
}
}- 流式请求同样以
429返回:被限流时不会进入流式响应,而是直接返回429JSON 错误体。 - TTS 等能力的限流错误同样携带
retry-after。
退避重试
客户端必须读取 retry-after 头退避后再重试,不要无退避反复重试——盲目重试会持续撞限流、放大故障,且无法更快成功。
# 命中 429 时,读取 retry-after 头并 sleep 对应秒数后重试
resp=$(curl -s -D - -o /dev/null "https://api.tos.run/v1/chat/completions" \
-H "Authorization: Bearer $TOS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"qwen-plus","provider":"dashscope","messages":[{"role":"user","content":"hi"}]}')
echo "$resp" | grep -i '^retry-after:'import os, time, requests
def call_with_retry(payload, max_retries=3):
url = "https://api.tos.run/v1/chat/completions"
headers = {"Authorization": f"Bearer {os.environ['TOS_API_KEY']}"}
for attempt in range(max_retries + 1):
resp = requests.post(url, headers=headers, json=payload)
if resp.status_code != 429:
return resp
# 读取 retry-after 头退避;缺省回退到指数退避
wait = int(resp.headers.get("retry-after", 2 ** attempt))
time.sleep(wait)
return respasync function callWithRetry(payload, maxRetries = 3) {
const url = "https://api.tos.run/v1/chat/completions";
const headers = {
Authorization: `Bearer ${process.env.TOS_API_KEY}`,
"Content-Type": "application/json",
};
for (let attempt = 0; attempt <= maxRetries; attempt++) {
const resp = await fetch(url, {
method: "POST",
headers,
body: JSON.stringify(payload),
});
if (resp.status !== 429) return resp;
const wait = Number(resp.headers.get("retry-after") ?? 2 ** attempt);
await new Promise((r) => setTimeout(r, wait * 1000));
}
}容量规划建议
- 先按真实业务样本估算 token / 张数 / 时长,再在控制台设置额度与告警。工具调用、检索上下文与推理(扩展思考)token 都要纳入预算(见 价格与计费)。
- 把并发与重试集中到一处(如上面的
callWithRetry),统一遵守retry-after。 - 图像 / 长上下文等长请求建议客户端超时 ≥ 600s,并区分
429(退避重试)与瞬时5xx(有限次重试),详见 错误码与错误处理。
所有示例的 Base 都使用 API 数据面 https://api.tos.run(不是控制台 https://ai.tos.run)。