Все ноды/Logic & Flow/Synchronization
Дождаться всех
Ждёт завершения активных входящих веток и продолжает поток. Учитывает только реально исполняемые связи (skipped switch-ветки не блокируют). Агрегирует данные согласно merge_mode (first / last / merge). stream_through пробрасывает токены стримящих веток сразу в exit, не дожидаясь барьера (значение всё равно собирается по merge_mode).
Тип в графе: wait_all
Exec
Можно включить ветку ошибки (expose_error_output) и обработать сбой отдельным путём.
Порты можно разделить на исполнение и данные (split ports).
Как попробовать
Минимальный рабочий воркфлоу
- Исполнение + данные
Запускается сразу
Как применять
Барьер. Берите его, когда несколько веток идут параллельно, а следующий шаг должен начаться только после того, как отработают все — например, два независимых запроса к модели, ответы которых нужны вместе.
Второй повод — требование валидатора. Если две ветки, способные сработать в одном и том же запуске, приходят в один вход, граф не пройдёт проверку: значение той, что пришла раньше, молча перезаписывается той, что пришла позже. Барьер разводит эту гонку.
Барьер не нужен для взаимоисключающих веток (две ветви одного if, on_success и on_error
одной ноды): сработает ровно одна, и нода ниже запустится сама, получив её значение.
Если ветки дают реплики диалога, посмотрите на messages, если
ранжированные списки чанков — на rrf_fusion; это тоже барьеры,
но со своим способом сборки результата.
Как это работает
Все входящие связи подключаются к одному порту «Run inputs» — отдельного порта на каждую
ветку заводить не нужно. Нода срабатывает, когда ни одна из подключённых веток больше не
находится в работе. Пропущенная ветка (не взятая ветвь if или switch) считается
разрешённой и барьер не держит. Упавшая — тоже: барьер не будет ждать её вечно, он продолжит
с теми значениями, что дошли, а сам сбой отразится на статусе запуска.
Что окажется на выходе, решает «Режим слияния»: first — значение ветки, закончившей первой,
last — закончившей последней, merge — список всех пришедших значений. Порядок в списке —
порядок завершения веток, а не порядок, в котором вы рисовали связи.
Частые ошибки
- Связь из ноды, стоящей после барьера, обратно в барьер. Барьер начинает ждать сам себя и не сработает никогда; валидация останавливает такой граф как цикл исполнения. Для повторяющихся проходов есть while_loop.
firstчитают как «верхнюю ветку». Это ветка, которая закончилась раньше остальных, — на параллельных вызовах модели победитель меняется от запуска к запуску. Нужен конкретный источник — беритеmergeи обращайтесь к элементу по индексу:{{ nodes.<id>.output[0] }}.- Ответ перестаёт печататься по мере генерации. Токены модели, идущей в барьер, по умолчанию накапливаются и приходят в чат одним куском в конце. Включите «Пробрасывать стриминг» — работает, когда сразу за барьером идёт exit.
Входы
| Порт | Провод | Данные | Примечания |
|---|---|---|---|
Run inputsbarrier_in | Исполнение + данныеexecute_data | — | несколько связей |
Выходы
| Порт | Провод | Данные | Примечания |
|---|---|---|---|
Resultoutput | Исполнение + данныеexecute_data | — |
Настройки
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
Режим слиянияmerge_mode | string | first | Как агрегировать значения из активных входящих связей: 'first' — первое пришедшее значение, 'last' — последнее пришедшее значение, 'merge' — список всех пришедших значений (в порядке прибытия). Варианты: |
Пробрасывать стримингstream_through | boolean | false | Пропускать токены стримящих веток мимо барьера — сразу в чат, не дожидаясь остальных входов. Барьер по-прежнему собирает значение по merge_mode, но ответ печатается по мере генерации. Работает, только если после барьера идёт exit (через цепочку таких же барьеров). Несколько одновременных стримов попадут в один пузырь чата и перемешаются — валидатор об этом предупредит. |
Общие поля
Эти три поля есть у каждой ноды: платформа добавляет их сама, а не автор ноды.
expose_error_output— Если включено, показывает выход выполнения для подключения нод, которые запускаются при сбое этого шага.split_ports_in— Показывать отдельные порты входа для выполнения и данных вместо одного объединённого.split_ports_out— Показывать отдельные порты выхода для выполнения и данных вместо одного объединённого.