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