速率限制器
langchain_core.rate_limiters.BaseRateLimiter ¶
langchain_core.rate_limiters.InMemoryRateLimiter ¶
Bases: BaseRateLimiter
一个基于令牌桶算法的内存速率限制器。
这是一个内存速率限制器,因此它无法跨不同进程进行速率限制。
该速率限制器只允许基于时间的速率限制,不考虑任何关于输入或输出的信息,因此不能用于根据请求的大小进行速率限制。
它是线程安全的,可以在同步或异步上下文中使用。
内存速率限制器基于令牌桶。桶以给定的速率填充令牌。每个请求消耗一个令牌。如果桶中没有足够的令牌,请求将被阻塞,直到有足够的令牌。
这些令牌与 LLM 的令牌无关。它们只是一种跟踪在给定时间内可以发出多少请求的方式。
当前限制
- 该速率限制器并非为跨不同进程工作而设计。它是一个内存中的速率限制器,但它是线程安全的。
- 该速率限制器仅支持基于时间的速率限制。它不考虑请求的大小或任何其他因素。
示例
import time
from langchain_core.rate_limiters import InMemoryRateLimiter
rate_limiter = InMemoryRateLimiter(
requests_per_second=0.1, # <-- 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.
)
from langchain_anthropic import ChatAnthropic
model = ChatAnthropic(
model_name="claude-sonnet-4-5-20250929", rate_limiter=rate_limiter
)
for _ in range(5):
tic = time.time()
model.invoke("hello")
toc = time.time()
print(toc - tic)
| 方法 | 描述 |
|---|---|
__init__ |
一个基于令牌桶的速率限制器。 |
acquire |
尝试从速率限制器获取一个令牌。 |
aacquire |
尝试从速率限制器获取一个令牌。异步版本。 |
__init__ ¶
__init__(
*,
requests_per_second: float = 1,
check_every_n_seconds: float = 0.1,
max_bucket_size: float = 1,
) -> None
一个基于令牌桶的速率限制器。
这些令牌与 LLM 的令牌无关。它们只是一种跟踪在给定时间内可以发出多少请求的方式。
此速率限制器设计用于在多线程环境中工作。
它通过以给定速率向桶中填充令牌来工作。每个请求消耗给定数量的令牌。如果桶中没有足够的令牌,请求将被阻塞,直到有足够的令牌。
| 参数 | 描述 |
|---|---|
requests_per_second
|
每秒向桶中添加的令牌数量。令牌代表可用于发出请求的“信用”。
类型: |
check_every_n_seconds
|
每隔这么多秒检查一次令牌是否可用。可以是浮点数以表示秒的小数部分。
类型: |
max_bucket_size
|
桶中可以容纳的最大令牌数。必须至少为 `1`。用于防止请求的突发。
类型: |