Поделиться через


Руководство. Использование сеансов интерпретатора кода в AutoGen с приложениями контейнеров Azure

AutoGen — это платформа для разработки больших языковых моделей (LLM) приложений с помощью нескольких агентов, которые взаимодействуют друг с другом для решения задач. Агенты, созданные с помощью AutoGen, могут работать в различных режимах, использующих сочетания LLM, человеческих входных данных и инструментов. Одним из важных типов инструментов для агентов AutoGen является исполнитель кода. Они позволяют агентам выполнять сложные задачи путем написания и выполнения кода. Интеграция динамических сеансов приложений контейнеров Azure с AutoGen позволяет агенту использовать интерпретатор кода для выполнения полезных вычислений и выполнения действий.

В этом руководстве описано, как запустить агент ИИ, созданный в AutoGen в веб-API. API принимает входные данные пользователя и возвращает ответ, созданный агентом ИИ. Агент использует интерпретатор кода в динамических сеансах для выполнения вычислений.

Необходимые компоненты

Создание ресурсов Azure

Пример приложения в этом кратком руководстве использует LLM из Azure OpenAI. Он также использует сеансы приложений контейнеров Azure для запуска кода, созданного 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. Создайте развертывание модели GPT 3.5 Turbo с именем gpt-35-turbo в учетной записи 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. Создайте пул сеансов интерпретатора кода:

    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 его можно запустить локально, чтобы протестировать его.

Клонирование приложения

  1. Клонируйте репозиторий примеров сеансов приложений контейнеров Azure.

    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. Получите ключ API Azure OpenAI:

      az cognitiveservices account keys list \
          --name $AZURE_OPENAI_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query key1 \
          --output tsv
      
    3. Получите конечную точку управления пулом сеансов контейнеров Azure:

      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> ключом API Azure OpenAI и <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>
      

      Замените <CLI_USERNAME> имя пользователя Azure CLI и <SESSION_POOL_RESOURCE_ID> идентификатор ресурса пула сеансов.

Выполнить приложение

Перед запуском примера приложения откройте main.py в редакторе и просмотрите код. Приложение использует FastAPI для создания веб-API, который принимает пользовательское сообщение в строке запроса.

Следующие строки кода создает экземпляр ACASessionsExecutor и предоставляет его агенту автогена:

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 для примера приложения.

  3. Разверните конечную точку /chat и выберите "Попробовать".

  4. Введите What time is it right now? поле message и нажмите кнопку "Выполнить".

    Агент отвечает с текущим временем. В терминале отображаются журналы, показывающие созданный агентом код Python, чтобы получить текущее время и выполнить его в сеансе интерпретатора кода.

  5. Чтобы остановить приложение, введите Ctrl+C в терминале.

Необязательно. Развертывание примера приложения в приложениях контейнеров Azure

Чтобы развернуть приложение FastAPI в приложениях контейнеров Azure, необходимо создать образ контейнера и отправить его в реестр контейнеров. Затем вы можете развернуть образ в приложениях контейнеров Azure. Команда az containerapp up объединяет эти шаги в одну команду.

Затем необходимо настроить управляемое удостоверение для приложения и назначить ему соответствующие роли для доступа к Azure OpenAI и пулу сеансов.

  1. Задайте переменные для среды "Приложения контейнеров" и имени приложения:

    ENVIRONMENT_NAME=aca-sessions-tutorial-env
    CONTAINER_APP_NAME=chat-api
    
  2. Создайте и разверните приложение в приложениях контейнеров Azure:

    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. Назначьте управляемое удостоверение Azure ContainerApps Session Executor и Contributor роли в пуле сеансов:

      Перед выполнением следующей команды замените <PRINCIPAL_ID> значения <SESSION_POOL_RESOURCE_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

Следующие шаги