速率限制
速率限制
Lawbot AI API 對每個 API 金鑰設有速率限制,以確保服務穩定性。 了解限制規則有助於您設計穩健的整合策略。
限制類型
RPM(每分鐘請求數)
在 60 秒滾動時窗內允許的最大 HTTP 請求次數。
TPM(每分鐘 Token 數)
在 60 秒滾動時窗內允許消耗的最大 Token 總量(輸入 + 輸出)。
方案限制對照
| 方案 | RPM | TPM | 每日請求上限 |
|---|---|---|---|
| 基本方案 | 60 | 150,000 | 10,000 |
| 標準方案 | 200 | 500,000 | 100,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-tokens | Token 限制重置的剩餘時間 |
讀取速率限制 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)遇到 HTTP 429 時,請依據
x-ratelimit-reset-requests header 所示的時間等待後再重試,避免連續發送請求造成更長的封鎖時間。