Udostępnij za pośrednictwem


Samouczek: używanie sesji interpretera kodu w narzędziu AutoGen z usługą Azure Container Apps

AutoGen to struktura do tworzenia dużych aplikacji modelu językowego (LLM) przy użyciu wielu agentów, którzy rozmawiają ze sobą w celu rozwiązywania zadań. Agenci skompilowany za pomocą rozwiązania AutoGen mogą działać w różnych trybach, które korzystają z kombinacji llM, danych wejściowych i narzędzi ludzkich. Jednym z ważnych typów narzędzi dla agentów autogenu jest funkcja wykonawcza kodu. Umożliwiają agentom wykonywanie złożonych zadań przez pisanie i wykonywanie kodu. Integrując dynamiczne sesje usługi Azure Container Apps z rozwiązaniem AutoGen, możesz dać agentowi interpreter kodu, który będzie używany do wykonywania przydatnych obliczeń i podejmowania akcji.

Z tego samouczka dowiesz się, jak uruchomić agenta sztucznej inteligencji utworzonego w narzędziu AutoGen w internetowym interfejsie API. Interfejs API akceptuje dane wejściowe użytkownika i zwraca odpowiedź wygenerowaną przez agenta sztucznej inteligencji. Agent używa interpretera kodu w sesjach dynamicznych do wykonywania obliczeń.

Wymagania wstępne

Tworzenie zasobów platformy Azure

Przykładowa aplikacja w tym przewodniku Szybki start używa rozwiązania LLM z poziomu usługi Azure OpenAI. Używa również sesji usługi Azure Container Apps do uruchamiania kodu wygenerowanego przez usługę LLM.

  1. Zaktualizuj interfejs wiersza polecenia platformy Azure do najnowszej wersji.

     az upgrade
    
  2. Usuń rozszerzenie usługi Azure Container Apps, jeśli jest już zainstalowane i zainstaluj wersję zapoznawcza rozszerzenia Azure Container Apps zawierające polecenia dla sesji:

    az extension remove --name containerapp
    az extension add \
        --name containerapp \
        --allow-preview true -y
    
  3. Logowanie do platformy Azure:

    az login
    
  4. Ustaw zmienne używane w tym przewodniku Szybki start:

    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
    

    Zastąp <UNIQUE_OPEN_AI_NAME> ciąg unikatową nazwą, aby utworzyć konto usługi Azure OpenAI.

  5. Tworzenie grupy zasobów:

    az group create --name $RESOURCE_GROUP_NAME --location $SESSION_POOL_LOCATION
    
  6. Tworzenie konta usługi 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. Utwórz wdrożenie modelu GPT 3.5 Turbo o nazwie gpt-35-turbo na koncie usługi Azure OpenAI:

    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. Utwórz pulę sesji interpretera kodu:

    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
    

Uruchamianie przykładowej aplikacji lokalnie

Przed wdrożeniem aplikacji w usłudze Azure Container Apps możesz uruchomić ją lokalnie, aby ją przetestować.

Klonowanie aplikacji

  1. Sklonuj repozytorium przykładów sesji usługi Azure Container Apps.

    git clone https://github.com/Azure-Samples/container-apps-dynamic-sessions-samples.git
    
  2. Przejdź do katalogu zawierającego przykładową aplikację:

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

Konfigurowanie aplikacji

  1. Utwórz środowisko wirtualne języka Python i aktywuj je:

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

    Zmień wersję języka Python w poleceniu, jeśli używasz innej wersji. Zaleca się używanie języka Python w wersji 3.10 lub nowszej.

    Uwaga

    Jeśli używasz systemu Windows, zastąp ciąg .venv/bin/activate ciąg ..venv\Scripts\activate

  2. Zainstaluj wymagane pakiety języka Python:

    python -m pip install -r requirements.txt
    
  3. Aby uruchomić aplikację, należy skonfigurować zmienne środowiskowe.

    1. Pobierz punkt końcowy konta usługi Azure OpenAI:

      az cognitiveservices account show \
          --name $AZURE_OPENAI_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query properties.endpoint \
          --output tsv
      
    2. Pobierz klucz interfejsu API usługi Azure OpenAI:

      az cognitiveservices account keys list \
          --name $AZURE_OPENAI_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query key1 \
          --output tsv
      
    3. Pobierz punkt końcowy zarządzania pulą sesji usługi Azure Container Apps:

      az containerapp sessionpool show \
          --name $SESSION_POOL_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query properties.poolManagementEndpoint \
          --output tsv
      
    4. .env Utwórz plik w katalogu głównym przykładowej aplikacji (w tej samej lokalizacji co main.py). Dodaj następującą zawartość do pliku:

      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>
      

      Zastąp <AZURE_OPENAI_ENDPOINT> element punktem końcowym konta usługi Azure OpenAI, <AZURE_OPENAI_KEY> kluczem interfejsu API usługi Azure OpenAI i <SESSION_POOL_MANAGEMENT_ENDPOINT> punktem końcowym zarządzania pulą sesji.

  4. Aplikacja używa DefaultAzureCredential funkcji do uwierzytelniania za pomocą usług platformy Azure. Na komputerze lokalnym używa on bieżących poświadczeń logowania interfejsu wiersza polecenia platformy Azure. Aby uzyskać dostęp do puli sesji, musisz przyznać sobie rolę funkcji wykonawczej sesji usługi Azure ContainerApps w puli sesji.

    1. Pobierz nazwę użytkownika interfejsu wiersza polecenia platformy Azure:

      az account show --query user.name --output tsv
      
    2. Uruchom następujące polecenia, aby pobrać identyfikator zasobu puli sesji:

      az containerapp sessionpool show --name $SESSION_POOL_NAME --resource-group $RESOURCE_GROUP_NAME --query id --output tsv
      
    3. Przypisz rolę funkcji wykonawczej sesji usługi Azure ContainerApps do użytkownika interfejsu wiersza polecenia platformy Azure w puli sesji:

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

      Zastąp <CLI_USERNAME> ciąg nazwą użytkownika interfejsu wiersza polecenia platformy Azure i <SESSION_POOL_RESOURCE_ID> identyfikatorem zasobu puli sesji.

Uruchom aplikację

Przed uruchomieniem przykładowej aplikacji otwórz main.py w edytorze i przejrzyj kod. Aplikacja używa interfejsu FastAPI do utworzenia internetowego interfejsu API, który akceptuje komunikat użytkownika w ciągu zapytania.

Następujące wiersze kodu tworzy wystąpienie obiektu ACASessionsExecutor i udostępniają go agentowi autogenu:

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()
)

Gdy musi wykonywać obliczenia i zadania, agent używa interpretera kodu w ACASessionsExecutor , aby uruchomić kod. Kod jest wykonywany w sesji w puli sesji. Domyślnie podczas tworzenia wystąpienia narzędzia jest generowany identyfikator sesji losowej. Jeśli agent używa tego samego narzędzia do uruchamiania wielu fragmentów kodu w języku Python, używa tej samej sesji. Aby upewnić się, że każdy użytkownik końcowy ma unikatową sesję, użyj oddzielnego agenta i narzędzia dla każdego użytkownika.

Program ACASessionsExecutor jest implementowany w aca_sessions_executor.py.

  1. Uruchom przykładową aplikację:

    fastapi dev main.py
    
  2. Otwórz przeglądarkę i przejdź pod adres http://localhost:8000/docs. Zostanie wyświetlony interfejs użytkownika struktury Swagger dla przykładowej aplikacji.

  3. /chat Rozwiń punkt końcowy i wybierz pozycję Wypróbuj.

  4. Wprowadź What time is it right now? w message polu i wybierz pozycję Wykonaj.

    Agent odpowiada z bieżącą godziną. W terminalu zobaczysz dzienniki pokazujące kod języka Python wygenerowany przez agenta, aby uzyskać bieżący czas i uruchomić go w sesji interpretera kodu.

  5. Aby zatrzymać aplikację, wprowadź Ctrl+C polecenie w terminalu.

Opcjonalnie: wdrażanie przykładowej aplikacji w usłudze Azure Container Apps

Aby wdrożyć aplikację FastAPI w usłudze Azure Container Apps, musisz utworzyć obraz kontenera i wypchnąć go do rejestru kontenerów. Następnie możesz wdrożyć obraz w usłudze Azure Container Apps. Polecenie az containerapp up łączy te kroki w jedno polecenie.

Następnie należy skonfigurować tożsamość zarządzaną dla aplikacji i przypisać jej odpowiednie role, aby uzyskać dostęp do usługi Azure OpenAI i puli sesji.

  1. Ustaw zmienne dla środowiska usługi Container Apps i nazwy aplikacji:

    ENVIRONMENT_NAME=aca-sessions-tutorial-env
    CONTAINER_APP_NAME=chat-api
    
  2. Skompiluj i wdróż aplikację w usłudze 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 .
    

    Zastąp <AZURE_OPENAI_ENDPOINT> element punktem końcowym konta usługi Azure OpenAI, <AZURE_OPENAI_KEY> kluczem usługi Azure OpenAI i <SESSION_POOL_MANAGEMENT_ENDPOINT> punktem końcowym zarządzania pulą sesji.

  3. Włącz tożsamość zarządzaną przypisaną przez system dla aplikacji:

    az containerapp identity assign \
        --name $CONTAINER_APP_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --system-assigned
    
  4. Aby aplikacja uzyskiwała dostęp do puli sesji, należy przypisać tożsamość zarządzaną odpowiednie role.

    1. Pobierz identyfikator podmiotu zabezpieczeń tożsamości zarządzanej:

      az containerapp show \
          --name $CONTAINER_APP_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query identity.principalId \
          --output tsv
      
    2. Pobierz identyfikator zasobu puli sesji:

      az containerapp sessionpool show \
          --name $SESSION_POOL_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query id \
          --output tsv
      
    3. Przypisz tożsamość zarządzaną i Azure ContainerApps Session ExecutorContributor role w puli sesji:

      Przed uruchomieniem następującego polecenia zastąp <PRINCIPAL_ID> wartości i <SESSION_POOL_RESOURCE_ID> wartościami pobranymi w poprzednich krokach.

      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. Pobierz w pełni kwalifikowaną nazwę domeny aplikacji (FQDN):

    az containerapp show \
        --name $CONTAINER_APP_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --query properties.configuration.ingress.fqdn \
        --output tsv
    
  6. Otwórz przeglądarkę, aby przetestować https://<FQDN>/docs wdrożona aplikację.

Czyszczenie zasobów

Gdy skończysz z zasobami, możesz je usunąć, aby uniknąć naliczania opłat:

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

Następne kroki