Lección 11: Componer subagentes
Agentes anidados, cada uno un proyecto BxAgents corriente por sí mismo, cableados como tools invocables.
En esta página
Componer subagentes
subagents/ contiene agentes anidados - cada uno un proyecto BxAgents corriente por sÃ
mismo, con su propio Agent.bx + instructions.md, y opcionalmente sus propios tools/,
skills/, etc.
my-agent/
├── Agent.bx # subAgents: ["researcher"]
├── instructions.md
└── subagents/
└── researcher/
├── Agent.bx
└── instructions.md
Un subagente se cablea a su padre por nombre, declarado en el configure() del Agent.bx
del padre - este es el nombre de la carpeta en subagents/:
function configure() {
return {
subAgents : [ "researcher" ]
};
}
En tiempo de build, el addSubAgent() de bx-ai envuelve automáticamente cada instancia de
subagente construida como una tool invocable del padre - no hay ningún paso aparte de
envoltura de tools que tengas que escribir tú.
Plano en disco, un grafo en la configuración
Todos los subagentes - por muy profundamente que los referencie la configuración de otro
subagente - viven directamente bajo la carpeta subagents/ del proyecto raÃz. Los nombres
subAgents que declara un subagente referencian entradas hermanas de esa misma carpeta de
nivel raÃz, nunca una carpeta anidada bajo él.
flowchart LR
subgraph disk["ON DISK - always flat"]
direction TB
R1["subagents/A/"]
R2["subagents/B/"]
R3["subagents/C/"]
end
subgraph declared["DECLARED - each Agent.bx's own subAgents list"]
direction TB
GA["A"] --> GB["B"] --> GC["C"]
end
subgraph built["BUILT - leaf-first"]
direction TB
O1["1. build C"] --> O2["2. build B<br/>with the built C"] --> O3["3. build A<br/>with the built B"]
end
disk -.-> declared
declared -.-> built
Un ciclo en el grafo declarado (A -> B -> A) se rechaza en la validación, antes de generar
nada. Un rombo (dos padres que comparten un descendiente) no supone ningún problema.
Dos nombres distintos, dos funciones distintas
- El nombre de la carpeta bajo
subagents/es a lo que hace referenciasubAgents: [ "..." ]- puramente una cuestión de cableado en tiempo de build. - El
namedeclarado por el propio subagente (el camponamede suAgent.bx) es por lo que lo recuperas en tiempo de ejecución - cada agente del árbol queda registrado enconfig/WireBox.bxbajo ese nombre, asà queschedules/Scheduler.bx(o cualquier otra cosa que conozca WireBox) lo alcanza congetInstance( "TheAgentName" ).
Estos dos nombres pueden diferir, y a menudo diferirán. Como name es también una clave de
binding de WireBox, debe ser único en todo el proyecto - build falla la validación si dos
agentes comparten uno.
Pruébalo
Crea una carpeta subagents/researcher/ como su propio pequeño proyecto BxAgents (con su
propio Agent.bx + instructions.md), y después cablea el subagente en el configure() de
tu Agent.bx raÃz. Reconstruye y pregunta a tu agente raÃz algo que naturalmente delegarÃa en
el subagente investigador - es invocable exactamente igual que cualquier otra tool.
Referencia completa: subagents/.
Siguiente: Lección 12 - Configuraciones de modelo con nombre