Помимо агентов и операторов, betool предоставляет узлы управления для структурирования логики pipeline.
Фильтр
Узел filter — это детерминированный шлюз: выполнение продолжается к нижестоящим узлам, если его условия выполнены, иначе ветвь на этом останавливается.
Конфигурация:
- Условия — каждое в форме
{поле, оператор, значение}. Поле — это селектор в потоке (exchange.intent,webhook.payload.type…); значение — строка, поддерживающая шаблоны. - Комбинатор —
AND(по умолчанию) илиORмежду условиями. - Операторы —
equals/not_equals,contains/not_contains,starts_with,ends_with,regex,is_empty/is_not_empty, числовые сравненияgt/gte/lt/lte, принадлежность спискуin/not_in(значения через запятую). Неизвестный оператор отклоняется при сохранении.
Типичное применение: устранить шум до нижестоящих затрат на LLM — игнорировать письма, чей from находится в чёрном списке, или webhook, у которых type != "order.created".
Маршрутизатор
Узел router направляет выполнение по одному из своих именованных маршрутов. Решение принимает LLM на основе промпта маршрутизации и контекста, который вы составляете, — чтобы маршрутизировать по намерению, категории, тону.
Конфигурация:
- Промпт — инструкция по классификации.
- Маршруты — для каждого имени маршрута подграф, который нужно выполнить. Каждый объявленный маршрут должен быть подключён, иначе публикация отклоняется.
- Модель — возможность выделить для маршрутизации лёгкую LLM (tiering), чтобы контролировать стоимость и задержку.
Для строго детерминированной маршрутизации (точное значение поля, HTTP-статус) предпочитайте узлы filter, расположенные параллельно: тогда предикат механический, а не интерпретируемый.
Цикл (foreach)
Узел foreach итерирует по коллекции. Конфигурация:
items— селектор списка, по которому выполняется итерация.as— локальное имя текущего элемента.max— предел числа итераций (по умолчанию 10): сверх него список усекается, а событие журналируется.collect— (необязательно) ключ, в котором накапливаются результаты каждой итерации.max_per_minute— (необязательно) максимальный темп, чтобы разносить итерации во времени, когда тело цикла вызывает API с ограничением частоты.0(по умолчанию) = без ограничения.
На каждой итерации внутренний подграф выполняется для текущего элемента.
Предел max — ваша защита от затрат: неожиданный список из 10 000 элементов никогда не запустит 10 000 выполнений.
Параллельное выполнение
Узел parallel выполняет несколько подграфов конкурентно и ждёт, пока все они завершатся, прежде чем продолжить. Полезно для опроса нескольких независимых источников (поиск в CRM + чтение календаря) без суммирования задержек.
Лучшие практики
- Фильтруйте рано. Каждый exchange, проходящий через агента, стоит токенов;
filterвыше по потоку не стоит ничего. - Сохраняйте маршрутизацию читаемой. Маршрутизатор с 12 маршрутами — сигнал, что нужны два уровня классификации, а не сжатая логика.
- Ограничивайте вложенные циклы. Цикл внутри цикла умножает затраты. Предпочитайте преобразовывать коллекцию выше по потоку.