Что читает узел — вход, контекст и выходы других узлов

Три корня, из которых узел читает данные, как пишется путь, что каждый узел оставляет узлам после себя и что происходит, когда путь ничего не находит.

4 мин чтения

Узлы флоу читают данные по пути: корень, а за ним имена через точку, например input.plan или nodes.check.output.met. Эта страница говорит, что лежит в корнях, где пишутся пути и что делает узел, когда его путь ничего не находит.

Три корня

КореньЧто в нём
inputВход запроса, каким его отправил вызывающий
contextКонтекст вызова: до 64 простых значений
nodesnodes.<key>.output — то, что оставил узел, который уже выполнился
  • Каждое имя после точки спускается на уровень ниже: input.customer.tier. Список читается по позиции элемента, считая с 0: input.messages.0.content.

  • В пути нет пробелов и фигурных скобок, и между двумя точками нет пустого имени.

  • <key> — ключ узла во флоу. Панель узла в конструкторе показывает ключ под своим заголовком. Ключ — от 1 до 64 строчных латинских букв, цифр, подчёркиваний и дефисов.

Вход и контекст

Вход доходит до флоу таким, каким его отправил вызывающий: объект, пустой, если вызывающий ничего не отправил. AI-модель берёт сообщения своего вызова из input.messages и ниоткуда больше.

Slen обрезает пробельные символы по краям строки контекста, а строка, которая осталась пустой, становится null. context.user_id называет клиента, для которого делается вызов, а context.credit_type — тип кредитов его счёта, который платит; без него это default. Отправить запрос говорит, что может лежать в контексте.

Запрос передаёт вход дальше без изменений, поэтому nodes.<key>.output.<name> входного узла читает то же значение, что и input.<name>.

Что оставляет каждый узел

Узел оставляет свой выход, когда заканчивает работу. Узел, через который выполнение не прошло — он стоит на другой ветке, — ничего не оставляет, и путь в его выход ничего не находит.

УзелЕго выход
ЗапросВход запроса
Условиеmet — true или false
ПреобразованиеОбъект, который он собрал, по полю на каждое поле его настроек
Заметка в трассировкеmessage — заметка в том виде, в каком она записана в трассировку
Поиск в кешеПри попадании — сохранённый ответ модели. При промахе — ничего
AI-модельОтвет модели с полями ниже
ОчередьЗадержка, на которую он настроен, в секундах — Очередь

Ответ узла AI-модель — и сохранённый ответ, который возвращает попадание узла Поиск в кеше, — имеет такую форму:

JSON
{
  "model": "gpt-4o-mini",
  "content": "Thanks for your order!",
  "finish_reason": "stop",
  "tool_calls": null,
  "usage": { "input_tokens": 412, "output_tokens": 96, "cached_input_tokens": 0 }
}

Выход узла хранится, пока выполнение ждёт, поэтому узел после паузы читает то, что оставили узлы до неё. Выход не сохраняется вместе с трассировкой, и консоль его не показывает. Чтобы увидеть значение из выполнения, запишите его в заметку узлом Заметка в трассировке.

Где пишутся пути

  • Условие проверяет значение по пути из своей настройки Поле.

  • Преобразование читает по пути значение каждого поля, которое собирает.

  • Заметка в трассировке подставляет в своё сообщение вместо {{ path }} значение по этому пути.

  • Вернуть ответ может ответить всем выходом узла, который он называет по ключу.

  • HTTP-запрос заполняет каждую подстановку {{ path }} в пути и строке запроса своего адреса значением по этому пути, а значение по пути своего тела отправляет телом — HTTP-запрос.

  • Поиск в кеше — исключение. Его Поля ключа — пути внутри входа, записанные без input. в начале: messages, а не input.messages.

Пути узлов Условие и Преобразование проверяются при публикации флоу. Путь начинается с одного из трёх корней, а путь в nodes называет узел флоу, который стоит на пути, ведущем к читающему его узлу. Флоу, который это нарушает, не публикуется.

Когда путь ничего не находит

Путь, который ничего не нашёл, не роняет выполнение — кроме пути в HTTP-запрос. Каждый другой узел продолжает по-своему и пишет в трассировку событие warning.

  • Условие выходит через Не выполнено. Только оператор существует спрашивает, есть ли значение вообще.

  • Преобразование ставит на место значения значение поля по умолчанию или null.

  • Заметка в трассировке оставляет подстановку в заметке такой, какой она набрана.

  • HTTP-запрос не делает вызова и выходит через Ошибка. Если к этому порту ничего не подключено, выполнение заканчивается статусом failed — HTTP-запрос.

Значение, которое есть и равно null, найдено: это не то же, что отсутствующее значение.

JSON
{ "type": "warning", "node_key": "check", "payload": { "reason": "unknown_path", "field": "context.plan" } }

Что читать дальше