waiting_for_human e tudo o que é necessário para continuar. Salve o resultado inteiro, colete a decisão no seu aplicativo e depois passe o resultado salvo e a decisão ao método de continuação do agente.
A Phaseo não armazena execuções do Agent SDK. Salve o estado retomável no seu próprio aplicativo quando ele precisar sobreviver ao fim de uma requisição ou à reinicialização de um processo.
Aprove ou rejeite chamadas de ferramenta
Ferramentas com aprovação, manuais e com intervenção humana pausam a execução antes de rodar. Cada chamada pendente tem acall do modelo (com seu id) e um kind: approval, manual ou hitl. Responda a cada chamada pelo ID exato da chamada, não pelo nome da ferramenta, para que duas chamadas à mesma ferramenta fiquem separadas.
Uma chamada aprovada executa sua ferramenta. Uma chamada rejeitada envia {"error": "<reason>"} ao modelo como resultado da ferramenta, com o motivo padrão Tool call rejected.
A pausa em si também tem um
kind. Go e C# o definem como tool_approval em toda pausa de ferramenta. PHP, Ruby e Java definem tool_approval quando alguma chamada pendente precisa de aprovação; caso contrário, usam o tipo da primeira chamada. O Rust usa tool_approval para chamadas de aprovação, external_output quando todas as chamadas pendentes precisam de um resultado externo e tool_input para uma mistura das duas.
Para exigir aprovação em toda chamada de ferramenta em vez de por ferramenta, defina requireApproval na definição do agente (require_approval no Python e no Ruby, RequireApproval no Go e no C#). No TypeScript, é uma função requireApproval(call, context). O Rust só aceita aprovação por ferramenta, com Tool::require_approval(). Ferramentas mostra como cada tipo de ferramenta é definido.
Forneça resultados para ferramentas manuais e com intervenção humana
Para chamadasmanual e hitl, passe o resultado que seu aplicativo produziu, indexado pelo ID da chamada. No Rust, são as ferramentas criadas com Tool::external(...).
Missing output for tool call <id> (missing em minúsculas no Go, um ValueError no Python, um AgentError no Rust). Uma mensagem de entrada humana não substitui uma saída de ferramenta.
Pause para revisão humana
Defina um callback de revisão humana na definição do agente para verificar cada resposta do modelo antes de a execução continuar. Retorne uma solicitação de revisão com umreason (e, opcionalmente, um payload) para pausar, ou nada para seguir em frente. O kind da pausa é human_review. O callback recebe o ID da execução, o índice da etapa, as mensagens, a resposta do modelo e a saída interpretada (no Rust: os IDs da execução e do agente, o índice da etapa, as mensagens, a resposta e o contexto do aplicativo).
Run <id> is waiting for human input (Go: run <id> is waiting for human input; Java: Run is waiting for human input). O Rust exige um human_input não vazio. O TypeScript também aceita humanMessages estruturadas.
Salve o estado da execução entre requisições
O resultado da execução é um dado simples: guarde-o no seu banco de dados, no armazenamento de objetos ou no registro do job, e mantenha ocontext do aplicativo serializável. Uma execução só pode ser continuada por um agente com o mesmo ID. A receita do loop de agente durável mostra um fluxo completo de salvar e retomar.
Para que o SDK salve e carregue as execuções por você, passe um acessor de estado com load(runId) e save(result). O SDK então salva depois de cada execução e continuação, e você pode continuar pelo ID da execução em vez de passar o registro por todas as camadas.
AgentDefinition não fazem parte da execução serializada. O modelo efetivo e o limite de etapas ficam guardados em RunRecord, então as substituições por execução continuam ativas depois da continuação.
Seja o que for que você armazene, seu aplicativo é responsável pela criptografia e retenção das execuções salvas, pela autorização de aprovações e entradas humanas e pela idempotência dos efeitos colaterais que rodam de novo depois de uma retomada.