Условие
Узел, который сравнивает одно значение из выполнения с заданным значением и отправляет флоу по одной из двух веток.
4 мин чтения
Условие выбирает ветку. Он сравнивает одно значение из выполнения с заданным вами значением и выходит через Выполнено или Не выполнено.
- Узел
- Условие
- Тип
condition- Категория
- Решение
- Порты
- Выполнено
metподключение обязательно - Не выполнено
not_metподключение обязательно
- Выполнено
- Завершает путь
- Нет
Что делает узел
Узел читает значение по пути из своего поля — во входе, в контексте или в выходе более раннего узла — и сравнивает его со своим значением по своему оператору. Если сравнение выполняется, выполнение выходит через Выполнено, иначе — через Не выполнено. Узел никогда не роняет выполнение: если путь ничего не нашёл, условие не выполняется; не выполняется и сравнение, которое оператор не может сделать, — кроме не равно: для числа против числа, записанного текстом, оно выполняется (см. Ошибки).
{ "field": "context.plan", "operator": "eq", "value": "pro" }Когда использовать
Обработать один вид запросов иначе, чем другой: по тарифу, региону, размеру входа.
Отклонить запрос до вызова модели: ведите одну из веток в Отклонить запрос.
Ветвиться по тому, что оставил более ранний узел, — по выходу Преобразование или по денежным выходам узлов перед AI-модель.
Узел проверяет одно сравнение. Для двух поставьте два узла подряд.
Настройки
| Настройка | Для чего она |
|---|---|
field | Путь к проверяемому значению — во вход, в контекст или в выход более раннего узла, например context.plan. Обязателен. |
operator | Как сравнивается значение — eq, neq, gt, gte, lt, lte, contains, in или exists. Обязателен. |
value | С чем сравнивается значение. Его тип сохраняется — число, текст, true, false, null или список для in. Число для gt, gte, lt и lte; для exists не задаётся. |
В конструкторе настройки — Поле, Оператор и Значение. Новый узел проверяет input.plan.
| Оператор | Выполняется, когда значение по пути… |
|---|---|
| равно, не равно | равно или не равно значению |
| больше чем, больше или равно, меньше чем, меньше или равно | так соотносится с числом |
| содержит | — текст, в котором есть текст значения, или список, среди элементов которого есть значение |
| входит в список | — один из элементов списка |
| существует | вообще есть, даже если это null. Значение задавать не нужно |
Значение сохраняет свой тип. В конструкторе значение равно и не равно сохраняет свой тип, если читается как число,
true,false,nullили JSON — список, объект; всё остальное — текст. Текст, который читается как одно из них, берётся в кавычки:"5". Список для входит в список вводится через запятую, и каждый элемент читается так же. Четыре оператора порядка принимают число, а содержит — текст как он введён, поэтому в списке он находит текстовый элемент, но не число.Число не равно тексту.
5и"5"не равны: равно не выполняется, а не равно выполняется, и в обоих случаях трассировка говорит, что две стороны были разных типов. Два числа сравниваются как числа:1равно1.0.Четырём операторам порядка нужно число. Значение по пути может быть числом или десятичной строкой вроде
"12.50", поэтому денежная сумма и число, которое вызывающий прислал текстом, сравниваются как числа.Строка контекста обрезается по краям, а оставшаяся пустой становится
null: равно""по контексту никогда не выполняется, а не равно""выполняется для любого присланного значения. Пустое значение проверяют через равноnull.
Порты
У узла два порта, Выполнено и Не выполнено, и оба обязательны. Флоу, в котором любой из них никуда не ведёт, не публикуется.
Выход
{ "met": true }Следующий узел читает его как nodes.<key>.output.met.
Ошибки
Ошибок узел не выбрасывает. Путь, который ничего не нашёл, отправляет выполнение через Не выполнено при любом операторе, а в трассировку пишется событие warning с unknown_path. Для оператора существует отсутствие значения и есть ответ, и ничего не пишется.
Два значения, которые оператор не может сравнить, — например, слово там, где оператору порядка нужно число, число там, где содержит ждёт текст или список, или число против числа, записанного текстом, — дают событие warning с type_mismatch. Ответ остаётся ответом сравнения: такая пара не выполняется, и выполнение выходит через Не выполнено, кроме не равно: 5 не равно "5", и выполнение выходит через Выполнено.
[
{ "type": "warning", "node_key": "check", "payload": { "reason": "unknown_path", "field": "context.plan" } },
{ "type": "warning", "node_key": "check", "payload": { "reason": "type_mismatch", "field": "input.amount", "operator": "gt" } }
]Настройки проверяются при проверке флоу и при его публикации.
В API запись issues называет такую проверку в params.detail; её code — invalid_node_config.
| Проверка | Сообщение в конструкторе |
|---|---|
condition_needs_field | Узлу «{node}» нужно поле для проверки. |
condition_field_bad_path | «{node}» проверяет «{path}» — это не путь во входные данные, контекст или узлы. |
condition_field_unknown_node | «{node}» проверяет «{path}», но узла «{ref}» во флоу нет. |
condition_field_later_node | «{node}» проверяет «{path}», но «{ref}» не выполняется раньше него — его выхода там ещё нет. |
condition_unsupported_operator | «{node}» использует несуществующий оператор. |
condition_needs_value | Узлу «{node}» нужно значение для сравнения. |
condition_value_not_number | Значение узла «{node}» должно быть числом: его оператор ({operator}) сравнивает числа. |
condition_value_not_list | Значение узла «{node}» должно быть непустым списком: его оператор проверяет, что поле входит в список. |
Пример
- Запрос — По умолчанию → Условие
- Условие — Выполнено → AI-модель
- Условие — Не выполнено → Отклонить запрос
- AI-модель — Успех → Вернуть ответ
Узел проверяет, что context.plan равно "pro". На запрос этого тарифа отвечает модель; любой другой отклоняет Отклонить запрос с кодом, который задал его автор.
См. также
Контекст выполнения и пути — что может читать путь и что оставляет каждый узел.
Порты и ветвление — обязательные порты и то, куда ведёт порт.
Отправить запрос — что лежит в контексте вызова.
Собрано из openapi b070e1f, sdk contract 5cc7055, php ae4a53b, node 84bc62d