Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les sessions dynamiques Azure Container Apps offrent un accès rapide et scalable à un interpréteur de code. Chaque session d’interpréteur de code est entièrement isolée par une limite Hyper-V et est conçue pour exécuter du code non approuvé.
Utilisations des sessions d’interpréteur de code
Les sessions d’interpréteur de code sont idéales dans les scénarios où vous devez exécuter du code potentiellement malveillant ou susceptible d’endommager le système hôte ou d’autres utilisateurs, par exemple :
- Code généré par un grand modèle de langage (LLM).
- Code envoyé par un utilisateur final dans une application web ou SaaS.
Pour les frameworks LLM populaires comme LangChain, LlamaIndex ou Semantic Kernel, vous pouvez utiliser des outils et plug-ins pour intégrer des applications d’IA aux sessions d’interpréteur de code.
Vos applications peuvent également s’intégrer à une session d’interpréteur de code avec une API REST. L’API vous permet de :
Exécuter du code dans une session et récupérer les résultats
Chargez et téléchargez des fichiers vers et depuis la session.
Vous pouvez charger et télécharger des fichiers de code exécutables ou des fichiers de données que votre code peut traiter.
Les sessions de l’interpréteur de code intégré prennent en charge les scénarios d’exécution de code les plus courants sans avoir à gérer l’infrastructure ni les conteneurs.
Si vous avez besoin d’un contrôle total sur l’environnement d’exécution de code ou si vous avez un autre scénario nécessitant des bacs à sable isolés, vous pouvez utiliser des sessions d’interpréteur de code personnalisé.
Pool de sessions d’interpréteur de code
Pour utiliser des sessions d’interpréteur de code, vous avez besoin d’une ressource Azure appelée pool de sessions qui définit la configuration des sessions d’interpréteur de code.
Dans le pool de sessions, vous pouvez spécifier des paramètres comme le nombre maximal de sessions simultanées et la durée pendant laquelle une session peut être inactive avant son arrêt.
Vous pouvez créer un pool de sessions en utilisant le portail Azure, Azure CLI ou des modèles Azure Resource Manager. Après avoir créé un pool de sessions, vous pouvez utiliser les points de terminaison de l’API de gestion du pool pour gérer et exécuter le code à l’intérieur d’une session.
Pour plus d’informations sur la création et la configuration d’un pool de sessions, consultez Utiliser des pools de sessions.
Exécution de code dans une session
Une fois que vous avez créé un pool de sessions, votre application peut interagir avec des sessions du pool en utilisant une intégration à un framework LLM ou directement les points de terminaison de l’API de gestion du pool.
Identificateurs de session
Important
L’identificateur de session est une information sensible qui nécessite que vous utilisiez un processus sécurisé pour gérer sa valeur. Une partie de ce processus nécessite que votre assure que chaque utilisateur ou locataire n’a accès qu’à ses propres sessions.
L’échec de la sécurisation de l’accès aux sessions peut entraîner une mauvaise utilisation ou un accès non autorisé aux données stockées dans les sessions de vos utilisateurs. Pour plus d’informations, consultez identificateurs de session.
Lorsque vous interagissez avec des sessions dans un pool, vous utilisez un identificateur de session pour référencer chaque session A identificateur de session est une chaîne que vous définissez unique dans le pool de sessions. Si vous créez une application web, vous pouvez utiliser l’ID de l’utilisateur. Si vous créez un chatbot, vous pouvez utiliser l’ID de conversation.
S’il y a une session en cours d’exécution avec l’identificateur, la session est réutilisée. S’il n’y a pas de session en cours d’exécution avec l’identificateur, une session est créée automatiquement.
Authentification
L’authentification est gérée à l’aide de jetons Microsoft Entra. Les jetons Microsoft Entra valides sont générés par une identité appartenant aux rôles Exécuteur de session Azure Container Apps et Contributeur sur le pool de sessions.
Si vous utilisez une intégration de framework LLM, le framework se charge de la génération et la gestion des jetons pour vous. Vérifiez que l’application est configurée avec une identité managée dotée des attributions de rôle nécessaires sur le pool de sessions.
Si vous utilisez directement les points de terminaison de l’API de gestion du pool, vous devez générer un jeton et l’inclure dans l’en-tête Authorization de vos requêtes HTTP. En plus des attributions de rôle mentionnées précédemment, le jeton doit contenir une revendication d’audience (aud) avec la valeur https://dynamicsessions.io.
Pour plus d’informations, consultez Authentification et autorisation.
Utiliser des fichiers
Vous pouvez charger et télécharger des fichiers et répertorier tous les fichiers d’une session d’interpréteur de code.
Caractères pris en charge
Les noms de fichiers et le chemin d’accès doivent utiliser uniquement les caractères pris en charge suivants :
- Majuscules et minuscules :
A-Z,a-z - Chiffres:
0-9 - Caractères spéciaux :
-,_,,.,@,$,&,=,;,,,#,%,^,(,) - Caractères Unicode : inclut le chinois, le japonais et d’autres caractères internationaux
- Le chemin n’autorise pas :
.
Charger un fichier
Pour charger un fichier dans une session, envoyez une requête POST au point de terminaison uploadFile dans une demande de données de formulaire en plusieurs parties. Ajoutez les données de fichier dans le corps de la demande. Le fichier doit inclure un nom de fichier.
Les fichiers chargés sont stockés dans le système de fichiers de la session sous le répertoire /mnt/data.
L’exemple suivant montre comment charger un fichier dans une session.
Avant d’envoyer la demande, remplacez les espaces réservés entre crochets <> par les valeurs propres à votre demande.
POST https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files/upload?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Authorization: Bearer <token>
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="<FILE_NAME_AND_EXTENSION>"
Content-Type: application/octet-stream
(data)
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Téléchargement d’un fichier
Pour télécharger un fichier à partir du répertoire /mnt/data d’une session, envoyez une requête GET au point de terminaison file/content/{filename}. La réponse inclut les données de fichier.
L’exemple suivant montre comment mettre en forme une GET demande pour télécharger un fichier.
Avant d’envoyer la demande, remplacez les espaces réservés entre crochets <> par les valeurs propres à votre demande.
GET https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files/content/<FILE_NAME_AND_EXTENSION>?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Authorization: Bearer <TOKEN>
Répertorier les fichiers
Pour lister les fichiers du répertoire /mnt/data d’une session, envoyez une requête GET au point de terminaison files.
L’exemple suivant montre comment répertorier les fichiers dans le répertoire d’une session.
Avant d’envoyer la demande, remplacez les espaces réservés entre crochets <> par les valeurs propres à votre demande.
GET https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Authorization: Bearer <TOKEN>
La réponse contient la liste des fichiers de la session.
La liste suivante montre un exemple de type de réponse pour une demande de contenu de la session.
{
"$id": "1",
"value": [
{
"$id": "2",
"properties": {
"$id": "3",
"filename": "test1.txt",
"size": 16,
"lastModifiedTime": "2024-05-02T07:21:07.9922617Z"
}
},
{
"$id": "4",
"properties": {
"$id": "5",
"filename": "test2.txt",
"size": 17,
"lastModifiedTime": "2024-05-02T07:21:08.8802793Z"
}
}
]
}
Sécurité
Les sessions d’interpréteur de code sont conçues pour exécuter du code non approuvé dans des environnements isolés, ce qui garantit que vos applications et vos données restent protégées.
Intégrations de framework LLM
Au lieu d’utiliser directement l’API de gestion du pool de sessions, les frameworks LLM suivants fournissent des intégrations aux sessions d’interpréteur de code :
| Infrastructure | Paquet | Didacticiel |
|---|---|---|
| LangChain | Python : langchain-azure-dynamic-sessions |
Tutoriel |
| LlamaIndex | Python : llama-index-tools-azure-code-interpreter |
Tutoriel |
| Noyau sémantique | Python : semantic-kernel (version 0.9.8-b1 ou ultérieure) |
Tutoriel |
Points de terminaison de l’API de gestion
Si vous n’utilisez pas d’intégration d’infrastructure LLM, vous pouvez interagir directement avec le pool de sessions à l’aide des points de terminaison de l’API de gestion.
Exécuter du code dans une session
Pour exécuter du code dans une session, envoyez une requête POST au point de terminaison code/execute avec le code à exécuter dans le corps de la demande.
L’exemple suivant imprime Hello, world! en Python.
Avant d’envoyer la demande, remplacez les espaces réservés entre crochets <> par les valeurs appropriées pour votre pool de sessions et l’identificateur de session.
POST https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/code/execute?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Content-Type: application/json
Authorization: Bearer <token>
{
"properties": {
"codeInputType": "inline",
"executionType": "synchronous",
"code": "print('Hello, world!')"
}
}
Pour réutiliser une session, spécifiez le même identificateur de session dans les demandes suivantes.
Charger un fichier dans une session
Pour charger un fichier dans une session, envoyez une requête POST au point de terminaison uploadFile dans une demande de données de formulaire en plusieurs parties. Ajoutez les données de fichier dans le corps de la demande. Le fichier doit inclure un nom de fichier.
Les fichiers chargés sont stockés dans le système de fichiers de la session sous le répertoire /mnt/data.
Avant d’envoyer la demande, remplacez les espaces réservés entre crochets <> par les valeurs propres à votre demande.
POST https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files/upload?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Authorization: Bearer <token>
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="<FILE_NAME_AND_EXTENSION>"
Content-Type: application/octet-stream
(data)
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Remarque
La limite de téléchargement de fichiers est de 128MB. Si elle est dépassée, une valeur HTTP 413 peut être retournée.
Télécharger un fichier à partir d’une session
Pour télécharger un fichier à partir du répertoire /mnt/data d’une session, envoyez une requête GET au point de terminaison file/content/{filename}. La réponse inclut les données de fichier.
Avant d’envoyer la demande, remplacez les espaces réservés entre crochets <> par les valeurs propres à votre demande.
GET https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files/content/<FILE_NAME_AND_EXTENSION>?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Authorization: Bearer <TOKEN>
Lister les fichiers dans une session
Pour lister les fichiers du répertoire /mnt/data d’une session, envoyez une requête GET au point de terminaison files.
Avant d’envoyer la demande, remplacez les espaces réservés entre crochets <> par les valeurs propres à votre demande.
GET https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Authorization: Bearer <TOKEN>
La réponse contient la liste des fichiers de la session.
La liste suivante montre un exemple de type de réponse pour une demande de contenu de la session.
{
"$id": "1",
"value": [
{
"$id": "2",
"properties": {
"$id": "3",
"filename": "test1.txt",
"size": 16,
"lastModifiedTime": "2024-05-02T07:21:07.9922617Z"
}
},
{
"$id": "4",
"properties": {
"$id": "5",
"filename": "test2.txt",
"size": 17,
"lastModifiedTime": "2024-05-02T07:21:08.8802793Z"
}
}
]
}
Packages préinstallés
Les sessions d’interpréteur de code Python incluent des packages Python populaires tels que NumPy, pandas et scikit-learn.
Pour générer la liste des packages préinstallés, appelez le point de terminaison code/execute avec le code suivant.
Avant d’envoyer la demande, remplacez les espaces réservés entre crochets <> par les valeurs propres à votre demande.
POST https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/identifier/<SESSION_ID>/code/execute?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Content-Type: application/json
Authorization: Bearer <TOKEN>
{
"properties": {
"codeInputType": "inline",
"executionType": "synchronous",
"code": "import pkg_resources\n[(d.project_name, d.version) for d in pkg_resources.working_set]"
}
}
Exploitation forestière
Les sessions d’interpréteur de code ne prennent pas en charge directement la journalisation. Votre application qui interagit avec les sessions peut journaliser les requêtes effectuées auprès de l’API de gestion du pool de sessions et ses réponses.
Facturation
Les sessions d’interpréteur de code sont facturées en fonction de la durée de chaque session. Pour plus d'informations, consultez Facturation.