在调用大模型 API 时,高频请求很容易触发平台的限流机制,导致请求失败或账号被临时限制。今天就来分享一个基于 LangChain 实现的 API 速率限制方案,以 DeepSeek 模型为例,手把手教你给 API 调用加上 “节流阀”,保证请求稳定又合规。

核心需求:为什么需要速率限制?

无论是 DeepSeek 还是其他大模型平台,都会对 API 调用频率设置限制(比如每秒最大请求数、每分钟请求上限)。如果我们的程序短时间内发起大量请求,很容易触发限流,表现为:

  • 请求返回 429 Too Many Requests 错误
  • 部分请求超时或被丢弃
  • 严重时账号会被临时封禁

LangChain 提供了 InMemoryRateLimiter 工具,可以轻松实现请求频率的控制,避免上述问题。

实战代码:给 DeepSeek 配置速率限制

我们直接上完整代码,再逐行拆解核心参数的作用:

from langchain_core.rate_limiters import InMemoryRateLimiter
# 假设 init_chat_model 是你封装的 LangChain 1.0 模型初始化函数
from your_module import init_chat_model

# 速率限制:控制API调用频率,防止超出接口限流
rate_limiter = InMemoryRateLimiter(
    # 每秒允许的请求数:0.1表示每秒最多0.1次请求(即每10秒允许1次)
    requests_per_second = 0.1,
    # 检查频率:每0.1秒检查一次请求频率是否超限 也就是100毫秒
    check_every_n_seconds = 0.1,
    # 最大桶容量:允许临时累积的最大请求数,最多累积10个待处理请求
    max_bucket_size = 10 # 控制最大的突发请求数量
)

llm = init_chat_model( # langchain1.0出来以后的新写法
    model = 'deepseek-chat',
    model_provider = 'deepseek',
    api_key = DEEPSEEK_API_KEY,
    base_url = DEEPSEEK_URL,
    rate_limiter = rate_limiter, # 注入速率限制器
    temperature = 0.5,
)

关键参数深度解析

1. InMemoryRateLimiter:本地内存级别的速率限制器

InMemoryRateLimiter 是 LangChain 内置的速率限制工具,基于令牌桶算法实现请求限流,所有状态都存储在本地内存中,适合单机部署的场景。

下面三个参数是配置的核心,决定了限流的规则:

(1) requests_per_second = 0.1:每秒允许的请求数

这个参数直接控制请求的频率上限:

  • 设为 0.1 意味着每秒最多只能发起 0.1 次请求
  • 换算成更直观的单位:每 10 秒才能发起 1 次请求
  • 调整建议:根据 DeepSeek 官方的 API 限流规则来设置,比如官方限制每秒 5 次,就可以设为 5
(2) check_every_n_seconds = 0.1:频率检查间隔

这个参数是速率限制器的 “心跳”:

  • 设为 0.1 表示每 100 毫秒检查一次请求队列
  • 作用:确保请求不会堆积,及时拦截超出频率限制的请求
  • 调整建议:间隔越小,限流越精准,但会略微增加本地计算开销,一般设为 0.1~1 秒即可
(3) max_bucket_size = 10:最大突发请求容量

这个参数是令牌桶算法的 “缓冲池”:

  • 设为 10 表示最多可以累积 10 个待处理的请求
  • 作用:应对短时间的突发请求,比如某一瞬间来了 8 个请求,不会直接被拒绝,而是排队等待,按照 requests_per_second 的频率依次执行
  • 调整建议:根据业务场景调整,突发请求多就设大一点,反之设小一点,避免内存占用过高

2. init_chat_model:LangChain 1.0 新写法注入限流

LangChain 1.0 版本对模型初始化做了简化,我们只需要将配置好的 rate_limiter 直接传入 init_chat_model 函数,就能实现限流能力的注入。

  • model = 'deepseek-chat':指定要调用的 DeepSeek 模型版本
  • model_provider = 'deepseek':声明模型提供商为 DeepSeek
  • temperature = 0.5:控制模型生成内容的随机性,0 表示确定性输出,1 表示随机性最高

适用场景与扩展建议

适用场景

  • 批量调用 DeepSeek API 进行数据处理
  • 搭建对外提供服务的 AI 应用,避免用户高频请求触发限流
  • 本地开发调试,防止误操作发起大量请求

扩展建议

  1. 分布式场景替换限流器InMemoryRateLimiter 只适合单机场景,如果是分布式部署,建议使用基于 Redis 的速率限制器,比如 RedisRateLimiter,实现多实例共享限流状态。

  2. 动态调整限流参数可以根据 API 的返回状态动态调整 requests_per_second,比如检测到 429 错误,就自动降低每秒请求数。

  3. 结合重试机制搭配 LangChain 的重试工具,当请求因限流失败时,自动等待一段时间后重试,提升请求成功率。

总结

通过 InMemoryRateLimiter 给 DeepSeek API 调用加上速率限制,是保证请求稳定的关键一步。核心就是理解三个参数的作用:用 requests_per_second 控制频率,用 check_every_n_seconds 保证检查精度,用 max_bucket_size 应对突发请求。

按照这个方案配置后,你的大模型应用就能平稳运行,再也不用担心触发限流啦!

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐