跳到主要內容
Open In ColabOpen on GitHub

如何處理速率限制

先決條件

本指南假設您熟悉以下概念

您可能會發現自己因為向模型提供商 API 發出過多請求而受到速率限制。

例如,如果您運行許多平行查詢來基準測試測試資料集上的聊天模型,則可能會發生這種情況。

如果您遇到這種情況,您可以使用速率限制器來幫助將您發出請求的速率與 API 允許的速率相匹配。

需要 langchain-core >= 0.2.24

此功能已在 langchain-core == 0.2.24 中新增。請確保您的套件是最新的。

初始化速率限制器

Langchain 帶有一個內建的記憶體速率限制器。此速率限制器是線程安全的,可以由同一進程中的多個線程共享。

提供的速率限制器只能限制每個單位時間的請求數量。如果您需要根據請求的大小進行限制,它將無濟於事。

from langchain_core.rate_limiters import InMemoryRateLimiter

rate_limiter = InMemoryRateLimiter(
requests_per_second=0.1, # <-- Super slow! We can only make a request once every 10 seconds!!
check_every_n_seconds=0.1, # Wake up every 100 ms to check whether allowed to make a request,
max_bucket_size=10, # Controls the maximum burst size.
)
API 參考:InMemoryRateLimiter

選擇模型

選擇任何模型,並透過 rate_limiter 屬性將速率限制器傳遞給它。

import os
import time
from getpass import getpass

if "ANTHROPIC_API_KEY" not in os.environ:
os.environ["ANTHROPIC_API_KEY"] = getpass()


from langchain_anthropic import ChatAnthropic

model = ChatAnthropic(model_name="claude-3-opus-20240229", rate_limiter=rate_limiter)
API 參考:ChatAnthropic

讓我們確認速率限制器是否正常運作。我們應該只能每 10 秒調用模型一次。

for _ in range(5):
tic = time.time()
model.invoke("hello")
toc = time.time()
print(toc - tic)
11.599073648452759
10.7502121925354
10.244257926940918
8.83088755607605
11.645203590393066

此頁面是否對您有幫助?