设置具有故障缓解回退的弹性负载均衡器

随着应用程序流量的增长,公司通常面临高效扩展服务的挑战 - 当您使用API时,首个故障点是,如果您过于频繁地调用API,可能会遭遇速率限制。负载均衡是一种经过验证的方式,可以在不使任何一个提供商过载的情况下水平扩展使用,从而保持在速率限制之内。

对于您的AI应用程序,速率限制更加严格,如果您开始触及提供商的速率限制,您别无选择,只能等待冷却后再尝试。通过Portkey,我们可以帮助您轻松解决这个问题。

本食谱将教您如何利用Portkey在多个LLM之间分配流量,通过为请求设置备份来确保您的负载均衡器的稳健性。此外,您将学习如何在OpenAI和Anthropic之间进行负载均衡,利用Anthropic最近开发的强大Claude-3模型,同时将Azure作为回退层。

先决条件:

您需要拥有Portkey API密钥。请注册以获取该密钥。此外,您还应该在Portkey保险库中存储OpenAI、Azure OpenAI和Anthropic的详细信息。

1. 导入SDK并验证Portkey

首先在您的NodeJS项目中安装portkey-ai

npm i --save portkey-ai

安装完成后,您可以导入它并使用您的Portkey帐户的API密钥进行实例化。

import { Portkey } from 'portkey-ai';

const portkey = new Portkey({
  apiKey: process.env['PORTKEYAI_API_KEY']
});

2. 创建配置:带嵌套回退的负载均衡

Portkey 作为所有请求 LLM 的 AI 网关。它在所有方法和接口中遵循 OpenAI SDK 签名,使其易于使用和切换。以下是通过 Portkey 进行聊天完成请求的示例。

Portkey AI 网关可以将我们期望的行为应用于对各种 LLM 的请求。简而言之,我们期望的行为如下:

幸运的是,所有这些都可以通过传递配置来实现,使我们能够表达对每个通过 Portkey AI 网关的请求应用什么行为。

我们在 Anthropic 和 OpenAI 之间应用 loadbalance 策略。weight 描述流量应在两个 LLM 提供者之间以 50/50 的比例分配,而 override_params 将帮助我们覆盖默认设置。

让我们进一步采取措施,为来自 OpenAI 的请求应用回退机制,以回退到 Azure OpenAI。此嵌套机制将确保我们的应用在生产中可靠且充满信心。

请查看 Portkey 的文档 FallbacksLoadbalancing

3. 发起请求

现在 config 已经具体化,并在实例化 Portkey 客户端实例时作为参数传递,所有后续操作将自动获得期望的行为——无需对代码库进行额外更改。

接下来,我们将研究如何识别负载均衡的请求或那些作为后备执行的请求。

4. 从日志中追踪请求

从每天接收到的成千上万的请求中识别特定请求可能是一个挑战,就像在大海捞针一样。然而,Portkey 提供了解决方案,通过使我们能够附加所需的追踪 ID。这里是 request-loadbalance-fallback

这个追踪 ID 可以轻松用于从 Portkey 控制面板 (>日志) 过滤请求。

除了激活 Loadbalance(图标)外,日志还提供了重要的可观察性信息,包括令牌、成本和模型。

配置是否在增长并变得更难以管理?尝试从 Portkey UI 创建它们并在您的代码中引用配置 ID。这将大大简化维护工作。

5. 高级:金丝雀测试

考虑到每天都有新模型推出,而您的应用程序正在生产中——尝试这些模型质量的最佳方法是什么?金丝雀测试允许您在向所有用户发布之前,逐步将更改推送给一小部分用户。

考虑以下场景:您已经使用 OpenAI 作为您的 LLM 提供商一段时间,但正在考虑通过 Anyscale 尝试一个开源的 Llama 模型用于您的应用。

weight 表示流量的分配,10% 的用户群体将使用 Anyscale 的 Llama 模型。现在,您已经准备好获取反馈并观察您的应用性能,并逐步向更大的用户群体发布。

注意事项

您可以通过几行代码实现生产级的负载均衡和嵌套的回退机制。虽然您已具备构建下一代 GenAI 应用所需的所有工具,但以下是一些注意事项:

  • 每个请求必须遵循 LLM 提供者的要求才能成功。例如,max_tokens 对于 Anthropic 是必需的,而对 OpenAI 则不是。

  • 虽然负载均衡有助于减少某个 LLM 的负载,但建议将其与回退策略配对,以确保您的应用保持可靠。

  • 在 Portkey 上,您还可以将负载均衡权重设为 0 - 这将基本上停止将请求路由到该目标,您可以在需要时增加权重。

  • 负载均衡没有目标限制,因此您可以从一个提供者添加多个帐户详细信息,有效地增加可用的速率限制。

  • 负载均衡不会以任何方式改变请求的输出或延迟。

祝您编码愉快!

查看完整代码

Last updated