TensorFusion Docs

限流与配额

按 API Key / 组织维度的速率与配额限制,429 与 retry-after 处理。

无界模型云(Wujie Model Cloud)在每个能力路由(LLM / 图像 / ASR / TTS / OCR)处理请求之前统一做限流检查(checkGatewayLimit),保护后端容量并约束组织用量。

私有化部署的限流机制一致,阈值在自有控制台内管理 → 企业私有化部署

限流维度

限流按以下维度组合判定,具体配额与告警阈值在控制台管理:

  • API Key:每个 Key 独立的速率 / 配额,便于按应用隔离、审计和停用。
  • 组织:组织级总额度与预算(余额 / 配额驱动),跨该组织所有 Key 汇总。
  • 应用配置:控制台为不同用途配置不同限额与告警。

给不同应用使用不同的 API Key,既能隔离限流域,也方便审计与停用。配额、告警与预算的具体数值以控制台展示为准。

触发限流:429

请求被限流时返回 429,错误 typerate_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 返回:被限流时不会进入流式响应,而是直接返回 429 JSON 错误体。
  • 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 resp
async 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)。

目录