Rate Limit

限流

每分钟请求数 / token 数上限,触发要退避重试。

详解

Rate Limit(限流)是 LLM API 服务商对使用量设置的双维度上限:RPM(Requests Per Minute,每分钟请求数)和 TPM(Tokens Per Minute,每分钟 token 数)。两个维度同时独立计算,任何一个超限都会触发 HTTP 429 错误(Too Many Requests)。Anthropic 不同 workspace tier 的限制差异很大,具体数值要以控制台和官方文档为准。触发限流后,正确做法是退避重试(见 fallback-retry):读取响应头里的 retry-after 字段确认要等多久,或按指数退避策略自行等待。工程上预防限流比响应限流更重要:用信号量控制并发数量,提前用 client.messages.count_tokens() 估算请求大小;对大批量离线任务使用 Batch API,可获得异步处理和约 50% 成本折扣,但它也有自己的批处理与队列限制。

一个类比
像高速公路的收费站:每分钟只能放行固定数量的车辆(RPM)和总载重(TPM)。你的车队太大、同时冲卡,闸机就锁死报错,必须在路边等一会儿再排队进入。聪明的司机会提前按收费站的节奏分批发车,而不是一窝蜂全部堵在闸机前。
举个例子
import anthropic, time

client = anthropic.Anthropic()

def call_with_retry(prompt: str, max_retries: int = 4) -> str:
    wait = 1  # 初始等待秒数
    for attempt in range(max_retries):
        try:
            resp = client.messages.create(
                model="claude-sonnet-4-6",
                max_tokens=128,
                messages=[{"role": "user", "content": prompt}]
            )
            return resp.content[0].text
        except anthropic.RateLimitError as e:
            if attempt == max_retries - 1:
                raise
            print(f"触发限流,等待 {wait}s 后重试...")
            time.sleep(wait)
            wait *= 2  # 指数退避:1→2→4→8 秒
    return ""

result = call_with_retry("用一句话解释 RPM 限流")
print(result)
PYTHON 示例
相关概念