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 principal
-> function_call spawn_subagent
-> tu aplicación ejecuta una o más respuestas hijas
-> resultados hijos devueltos como function_call_output
-> la respuesta principal reanuda la generación
Cómo funciona el bucle
En este patrón la respuesta principal se pausa cada vez que llama aspawn_subagent.
Tu aplicación ejecuta las tareas delegadas y luego reanuda la respuesta principal con los resultados.
- Crea una respuesta principal 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 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 principal 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 principales 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.
Ramificar y esperar a todas las respuestas hijas
Cuandoparallel_tool_calls es true, el padre puede emitir varios elementos function_call en un solo turno.
Trata ese conjunto de llamadas a herramientas como un lote.
Inicia cada respuesta hija, espera a que todas finalicen y solo entonces reanuda el padre.
Esto crea una barrera:
- La respuesta principal emite muchos elementos
function_call. - Tu aplicación inicia muchas respuestas hijas.
- Tu aplicación espera a que todas las respuestas hijas terminen.
- Tu aplicación envía todos los elementos
function_call_outputen una sola solicitud de seguimiento. - La respuesta principal 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 consultar 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 principal.
Solicitud Responses sin procesar para el paso de reanudación
La transferencia crítica es la solicitud de seguimiento. Devuelves cada resultado de herramienta eninput y apuntas al turno principal anterior 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 de hijos que son 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 lugar de fallar todo el lote cuando un hijo falla.
- Mantén los resultados hijos pequeños y explícitos para que el padre decida si continuar, reintentar o responder con resultados parciales.
background: true más polling.
La lógica de recuperación permanece igual: espera a que el hijo alcance un estado terminal, luego devuelve al padre un objeto de éxito o de error 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 principal no pueda hacer bucle 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 al modelo.