如何处理速率限制
你可能会遇到这样的情况,即由于发送了过多的请求,你被模型提供商的 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