チュートリアル: AutoGen と Azure Container Apps でコード インタープリター セッションを使用する
AutoGen は、タスクを解決するために相互に対話する複数のエージェントを使用して大規模言語モデル (LLM) アプリケーションを開発するためのフレームワークです。 AutoGen で構築されたエージェントは、LLM、人間による入力、およびツールの組み合わせを使用するさまざまなモードで動作できます。 AutoGen エージェントにとって重要なツールの 1 つは、コード エグゼキューターです。 これらがコードを記述して実行することで、エージェントは複雑なタスクを実行できるようになります。 Azure Container Apps の動的セッションを AutoGen と統合することで、有用な計算の実行とアクションの実行に使用できるコード インタープリターがエージェントに提供されます。
このチュートリアルでは、AutoGen で作成された AI エージェントを Web API で実行する方法について説明します。 API はユーザー入力を受け付け、AI エージェントによって生成された応答を返します。 エージェントは、動的セッションでコード インタープリターを使用して計算を実行します。
前提条件
Azure リソースを作成する
このクイック スタートのサンプル アプリでは、Azure OpenAI の LLM を使用します。 また、Azure Container Apps セッションを使用して、LLM によって生成されたコードを実行します。
Azure CLI を最新バージョンに更新します。
az upgrade
Azure Container Apps 拡張機能が既にインストールされている場合はそれを削除し、セッション用のコマンドを含むプレビュー バージョンの Azure Container Apps 拡張機能をインストールします。
az extension remove --name containerapp az extension add \ --name containerapp \ --allow-preview true -y
Azure にサインインします。
az login
このクイック スタートで使用する変数を設定します。
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 アカウントを作成します。リソース グループを作成します。
az group create --name $RESOURCE_GROUP_NAME --location $SESSION_POOL_LOCATION
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
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"
コード インタープリターのセッション プールを作成します。
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 にデプロイする前に、ローカルで実行してテストすることができます。
アプリを複製する
Azure Container Apps セッション サンプル リポジトリを複製します。
git clone https://github.com/Azure-Samples/container-apps-dynamic-sessions-samples.git
サンプル アプリが含まれているディレクトリに移動します。
cd container-apps-dynamic-sessions-samples/autogen-python-webapi
Configure the app
Python 仮想環境を作成し、アクティブ化します。
python3.11 -m venv .venv source .venv/bin/activate
別の Python バージョンを使用している場合は、コマンドの Python バージョンを変更します。 Python 3.10 以降を使用することをお勧めします。
Note
Windows を使用している場合は、
.venv/bin/activate
を.venv\Scripts\activate
に置き換えます。必要な Python パッケージをインストールします。
python -m pip install -r requirements.txt
アプリを実行するには、環境変数を構成する必要があります。
Azure OpenAI アカウント エンドポイントを取得します。
az cognitiveservices account show \ --name $AZURE_OPENAI_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query properties.endpoint \ --output tsv
Azure OpenAI API キーを取得します。
az cognitiveservices account keys list \ --name $AZURE_OPENAI_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query key1 \ --output tsv
Azure Container Apps セッション プール管理エンドポイントを取得します。
az containerapp sessionpool show \ --name $SESSION_POOL_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query properties.poolManagementEndpoint \ --output tsv
サンプル アプリ ディレクトリのルート (
main.py
と同じ場所) に.env
ファイルを作成します。 次の内容をファイルに追加します。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>
をセッション プール管理エンドポイントに置き換えます。
アプリは、Azure サービスへの認証に
DefaultAzureCredential
を使用します。 ローカル コンピューターでは、現在の Azure CLI ログイン資格情報が使用されます。 アプリがセッション プールにアクセスするには、セッション プールの Azure ContainerApps Session Executor ロールを自分自身に付与する必要があります。Azure CLI ユーザー名を取得します。
az account show --query user.name --output tsv
次のコマンドを実行して、セッション プールのリソース ID を取得します。
az containerapp sessionpool show --name $SESSION_POOL_NAME --resource-group $RESOURCE_GROUP_NAME --query id --output tsv
Azure ContainerApps Session Executor ロールをセッション プールの 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>
をセッション プールのリソース ID に置き換えます。
アプリを実行する
サンプル アプリを実行する前に、エディターで 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 に実装されています。
サンプル アプリを実行します。
fastapi dev main.py
ブラウザーを開き、
http://localhost:8000/docs
に移動します。 サンプル アプリの Swagger UI が表示されます。/chat
エンドポイントを展開して、[試してみる] を選択します。message
フィールドに「What time is it right now?
」と入力し、[実行] を選択します。エージェントは現在の時刻を応答で返します。 ターミナルには、エージェントが現在の時刻を取得するための Python コードを生成し、そのコードをコード インタープリター セッションで実行したことを示すログが表示されます。
アプリを停止するには、ターミナルに「
Ctrl+C
」と入力します。
オプション: サンプル アプリを Azure Container Apps にデプロイする
FastAPI アプリを Azure Container Apps にデプロイするには、コンテナー イメージを作成し、それをコンテナー レジストリにプッシュする必要があります。 その後、イメージを Azure Container Apps にデプロイできます。
az containerapp up
コマンドは、これらの手順を 1 つのコマンドに結合します。
その後、アプリのマネージド ID を構成し、そのマネージド ID に Azure OpenAI とセッション プールにアクセスするための適切なロールを割り当てる必要があります。
Container Apps 環境とアプリ名の変数を設定します。
ENVIRONMENT_NAME=aca-sessions-tutorial-env CONTAINER_APP_NAME=chat-api
アプリをビルドして 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>
をセッション プール管理エンドポイントに置き換えます。アプリのシステム割り当てマネージド ID を有効にします。
az containerapp identity assign \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --system-assigned
アプリがセッション プールにアクセスするには、マネージド ID に適切なロールを割り当てる必要があります。
マネージド ID のプリンシパル ID を取得します。
az containerapp show \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query identity.principalId \ --output tsv
セッション プールのリソース ID を取得します。
az containerapp sessionpool show \ --name $SESSION_POOL_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query id \ --output tsv
マネージド ID にセッション プールの
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>
アプリの完全修飾ドメイン名 (FQDN) を取得します。
az containerapp show \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query properties.configuration.ingress.fqdn \ --output tsv
ブラウザーを開いて
https://<FQDN>/docs
にアクセスし、デプロイされたアプリをテストします。
リソースをクリーンアップする
リソースを使い終えたら、料金が発生しないようにそれらのリソースを削除することができます。
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait