Все ноды/Logic & Flow/Branching

Если / Иначе

Условное ветвление: вычисляет выражение и направляет выполнение в ветку 'true' или 'false'. Выражение поддерживает сравнения и обращения к данным нод: {{nodes.llm_1.output.score}} > 0.8.

Если / Иначе
InputTrue
False

Тип в графе: if

Exec

Можно включить ветку ошибки (expose_error_output) и обработать сбой отдельным путём.

Порты можно разделить на исполнение и данные (split ports).

Как попробовать

Минимальный рабочий воркфлоу

Вход
Если / Иначе
Выход
  • Исполнение + данные
Нажмите «Скопировать ноды», откройте редактор и нажмите Ctrl+V на холсте.

Запускается сразу

Как применять

Берите эту ноду, когда исполнение раздваивается по данным, которые в графе уже есть: оценка от модели, поле из документа, длина текста, флаг из базы. Веток ровно две. Если направлений больше двух, поставьте 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_expressionstring""

Выражение, вычисляемое в истинное/ложное значение. Поддерживает сравнения: {{nodes.llm_1.output.confidence}} > 0.8

поддерживает шаблоны

Общие поля

Эти три поля есть у каждой ноды: платформа добавляет их сама, а не автор ноды.

  • expose_error_output — Если включено, показывает выход выполнения для подключения нод, которые запускаются при сбое этого шага.
  • split_ports_in — Показывать отдельные порты входа для выполнения и данных вместо одного объединённого.
  • split_ports_out — Показывать отдельные порты выхода для выполнения и данных вместо одного объединённого.