跳转到内容

速率限制器

langchain_core.rate_limiters.BaseRateLimiter

基类: ABC

速率限制器的基类。

根据运行环境是同步还是异步,通过 acquire 和 aacquire 方法来使用基础限制器。

实现类可以在其初始化方法中自由添加 timeout 参数,以便用户在使用阻塞式调用时,可以指定获取必要令牌的超时时间。

当前限制

  • 速率限制信息不会在追踪或回调中显示。这意味着调用聊天模型的总时间将包含等待令牌的时间和发出请求的时间。
方法 描述
acquire

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

aacquire

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

acquire abstractmethod

acquire(*, blocking: bool = True) -> bool

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

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

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

参数 描述
blocking

如果为 `True`,该方法将阻塞直到令牌可用。如果为 `False`,该方法将立即返回尝试结果。

类型: bool 默认值: True

返回 描述
bool

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

aacquire abstractmethod async

aacquire(*, blocking: bool = True) -> bool

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

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

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

参数 描述
blocking

如果为 `True`,该方法将阻塞直到令牌可用。如果为 `False`,该方法将立即返回尝试结果。

类型: bool 默认值: True

返回 描述
bool

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

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

每秒向桶中添加的令牌数量。令牌代表可用于发出请求的“信用”。

类型: float 默认值: 1

check_every_n_seconds

每隔这么多秒检查一次令牌是否可用。可以是浮点数以表示秒的小数部分。

类型: float 默认值: 0.1

max_bucket_size

桶中可以容纳的最大令牌数。必须至少为 `1`。用于防止请求的突发。

类型: float 默认值: 1

acquire

acquire(*, blocking: bool = True) -> bool

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

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

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

参数 描述
blocking

如果为 `True`,该方法将阻塞直到令牌可用。如果为 `False`,该方法将立即返回尝试结果。

类型: bool 默认值: True

返回 描述
bool

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

aacquire async

aacquire(*, blocking: bool = True) -> bool

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

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

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

参数 描述
blocking

如果为 `True`,该方法将阻塞直到令牌可用。如果为 `False`,该方法将立即返回尝试结果。

类型: bool 默认值: True

返回 描述
bool

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

© . This site is unofficial and not affiliated with LangChain, Inc.