Все ноды/Logic & Flow/Branching
Если / Иначе
Условное ветвление: вычисляет выражение и направляет выполнение в ветку 'true' или 'false'. Выражение поддерживает сравнения и обращения к данным нод: {{nodes.llm_1.output.score}} > 0.8.
Тип в графе: if
Exec
Можно включить ветку ошибки (expose_error_output) и обработать сбой отдельным путём.
Порты можно разделить на исполнение и данные (split ports).
Как попробовать
Минимальный рабочий воркфлоу
- Исполнение + данные
Запускается сразу
Как применять
Берите эту ноду, когда исполнение раздваивается по данным, которые в графе уже есть:
оценка от модели, поле из документа, длина текста, флаг из базы. Веток ровно две. Если
направлений больше двух, поставьте switch — цепочка из пяти условий читается хуже
одного списка. Если шаг нужно повторять, пока условие выполняется, это while_loop:
связь из ветки обратно наверх графа собрать не получится, планировщик считает такой граф
зациклённым и отказывается его запускать.
Как это работает
Условие — шаблон Jinja, и у него две рабочие формы. Целое выражение внутри скобок
({{ nodes.classify.output.score > 0.8 }}) вычисляется и возвращает настоящее логическое
значение. Смешанная форма ({{ nodes.classify.output.score }} > 0.8) сначала подставляет
значение, а потом разбирает получившуюся строку как одно сравнение двух литералов:
поддерживаются >, >=, <, <=, ==, != и ничего больше.
Сама нода поверх входа ничего не считает: на выбранный выход уходит ровно то значение,
которое пришло на вход. Ниже по графу доступны {{ nodes.<id>.output }} — это значение —
и {{ nodes.<id>.branch }} — имя сработавшей ветки, true или false.
Невыбранная ветка не считается сбоем. Ноды на ней получают статус «пропущено» с причиной «Условие выше выбрало другую ветку», а запуск остаётся завершённым: статус запуска говорит про ошибки, а не про то, сколько нод отработало.
Частые ошибки
- Составное условие в смешанной форме всегда истинно. После подстановки
{{ a }} > 1 and {{ b }} < 2превращается в строку, которая не является одним сравнением, — а непустая строка истинна. Пишите логику внутри скобок:{{ a > 1 and b < 2 }}. - Сравнение текста — тоже только внутри скобок.
{{ inputs.input }} == 'да'после подстановки перестаёт разбираться как выражение и уходит в ветку «истина» при любом вводе. Правильно:{{ inputs.input == 'да' }}. - Опечатка в пути молча даёт «ложь». Несуществующий путь подставляется пустым, а
сравнение с пустым операндом не выполняется. Проверьте, во что подставилось условие: в
деталях запуска у ноды есть блок Rendered templates, а неразрешённые пути перечислены
там под ключом
__undefined_refs__. - Пустое условие не задеплоится — выражение обязательно.
- Обе ветки в одну ноду — нормальная схема. Движок запустит её один раз, с данными той ветки, которая сработала; валидатор предупреждает об этом, чтобы вы не рассчитывали получить значения обеих веток сразу.
Входы
| Порт | Провод | Данные | Примечания |
|---|---|---|---|
Inputinput | Исполнение + данныеexecute_data | — |
Выходы
| Порт | Провод | Данные | Примечания |
|---|---|---|---|
Truetrue | Исполнение + данныеexecute_data | — | |
Falsefalse | Исполнение + данныеexecute_data | — |
Настройки
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
Условиеcondition_expression | string | "" | Выражение, вычисляемое в истинное/ложное значение. Поддерживает сравнения: {{nodes.llm_1.output.confidence}} > 0.8 поддерживает шаблоны |
Общие поля
Эти три поля есть у каждой ноды: платформа добавляет их сама, а не автор ноды.
expose_error_output— Если включено, показывает выход выполнения для подключения нод, которые запускаются при сбое этого шага.split_ports_in— Показывать отдельные порты входа для выполнения и данных вместо одного объединённого.split_ports_out— Показывать отдельные порты выхода для выполнения и данных вместо одного объединённого.