速率限制

速率限制

Lawbot AI API 對每個 API 金鑰設有速率限制,以確保服務穩定性。 了解限制規則有助於您設計穩健的整合策略。

限制類型

RPM(每分鐘請求數)

在 60 秒滾動時窗內允許的最大 HTTP 請求次數。

TPM(每分鐘 Token 數)

在 60 秒滾動時窗內允許消耗的最大 Token 總量(輸入 + 輸出)。

方案限制對照

方案RPMTPM每日請求上限
基本方案60150,00010,000
標準方案200500,000100,000
企業方案自訂自訂自訂

* 以上為參考數值,實際限制依合約約定為準。如需提升配額,請聯絡 Lawbot 業務團隊。

回應 Headers

每個成功的 API 回應都包含速率限制相關 headers,可用於監控目前用量:

response_headers.txt
HTTP/1.1 200 OK
x-ratelimit-limit-requests: 60
x-ratelimit-limit-tokens: 150000
x-ratelimit-remaining-requests: 58
x-ratelimit-remaining-tokens: 148230
x-ratelimit-reset-requests: 2s
x-ratelimit-reset-tokens: 1.2s
Header說明
x-ratelimit-limit-requests當前時窗內的最大請求數限制
x-ratelimit-limit-tokens當前時窗內的最大 Token 限制
x-ratelimit-remaining-requests當前時窗內剩餘可用請求數
x-ratelimit-remaining-tokens當前時窗內剩餘可用 Token 數
x-ratelimit-reset-requests請求數限制重置的剩餘時間
x-ratelimit-reset-tokensToken 限制重置的剩餘時間

讀取速率限制 Headers

check_rate_limit.py
import openai

client = openai.OpenAI(
    api_key="YOUR_API_KEY",
    base_url="http://127.0.0.1:8000",
)

# 透過 with_raw_response 取得完整 HTTP headers
with client.chat.completions.with_raw_response.create(
    model="lawbot-pro",
    messages=[{"role": "user", "content": "..."}],
) as response:
    # 讀取速率限制 headers
    remaining = response.headers.get("x-ratelimit-remaining-requests")
    reset_in = response.headers.get("x-ratelimit-reset-requests")
    print(f"剩餘請求數:{remaining},重置時間:{reset_in}")

    # 取得回應內容
    completion = response.parse()
    print(completion.choices[0].message.content)

自動重試處理器

rate_limit_handler.py
import time
import openai

class RateLimitHandler:
    """自動處理速率限制的包裝器"""

    def __init__(self, client: openai.OpenAI):
        self.client = client

    def create(self, **kwargs):
        max_retries = 5
        for attempt in range(max_retries):
            try:
                return self.client.chat.completions.create(**kwargs)
            except openai.RateLimitError as e:
                if attempt == max_retries - 1:
                    raise

                # 從 header 取得重置時間
                reset_time = float(
                    getattr(e.response, "headers", {}).get(
                        "x-ratelimit-reset-requests", "1"
                    ).rstrip("s")
                )
                wait = reset_time + 0.1  # 略加緩衝
                print(f"速率限制,等待 {wait:.1f} 秒重試...")
                time.sleep(wait)