UpstashRatelimitHandler 根据请求数或令牌数添加速率限制。此处理程序使用 Upstash 的速率限制库,该库利用了 Upstash Redis。
Upstash Ratelimit 的工作原理是每次调用 limit 方法时向 Upstash Redis 发送 HTTP 请求。检查并更新用户的剩余令牌/请求。根据剩余令牌,我们可以停止执行昂贵的操作,例如调用 LLM 或查询向量存储:
UpstashRatelimitHandler 允许你在几分钟内将此速率限制逻辑合并到你的链中。
设置
首先,你需要前往 Upstash 控制台 并创建一个 redis 数据库(请参阅我们的文档)。创建数据库后,你需要设置环境变量:@langchain/community:
npm
每个请求的速率限制
假设我们要允许我们的用户每分钟调用我们的链 10 次。实现这一点很简单:invoke 方法,而不是在定义链时传递处理程序。
对于除 FixedWindow 之外的速率限制算法,请参阅 upstash-ratelimit 文档。
在执行我们管道中的任何步骤之前,ratelimit 将检查用户是否已通过请求限制。如果是,则引发 UpstashRatelimitError。
每个令牌的速率限制
另一个选项是根据以下内容限制链调用:- 提示中的令牌数
- 提示和 LLM 补全中的令牌数
LLMOutput 中返回令牌使用情况。返回的令牌使用字典的格式取决于 LLM。要了解如何根据你的 LLM 配置处理程序,请参阅下面“配置”部分的末尾。
工作原理
处理程序将在调用 LLM 之前获取剩余令牌。如果剩余令牌大于 0,则将调用 LLM。否则将引发UpstashRatelimitError。
在调用 LLM 后,令牌使用信息将用于从用户的剩余令牌中减去。在此阶段的链中不会引发错误。
配置
对于第一种配置,只需像这样初始化处理程序:request_ratelimit 和 token_ratelimit 参数来同时采用基于请求和令牌的速率限制。
为了使令牌使用正常工作,LangChain.js 中的 LLM 步骤应以以下格式返回令牌使用字段:
llmOutputTokenUsageField、llmOutputTotalTokenField 和 llmOutputPromptTokenField 传递给处理程序来使用它们:
将这些文档连接 to Claude, VSCode, and more via MCP for real-time answers.

