Tutoriel : utiliser des sessions d'interpréteur de code dans AutoGen avec Azure Container Apps
AutoGen est une infrastructure pour le développement des applications de grand modèle de langage (LLM) à l’aide de plusieurs agents qui conversent entre eux pour résoudre les tâches. Les agents créés avec AutoGen peuvent fonctionner dans différents modes qui utilisent des combinaisons de LLM, d’entrées humaines et d’outils. Les exécuteurs de code représentent un type d’outil important pour les agents AutoGen. Ils permettent aux agents d’effectuer des tâches complexes en écrivant et en exécutant du code. En intégrant des sessions dynamiques Azure Container Apps à AutoGen, vous donnez à l’agent un interpréteur de code à utiliser pour effectuer des calculs utiles et des actions.
Dans ce tutoriel, vous allez apprendre à exécuter un agent d’IA créé dans AutoGen dans une API web. L’API accepte une entrée utilisateur et retourne une réponse générée par l’agent IA. L’agent utilise un interpréteur de code dans des sessions dynamiques pour effectuer des calculs.
Prérequis
- Compte Azure avec un abonnement actif.
- Si vous n’en avez pas, vous pouvez en créer un gratuitement.
- Installez Azure CLI.
- Git.
- Python 3.10 ou ultérieur.
Créer des ressources Azure
L’exemple d’application de ce guide de démarrage rapide utilise un LLM d’Azure OpenAI. Il utilise également des sessions Azure Container Apps pour exécuter le code généré par le LLM.
Mettez à jour Azure CLI vers la dernière version.
az upgrade
Supprimez l’extension Azure Container Apps si elle est déjà installée et installez une préversion de l’extension Azure Container Apps contenant des commandes pour les sessions :
az extension remove --name containerapp az extension add \ --name containerapp \ --allow-preview true -y
Connectez-vous à Azure :
az login
Définissez les variables utilisées dans ce guide de démarrage rapide :
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
Remplacez
<UNIQUE_OPEN_AI_NAME>
par un nom unique pour créer votre compte Azure OpenAI.Créez un groupe de ressources :
az group create --name $RESOURCE_GROUP_NAME --location $SESSION_POOL_LOCATION
Créez un compte 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
Créez un modèle de déploiement GPT 3.5 Turbo nommé
gpt-35-turbo
dans le compte 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"
Créez un pool de sessions d’interpréteur de code :
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
Exécuter l’exemple d’application localement
Avant de déployer l’application sur Azure Container Apps, vous pouvez l’exécuter localement pour la tester.
Cloner l’application
Clonez le référentiel d’exemples de sessions Azure Container Apps.
git clone https://github.com/Azure-Samples/container-apps-dynamic-sessions-samples.git
Accédez au répertoire qui contient l’exemple d’application :
cd container-apps-dynamic-sessions-samples/autogen-python-webapi
Configurer l’application
Créez un environnement virtuel Python et activez-le :
python3.11 -m venv .venv source .venv/bin/activate
Changez la version de Python dans la commande si vous utilisez une autre version. Il est recommandé d’utiliser Python 3.10 ou ultérieur.
Remarque
Si vous utilisez Windows, remplacez
.venv/bin/activate
par.venv\Scripts\activate
.Installez les packages Python requis :
python -m pip install -r requirements.txt
Pour exécuter l’application, vous devez configurer des variables d’environnement.
Récupérez le point de terminaison du compte Azure OpenAI :
az cognitiveservices account show \ --name $AZURE_OPENAI_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query properties.endpoint \ --output tsv
Récupérez la clé API Azure OpenAI :
az cognitiveservices account keys list \ --name $AZURE_OPENAI_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query key1 \ --output tsv
Récupérez le point de terminaison de gestion du pool de sessions Azure Container Apps :
az containerapp sessionpool show \ --name $SESSION_POOL_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query properties.poolManagementEndpoint \ --output tsv
Créez un fichier
.env
à la racine du répertoire de l’exemple d’application (au même endroit quemain.py
). Ajoutez le contenu suivant au fichier :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>
Remplacez
<AZURE_OPENAI_ENDPOINT>
par le point de terminaison du compte Azure OpenAI, puis<AZURE_OPENAI_KEY>
par la clé API Azure OpenAI et<SESSION_POOL_MANAGEMENT_ENDPOINT>
par le point de terminaison de gestion du pool de sessions.
L’application utilise
DefaultAzureCredential
pour s’authentifier auprès des services Azure. Sur votre machine locale, elle utilise vos informations d’identification de connexion Azure CLI actuelles. Vous devez vous attribuer le rôle Exécuteur de session Azure ContainerApps dans le pool de sessions pour que l’application accède au pool de sessions.Récupérez votre nom d’utilisateur d’Azure CLI :
az account show --query user.name --output tsv
Exécutez les commandes suivantes pour récupérer l’ID de ressource du pool de sessions :
az containerapp sessionpool show --name $SESSION_POOL_NAME --resource-group $RESOURCE_GROUP_NAME --query id --output tsv
Attribuez le rôle Exécuteur de session Azure ContainerAppsà votre compte utilisateur Azure CLI dans le pool de sessions :
az role assignment create \ --role "Azure ContainerApps Session Executor" \ --assignee <CLI_USERNAME> \ --scope <SESSION_POOL_RESOURCE_ID>
Remplacez
<CLI_USERNAME>
par votre nom d’utilisateur Azure CLI et<SESSION_POOL_RESOURCE_ID>
par l’ID de ressource du pool de sessions.
Exécuter l’application
Avant d’exécuter l’exemple d’application, ouvrez main.py dans un éditeur et examinez le code. L’application utilise FastAPI pour créer une API web qui accepte un message utilisateur dans la chaîne de requête.
Les lignes de code suivantes instancient un ACASessionsExecutor et le fournissent à l’agent 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()
)
Quand il doit effectuer des calculs et des tâches, l’agent utilise l’interpréteur de code dans ACASessionsExecutor pour exécuter le code. Le code est exécuté dans une session du pool de sessions. Par défaut, un identificateur de session aléatoire est généré quand vous instanciez l’outil. Si l’agent utilise le même outil pour exécuter plusieurs extraits de code Python, il utilise la même session. Pour vous assurer que chaque utilisateur final dispose d’une session unique, utilisez un agent et un outil distincts pour chaque utilisateur.
ACASessionsExecutor est implémenté dans aca_sessions_executor.py.
Exécutez l’exemple d’application :
fastapi dev main.py
Ouvrez un navigateur et accédez à
http://localhost:8000/docs
. Vous voyez l’interface utilisateur Swagger pour l’exemple d’application.Développez le point de terminaison
/chat
, puis sélectionnez Faites un essai.Entrez
What time is it right now?
dans le champmessage
, puis sélectionnez Exécuter.L’agent répond avec l’heure actuelle. Dans le terminal, vous voyez les journaux montrant le code Python généré par l’agent pour obtenir l’heure actuelle et son exécution dans une session d’interpréteur de code.
Pour arrêter l’application, entrez
Ctrl+C
dans le terminal.
Facultatif : Déployer l’exemple d’application sur Azure Container Apps
Pour déployer l’application FastAPI sur Azure Container Apps, vous devez créer une image conteneur et l’envoyer (push) à un registre de conteneurs. Vous pouvez ensuite déployer l’image sur Azure Container Apps. La commande az containerapp up
combine ces étapes en une seule commande.
Vous devez ensuite configurer l’identité managée pour l’application et lui attribuer les rôles appropriés pour accéder à Azure OpenAI et au pool de sessions.
Définissez les variables pour l’environnement Container Apps et le nom de l’application :
ENVIRONMENT_NAME=aca-sessions-tutorial-env CONTAINER_APP_NAME=chat-api
Générez et déployez l’application sur 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 .
Remplacez
<AZURE_OPENAI_ENDPOINT>
par le point de terminaison du compte Azure OpenAI, puis<AZURE_OPENAI_KEY>
par la clé Azure OpenAI et<SESSION_POOL_MANAGEMENT_ENDPOINT>
par le point de terminaison de gestion du pool de sessions.Activez l’identité managée affectée par le système pour l’application :
az containerapp identity assign \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --system-assigned
Pour que l’application accède au pool de sessions, vous devez affecter l’identité managée aux rôles appropriés.
Récupérez l’ID du principal de l’identité managée :
az containerapp show \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query identity.principalId \ --output tsv
Récupérez l’ID de ressource du pool de sessions :
az containerapp sessionpool show \ --name $SESSION_POOL_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query id \ --output tsv
Affectez l’identité managée aux rôles
Azure ContainerApps Session Executor
etContributor
sur le pool de sessions :Avant d’exécuter la commande suivante, remplacez
<PRINCIPAL_ID>
et<SESSION_POOL_RESOURCE_ID>
par les valeurs que vous avez récupérées lors des étapes précédentes.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>
Récupérez le nom de domaine complet (FQDN) de l’application :
az containerapp show \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query properties.configuration.ingress.fqdn \ --output tsv
Ouvrez le navigateur sur
https://<FQDN>/docs
pour tester l’application déployée.
Nettoyer les ressources
Quand vous en avez terminé avec les ressources, vous pouvez les supprimer pour éviter d’entraîner des frais :
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait