Skip to main content
Use este padrão quando quiser que uma resposta divida o trabalho em tarefas menores. Este padrão implementa um loop síncrono de delegação para respostas filhas. Uma resposta pai chama uma ferramenta de função que seu aplicativo resolve executando outra solicitação Responses. Um resultado filho ou vários resultados filhos são retornados ao pai como function_call_output, e o pai continua a geração. Uma resposta filha às vezes é chamada de subagente. Neste guia, ela é apenas outra solicitação Responses que executa uma tarefa focada. Resposta pai -> function_call spawn_subagent -> seu aplicativo executa uma ou mais respostas filhas -> resultados filhos retornados como function_call_output -> resposta pai retoma a geração

Como o loop funciona

Neste padrão, a resposta pai pausa sempre que chama spawn_subagent. Seu aplicativo executa as tarefas delegadas e então retoma o pai com os resultados.
  1. Crie uma resposta pai com uma ferramenta de função spawn_subagent.
  2. Quando o modelo chamar a ferramenta, analise os argumentos de cada chamada de ferramenta.
  3. Execute uma ou mais solicitações Responses filhas para realizar as tarefas delegadas.
  4. Aguarde a conclusão de todas as respostas filhas.
  5. Retorne cada resultado filho como function_call_output usando o call_id correspondente.
  6. Retome a resposta pai com previous_response_id.
  7. Repita até que o pai produza uma message normal do assistente.

Definir uma ferramenta para delegação

Mantenha a ferramenta focada. Passe apenas os campos de que a resposta filha precisa.
Use tool_choice: "auto" quando o modelo deve decidir quando delegar. Use tool_choice: "required" quando cada turno deve passar por uma ferramenta.

Receita do SDK TypeScript

Este exemplo usa sdk.llm.responses.create tanto para as respostas pai quanto para as filhas. Ele permite que o pai emita várias chamadas spawn_subagent em um único turno. Seu aplicativo executa essas respostas filhas simultaneamente, aguarda a conclusão de todas elas e então retoma o pai uma vez com cada resultado de ferramenta. Mantenha cada resultado filho pequeno para que o pai possa usá-lo no próximo turno sem consumir muito contexto.

Distribuir e aguardar todas as respostas filhas

Quando parallel_tool_calls é true, o pai pode emitir vários itens function_call em um único turno. Trate esse conjunto de chamadas de ferramenta como um lote. Inicie todas as respostas filhas, aguarde a conclusão de todas e só então retome o pai. Isso cria uma barreira:
  1. A resposta pai emite muitos itens function_call.
  2. Seu aplicativo inicia muitas respostas filhas.
  3. Seu aplicativo aguarda a conclusão de todas as respostas filhas.
  4. Seu aplicativo envia todos os itens function_call_output de volta em uma solicitação de acompanhamento.
  5. A resposta pai continua com o conjunto completo de resultados delegados.
Se você retomar o pai antecipadamente apenas com parte do lote, o modelo continuará sem os resultados ausentes. Isso geralmente torna a orquestração menos previsível. A etapa principal de convergência é semelhante a esta:
Se seu aplicativo atuar em nome de um usuário final, envie o mesmo valor de X-On-Behalf-Of nas solicitações pai e filha. Se uma resposta filha puder demorar mais, você poderá definir background: true na solicitação filha e consultar com sdk.llm.responses.get até que ela seja concluída. Quando distribuir para várias respostas filhas, aguarde até que todos os resultados filhos estejam disponíveis antes de retomar a resposta pai.

Solicitação Responses bruta para a etapa de retomada

A transferência crítica é a solicitação de acompanhamento. Você passa cada resultado de ferramenta de volta em input e aponta para o turno pai anterior com previous_response_id.
bash
Se você não estiver atuando em nome de um usuário final, omita X-On-Behalf-Of.

Tratamento básico de erros e recuperação

Em sistemas reais, este loop às vezes falhará. Falhas comuns incluem argumentos de ferramenta malformados, tempos limite de solicitação filha, erros upstream 5xx, limites de taxa e saídas filhas fracas demais para serem úteis. O padrão mais seguro é:
  • Analise os argumentos da ferramenta de forma defensiva.
  • Tente novamente falhas transitórias de solicitações filhas um pequeno número de vezes com recuo.
  • Retorne uma carga estruturada de falha ao pai em vez de interromper todo o lote quando um filho falhar.
  • Mantenha os resultados filhos pequenos e explícitos para que o pai possa decidir se deve continuar, tentar novamente ou responder com resultados parciais.
Uma abordagem simples é encapsular a execução filha e sempre retornar um objeto de sucesso ou um objeto de erro:
Em seguida, envie os resultados de volta ao pai mesmo que alguns filhos falhem:
Isso permite que o pai veja falhas parciais e continue raciocinando. Por exemplo, o pai pode decidir tentar novamente com uma tarefa mais restrita, iniciar um subagente substituto ou responder com os resultados filhos bem-sucedidos disponíveis enquanto informa a lacuna. Para filhos de longa duração, você também pode combinar isso com background: true e consulta. A lógica de recuperação permanece a mesma: aguarde o filho alcançar um estado terminal e, em seguida, retorne ao pai uma carga de sucesso ou uma carga estruturada de falha.

Limites práticos

  • Mantenha parallel_tool_calls definido como true quando o pai deve poder delegar várias respostas filhas em um único turno.
  • Defina parallel_tool_calls como false apenas quando as respostas filhas compartilham estado ou precisam ser executadas em ordem.
  • Defina max_tool_calls para que uma resposta pai não possa entrar em loop para sempre.
  • Mantenha as saídas filhas compactas para que o pai possa incorporar o resultado sem consumir muito contexto.
  • Mantenha store: true enquanto cria o fluxo de trabalho para que você possa inspecionar posteriormente as respostas pai e filha.
  • Use a página de itens de entrada Responses na Referência da API quando precisar depurar os itens exatos enviados de volta ao modelo.

Veja também

Consulte fazer pesquisa aprofundada com subagentes para uma implementação concreta deste padrão orientada à pesquisa. Consulte gerar uma resposta para o padrão básico de solicitação Responses. Use gerenciar conversas quando quiser que o fluxo de trabalho pai ou filho mantenha estado durável fora de uma única cadeia de respostas.