应对速率限制

LLMs 的运行是 昂贵 的。随着使用量的增加,服务提供商必须在满足用户请求和过度消耗其 GPU 资源之间取得平衡。他们通常通过对用户每分钟或每天可以发送的请求数量施加 速率限制 来处理这个问题。

例如,对于 OpenAI 的文本转语音模型 tts-1-hd,您每分钟不能发送 超过 7 个请求。任何额外的请求将自动失败。

在许多现实世界的用例中,可能会遇到速率限制:

  • 当您的请求具有非常高的输入令牌数量或非常长的上下文时,您可能会达到令牌阈值

  • 当您运行一个复杂且长的提示管道,瞬间发出数百个请求时,您可能会同时达到令牌和请求限制

各个提供商施加的速率限制概述:

LLM 提供商
示例模型
速率限制

gpt-4

第 1 层:

  • 每分钟 500 次请求

  • 每分钟 10,000 个令牌

  • 每天 10,000 次请求

所有模型

第 1 层:

  • 每分钟 50 次请求

  • 每分钟 50,000 个令牌

  • 每天 100 万个令牌

Co.Generate 模型

生产密钥:

  • 每分钟 10,000 次请求

所有模型

端点:

  • 30 个并发请求

mixtral-8x7b-instruct

  • 每分钟 24 次请求

  • 每分钟 16,000 个令牌

所有模型

付费:

  • 每分钟 100 次请求

一般来说,开发人员通过一些技巧来应对速率限制:缓存常见响应、排队请求、减少发送的请求数量等。

使用 Portkey, 您只需在应用程序中添加几行代码即可解决这个问题。

在本食谱中,我们将向您展示 确保 您的应用 不再受到速率限制两种方法

1. 安装 Portkey SDK

npm i portkey-ai

让我们开始使用 Portkey SDK 进行通用的 chat.completions 调用:

为了确保您的请求不会受到速率限制,我们将利用 Portkey 的 fallbackloadbalance 功能:

2. 回退到替代 LLMs

使用 Portkey,您可以编写一个调用路由策略,以便在出现速率限制错误时帮助您从一个提供者回退到另一个提供者。这是通过在实例化 Portkey 客户端时传递一个 Config 对象来完成的:

在这个 Config 对象中,

  • 路由 strategy 被设置为 fallback

  • on_status_codes 参数确保回退仅在 429 错误代码时触发,该代码是由于速率限制错误生成的

  • targets 数组包含 LLM 的详细信息和回退的顺序

  • 第二个目标中的 override_params 允许您为特定提供者添加更多参数。(在这种情况下是 Anthropic 的 max_tokens

就这样!您其余的代码保持不变。根据 Config,Portkey 将进行协调,并确保在您在 OpenAI 上遇到速率限制错误时,调用 Anthropic 作为回退选项。

回退仍然是反应式的 - 只有在您实际遇到错误时才会触发。Portkey 还允许您主动应对速率限制:

3. 在多个 LLM 之间负载均衡

您可以使用 Portkey 将流量分配到多个提供商账户,而不是将所有请求发送到单个提供商的单个账户——这确保了单个账户不会因请求过多而过载,从而避免了速率限制。使用 Portkey 设置这种“负载均衡”非常简单——只需编写相关的负载均衡配置,并在实例化 Portkey 客户端时传递一次即可:

在此配置对象中:

  • 路由 strategy 设置为 loadbalance

  • targets 包含来自 3 个不同账户的 3 个不同的 OpenAI API 密钥,权重相等——这意味着 Portkey 将在 3 个密钥之间平均分配流量 1/3

通过在不同账户上进行负载均衡,您可以有效地增加速率限制,使您的应用程序更加稳健。

就这样!

您可以在这里阅读更多关于fallbacks的信息,以及在这里阅读关于loadbalance的信息。如果您想深入了解Configs在Portkey上的工作原理,请查看文档

Last updated