共用方式為


教學課程:在 AutoGen 中搭配 Azure Container Apps 使用程式碼解釋器會話

AutoGen 是一種架構,可用來使用多個代理程式來開發大型語言模型 (LLM) 應用程式,這些代理程式彼此交談以解決工作。 使用 AutoGen 建置的代理程式可以在各種模式中運作,這些模式採用 LLM、人工輸入和工具的組合。 AutoGen 代理程式的重要工具類型之一是程式代碼執行程式。 它們可讓代理程式藉由撰寫和執行程式碼來執行複雜的工作。 藉由整合 Azure Container Apps 動態會話與 AutoGen,您可以為代理程式提供程式 碼解釋器 ,以用來執行有用的計算並採取動作。

在本教學課程中,您將瞭解如何在 Web API 中執行以 AutoGen 撰寫的 AI 代理程式。 API 接受使用者輸入,並傳回 AI 代理程式所產生的回應。 代理程式會在動態會話中使用程式代碼解釋器來執行計算。

必要條件

  • 具有有效訂用帳戶的 Azure 帳戶。
  • 安裝 Azure CLI
  • Git。
  • Python 3.10 或更新版本。

建立 Azure 資源

本快速入門中的範例應用程式會使用來自 Azure OpenAI 的 LLM。 它也會使用 Azure Container Apps 會話來執行 LLM 所產生的程式代碼。

  1. 將 Azure CLI 更新為最新版本。

     az upgrade
    
  2. 如果已安裝 Azure Container Apps 延伸模組,並安裝包含會話命令的 Azure Container Apps 擴充功能預覽版本,請移除它:

    az extension remove --name containerapp
    az extension add \
        --name containerapp \
        --allow-preview true -y
    
  3. 登入 Azure。

    az login
    
  4. 設定本快速入門中使用的變數:

    RESOURCE_GROUP_NAME=aca-sessions-tutorial
    AZURE_OPENAI_LOCATION=swedencentral
    AZURE_OPENAI_NAME=<UNIQUE_OPEN_AI_NAME>
    SESSION_POOL_LOCATION=eastasia
    SESSION_POOL_NAME=code-interpreter-pool
    

    將 取代 <UNIQUE_OPEN_AI_NAME> 為唯一的名稱,以建立您的 Azure OpenAI 帳戶。

  5. 建立資源群組:

    az group create --name $RESOURCE_GROUP_NAME --location $SESSION_POOL_LOCATION
    
  6. 建立 Azure OpenAI 帳戶:

    az cognitiveservices account create \
        --name $AZURE_OPENAI_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --location $AZURE_OPENAI_LOCATION \
        --kind OpenAI \
        --sku s0 \
        --custom-domain $AZURE_OPENAI_NAME
    
  7. 在 Azure OpenAI 帳戶中建立名為 gpt-35-turbo 的 GPT 3.5 Turbo 模型部署:

    az cognitiveservices account deployment create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $AZURE_OPENAI_NAME \
        --deployment-name gpt-35-turbo \
        --model-name gpt-35-turbo \
        --model-version "1106" \
        --model-format OpenAI \
        --sku-capacity "100" \
        --sku-name "Standard"
    
  8. 建立程式代碼解釋器工作階段集區:

    az containerapp sessionpool create \
        --name $SESSION_POOL_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --location $SESSION_POOL_LOCATION \
        --max-sessions 100 \
        --container-type PythonLTS \
        --cooldown-period 300
    

在本機執行範例應用程式

將應用程式部署至 Azure Container Apps 之前,您可以在本機執行應用程式以進行測試。

複製應用程式

  1. 複製 Azure Container Apps 作業階段範例存放庫

    git clone https://github.com/Azure-Samples/container-apps-dynamic-sessions-samples.git
    
  2. 變更為包含範例應用程式的目錄:

    cd container-apps-dynamic-sessions-samples/autogen-python-webapi
    

設定應用程式

  1. 建立 Python 虛擬環境並加以啟用:

    python3.11 -m venv .venv
    source .venv/bin/activate
    

    如果您使用不同的版本,請變更命令中的 Python 版本。 建議使用 Python 3.10 或更新版本。

    注意

    如果您使用 Windows,請將 取代 .venv/bin/activate.venv\Scripts\activate

  2. 安裝必要 Python 套件:

    python -m pip install -r requirements.txt
    
  3. 若要執行應用程式,您必須設定環境變數。

    1. 擷取 Azure OpenAI 帳戶端點:

      az cognitiveservices account show \
          --name $AZURE_OPENAI_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query properties.endpoint \
          --output tsv
      
    2. 擷取 Azure OpenAI API 金鑰:

      az cognitiveservices account keys list \
          --name $AZURE_OPENAI_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query key1 \
          --output tsv
      
    3. 擷取 Azure Container Apps 會話集區管理端點:

      az containerapp sessionpool show \
          --name $SESSION_POOL_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query properties.poolManagementEndpoint \
          --output tsv
      
    4. .env在範例應用程式目錄的根目錄中建立檔案(與 main.py相同位置)。 將下列內容新增至該檔案:

      OAI_CONFIG_LIST=[{"model": "gpt-4", "api_key": "<AZURE_OPENAI_KEY>", "api_type": "azure", "base_url": "<AZURE_OPENAI_ENDPOINT>", "api_version": "2023-12-01-preview"}]
      POOL_MANAGEMENT_ENDPOINT=<SESSION_POOL_MANAGEMENT_ENDPOINT>
      

      <AZURE_OPENAI_ENDPOINT> Azure OpenAI 帳戶端點、 <AZURE_OPENAI_KEY> Azure OpenAI API 金鑰和 <SESSION_POOL_MANAGEMENT_ENDPOINT> 工作階段集區管理端點取代 。

  4. 應用程式會使用 DefaultAzureCredential 向 Azure 服務進行驗證。 在您的本機計算機上,它會使用您目前的 Azure CLI 登入認證。 您必須在會話集區上提供 Azure ContainerApps 會話執行程式 角色,應用程式才能存取會話集區。

    1. 擷取您的 Azure CLI 使用者名稱:

      az account show --query user.name --output tsv
      
    2. 執行下列命令以擷取工作階段集區資源識別碼:

      az containerapp sessionpool show --name $SESSION_POOL_NAME --resource-group $RESOURCE_GROUP_NAME --query id --output tsv
      
    3. Azure ContainerApps 會話執行程式 角色指派給會話集區上的 Azure CLI 使用者:

      az role assignment create \
          --role "Azure ContainerApps Session Executor" \
          --assignee <CLI_USERNAME> \
          --scope <SESSION_POOL_RESOURCE_ID>
      

      將 取代為您的 Azure CLI 用戶名稱,並將 <SESSION_POOL_RESOURCE_ID> 取代<CLI_USERNAME>為工作階段集區資源識別碼。

執行應用程式

執行範例應用程式之前,請在編輯器中開啟 main.py ,然後檢閱程序代碼。 應用程式會使用 FastAPI 來建立 Web API,以接受查詢字串中的使用者訊息。

下列幾行程式代碼會具現化 ACASessionsExecutor ,並將其提供給 autogen 代理程式:

aca_sessions_executor = ACASessionsExecutor(aca_pool_management_endpoint)
code_executor_agent = ConversableAgent(
    name="CodeExecutor",
    llm_config=False,
    code_execution_config={"executor": aca_sessions_executor},
    human_input_mode="NEVER",
    is_termination_msg=lambda msg: "TERMINATE" in msg.get("content", "").strip().upper()
)

當它需要執行計算和工作時,代理程式會使用 ACASessionsExecutor 中的 程式碼解釋器 來執行程式碼。 程序代碼會在會話集區的會話中執行。 根據預設,當您具現化工具時,會產生隨機會話標識符。 如果代理程式使用相同的工具來執行多個 Python 代碼段,則會使用相同的會話。 若要確保每個使用者都有唯一的工作階段,請針對每個使用者使用不同的代理程式和工具。

ACASessionsExecutor 會在 aca_sessions_executor.py實作。

  1. 執行範例應用程式:

    fastapi dev main.py
    
  2. 開啟瀏覽器並巡覽至 http://localhost:8000/docs。 您會看到範例應用程式的 Swagger UI。

  3. 展開端點,/chat然後選取 [試用]。

  4. message欄位中輸入 What time is it right now? ,然後選取 [執行]。

    代理程式會以目前時間回應。 在終端機中,您會看到記錄顯示代理程式產生的 Python 程式代碼,以取得目前的時間,並在程式代碼解釋器會話中執行。

  5. 若要停止應用程式,請在終端機中輸入 Ctrl+C

選擇性:將範例應用程式部署至 Azure Container Apps

若要將 FastAPI 應用程式部署至 Azure Container Apps,您需要建立容器映射,並將其推送至容器登錄。 然後,您可以將映射部署至 Azure Container Apps。 命令 az containerapp up 會將這些步驟合併成單一命令。

接著,您必須設定應用程式的受控識別,併為其指派適當的角色,以存取 Azure OpenAI 和會話集區。

  1. 設定 Container Apps 環境與應用程式名稱的變數:

    ENVIRONMENT_NAME=aca-sessions-tutorial-env
    CONTAINER_APP_NAME=chat-api
    
  2. 建置應用程式並將其部署至 Azure Container Apps:

    az containerapp up \
        --name $CONTAINER_APP_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --location $SESSION_POOL_LOCATION \
        --environment $ENVIRONMENT_NAME \
        --env-vars 'OAI_CONFIG_LIST=[{"model": "gpt-4", "api_key": "<AZURE_OPENAI_KEY>", "api_type": "azure", "base_url": "<AZURE_OPENAI_ENDPOINT>", "api_version": "2023-12-01-preview"}]' 'POOL_MANAGEMENT_ENDPOINT=<SESSION_POOL_MANAGEMENT_ENDPOINT>' \
        --source .
    

    <AZURE_OPENAI_ENDPOINT> Azure OpenAI 帳戶端點、 <AZURE_OPENAI_KEY> Azure OpenAI 金鑰和 <SESSION_POOL_MANAGEMENT_ENDPOINT> 工作階段集區管理端點取代 。

  3. 為應用程式啟用系統指派的受控識別:

    az containerapp identity assign \
        --name $CONTAINER_APP_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --system-assigned
    
  4. 若要讓應用程式存取會話集區,您必須將受控識別指派適當的角色。

    1. 擷取受控識別的主體標識碼:

      az containerapp show \
          --name $CONTAINER_APP_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query identity.principalId \
          --output tsv
      
    2. 擷取會話集區資源標識碼:

      az containerapp sessionpool show \
          --name $SESSION_POOL_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query id \
          --output tsv
      
    3. 在會話集區上指派 和 Contributor 角色的受控識別Azure ContainerApps Session Executor

      執行下列命令之前,請將 和 <SESSION_POOL_RESOURCE_ID> 取代<PRINCIPAL_ID>為您在先前步驟中擷取的值。

      az role assignment create \
          --role "Azure ContainerApps Session Executor" \
          --assignee <PRINCIPAL_ID> \
          --scope <SESSION_POOL_RESOURCE_ID>
      
      az role assignment create \
          --role "Contributor" \
          --assignee <PRINCIPAL_ID> \
          --scope <SESSION_POOL_RESOURCE_ID>
      
  5. 擷取應用程式的完整功能變數名稱 (FQDN):

    az containerapp show \
        --name $CONTAINER_APP_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --query properties.configuration.ingress.fqdn \
        --output tsv
    
  6. 開啟瀏覽器以 https://<FQDN>/docs 測試已部署的應用程式。

清除資源

當您完成資源時,您可以將其刪除,以避免產生費用:

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

下一步