内存速率限制器#

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可能会发生变化。

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

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

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

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

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

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

当前限制:

  • 速率限制器不设计用于跨不同进程工作。它是一个内存中的速率限制器,但它是线程安全的。

  • 速率限制器仅支持基于时间的速率限制。它不考虑请求的大小或任何其他因素。

示例

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中添加。

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

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

此速率限制器设计用于线程环境中工作。

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

Parameters:
  • 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]#

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

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

此速率限制器设计用于线程环境中工作。

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

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

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

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

Return type:

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

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

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

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

Parameters:

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

Returns:

如果成功获取了令牌,则为True,否则为False。

Return type:

布尔

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

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

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

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

Parameters:

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

Returns:

如果成功获取了令牌,则为True,否则为False。

Return type:

布尔

使用 InMemoryRateLimiter 的示例