共用方式為


使用RAG與 Azure Container Apps 擴展適用於JavaScript聊天的 Azure OpenAI 方案

瞭解如何將負載平衡新增至您的應用程式,以將聊天應用程式延伸至 Azure OpenAI 服務令牌和模型配額限制之外。 此方法會使用 Azure Container Apps 來建立三個 Azure OpenAI 端點和主要容器,以將連入流量導向三個端點的其中一個。

本文要求您部署兩個不同的範例:

  • 聊天應用程式

    • 如果您尚未部署聊天應用程式,請等到部署負載平衡器範例之後。

    • 如果您已部署聊天應用程式一次,請變更環境變數以支援負載平衡器的自定義端點,然後再次重新部署。

    • 這款聊天應用程式提供以下語言:

      • .NET
      • JavaScript
      • Python
  • 負載平衡器應用程式

注意

本文使用一或多個 AI 應用程式範本作為本文範例和指引的基礎。 AI 應用程式範本提供易於部署且維護良好的參考實作。 它們可協助您確保 AI 應用程式的高品質起點。

Azure OpenAI 與 Azure 容器應用程式負載平衡的結構

由於 Azure OpenAI 資源具有特定的令牌和模型配額限制,因此使用單一 Azure OpenAI 資源的聊天應用程式很容易因為這些限制而發生交談失敗。

顯示聊天應用程式架構的圖表,其中已醒目提示 Azure OpenAI 資源。

若要在不達到這些限制的情況下使用聊天應用程式,請使用具有容器應用程式的負載平衡解決方案。 此解決方案會順暢地將容器應用程式的單一端點公開至聊天應用程式伺服器。

圖表顯示使用 Azure Container Apps 的聊天應用程式架構,位於三個 Azure OpenAI 資源之前。

容器應用程式位於一組 Azure OpenAI 資源前面。 容器應用程式可解決兩個案例:一般和節流。 正常情況 下,當令牌和模型配額可供使用時,Azure OpenAI 資源會透過容器應用程式和應用程式伺服器返回 200。

顯示一般案例的圖表。一般案例顯示三個 Azure OpenAI 端點群組,其中第一組兩個端點取得成功的流量。

當資源因為配額限制而處於 節流案例 時,容器應用程式可以立即重試不同的 Azure OpenAI 資源,以履行原始聊天應用程式要求。

顯示節流案例的圖表,其中包含失敗的429回應碼,以及客戶端必須等待多少秒才能重試的回應標頭。

必要條件

  • Azure 訂閱。 免費建立一個

  • 開發容器適用於兩個範例,並已包含完成本文所需的所有相依性。 您可以在 GitHub Codespaces (瀏覽器中) 或使用 Visual Studio Code 在本機執行開發容器。

    • Codespaces(建議)
    • Visual Studio Code
    • GitHub 帳戶。

開啟 Container Apps 負載平衡器範例應用程式

  • GitHub Codespaces(建議)
  • Visual Studio Code

GitHub Codespaces 使用網頁版 Visual Studio Code 作為使用者介面,執行由 GitHub 管理的開發容器。 如需最直接的開發環境,請使用 GitHub Codespaces,以確保您有已預先安裝的正確開發工具和相依性,以便順利完成本文。

GitHub Codespaces 中開啟。

重要

所有 GitHub 帳戶每月可免費使用 GitHub Codespaces 最多 60 小時,並可同時運行兩個核心實例。 如需詳細資訊,請參閱 GitHub Codespaces 每月包含的儲存空間和核心小時數

部署 Azure Container Apps 負載平衡器

  1. 登入 Azure 開發人員 CLI 以提供布建和部署步驟的驗證:

    azd auth login --use-device-code
    
  2. 將環境變數設定為在佈建後的步驟中使用 Azure CLI 驗證:

    azd config set auth.useAzCliAuth "true"
    
  3. 部署負載平衡器應用程式:

    azd up
    

    選擇部署的訂閱和區域。 他們不需要與聊天應用程式使用相同的訂用帳戶和區域。

  4. 等候部署完成,再繼續。

取得部署端點

  1. 使用下列命令來顯示容器應用程式的已部署端點:

    azd env get-values
    
  2. 複製 CONTAINER_APP_URL 值。 您會在下一節中使用它。

使用負載平衡器端點重新部署聊天應用程式

這些範例是在聊天應用程式的範本上完成的。

  • 初始部署
  • 重新部署
  1. 使用下列其中一個選項開啟聊天應用程式範例的開發容器。

    語言 GitHub Codespaces Visual Studio Code
    .NET 在 GitHub Codespaces 中開啟 開發容器中開啟
    JavaScript 在 GitHub Codespaces 中開啟 在開發容器中開啟
    Python 在 GitHub Codespaces 中開啟在 GitHub Codespaces 中開啟 開啟開發容器
  2. 登入 Azure 開發人員 CLI (AZD):

    azd auth login
    

    完成登入指示。

  3. 使用 AZD之類的名稱建立 chat-app 環境:

    azd env new <name>
    
  4. 新增下列環境變數,告知聊天應用程式的後端使用 Azure OpenAI 要求的自定義 URL:

    azd env set OPENAI_HOST azure_custom
    
  5. 新增下列環境變數。 以 <CONTAINER_APP_URL> 取代上一節中的 URL。 此動作會告訴聊天應用程式的後端 Azure OpenAI 要求的自定義 URL 值為何。

    azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>
    
  6. 部署聊天應用程式:

    azd up
    

您現在可以放心地使用聊天應用程式,因為它已經設計好可以在不會用盡配額的情況下,隨著使用者數量的增加而擴展。

串流記錄以查看負載平衡器結果

  1. 在 Azure 入口網站中,搜索您的資源群組。

  2. 從群組中的資源清單中,選取 Azure Container Apps 資源。

  3. 選取 監視>記錄流 以檢視記錄。

  4. 使用聊天應用程式來產生日誌流量。

  5. 尋找參考 Azure OpenAI 資源的記錄。 這三個資源中的每一個都會在記錄批注中具有其數值識別,開頭為 Proxying to https://openai3,其中 3 表示第三個 Azure OpenAI 資源。

    顯示 Azure Container Apps 實時日誌的螢幕快照,其中突顯了兩行日誌以展示其註解。

當負載平衡器收到要求超過配額的狀態時,負載平衡器會自動輪替至另一個資源。

設定 TPM 配額

根據預設,負載平衡器中的每個 Azure OpenAI 實例都會部署,預設容量為每分鐘 30,000 個令牌(TPM)。 您可以放心使用此聊天應用程式,它設計為能夠擴展至許多使用者而不會用盡配額。 在下列情況下變更此值:

  • 您會收到部署容量錯誤訊息:請調低該值。
  • 您需要更高的容量:增加值。
  1. 使用下列命令來變更值:

    azd env set OPENAI_CAPACITY 50
    
  2. 重新部署負載平衡器:

    azd up
    

清除資源

當您完成聊天應用程式和負載平衡器後,請清理資源。 在本文中建立的 Azure 資源會向您的 Azure 訂用帳戶計費。 如果您預計未來不需要這些資源,請將其刪除,以避免產生更多費用。

清除聊天應用程式資源

返回聊天應用程式的文章以清理資源:

  • .NET
  • JavaScript
  • Python

清理上傳負載平衡器資源

執行下列 Azure Developer CLI 命令來刪除 Azure 資源並移除原始程式碼:

azd down --purge --force

開關提供:

  • purge:系統會立即清除已刪除的資源,以便每分鐘重複使用 Azure OpenAI 服務令牌。
  • force:刪除會靜默地進行,不需取得使用者同意。

清理 GitHub Codespaces 和 Visual Studio Code

  • GitHub Codespaces
  • Visual Studio Code

刪除 GitHub Codespaces 環境可確保您能充分利用帳戶的免費每核心時數配額。

重要

如需有關您 GitHub 帳戶權利的更多詳細資訊,請參閱 GitHub Codespaces 每月包含的儲存空間與核心小時數

  1. 登入 GitHub Codespaces 儀表板。

  2. 定位您目前運行的代碼空間,其來源為 GitHub 存放庫 azure-samples/openai-aca-lb

    顯示所有執行中程式代碼空間的螢幕快照,包括其狀態和範本。

  3. 開啟 codespace 的內容選單,然後選取 刪除

    顯示單一程式碼空間功能表的螢幕快照,其中已醒目提示 [刪除] 選項。

尋求幫助

如果您在部署 Azure API 管理負載平衡器時遇到問題,請將您的問題新增至存放庫的 問題 網頁。

範例指令碼

在本文中使用的範例包括:

  • 使用RAG的JavaScript聊天應用程式
  • 使用 Azure 容器應用程式的負載平衡器

後續步驟

  • 使用 Azure Load Testing,透過 Azure 負載測試服務來負載測試聊天應用程式。