Consulte os exemplos de provisionamento gerenciado pelo aplicativo e gerenciado por webhook no OpenAI Cookbook.
Como funciona
O serviço Managed Agents Runtime Services (M.A.R.S.) da DigitalOcean inicia uma microVM Firecracker com a imagem codex-agentapi. A imagem inclui o Codex e inicia o executor, que estabelece uma conexão de saída com a API de Agentes.
Escolha o provisionamento gerenciado por webhook para iniciar ou retomar sandboxes em resposta a eventos da OpenAI, ou o provisionamento gerenciado pelo aplicativo para controlá-los pelo seu aplicativo. Para começar com um exemplo interativo, siga o procedimento opcional com a CLI da DigitalOcean. Consulte Ciclo de vida do sandbox para entender como funcionam a conexão e a recuperação.
O DigitalOcean Managed Agents está em prévia pública. Consulte a documentação da DigitalOcean para saber como acessar e configurar o serviço.
Antes de começar
Você precisa de uma conta da DigitalOcean habilitada para sandboxes e com acesso a codex-agentapi, além de um projeto da OpenAI com acesso à API de Agentes.
Use OPENAI_API_KEY no aplicativo ou na CLI. Defina OPENAI_EXECUTOR_API_KEY com o valor de uma chave de ambiente. Passe apenas a chave de ambiente para o sandbox como CODEX_API_KEY.
Para controladores de webhook ou aplicativos Python, defina DIGITALOCEAN_TOKEN e instale o SDK PyDo na versão 0.41.0 ou posterior com suporte a operações assíncronas (pydo[aio]). Use o SDK da OpenAI para fazer solicitações à API de Agentes. Só é necessário instalar a CLI se você optar pelo procedimento que a utiliza.
Provisionamento gerenciado por webhook
- Crie um agente armazenado e salve o ID dele em
OPENAI_AGENT_ID. Implante um controlador de webhook HTTPS na DigitalOcean App Platform com esse ID,OPENAI_API_KEYpara consultar sessões,DIGITALOCEAN_TOKENeOPENAI_EXECUTOR_API_KEY. - Registre o endpoint
/webhookdo controlador no seu projeto da OpenAI. Habiliteagent.session.action_requiredeagent.session.failed, salve o segredo de assinatura emOPENAI_WEBHOOK_SECRETe implante o controlador novamente. - Siga as etapas para executar uma sessão usando o mesmo
OPENAI_AGENT_IDe/workspacecomo diretório de trabalho. Abra o fluxo de eventos e envie os dados de entrada. Quando a OpenAI solicita umaenvironment_connection, o controlador verifica a assinatura, recupera a sessão atual e confere o ID do agente e as ações exigidas pela sessão. Ele procuramars-{session_id}na DigitalOcean e retoma o sandbox se estiver pausado ou cria um se não houver nenhum ativo. - Ao receber
agent.session.failed, consulte a sessão novamente e exclua o sandbox dela somente se o status atual da sessão ainda forfailed.
A imagem conecta o executor ao ambiente da sessão. Seu aplicativo envia dados de entrada e recebe os resultados em fluxo contínuo pela API de Agentes. O controlador cuida do provisionamento e da reconexão. Execute as operações de provisionamento de cada sessão uma por vez para lidar com entregas de eventos duplicadas ou simultâneas. Consulte as orientações sobre o ciclo de vida de sandboxes gerenciados por webhook para conhecer os requisitos do controlador.
Experimente com a CLI da DigitalOcean
A CLI cria a sessão e o sandbox e permite interagir com o agente pelo terminal. Ela provisiona o sandbox diretamente, sem um controlador de webhook.
Instale a versão 1.170.0 ou posterior do doctl, que inclui harness-runtime. Em seguida, faça a autenticação:
doctl auth init
Salve este manifesto como environment.yaml:
name: openai-codex-session
agent: codex-agentapi
config:
agent:
model: gpt-6.1-sol
instructions: Work from the files in /workspace.
environment:
type: self_hosted
workspace_directory: /workspace
egress:
- api.openai.com
- codex-cloud-environments.chatgpt.com
env:
CODEX_ENVIRONMENT_ID: ${ENV_ID}
secrets:
CODEX_API_KEY: ${OPENAI_EXECUTOR_API_KEY}
O bloco config contém a solicitação de criação da sessão na OpenAI. A CLI autentica essa solicitação com OPENAI_API_KEY, preenche ${ENV_ID} com o valor recebido na resposta e passa apenas a chave de ambiente para o sandbox. Mantenha os manifestos com os valores já preenchidos fora dos logs e do controle de versão. Adicione a egress todos os destinos que suas ferramentas precisam acessar.
Crie a sessão e o sandbox:
doctl harness-runtime create --spec environment.yaml
Por padrão, o comando aguarda até 300 segundos para que os recursos fiquem prontos. Nos detalhes da sessão, localize e salve o ID da sessão da OpenAI e o ID da sessão da DigitalOcean. Em seguida, conecte o terminal à sessão:
doctl harness-runtime launch openai-codex-session
Peça ao agente que escreva hello em /workspace/hello.txt e depois leia o conteúdo do arquivo. Pressione Ctrl+D para desconectar o terminal sem excluir a sessão. Para se reconectar, execute o mesmo comando launch. Quando terminar, siga as etapas de limpeza.
Provisionamento gerenciado pelo aplicativo
Use este procedimento quando o seu aplicativo for responsável por criar a sessão e provisionar o sandbox. Crie primeiro a sessão da OpenAI:
import OpenAI from "openai";
const client = new OpenAI();
const session = await client.beta.agents.sessions.create({
agent: {
model: "gpt-6-astra",
instructions:
"You are a helpful coding assistant. Write clean code and verify that it works.",
},
environment: {
type: "self_hosted",
workspace_directory: "/workspace",
},
});
console.log(session);Salve session.id e o ID do ambiente conforme descrito em Conectar um sandbox. Salve o manifesto a seguir como sandbox.yaml. Ele configura apenas o sandbox, pois a configuração do agente já foi enviada à OpenAI:
agent: codex-agentapi
egress:
- api.openai.com
- codex-cloud-environments.chatgpt.com
env:
CODEX_ENVIRONMENT_ID: ${ENV_ID}
secrets:
CODEX_API_KEY: ${OPENAI_EXECUTOR_API_KEY}
- Crie uma instância de
pydo.aio.ClientusandoDIGITALOCEAN_TOKENe chameclient.agents.create_session. Definaparams.openai_session_idcom o ID da sessão da OpenAI,body.manifestcom o conteúdo desandbox.yamlebody.variablescom um mapeamento deENV_IDeOPENAI_EXECUTOR_API_KEYpara seus respectivos valores. Salve osession_idretornado pela DigitalOcean. - Abra o fluxo de eventos e envie os dados de entrada. Peça ao agente que escreva no arquivo
/workspace/hello.txte leia seu conteúdo. Os dados de entrada ficam em espera até que o executor se conecte. Confirme que o evento de conexão ocorreu e que um turno foi concluído. Verifique na saída do agente se houve falhas nas ferramentas. - Baixe o arquivo com
workspace_downloadusando o caminho relativohello.txt. Mantenha os dois recursos para os próximos turnos ou faça a limpeza.
Defina tempos limite para a configuração e a execução e trate as falhas de conexão no seu aplicativo. Não associe um manipulador de webhook de provisionamento a sessões gerenciadas diretamente pelo aplicativo ou pela CLI.
Limpeza
Salve os arquivos de que precisar. Em seguida, exclua a sessão da OpenAI e destrua o sandbox da DigitalOcean. A exclusão da sessão não dispara um webhook. Execute as duas operações e informe qualquer falha na limpeza.
Com o PyDo, chame client.agents.destroy_session com o ID da sessão da DigitalOcean. Na CLI, passe esse ID ou o nome do sandbox:
doctl harness-runtime remove openai-codex-session
Remova o registro do webhook na OpenAI antes de excluir o controlador de webhook.