Skip to main content
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