Uma sandbox de shell é um contêiner Linux gerenciado e isolado anexado a uma instância da Agent Platform. A sandbox executa um comando de shell enviado pelo agente e retorna stdout, stderr e um código de saída. Nada é executado na sua própria infraestrutura, e o contêiner é destruído quando a sandbox é excluída.
Use uma sandbox de shell quando um agente precisar executar comandos de shell não confiáveis ou gerados, instalar pacotes, manipular arquivos ou usar ferramentas de linha de comando sem expor seu ambiente.
Limitações
send_command()eexecute_code()não funcionam com sandboxes de shell. Esses métodos têm como destino sandboxes de execução de código e enviam payloads Python, que o contêiner de shell não aceita. Use/execcom sandboxes de shell.
Antes de começar
Configurr o projeto e o ambiente.
Criar o projeto
- Faça login na sua Google Cloud conta do. Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em situações reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
-
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.
Ter os papéis necessários
Para usar a sandbox, você precisa do seguinte papel:
- Usuário da Agent Platform (
roles/aiplatform.user) no projeto.
Instalar bibliotecas
Instale o SDK com o módulo da Agent Platform:
pip install "google-cloud-aiplatform[agent_engines]"Autenticar
Para autenticar com o Application Default Credentials:
gcloud auth application-default loginCriar uma instância da Agent Platform
Para usar uma sandbox de shell, primeiro crie uma instância da Agent Platform. Não é necessário implantar um agente para usar uma sandbox de shell. Sem a implantação, a criação de uma instância da Agent Platform leva alguns segundos.
import vertexai
client = vertexai.Client(project='PROJECT_ID', location='LOCATION')
agent_engine = client.agent_engines.create()
agent_engine_name = agent_engine.api_resource.name
Substitua:
PROJECT_ID: o ID do projeto do Google Cloud .LOCATION: a Google Cloud região da instância da Agent Platform. Consulte Regiões com suporte.
Criar uma sandbox de shell
É necessário fornecer pelo menos um dos seguintes itens ao criar uma sandbox:
speccom um ambiente definido (shell_environment)config.sandbox_environment_template(um modelo padrão será criado se não for especificado. Para mais informações, consulte Reutilizar modelos em sandboxes)config.sandbox_environment_snapshot
O exemplo a seguir transmite shell_environment na especificação da sandbox:
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)
Quando a sandbox estiver pronta, ela vai imprimir uma resposta semelhante a esta:
projects/.../sandboxEnvironments/1035360621853409280 SandboxState.STATE_RUNNING
Uma sandbox normalmente atinge o STATE_RUNNING em cerca de 20 segundos.
Executar um comando
Para executar um comando de shell na sandbox, use a função auxiliar execute_bash(), que envia o comando para o contêiner:
result = client.sandboxes.execute_bash(
name=sandbox.name,
command="echo hello && whoami && pwd",
)
print(result)
O comando retorna stdout, stderr, returncode e duration_ms:
{'stdout': 'hello\nappuser\n/workspace\n', 'stderr': '', 'returncode': 0, 'duration_ms': 8}
execute_bash() autentica com suas próprias credenciais. Portanto, você não precisa de uma conta de serviço ou de um JWT assinado.
Opcional: você pode definir explicitamente cwd para escolher o diretório de trabalho e timeout para limitar o tempo de execução do comando. Caso contrário, a sandbox usa os próprios padrões (/workspace e o limite de tempo da sandbox):
result = client.sandboxes.execute_bash(
name=sandbox.name,
command="pytest -q",
cwd="/workspace/app",
timeout=120,
)
Para saber se um comando falha, inspecione returncode e 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}
Ao usar o ambiente de contêiner, considere o seguinte:
- Os comandos são executados como o usuário não privilegiado
appuser. Não hásudo. - Cada comando é executado em um novo shell. Portanto, as variáveis
cde de shell não são transferidas entre as chamadas. Encadeie-as em um comando ou grave o estado em um arquivo em/workspace. - O acesso externo à Internet fica desativado, a menos que o modelo o ative.
Limpar
Para excluir a sandbox e interromper as cobranças, execute o seguinte:
client.agent_engines.sandboxes.delete(name=sandbox.name)
print("Sandbox deleted.")