Что читает узел — вход, контекст и выходы других узлов
Три корня, из которых узел читает данные, как пишется путь, что каждый узел оставляет узлам после себя и что происходит, когда путь ничего не находит.
4 мин чтения
Узлы флоу читают данные по пути: корень, а за ним имена через точку, например input.plan или nodes.check.output.met. Эта страница говорит, что лежит в корнях, где пишутся пути и что делает узел, когда его путь ничего не находит.
Три корня
| Корень | Что в нём |
|---|---|
input | Вход запроса, каким его отправил вызывающий |
context | Контекст вызова: до 64 простых значений |
nodes | nodes.<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-модель — и сохранённый ответ, который возвращает попадание узла Поиск в кеше, — имеет такую форму:
{
"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, найдено: это не то же, что отсутствующее значение.
{ "type": "warning", "node_key": "check", "payload": { "reason": "unknown_path", "field": "context.plan" } }Что читать дальше
Отправить запрос — вход и контекст со стороны приложения.
Порты и ветвление — как порт, через который выходит узел, выбирает ветку.
Как устроен флоу — все узлы конструктора.
AI-модель — ответ вызова модели и что в нём.