Guia de início rápido do sandbox do shell

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() e execute_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 /exec com sandboxes de shell.

Antes de começar

Configurr o projeto e o ambiente.

Criar o projeto

  1. 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.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Gemini Enterprise Agent Platform API.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. 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.

    Enable the API

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Gemini Enterprise Agent Platform API.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. 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.

    Enable the API

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 login

Criar 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:

  • spec com 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 cd e 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.")

A seguir