Un bac à sable shell est un conteneur Linux géré et isolé, associé à une instance Agent Platform. Le bac à sable exécute une commande shell envoyée par votre agent et renvoie stdout, stderr et un code de sortie. Rien ne s'exécute sur votre propre infrastructure, et le conteneur est détruit lorsque le bac à sable est supprimé.
Utilisez un bac à sable shell lorsqu'un agent doit exécuter des commandes shell non fiables ou générées, installer des packages, manipuler des fichiers ou utiliser des outils de ligne de commande sans exposer votre environnement.
Limites
send_command()etexecute_code()ne fonctionnent pas avec les bacs à sable shell. Ces méthodes ciblent les bacs à sable d'exécution de code Code Execution sandboxes et envoient des charges utiles Python, que le conteneur shell n'accepte pas. Utilisez/execavec les bacs à sable shell.
Avant de commencer
Configurez votre projet et votre environnement.
Configurer votre projet
- Connectez-vous à votre Google Cloud compte. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Gemini Enterprise Agent Platform API.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Gemini Enterprise Agent Platform API.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.
Obtenir les rôles requis
Pour utiliser le bac à sable, vous avez besoin du rôle suivant :
- Utilisateur Agent Platform (
roles/aiplatform.user) sur le projet.
Installer les bibliothèques
Installez le SDK avec le module Agent Platform :
pip install "google-cloud-aiplatform[agent_engines]"Authentifier
Pour vous authentifier à l'aide des identifiants par défaut de l'application :
gcloud auth application-default loginCréer une instance Agent Platform
Pour utiliser un bac à sable shell, créez d'abord une instance Agent Platform. Vous n'avez pas besoin de déployer un agent pour utiliser un bac à sable shell. Sans déploiement, la création d'une instance Agent Platform ne devrait prendre que quelques secondes.
import vertexai
client = vertexai.Client(project='PROJECT_ID', location='LOCATION')
agent_engine = client.agent_engines.create()
agent_engine_name = agent_engine.api_resource.name
Remplacez les éléments suivants :
PROJECT_ID: ID de votre Google Cloud projet.LOCATION: Google Cloud région de votre instance Agent Platform. Consultez les régions compatibles.
Créer un bac à sable shell
Vous devez fournir au moins l'un des éléments suivants lors de la création d'un bac à sable :
specavec un environnement défini (shell_environment)config.sandbox_environment_template(un modèle par défaut est créé si aucun n'est spécifié. Pour en savoir plus, consultez Réutiliser des modèles dans plusieurs bacs à sable)config.sandbox_environment_snapshot
L'exemple suivant transmet shell_environment dans la spécification du bac à sable :
engine = (
"projects/PROJECT_ID/locations/LOCATION"
"/reasoningEngines/INSTANCE_ID"
)
operation = client.agent_engines.sandboxes.create(
name=engine,
spec={"shell_environment": {}},
config={
"display_name": "my-shell-sandbox",
"wait_for_completion": True,
"ttl": "3600s",
},
)
sandbox = operation.response
print(sandbox.name, sandbox.state)
Lorsque le bac à sable est prêt, il affiche une réponse semblable à la suivante :
projects/.../sandboxEnvironments/1035360621853409280 SandboxState.STATE_RUNNING
Un bac à sable atteint généralement l'état STATE_RUNNING en 20 secondes environ.
Exécuter une commande
Pour exécuter une commande shell dans le bac à sable, utilisez la fonction d'assistance execute_bash(), qui envoie la commande au conteneur :
result = client.sandboxes.execute_bash(
name=sandbox.name,
command="echo hello && whoami && pwd",
)
print(result)
La commande renvoie stdout, stderr, returncode et duration_ms :
{'stdout': 'hello\nappuser\n/workspace\n', 'stderr': '', 'returncode': 0, 'duration_ms': 8}
execute_bash() s'authentifie avec vos propres identifiants. Vous n'avez donc pas besoin de compte de service ni de JWT signé.
Facultatif : Vous pouvez définir explicitement cwd pour choisir le répertoire de travail et timeout pour limiter la durée d'exécution de la commande. Sinon, le bac à sable utilise ses propres valeurs par défaut (/workspace et la limite de temps du bac à sable) :
result = client.sandboxes.execute_bash(
name=sandbox.name,
command="pytest -q",
cwd="/workspace/app",
timeout=120,
)
Pour savoir si une commande échoue, inspectez returncode et stderr :
result = client.sandboxes.execute_bash(
name=sandbox.name,
command="ls /nope",
)
print(result)
{'stdout': '', 'stderr': "ls: cannot access '/nope': No such file or directory\n", 'returncode': 2, 'duration_ms': 5}
Lorsque vous utilisez l'environnement de conteneur, tenez compte des points suivants :
- Les commandes s'exécutent en tant qu'utilisateur non privilégié
appuser. Il n'y a pas desudo. - Chaque commande s'exécute dans un nouveau shell. Par conséquent,
cdet les variables shell ne sont pas transférés entre les appels. Enchaînez-les dans une seule commande ou écrivez l'état dans un fichier sous/workspace. - L'accès Internet sortant est désactivé, sauf si le modèle l'active.
Libérer de l'espace
Pour supprimer le bac à sable et ne plus être facturé, exécutez la commande suivante :
client.agent_engines.sandboxes.delete(name=sandbox.name)
print("Sandbox deleted.")