Skip to main content

如何处理模型速率限制

运行大规模评估任务时,一个常见问题是遇到第三方 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.
)

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

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

def evaluator(inputs: dict, outputs: dict, reference_outputs: dict) -> dict:
response = llm.invoke(...)
...

有关如何配置速率限制器的更多信息,请参阅 LangChain 文档。

使用指数退避重试

处理速率限制错误的一种非常常见的方法是采用指数退避重试。 指数退避重试是指对失败的请求反复进行重试,且每次重试之间的等待时间呈(指数级)递增。 该过程会持续进行,直至请求成功,或达到最大重试次数为止。

使用 langchain

如果您使用了 langchain 个组件,可以通过 .with_retry(...) / .withRetry() 方法为所有模型调用添加重试机制:

from langchain import init_chat_model

llm_with_retry = init_chat_model("gpt-4o-mini").with_retry(stop_after_attempt=6)

请参阅 langchain 版本的 PythonJavaScript API 参考文档以了解更多信息。

不使用 langchain

如果您未使用 langchain,则可以使用其他库(例如 tenacity(Python)或 backoff(Python))来实现带指数退避的重试机制,或者您也可以从零开始自行实现。 请参阅 OpenAI 文档 中的相关示例。

限制最大并发数

限制应用程序及评估器的并发调用数量,是降低模型调用频率的另一种方法,从而避免触发速率限制错误。 可直接在 evaluate() / aevaluate() 函数中将并发数设为 max_concurrency。 这将通过在线程间分发数据集的方式实现评估过程的并行化。

from langsmith import aevaluate

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

这个页面对你有帮助吗?


您可以留下详细的反馈 在 GitHub 上.