Документация

Управление потоком

Фильтры, маршрутизация, циклы, параллелизм — для управления путями выполнения.

Помимо агентов и операторов, 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 маршрутами — сигнал, что нужны два уровня классификации, а не сжатая логика.
  • Ограничивайте вложенные циклы. Цикл внутри цикла умножает затраты. Предпочитайте преобразовывать коллекцию выше по потоку.