Ошибки нод
Когда нода падает, у движка ровно два сценария. Либо у ноды нарисована ветка ошибки — тогда управление уходит в неё, и запуск продолжается. Либо ветки нет — тогда всё, что стояло ниже по этой ветви, пропускается с причиной «все пути сюда оборвались из-за ошибки выше», а соседние параллельные ветви доигрывают до конца.
Включить ветку ошибки
- Откройте настройки ноды и включите поле Выход ошибки (
expose_error_output). - На карточке появится выход
on_error. - Протяните из него ребро в ноду, которая обработает сбой.
Поле есть почти у всех нод-шагов; у большинства оно выключено по умолчанию, у
http_request — включено. Ребро из on_error без
включённого поля валидатор отбивает ошибкой: порт, которого нода не показывает,
означает неподключённую ветку.
Когда ветка есть и сработала, запуск остаётся завершённым: ошибка считается обработанной. Успешная ветка той же ноды при этом мертва — из двух её выходов в одном запуске срабатывает ровно один, поэтому обе ветви могут спокойно сходиться в общую ноду или в общий exit.
- Исполнение + данные
Что приходит в ветку ошибки
Ребро on_error доставляет в целевую ноду объект — на тот вход, в который вы его
завели. Читается он как обычное значение: {{ inputs.input.message }}.
| Поле | Что содержит |
|---|---|
message |
Короткое описание сбоя для вас — и, если сервис ваш, слова самого сервиса. |
error_code |
Машинный код (см. ниже) или INTERNAL, если платформа не смогла отнести сбой ни к чему конкретному. |
exception_type |
Всегда пустая строка. Поле осталось ради совместимости старых графов. |
failed_node_id |
Идентификатор упавшей ноды. |
failed_node_type |
Тип упавшей ноды. |
Ветвиться нужно по error_code: он стабилен, а message — фраза для чтения,
и она меняется вместе с формулировками платформы и стороннего сервиса.
Коды ошибок
Код делит все сбои на два мира, и от этого зависит, будет ли повтор.
Детерминированные — сбой является свойством самого запроса, повтор ничего не изменит и только потратит деньги:
VALIDATION, INVALID_PATH, NOT_FOUND, ACCESS_DENIED, SIZE_LIMIT,
CONFLICT, PRECONDITION_FAILED.
Временные — следующая попытка вполне может пройти:
PROVIDER_ERROR, CONNECTION, TIMEOUT, RATE_LIMIT.
Отдельно стоят два кода про доступ и деньги — оба детерминированные, потому что
повтор их не лечит, а платный вызов повторяется за ваш счёт: AUTH (сервис
отверг сам ключ) и BILLING (у аккаунта за ключом кончились средства или квота).
Повторы
Повтор возможен, только если тип ноды объявил бюджет повторов; сколько их было, видно в карточке ноды в поле Повторы. Даже при ненулевом бюджете движок не повторяет детерминированные коды и ошибки программирования — они летят наверх сразу. Сетевые сбои самого обращения к модели повторяет клиент провайдера, ещё внутри вызова.
У ноды есть и потолок по времени — по умолчанию 10 минут. Ноды, которые исполняют внутри себя другие ноды (циклы, суб-воркфлоу, агенты), из него исключены: их время складывается из времени детей, а каждый ребёнок ограничен сам. Общий потолок запуска действует в любом случае.
Ноды без ветки ошибки
- entry — вход запуска, ему нечему падать посередине графа.
wf_tool— воркфлоу-как-инструмент: его ошибка уходит либо модели, либо по обычному пути упавшей ветки.- Ноды-инструменты, которые вызывает агент: их сбой возвращается модели текстом, и она решает, что делать дальше.
- Конфигурационные ноды (llm, память, хранилища): они подтягиваются лениво, поэтому ошибка всплывает у той ноды, которая их использует.