function_call_output, y el padre continúa la generación.
Una respuesta hija a veces se llama subagente.
En esta guía, es simplemente otra solicitud de Responses que realiza una tarea enfocada.
Respuesta padre
-> function_call spawn_subagent
-> tu aplicación ejecuta una o más respuestas hijas
-> los resultados hijos se devuelven como function_call_output
-> la respuesta padre reanuda la generación
Cómo funciona el bucle
En este patrón, la respuesta padre se pausa cada vez que llama aspawn_subagent.
Tu aplicación ejecuta las tareas delegadas y luego reanuda el padre con los resultados.
- Crea una respuesta padre con una herramienta de función
spawn_subagent. - Cuando el modelo llama a la herramienta, analiza los argumentos de cada llamada a la herramienta.
- Ejecuta una o más solicitudes de Responses hijas para realizar las tareas delegadas.
- Espera a que todas las respuestas hijas finalicen.
- Devuelve cada resultado hijo como
function_call_outputusando elcall_idcorrespondiente. - Reanuda la respuesta padre con
previous_response_id. - Repite hasta que el padre produzca un
messagenormal de asistente.
Define una herramienta para delegación
Mantén la herramienta enfocada. Pasa solo los campos que la respuesta hija necesita.tool_choice: "auto" cuando el modelo deba decidir cuándo delegar.
Usa tool_choice: "required" cuando cada turno deba pasar por una herramienta.
Receta SDK TypeScript
Este ejemplo utilizasdk.llm.responses.create tanto para las respuestas padre como para las hijas.
Permite que el padre emita múltiples llamadas a spawn_subagent en un solo turno.
Tu aplicación ejecuta esas respuestas hijas en paralelo, espera a que todas finalicen y luego reanuda el padre una sola vez con todos los resultados de las herramientas.
Mantén cada resultado hijo pequeño para que el padre pueda usarlo en el siguiente turno sin consumir demasiado contexto.
Ramifica y espera a todas las respuestas hijas
Cuandoparallel_tool_calls es true, el padre puede emitir varios elementos function_call en un turno.
Trata ese conjunto de llamadas a herramientas como un lote.
Inicia todas las respuestas hijas, espera a que todas finalicen y solo entonces reanuda el padre.
Esto crea una barrera:
- La respuesta padre emite muchos elementos
function_call. - Tu aplicación inicia muchas respuestas hijas.
- Tu aplicación espera a que todas las respuestas hijas finalicen.
- Tu aplicación envía todos los elementos
function_call_outputen una sola solicitud de seguimiento. - La respuesta padre continúa con el conjunto completo de resultados delegados.
X-On-Behalf-Of en las solicitudes padre e hijas.
Si una respuesta hija puede tardar más, puedes establecer background: true en la solicitud hija y hacer polling con sdk.llm.responses.get hasta que finalice.
Cuando ramifiques a múltiples respuestas hijas, espera hasta que todos los resultados hijos estén disponibles antes de reanudar la respuesta padre.
Solicitud Responses sin procesar para el paso de reanudación
La transferencia crítica es la solicitud de seguimiento. Debes pasar cada resultado de herramienta eninput y apuntar al turno anterior del padre con previous_response_id.
bash
X-On-Behalf-Of.
Manejo básico de errores y recuperación
En sistemas reales, este bucle fallará a veces. Los fallos comunes incluyen argumentos de herramienta mal formados, tiempos de espera en solicitudes hijas, errores 5xx aguas arriba, límites de tasa y salidas hijas demasiado débiles para ser útiles. El patrón más seguro es:- Analiza los argumentos de la herramienta de forma defensiva.
- Reintenta fallos transitorios de solicitudes hijas un pequeño número de veces con retroceso.
- Devuelve una carga útil de fallo estructurada al padre en vez de fallar todo el lote cuando una hija falla.
- Mantén los resultados hijos pequeños y explícitos para que el padre pueda decidir si continuar, reintentar o responder con resultados parciales.
background: true más polling.
La lógica de recuperación permanece igual: espera a que la hija alcance un estado terminal, luego devuelve al padre una carga útil de éxito o de fallo estructurado.
Límites prácticos
- Mantén
parallel_tool_callsentruecuando el padre deba poder delegar varias respuestas hijas en un turno. - Establece
parallel_tool_callsenfalsesolo cuando las respuestas hijas compartan estado o deban ejecutarse en orden. - Configura
max_tool_callspara que una respuesta padre no pueda buclear indefinidamente. - Mantén las salidas hijas compactas para que el padre pueda incorporar el resultado sin consumir demasiado contexto.
- Mantén
store: truemientras construyes el flujo de trabajo para poder inspeccionar respuestas padre e hijas después. - Usa la página de elementos de entrada de Responses en la Referencia de API cuando necesites depurar los elementos exactos enviados de vuelta al modelo.