跳到主要内容
运行大型评估作业时,一个常见问题是遇到第三方 API 速率限制,通常来自模型提供商。有几种方法可以处理速率限制。

使用 langchain 速率限制器(仅限 Python)

如果您在应用程序或评估器中使用 langchain Python 聊天模型,您可以为您的模型添加速率限制器,这将增加客户端对发送到模型提供商 API 请求频率的控制,以避免速率限制错误。
from langchain.chat_models import init_chat_model
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.
)

model = init_chat_model("gpt-4o", rate_limiter=rate_limiter)

def app(inputs: dict) -> dict:
    response = model.invoke(...)
    ...

def evaluator(inputs: dict, outputs: dict, reference_outputs: dict) -> dict:
    response = model.invoke(...)
    ...
有关如何配置速率限制器的更多信息,请参阅 langchain 文档。

通过指数退避重试

处理速率限制错误的一种非常常见的方法是使用指数退避重试。使用指数退避重试意味着重复重试失败的请求,并在每次重试之间增加(指数式)等待时间。这会一直持续到请求成功或达到最大请求次数。

使用 langchain

如果您正在使用 langchain 组件,您可以使用 .with_retry(...) / .withRetry() 方法向所有模型调用添加重试。
from langchain import init_chat_model

model_with_retry = init_chat_model("gpt-4o-mini").with_retry(stop_after_attempt=6)
有关更多信息,请参阅 langchain PythonJS API 参考。

不使用 langchain

如果您不使用 langchain,您可以使用其他库,例如 tenacity (Python) 或 backoff (Python) 来实现带有指数退避的重试,或者您可以从头开始实现。请参阅 OpenAI 文档 中如何执行此操作的一些示例。

限制 max_concurrency

限制您对应用程序和评估器的并发调用次数是另一种减少模型调用频率并从而避免速率限制错误的方法。max_concurrency 可以直接在 evaluate() / aevaluate() 函数上设置。这通过有效地将数据集分布在不同线程上,从而并行化评估。
from langsmith import aevaluate

results = await aevaluate(
    ...
    max_concurrency=4,
)

以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。
© . This site is unofficial and not affiliated with LangChain, Inc.