Agentes Encadenados (Parent-Child)
Configura workflows donde un agente puede llamar a otro agente y esperar a que termine antes de continuar.
Conceptos Clave
JERARQUIA DE AGENTES
| Termino | Descripcion |
|---|---|
| Agente Padre | El agente que inicia la llamada a otro agente |
| Agente Hijo | El agente que es invocado por el padre |
| waitForCompletion | Parametro que indica si el padre espera al hijo |
| Cadena | Multiples niveles: A llama a B, B llama a C, etc. |
Accion trigger_agent
Configuracion Basica
{
"actionType": "trigger_agent",
"parameters": {
"targetAgentId": 5,
"waitForCompletion": true,
"passVariables": ["postulantId", "applicationId"]
}
}
Parametros
| Parametro | Tipo | Descripcion |
|---|---|---|
| targetAgentId | number | ID del agente a ejecutar |
| targetAgentName | string | Nombre del agente (alternativa al ID) |
| waitForCompletion | boolean | Si esperar a que termine (default: false) |
| passVariables | string[] | Variables a pasar al hijo (default: todas) |
Comportamiento segun waitForCompletion
waitForCompletion: false (default)
El padre continua inmediatamente despues de disparar al hijo.
Flujo:
- Padre ejecuta accion 1
- Padre dispara trigger_agent
- Hijo inicia en paralelo
- Padre continua a accion 3 (sin esperar)
- Hijo continua independientemente
Caso de uso: Tareas independientes que no dependen del resultado.
waitForCompletion: true
El padre espera hasta que el hijo termine completamente.
Flujo:
- Padre ejecuta accion 1
- Padre dispara trigger_agent con waitForCompletion=true
- Hijo inicia y ejecuta sus acciones
- Si hijo tiene wait_for_response, padre tambien espera
- Cuando hijo termina, padre continua a accion 3
Caso de uso: Flujos secuenciales donde el siguiente paso depende del anterior.
Sincronizacion de Estados
Cuando el Hijo tiene Acciones de Espera
Si el hijo ejecuta acciones que requieren esperar (como wait_for_response):
| Estado Hijo | Estado Padre | Descripcion |
|---|---|---|
| RUNNING | WAITING | Padre espera mientras hijo ejecuta |
| WAITING | WAITING | Ambos esperan (ej: respuesta del usuario) |
| COMPLETED | RUNNING | Padre se reanuda automaticamente |
| FAILED | RUNNING | Padre se reanuda con variables de error |
Variables Disponibles Post-Ejecucion
Cuando el hijo termina, el padre recibe estas variables:
{
"triggeredExecutionId": 123, // ID de ejecucion del hijo
"childExecutionStatus": "completed", // Estado final
"childExecutionSuccess": true, // Si fue exitoso
// ... todas las variables del hijo
}
Cadenas de Agentes (Nesting)
El sistema soporta cadenas ilimitadas de agentes.
Ejemplo: Cadena de 3 Niveles
Coordinador (A)
├── Accion: Enviar bienvenida
├── Accion: trigger_agent (waitForCompletion=true)
│ └── Recolector de Docs (B)
│ ├── Accion: Solicitar documentos
│ ├── Accion: wait_for_response
│ └── Accion: trigger_agent (waitForCompletion=true)
│ └── Validador (C)
│ ├── Accion: Validar documentos
│ └── Accion: Enviar resultado
└── Accion: Continuar onboarding
Como se Desenrolla la Cadena
- C termina - Emite evento AGENT_COMPLETED
- B se reanuda - Recibe resultado de C, continua
- B termina - Emite evento AGENT_COMPLETED
- A se reanuda - Recibe resultado de B, continua
- A termina - Flujo completo
Importante: Cada nivel solo conoce a su padre inmediato. La propagacion es automatica.
Herencia de Bloqueo de Thread
Cuando waitForCompletion=true, el hijo puede heredar el bloqueo del thread del padre.
Sin Herencia (waitForCompletion=false)
Padre tiene bloqueo del thread
↓
Hijo intenta enviar mensaje
↓
ERROR: Thread bloqueado por otra ejecucion
↓
Mensaje se encola para despues
Con Herencia (waitForCompletion=true)
Padre tiene bloqueo del thread
↓
Hijo hereda el bloqueo (canInheritLock=true)
↓
Hijo envia mensaje exitosamente
↓
Conversacion fluida
Ejemplo Practico: Onboarding Multi-Agente
Agente Coordinador
{
"name": "Coordinador Onboarding",
"actions": [
{
"actionType": "send_message",
"parameters": {
"message": "Bienvenido! Iniciemos tu proceso de ingreso."
}
},
{
"actionType": "trigger_agent",
"parameters": {
"targetAgentName": "Recolector Documentos",
"waitForCompletion": true
}
},
{
"actionType": "trigger_agent",
"parameters": {
"targetAgentName": "Asignador Tests",
"waitForCompletion": true
}
},
{
"actionType": "send_message",
"parameters": {
"message": "Excelente! Has completado todos los pasos."
}
}
]
}
Agente Recolector de Documentos
{
"name": "Recolector Documentos",
"actions": [
{
"actionType": "request_document",
"parameters": {
"documentTypes": ["ine", "curp", "comprobante_domicilio"]
}
},
{
"actionType": "wait_for_response",
"parameters": {
"waitFor": "document_completion",
"timeout": "7 days"
}
}
]
}
Flujo Resultante
- Coordinador envia bienvenida
- Coordinador dispara Recolector y espera
- Recolector solicita documentos
- Recolector espera a que usuario suba docs
- Usuario sube documentos
- Recolector termina
- Coordinador continua, dispara Asignador Tests
- (similar para tests)
- Coordinador envia mensaje de finalizacion
Debugging
Logs Importantes
[AgentExecution] Triggered agent 5 (Recolector), new execution 123
[AgentExecution] Awaiting child execution 123 to complete...
[AgentExecution] Child execution 123 is waiting, parent will also wait...
[AgentGraph] Emitting AGENT_COMPLETED event for execution 123
[AgentQueue] Received AGENT_COMPLETED event for execution 123
[AgentQueue] Parent 122 resumed immediately (bypassed polling)
Problemas Comunes
| Problema | Causa | Solucion |
|---|---|---|
| Padre no espera | waitForCompletion=false | Cambiar a true |
| Hijo no puede enviar | Thread bloqueado | Verificar herencia de bloqueo |
| Padre nunca reanuda | Evento no emitido | Verificar logs de AGENT_COMPLETED |
| Variables no pasan | passVariables vacio | Especificar variables o usar default |
Proximos Pasos
- Bloqueo de Threads - Control de concurrencia
- Mensajes de Agente - Atribucion y notificaciones
- Logs de Ejecuciones - Monitoreo