使用 RAG 和 Azure 容器应用缩放适用于 Java 的 Azure OpenAI 聊天

了解如何向应用程序添加负载均衡,以将聊天应用扩展到 Azure OpenAI 令牌和模型配额限制之外。 此方法使用 Azure 容器应用创建三个 Azure OpenAI 终结点以及一个主容器,将传入流量定向到三个终结点中的一个。

本文要求部署两个单独的示例:

  • 聊天应用

    • 如果尚未部署聊天应用,请等到部署负载均衡器示例之后再进行部署。

    • 如果已部署过一次聊天应用,则需要更改环境变量以支持负载均衡器的自定义终结点,然后再次重新部署。

    • 聊天应用适用以下语言:

  • 负载均衡器应用

注意

本文使用一个或多个 AI 应用模板 作为本文中的示例和指南的基础。 AI 应用模板为你提供了维护良好、易于部署的参考实现,有助于确保 AI 应用的高质量起点。

使用 Azure 容器应用对 Azure OpenAI 进行负载均衡的体系结构

由于 Azure OpenAI 资源具有特定的令牌和模型配额限制,因此使用单个 Azure OpenAI 资源的聊天应用容易因这些限制而导致对话失败。

显示聊天应用体系结构的关系图,其中突出显示了 Azure OpenAI 资源。

若要在不达到这些限制的情况下使用聊天应用,请对 Azure 容器应用使用负载均衡解决方案。 此解决方案将 Azure 容器应用的单个终结点无缝地公开到聊天应用服务器。

显示三个 Azure OpenAI 资源前面的聊天应用体系结构与 Azure 容器应用的关系图。

Azure 容器应用位于一组 Azure OpenAI 资源前面。 容器应用可解决两种场景:正常和受限。 在令牌和模型配额可用的正常场景中,Azure OpenAI 资源会通过容器应用和应用服务器返回 200

显示正常方案的关系图。正常方案会显示三个 Azure OpenAI 终结点组,其中第一组的两个终结点会获得成功的流量。

当资源处于受限场景(例如由于配额限制)时,Azure 容器应用可以立即重试其他 Azure OpenAI 资源,以完成原始聊天应用请求

显示限制方案的关系图,其中包含 429 个失败的响应代码和客户端必须等待重试的秒数的响应标头。

先决条件

打开容器应用本地负载均衡器示例应用

GitHub Codespaces 运行由 GitHub 托管的开发容器,将 Visual Studio Code 网页版作为用户界面。 对于最简单的开发环境,请使用 GitHub Codespaces,以便预先安装完成本文所需的合适的开发人员工具和依赖项。

在 GitHub Codespaces 中打开此项目

重要

所有 GitHub 帐户每月可以使用 Codespaces 最多 60 小时,其中包含 2 个核心实例。 有关详细信息,请参阅 GitHub Codespaces 每月包含的存储和核心小时数

部署 Azure 容器应用负载均衡器

  1. 登录到 Azure Developer CLI,为预配和部署步骤提供身份验证。

    azd auth login --use-device-code
    
  2. 设置环境变量,使其能够在预配后的步骤中使用 Azure CLI 身份验证。

    azd config set auth.useAzCliAuth "true"
    
  3. 部署负载均衡器应用。

    azd up
    

    需要为部署选择订阅和区域。 这些订阅和区域不必与聊天应用相同。

  4. 等待部署完成,然后继续。

获取部署终结点

  1. 使用以下命令显示已为 Azure 容器应用部署的终结点。

    azd env get-values
    
  2. 复制 CONTAINER_APP_URL 值。 在接下来的部分中将使用它。

使用负载均衡器终结点重新部署聊天应用

这些已在聊天应用示例中完成。

  1. 使用以下选项之一打开聊天应用示例的开发容器。

    语言 Codespaces Visual Studio Code
    .NET 在 GitHub Codespaces 中打开 在开发容器中打开
    JavaScript 在 GitHub Codespaces 中打开 在开发容器中打开
    Python 在 GitHub Codespaces 中打开 在开发容器中打开
  2. 登录到 Azure Developer CLI (AZD)。

    azd auth login
    

    完成登录说明。

  3. 创建一个 AZD 环境并命名,例如 chat-app

    azd env new <name>
    
  4. 添加以下环境变量,告知聊天应用的后端对 OpenAI 请求使用自定义 URL。

    azd env set OPENAI_HOST azure_custom
    
  5. 添加以下环境变量,用 <CONTAINER_APP_URL> 替换上一部分中的 URL。 此操作告知聊天应用的后端 OpenAI 请求的自定义 URL 的值。

    azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>
    
  6. 部署聊天应用。

    azd up
    

现在,你可以放心使用聊天应用,因为它可以跨多个用户进行缩放,而不会超出配额。

流式传输日志以查看负载均衡器结果

  1. Azure 门户中,搜索资源组。

  2. 从组中的资源列表中,选择容器应用资源。

  3. 选择“监视”->“日志流”以查看日志

  4. 使用聊天应用在日志中生成流量。

  5. 查找引用 Azure OpenAI 资源的日志。 这三个资源中的每一个在日志注释中都有以 Proxying to https://openai3 开头的数字标识,其中 3 指示第三个 Azure OpenAI 资源。

    显示 Azure 容器应用流式处理日志的屏幕截图,其中两个突出显示的日志行展示了日志注释。

  6. 使用聊天应用时,如果负载均衡器收到请求超出配额的状态,负载均衡器会自动轮换到另一个资源。

配置每分钟令牌配额 (TPM)

默认情况下,负载均衡器中的每个 OpenAI 实例都将部署 30,000 TPM(每分钟令牌)容量。 你可以放心使用聊天应用,因为它可以跨多个用户进行缩放,而不会超出配额。 在以下情况下更改此值:

  • 出现部署容量错误:降低该值。
  • 计划更高的容量,提高该值。
  1. 使用以下命令更改该值。

    azd env set OPENAI_CAPACITY 50
    
  2. 重新部署负载均衡器。

    azd up
    

清理资源

完成聊天应用和负载均衡器后,请清理资源。 本文中创建的 Azure 资源的费用将计入你的 Azure 订阅。 如果你预计将来不需要这些资源,请将其删除,以避免产生更多费用。

清理聊天应用资源

返回到聊天应用文章以清理这些资源。

清理上传均衡器资源

运行以下 Azure Developer CLI 命令以删除 Azure 资源并删除源代码:

azd down --purge --force

这些开关可提供:

  • purge:立即清除删除的资源。 这样,就可以重复使用 Azure OpenAI TPM。
  • force:该删除操作以无提示方式进行,无需用户同意。

清理 GitHub Codespaces

删除 GitHub Codespaces 环境可确保可以最大程度地提高帐户获得的每核心免费小时数权利。

重要

有关 GitHub 帐户权利的详细信息,请参阅 GitHub Codespaces 每月包含的存储和核心小时数

  1. 登录到 GitHub Codespaces 仪表板 (https://github.com/codespaces)。

  2. 找到当前正在运行的、源自 azure-samples/openai-aca-lb GitHub 存储库的 Codespaces。

    所有正在运行的 Codespaces 的屏幕截图,其中包含它们的状态和模板。

  3. 打开 codespace 的上下文菜单,然后选择“删除”。

    单个 codespace 的上下文菜单的屏幕截图,突出显示了删除选项。

获取帮助

如果在部署 Azure API 管理负载均衡器时遇到问题,请将问题记录到存储库的问题中。

示例代码

本文中使用的示例包括:

下一步