共用方式為


使用 RAG 搭配 Azure 容器應用程式,縮放適用於 .NET 的 Azure OpenAI 聊天

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

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

  • 聊天應用程式

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

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

    • 聊天應用程式提供這些語言:

  • 負載平衡器應用程式

注意

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

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

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

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

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

圖表顯示在三個 Azure OpenAI 資源前面的 Azure 容器應用程式與聊天應用程式結構。

Azure 容器應用程式位於一組 Azure OpenAI 資源前面。 容器應用程式可解決兩個情節:一般和節流。 在權杖和模型配額可使用的一般情節下,Azure OpenAI 資源會透過容器應用程式和應用程式伺服器傳回 200。

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

當資源處於節流情節,例如配額限制原因,Azure 容器應用程式可以立即重試不同的 Azure OpenAI 資源,以完成原始聊天應用程式要求。

顯示節流情節的圖表,其中包含 429 個失敗的回應碼,以及用戶端為了重試必須等候多少秒的回應標頭。

必要條件

  • Azure 訂閱。 免費建立一個

  • 在所需的 Azure 訂用帳戶中授與 Azure OpenAI 的存取權。

    目前只有應用程式會授予此服務的存取權。 您應該申請存取 Azure OpenAI 的權限。

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

開啟容器應用程式本機平衡器範例應用程式

GitHub Codespaces 會使用網頁版 Visual Studio Code 作爲使用者介面,執行由 GitHub 管理的開發容器。 如需最直接的開發環境,請使用 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. 使用下列其中一個選項開啟聊天應用程式範例的開發容器。

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

    azd auth login
    

    完成登入指示。

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

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

    azd env set OPENAI_HOST azure_custom
    
  5. 新增下列環境變數,以取代上一節中 URL 的 <CONTAINER_APP_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. 找出您目前執行中的 Codespaces,而其來源為 azure-samples/openai-aca-lb GitHub 存放庫。

    執行中 Codespaces 的螢幕擷取畫面,包括其狀態和範本。

  3. 開啟 Codespace 的快顯功能表,然後選取 [刪除]

    單一 Codespace 的操作功能表 (已醒目提示刪除選項) 螢幕擷取畫面。

取得協助

如果您在部署 Azure APIM 負載平衡器時遇到問題,請將問題記錄在存放庫的問題

範例指令碼

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

後續步驟