langchain_core.rate_limiters.InMemoryRateLimiter

class langchain_core.rate_limiters.InMemoryRateLimiter(*, requests_per_second: float = 1, check_every_n_seconds: float = 0.1, max_bucket_size: float = 1)[source]

测试版

自 0.2.24 版本引入。API 可能会更改。

基于令牌桶算法的内存速率限制器。

这是一个内存速率限制器,因此它无法跨不同进程进行速率限制。

速率限制器只允许基于时间的速率限制,不考虑任何关于输入或输出的信息,因此不能用于基于请求大小的速率限制。

它是线程安全的,可以在同步或异步上下文中使用。

内存速率限制器基于令牌桶。以一定的速率向桶中填充令牌。每个请求消耗一个令牌。如果桶中没有足够的令牌,请求将被阻塞,直到有足够的令牌为止。

这些 令牌 与 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-3-opus-20240229",
    rate_limiter=rate_limiter
)

for _ in range(5):
    tic = time.time()
    model.invoke("hello")
    toc = time.time()
    print(toc - tic)

新功能自 0.2.24 版本。

基于令牌桶的速率限制器。

这些 令牌 与 LLM 令牌无关。它们只是跟踪在给定时间内可以发出多少请求的一种方式。

此速率限制器旨在在多线程环境中工作。

它通过以一定的速率将令牌填充到桶中来工作。每个请求消耗一定数量的令牌。如果桶中没有足够的令牌,请求将被阻塞,直到有足够的令牌为止。

参数
  • requests_per_second (float) – 每秒添加到桶中的令牌数量。必须是至少 1。令牌代表可以使用的“信用”来发出请求。

  • check_every_n_seconds (float) – 每隔这么多秒检查一次令牌是否可用。可以是表示秒分数的浮点数。

  • max_bucket_size (float) – 桶中可以有的最大令牌数量。这用于防止请求突增。

方法

__init__(*[, requests_per_second, ...])

基于令牌桶的速率限制器。

aacquire(*[, blocking])

尝试从速率限制器获取令牌。

acquire(*[, blocking])

尝试从速率限制器获取令牌。

__init__(*, requests_per_second: float = 1, check_every_n_seconds: float = 0.1, max_bucket_size: float = 1) None[source]

基于令牌桶的速率限制器。

这些 令牌 与 LLM 令牌无关。它们只是跟踪在给定时间内可以发出多少请求的一种方式。

此速率限制器旨在在多线程环境中工作。

它通过以一定的速率将令牌填充到桶中来工作。每个请求消耗一定数量的令牌。如果桶中没有足够的令牌,请求将被阻塞,直到有足够的令牌为止。

参数
  • requests_per_second (float) – 每秒添加到桶中的令牌数量。必须是至少 1。令牌代表可以使用的“信用”来发出请求。

  • check_every_n_seconds (float) – 每隔这么多秒检查一次令牌是否可用。可以是表示秒分数的浮点数。

  • max_bucket_size (float) – 桶中可以有的最大令牌数量。这用于防止请求突增。

返回类型

None

async aacquire(*, blocking: bool = True) bool[source]

尝试从速率限制器中获取令牌。异步版本。

如果将blocking设置为True,此方法将阻止程序直到所需的令牌可用。

如果将blocking设置为False,则该方法将立即返回尝试获取令牌的结果。

参数

blocking (bool) – 如果为True,则方法将阻塞直到令牌可用。如果为False,则方法将立即返回尝试的结果。默认为True。

返回

如果成功获取令牌,则返回True,否则返回False。

返回类型

bool

acquire(*, blocking: bool = True) bool[source]

尝试从速率限制器获取令牌。

如果将blocking设置为True,此方法将阻止程序直到所需的令牌可用。

如果将blocking设置为False,则该方法将立即返回尝试获取令牌的结果。

参数

blocking (bool) – 如果为True,则方法将阻塞直到令牌可用。如果为False,则方法将立即返回尝试的结果。默认为True。

返回

如果成功获取令牌,则返回True,否则返回False。

返回类型

bool