Ejemplo: un equipo multiagente
Construye un agente raíz que delega en dos subagentes, construidos de la hoja hacia la raíz y cableados automáticamente.
En esta página
Ejemplo: un equipo multiagente
examples/multi-agent-team/ es un agente raÃz con dos subagentes - researcher y writer - cada uno envuelto automáticamente como una tool invocable del agente raÃz por el propio aiAgent() de bx-ai. La delegación es enteramente una decisión del modelo en tiempo de ejecución; nada en este proyecto fija por código qué subagente atiende qué mensaje.
El proyecto
multi-agent-team/
├── Agent.bx
├── instructions.md
└── subagents/
├── researcher/
│ ├── Agent.bx
│ └── instructions.md
└── writer/
├── Agent.bx
└── instructions.md
Cada carpeta subagents/<nombre>/ es en sà misma un mini-agente completo - con su propio Agent.bx, su propio instructions.md, y (aquà no se usan, pero están soportados) sus propios tools//skills/.
Declarar el equipo
El Agent.bx raÃz nombra los subagentes a cablear mediante configure():
class extends="bxModules.bxai.models.runnables.AiAgent" {
function init() {
super.init(
name : "multi-agent-team",
description : "A root agent delegating to a researcher and a writer subagent.",
model : aiModel( provider: "mock", params: { model: "mock-model" } )
)
return this
}
// subAgents here is the list of `subagents/` FOLDER names to wire at
// build time - a build-time concern, distinct from super.init()'s own
// `subAgents` argument (which takes already-built AiAgent instances).
function configure() {
return {
subAgents : [ "researcher", "writer" ]
};
}
}
La lista subAgents de configure() se resuelve contra los nombres de carpeta bajo subagents/; el Agent.bx de cada carpeta declara su propio name, description y model de forma independiente:
// subagents/researcher/Agent.bx
class extends="bxModules.bxai.models.runnables.AiAgent" {
function init() {
super.init(
name : "researcher",
description : "Gathers facts on a topic.",
model : aiModel( provider: "mock", params: { model: "mock-model" } )
)
return this
}
}
// subagents/writer/Agent.bx
class extends="bxModules.bxai.models.runnables.AiAgent" {
function init() {
super.init(
name : "writer",
description : "Turns research into polished prose.",
model : aiModel( provider: "mock", params: { model: "mock-model" } )
)
return this
}
}
Las instrucciones reparten la responsabilidad
El instructions.md de cada agente está deliberadamente acotado a su propio trabajo - la raÃz coordina, y a cada subagente se le dice explÃcitamente lo que no hace, para que el modelo no intente hacerlo todo de una sola vez:
<!-- instructions.md (root) -->
## Team Lead
You coordinate a small team. Delegate research questions to the `researcher`
subagent and drafting/writing tasks to the `writer` subagent, then combine
their output into a final answer.
<!-- subagents/researcher/instructions.md -->
## Researcher
You gather and summarize facts on a topic, citing your reasoning. You do
not write final prose - that's the writer's job.
<!-- subagents/writer/instructions.md -->
## Writer
You turn research notes into clear, polished prose. You do not do your
own research - you rely on what the researcher provides.
Cómo lo cablea el build
ColdBoxAppGenerator construye el árbol de la hoja hacia la raÃz: researcher y writer se construyen primero, y las instancias ya construidas se pasan a la construcción del propio agente raÃz, de modo que la llamada aiAgent() de la raÃz recibe objetos de subagente reales en vez de nombres que resolver más tarde. Consulta Subagentes para el orden completo de construcción hoja-primero y para ver cómo cada subagente queda registrado con su propio nombre en WireBox (no solo la raÃz).
Construir y ejecutar
cd examples/multi-agent-team
bxAgents build
bxAgents chat
Pregunta algo que claramente necesite ambos roles, por ejemplo Give me three facts about the BoxLang language, then turn them into a short paragraph. Un modelo real normalmente llamarÃa primero a researcher, luego a writer, y después compondrÃa la respuesta final - el proveedor mock con el que viene este ejemplo no delega realmente (devuelve una respuesta fija sin llamadas a tools), asà que cambia a un slug provider/model real (consulta El slug del modelo) para ver la delegación de verdad.
Dónde ir a continuación
- Ejemplo: un agente mÃnimo si aún no has visto la forma base de un proyecto.
- Subagentes para la detección de ciclos, los árboles de subagentes anidados, y las tools/skills por subagente.
- Ejemplo: construir un bot de Slack para ver un agente parecido accesible desde una plataforma de chat real en lugar del REPL
chat.