在 Azure 容器应用中使用 RAG 缩放 Azure OpenAI,以便适用于 JavaScript 聊天
了解如何将负载均衡添加到应用程序,以将聊天应用扩展到 Azure OpenAI 服务令牌和模型配额限制之外。 此方法使用 Azure 容器应用创建三个 Azure OpenAI 终结点和一个主容器,以将传入流量定向到三个终结点之一。
本文要求部署两个单独的示例:
聊天应用
如果尚未部署聊天应用,请等到部署负载均衡器示例之后。
如果已部署聊天应用一次,请更改环境变量以支持负载均衡器的自定义终结点,然后重新部署它。
聊天应用以以下语言提供:
负载均衡器应用
注意
本文使用一个或多个 AI 应用模板 作为本文中的示例和指南的基础。 AI 应用模板提供易于部署的维护良好的参考实现。 它们有助于确保您的 AI 应用程序具有一个高质量的起点。
使用 Azure 容器应用对 Azure OpenAI 进行负载均衡的体系结构
由于 Azure OpenAI 资源具有特定的令牌和模型配额限制,因此使用单个 Azure OpenAI 资源的聊天应用很容易因为这些限制而发生对话失败。
若要在不达到这些限制的情况下使用聊天应用,请使用容器应用的负载均衡解决方案。 此解决方案无缝地将容器应用中的单个终结点公开到聊天应用服务器。
容器应用位于一组 Azure OpenAI 资源前面。 容器应用可解决两种场景:正常和受限。 在令牌和模型配额可用的正常场景中,Azure OpenAI 资源会通过容器应用和应用服务器返回 200。
显示正常情境的
当资源处于受限场景(例如由于配额限制)时,容器应用可以立即重试其他 Azure OpenAI 资源,以完成原始聊天应用请求。
先决条件
Azure 订阅。 免费创建一个
开发容器 可用于这两个示例,其中包含完成本文所需的所有依赖项。 可以在 GitHub Codespaces(在浏览器中)或使用 Visual Studio Code 在本地运行开发容器。
- GitHub 帐户。
打开容器应用负载均衡器示例应用
GitHub Codespaces 运行由 GitHub 托管的开发容器,Visual Studio Code for web 作为用户界面。 对于最直接的开发环境,请使用 GitHub Codespaces,以便预先安装正确的开发人员工具和依赖项来完成本文。
重要
所有 GitHub 帐户每月最多可以使用 GitHub Codespaces 60 小时,其中包含两个核心实例。 有关详细信息,请参阅 GitHub Codespaces 每月包含的存储和核心小时数。
部署 Azure 容器应用负载均衡器
登录到 Azure 开发人员 CLI,向预配和部署步骤提供身份验证:
azd auth login --use-device-code
将环境变量设置为在后配置步骤中使用 Azure CLI 进行身份验证:
azd config set auth.useAzCliAuth "true"
部署负载均衡器应用:
azd up
为部署选择订阅和区域。 它们不需要与聊天应用的订阅和区域相同。
等待部署完成,然后再继续。
获取部署终结点
使用以下命令显示容器应用的已部署终结点:
azd env get-values
复制
CONTAINER_APP_URL
值。 在下一部分中将会使用它。
使用负载均衡器终结点重新部署聊天应用
这些示例已在聊天应用示例中完成。
使用以下选项之一打开聊天应用示例的开发容器。
语言 GitHub Codespaces Visual Studio Code .NET 在 GitHub Codespaces 中打开 在开发容器中打开 JavaScript 在开发容器中打开 蟒 中打开
在开发容器中打开 登录到 Azure 开发人员 CLI(
AZD
):azd auth login
完成登录说明。
创建一个
AZD
环境并命名,例如chat-app
:azd env new <name>
添加以下环境变量,该变量告知聊天应用的后端对 Azure OpenAI 请求使用自定义 URL:
azd env set OPENAI_HOST azure_custom
添加以下环境变量。 将
<CONTAINER_APP_URL>
替换为前一部分中的 URL。 此操作通知聊天应用的后端 Azure OpenAI 请求的自定义 URL 的值。azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>
部署聊天应用:
azd up
现在,你可以安心使用聊天应用,因为它能够支持大量用户进行扩展,且无需担心超出配额限制。
通过流式日志查看负载均衡结果
在 Azure 门户中,搜索您的资源组。
从组中的资源列表中,选择 Azure 容器应用资源。
选择 监视>日志流 以查看日志。
使用聊天应用在日志中生成流量。
查找引用 Azure OpenAI 资源的日志。 这三个资源中的每一个在日志注释中都有其数字标识,以
Proxying to https://openai3
开头,其中3
指示第三个 Azure OpenAI 资源。
当负载均衡器收到请求超出配额的状态时,负载均衡器会自动轮换到另一个资源。
配置 TPM 配额
默认情况下,负载均衡器中的每个 Azure OpenAI 实例部署的容量为每分钟 30,000 个令牌(TPM)。 可以放心地使用这款聊天应用,因为它构建时考虑到了可扩展性,不用担心会超出用户配额。 在以下情况下更改此值:
- 出现部署容量错误:降低该值。
- 需要提高容量:增加该值。
使用以下命令更改值:
azd env set OPENAI_CAPACITY 50
重新部署负载均衡器:
azd up
清理资源
完成聊天应用和负载均衡器后,清理资源。 本文中创建的 Azure 资源将计费给 Azure 订阅。 如果不希望将来需要这些资源,请将其删除,以避免产生更多费用。
清理聊天应用资源
返回到聊天应用文章以清理资源:
清理上传负载均衡器资源
运行以下 Azure 开发人员 CLI 命令以删除 Azure 资源并删除源代码:
azd down --purge --force
这些开关提供:
purge
:立即清除已删除的资源,以便每分钟重复使用 Azure OpenAI 服务令牌。force
:删除以无提示方式进行,无需用户同意。
清理 GitHub Codespaces 和 Visual Studio Code
删除 GitHub Codespaces 环境可确保可以最大程度地提高帐户获得的每核心免费小时数权利。
重要
有关 GitHub 帐户权益的更多信息,请参阅 GitHub Codespaces 每月赠送的存储空间和核心小时数。
找到当前运行的代码空间,这些代码空间源自 azure-samples/openai-aca-lb GitHub 存储库。
打开代码空间的上下文菜单,然后选择“删除”。
获取帮助
如果在部署 Azure API 管理负载均衡器时遇到问题,请将问题添加到存储库 问题 网页。
示例代码
本文中使用的示例包括:
下一步
- 使用 Azure 负载测试 通过 Azure 负载测试服务对聊天应用进行负载测试。
- 详细了解此模板中如何使用 AZD: