Управление потоком
Помимо агентов и операторов, betool предоставляет узлы управления для структурирования логики pipeline.
Условие
Узел condition направляет exchange на несколько выходов на основе предиката.
Конфигурация:
- Входной слот — то, что оценивается (
exchange.intent,webhook.payload.type…) - Ветви — для каждого значения (или булева условия) — именованный выход
- Ветвь по умолчанию — обязательна (fail-safe)
Типичное применение: маршрутизация на основе намерения, обнаруженного агентом-классификатором, или на основе HTTP-статуса, возвращённого оператором.
Цикл
Узел loop итерирует по коллекции. Конфигурация:
- Слот коллекции — список для итерации
- Переменная итерации — локальное имя текущего элемента
- Лимит — максимальное число итераций (защитный барьер)
На каждой итерации внутренний подграф выполняется применительно к текущему элементу. Выходы агрегируются в список.
Неограниченный цикл — это бомба замедленного действия. Всегда задавайте максимальный лимит. Редактор откажется публиковать без него.
Фильтр
Узел filter удаляет exchange, которые не удовлетворяют предикату. Полезно для устранения шума до того, как возникнут нижестоящие затраты на LLM.
Пример: фильтрация писем, чьё поле from находится в блок-листе, или webhook, где type != "order.created".
Согласование человеком (подтверждение)
Узел confirmation приостанавливает pipeline и ждёт, пока человек одобрит или отклонит из административного интерфейса.
Конфигурация:
- Вопрос — что спрашивается у проверяющего (с плейсхолдерами контекста)
- Ветви —
approved/rejected(и опционально пользовательские варианты) - Тайм-аут — если ответ не получен, направить на ветвь по умолчанию
- Уведомление — кого оповестить (email, Mattermost, Slack)
Типичные сценарии использования:
- Подтверждение исходящего звонка высокой ценности.
- Валидация письма об отмене перед отправкой.
- Одобрение чувствительного ответа перед публикацией.
История сохраняет имя проверяющего и временную метку — полностью отслеживаемо для целей аудита.
Лучшие практики
- Всегда подключайте выход по умолчанию. Exchange, попавший в пустоту, остаётся в состоянии
processingи блокирует очередь. - Держите условия простыми. Условие с 12 ветвями — сигнал, что вам нужны два каскадных агента, а не сжатая логика.
- Ограничивайте вложенные циклы. Цикл внутри цикла внутри цикла означает взрывной рост затрат. Вместо этого предпочитайте преобразовывать коллекцию выше по потоку.