通过 Azure 容器应用使用 RAG 缩放适用于 JavaScript 的 Azure OpenAI 聊天
了解如何向应用程序添加负载均衡,以将聊天应用扩展到 Azure OpenAI 令牌和模型配额限制之外。 此方法使用 Azure 容器应用创建三个 Azure OpenAI 终结点以及一个主容器,将传入流量定向到三个终结点中的一个。
本文要求部署 2 个单独的示例:
聊天应用
如果尚未部署聊天应用,请等到部署负载均衡器示例之后再进行部署。
如果已部署过一次聊天应用,则需要更改环境变量以支持负载均衡器的自定义终结点,然后再次重新部署。
聊天应用适用以下语言:
负载均衡器应用
使用 Azure 容器应用对 Azure OpenAI 进行负载均衡的体系结构
由于 Azure OpenAI 资源具有特定的令牌和模型配额限制,因此使用单个 Azure OpenAI 资源的聊天应用容易因这些限制而导致对话失败。
若要在不达到这些限制的情况下使用聊天应用,请对 Azure 容器应用使用负载均衡解决方案。 此解决方案将 Azure 容器应用的单个终结点无缝地公开到聊天应用服务器。
Azure 容器应用位于一组 Azure OpenAI 资源前面。 容器应用可解决两种场景:正常和受限。 在令牌和模型配额可用的正常场景中,Azure OpenAI 资源会通过容器应用和应用服务器返回 200。
当资源处于受限场景(例如由于配额限制)时,Azure 容器应用可以立即重试其他 Azure OpenAI 资源,以完成原始聊天应用请求。
先决条件
Azure 订阅。 免费创建一个
已在所需的 Azure 订阅中授予对 Azure OpenAI 的访问权限。
目前,仅应用程序授予对此服务的访问权限。 可以通过在 https://aka.ms/oai/access 上填写表单来申请对 Azure OpenAI 的访问权限。
开发容器可用于这两个示例,其中包含完成本文所需的所有依赖项。 可以在 GitHub Codespaces 中(在浏览器中)或在本地使用 Visual Studio Code 运行开发容器。
- GitHub 帐户
打开容器应用本地负载均衡器示例应用
GitHub Codespaces 运行由 GitHub 托管的开发容器,将 Visual Studio Code 网页版作为用户界面。 对于最简单的开发环境,请使用 GitHub Codespaces,以便预先安装完成本文所需的合适的开发人员工具和依赖项。
重要
所有 GitHub 帐户每月可以使用 Codespaces 最多 60 小时,其中包含 2 个核心实例。 有关详细信息,请参阅 GitHub Codespaces 每月包含的存储和核心小时数。
部署 Azure 容器应用负载均衡器
若要将负载均衡器部署到 Azure,请登录到 Azure Developer CLI (AZD)。
azd auth login
完成登录说明。
部署负载均衡器应用。
azd up
需要为部署选择订阅和区域。 这些订阅和区域不必与聊天应用相同。
等待部署完成,然后继续。
在名为 Endpoint 的部署末尾获取 URL。 这是下一部分使用的
CONTAINER_APP_URL
。
使用负载均衡器终结点重新部署聊天应用
这些已在聊天应用示例中完成。
使用以下选项之一打开聊天应用示例的开发容器。
语言 Codespaces Visual Studio Code .NET JavaScript Python 登录到 Azure Developer CLI (AZD)。
azd auth login
完成登录说明。
创建一个 AZD 环境并命名,例如
chat-app
。azd env new <name>
添加以下环境变量,告知聊天应用的后端对 OpenAI 请求使用自定义 URL。
azd env set OPENAI_HOST azure_custom
添加以下环境变量,用
<CONTAINER_APP_URL>
替换上一部分中的 URL。 此操作告知聊天应用的后端 OpenAI 请求的自定义 URL 的值。azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>
部署聊天应用。
azd up
现在,你可以放心使用聊天应用,因为它可以跨多个用户进行缩放,而不会超出配额。
流式传输日志以查看负载均衡器结果
在 Azure 门户中,搜索资源组。
从组中的资源列表中,选择容器应用资源。
选择“监视”->“日志流”以查看日志。
使用聊天应用在日志中生成流量。
查找引用 Azure OpenAI 资源的日志。 这三个资源中的每一个在日志注释中都有以
Proxying to https://openai3
开头的数字标识,其中3
指示第三个 Azure OpenAI 资源。使用聊天应用时,如果负载均衡器收到请求超出配额的状态,负载均衡器会自动轮换到另一个资源。
配置每分钟令牌配额 (TPM)
默认情况下,负载均衡器中的每个 OpenAI 实例都将部署 30,000 TPM(每分钟令牌)容量。 你可以放心使用聊天应用,因为它可以跨多个用户进行缩放,而不会超出配额。 在以下情况下更改此值:
- 出现部署容量错误:降低该值。
- 计划更高的容量,提高该值。
使用以下命令更改该值。
azd env set OPENAI_CAPACITY 50
重新部署负载均衡器。
azd up
清理资源
完成聊天应用和负载均衡器后,请清理资源。 本文中创建的 Azure 资源的费用将计入你的 Azure 订阅。 如果你预计将来不需要这些资源,请将其删除,以避免产生更多费用。
清理聊天应用资源
返回到聊天应用文章以清理这些资源。
清理上传均衡器资源
运行以下 Azure Developer CLI 命令以删除 Azure 资源并删除源代码:
azd down --purge --force
这些开关可提供:
purge
:立即清除删除的资源。 这样,就可以重复使用 Azure OpenAI TPM。force
:该删除操作以无提示方式进行,无需用户同意。
清理 GitHub Codespaces
删除 GitHub Codespaces 环境可确保可以最大程度地提高帐户获得的每核心免费小时数权利。
重要
有关 GitHub 帐户权利的详细信息,请参阅 GitHub Codespaces 每月包含的存储和核心小时数。
登录到 GitHub Codespaces 仪表板 (https://github.com/codespaces)。
找到当前正在运行的、源自
azure-samples/openai-aca-lb
GitHub 存储库的 Codespaces。打开 codespace 的上下文菜单,然后选择“删除”。
获取帮助
如果在部署 Azure API 管理负载均衡器时遇到问题,请将问题记录到存储库的问题中。
示例代码
本文中使用的示例包括:
下一步
- 使用 Azure 负载测试 通过 加载测试聊天应用
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈