function_call_output, e o pai continua a geração.
Uma resposta filha às vezes é chamada de subagente.
Neste guia, é apenas outra requisição de Responses que executa uma tarefa focada.
Resposta pai
-> function_call spawn_subagent
-> seu app 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 chamaspawn_subagent.
Seu app executa as tarefas delegadas e então retoma o pai com os resultados.
- Crie uma resposta pai com uma ferramenta de função
spawn_subagent. - Quando o modelo chamar a ferramenta, analise os argumentos de cada chamada de ferramenta.
- Execute uma ou mais requisições Responses filhas para realizar as tarefas delegadas.
- Aguarde todas as respostas filhas terminarem.
- Retorne cada resultado filho como
function_call_outputusando ocall_idcorrespondente. - Retome a resposta pai com
previous_response_id. - Repita até que o pai produza uma
messagenormal do assistente.
Defina uma ferramenta para delegação
Mantenha a ferramenta focada. Passe apenas os campos que a resposta filha precisa.tool_choice: "auto" quando o modelo deve decidir quando delegar.
Use tool_choice: "required" quando cada turno deve passar por uma ferramenta.
Receita com SDK TypeScript
Este exemplo usasdk.llm.responses.create tanto para as respostas pai quanto para as filhas.
Isso permite que o pai emita múltiplas chamadas spawn_subagent em um único turno.
Seu app executa essas respostas filhas em paralelo, aguarda todas terminarem e então retoma o pai de uma vez com todos os resultados das ferramentas.
Mantenha cada resultado filho pequeno para que o pai possa usá-lo no próximo turno sem consumir muito contexto.
Distribua e aguarde todas as respostas filhas
Quandoparallel_tool_calls está como true, o pai pode emitir vários itens function_call em um turno.
Trate esse conjunto de chamadas de ferramenta como um lote.
Inicie cada resposta filha, aguarde todas terminarem e só então retome o pai.
Isso cria uma barreira:
- A resposta pai emite vários itens
function_call. - Seu app inicia várias respostas filhas.
- Seu app aguarda todas as respostas filhas completarem.
- Seu app envia todos os itens
function_call_outputde volta em uma única requisição de acompanhamento. - A resposta pai continua com o conjunto completo de resultados delegados.
X-On-Behalf-Of nas requisições pai e filhas.
Se uma resposta filha pode demorar mais, você pode definir background: true na requisição filha e fazer polling com sdk.llm.responses.get até que ela termine.
Quando você distribui para múltiplas respostas filhas, aguarde até que todos os resultados estejam disponíveis antes de retomar a resposta pai.
Requisição bruta de Responses para o passo de retomada
A transferência crítica é a requisição de acompanhamento. Você passa todos os resultados das ferramentas eminput e aponta para o turno anterior do pai com previous_response_id.
bash
X-On-Behalf-Of.
Tratamento básico de erros e recuperação
Em sistemas reais, esse loop irá falhar às vezes. Falhas comuns incluem argumentos de ferramenta malformados, timeouts em requisições filhas, erros 5xx de upstream, limites de taxa e saídas filhas que são fracas demais para serem úteis. O padrão mais seguro é:- Analise os argumentos das ferramentas de forma defensiva.
- Retente falhas transitórias de requisições filhas algumas vezes com backoff.
- Retorne um payload de falha estruturado para o pai ao invés de travar todo o lote quando uma filha falhar.
- Mantenha os resultados das filhas pequenos e explícitos para que o pai possa decidir se continua, retenta ou responde com resultados parciais.
background: true mais polling.
A lógica de recuperação permanece a mesma: aguarde a filha atingir um estado terminal e então retorne um payload de sucesso ou de falha estruturada para o pai.
Limites práticos
- Mantenha
parallel_tool_callscomotruequando o pai deve poder delegar várias respostas filhas em um turno. - Defina
parallel_tool_callscomofalseapenas quando as respostas filhas compartilham estado ou precisam ser executadas em ordem. - Defina
max_tool_callspara que uma resposta pai não possa entrar em loop infinito. - Mantenha as saídas das filhas compactas para que o pai possa incorporar o resultado sem consumir muito contexto.
- Mantenha
store: trueenquanto constrói o fluxo de trabalho para poder inspecionar as respostas pai e filhas depois. - Use a página de itens de input de Responses na Referência da API quando precisar depurar os itens exatos enviados de volta ao modelo.