Control de flujo
Más allá de los agentes y los operadores, betool proporciona nodos de control para estructurar la lógica de un pipeline.
Condición
Un nodo condition enruta los exchanges a varias salidas según un predicado.
Configuración:
- Slot de entrada — lo que se evalúa (
exchange.intent,webhook.payload.type…) - Ramas — para cada valor (o condición booleana), una salida con nombre
- Rama por defecto — obligatoria (fail-safe)
Uso típico: enrutamiento según la intención detectada por un agente clasificador, o según un estado HTTP devuelto por un operador.
Bucle
Un nodo loop itera sobre una colección. Configuración:
- Slot de colección — la lista sobre la que iterar
- Variable de iteración — el nombre local del elemento actual
- Límite — número máximo de iteraciones (guarda de seguridad)
En cada iteración, el subgrafo interno se ejecuta contra el elemento actual. Las salidas se agregan en una lista.
Un bucle no acotado es una bomba de relojería. Fija siempre el límite máximo. El editor se negará a publicar sin uno.
Filtro
Un nodo filter elimina los exchanges que no satisfacen un predicado. Útil para eliminar ruido antes de incurrir en costes de LLM aguas abajo.
Ejemplo: filtrar los correos cuyo campo from esté en una lista de bloqueo, o los webhooks donde type != "order.created".
Aprobación humana (confirmación)
Un nodo confirmation pausa el pipeline y espera a que un humano apruebe o rechace desde la interfaz de administración.
Configuración:
- Pregunta — lo que se pide al revisor (con marcadores de posición de contexto)
- Ramas —
approved/rejected(y opcionalmente opciones personalizadas) - Timeout — si no se recibe respuesta, enruta a la rama por defecto
- Notificación — a quién alertar (email, Mattermost, Slack)
Casos de uso típicos:
- Confirmar una llamada saliente de alto valor.
- Validar un correo de cancelación antes de enviarlo.
- Aprobar una respuesta sensible antes de su publicación.
El historial conserva el nombre del revisor y la marca de tiempo — totalmente trazable con fines de auditoría.
Buenas prácticas
- Cablea siempre la salida por defecto. Un exchange que cae en el vacío se queda en
processingy bloquea la cola. - Mantén las condiciones simples. Una condición con 12 ramas es una señal de que necesitas dos agentes en cascada en lugar de una lógica condensada.
- Limita los bucles anidados. Un bucle dentro de un bucle dentro de un bucle significa costes que se disparan. Prefiere transformar la colección aguas arriba en su lugar.