Порты и ветвление: как флоу выбирает путь
Порт — это именованный выход узла. Какие порты обязательно подключать и что происходит, когда узел выходит через неподключённый.
2 мин чтения
Узел заканчивает работу, выходя через один из своих портов — именованных выходов. Связь начинается в порту и ведёт к следующему узлу, поэтому порт, через который вышел узел, и есть ветка, по которой идёт флоу.
Один порт — одна связь
У большинства узлов один порт, По умолчанию. Они делают свою работу и передают выполнение дальше. У узла, который принимает решение, есть порт на каждый исход.
- Запрос — По умолчанию → Условие
- Условие — Выполнено → AI-модель
- Условие — Не выполнено → Отклонить запрос
- AI-модель — Успех → Вернуть ответ
Здесь Условие выходит через Выполнено или через Не выполнено, и каждый из двух портов ведёт к своему узлу.
У порта не больше одной связи. Вторая связь из того же порта — ошибка, и флоу не публикуется.
В один узел может приходить несколько связей. Ветки снова сходятся там, где это удобно для флоу.
API называет порт по коду —
met,not_met,rate_limit. Конструктор показывает его название на вашем языке.
Обязательные и необязательные порты
Обязательный порт должен быть подключён. Флоу, в котором обязательный порт никуда не ведёт, не публикуется.
Большинство портов обязательные. Необязательные — это порты, через которые узел выходит, когда вызов отклонён или завершился ошибкой.
AI-модель — Ошибка, Пул исчерпан и Отказ необязательные. Обязателен только Успех.
Проверка бюджета — Отказ необязательный.
HTTP-запрос — Ошибка необязательный.
Порт, который никуда не ведёт
Необязательный порт можно оставить без связи. Когда узел выходит через такой порт, идти некуда, и то, что обработала бы ветка, становится ответом на весь запрос.
Отказ возвращается вызывающему как отказ. Когда Проверка бюджета отказывает, а ветки Отказ у него нет, вызывающий получает
budget_exceededилиpolicy_denied, и выполнение заканчивается со статусомrejected.Ошибка возвращается вызывающему как эта ошибка, и выполнение заканчивается со статусом
failed.
У одного порта есть запасной выход. Когда попытки вызова модели закончились без ответа, AI-модель выходит через порт Пул исчерпан. Когда у этого порта нет связи, а у порта Ошибка она есть, выполнение идёт по ветке Ошибка. Когда не подключён ни один из них, вызывающий получает ошибку pool_exhausted.
О двух таких портах проверка при публикации предупреждает, потому что без них меняется то, что получает ваше приложение.
AI-модель без ветки Ошибка — ошибка провайдера завершает ошибкой всю операцию.
Проверка бюджета без ветки Отказ — отказ уходит вызывающему, а не идёт по ветке.
Предупреждение публикацию не останавливает.
unrouted_port — это код выполнения, которое вышло из узла через порт без связи и не имело ни ошибки, ни отказа, чтобы ответить ими. Проверка обязательных портов нужна затем, чтобы опубликованный флоу до него не доходил.
Узлы без портов
У Вернуть ответ и Отклонить запрос портов нет, потому что они заканчивают путь. Каждый путь флоу должен закончиться в одном из них. Любой другой узел, до которого доходит путь и из которого не выходит ни одна связь, — ошибка, и флоу не публикуется.
Порты всех узлов
| Порт | Ключ | Узлы |
|---|---|---|
| По умолчанию | default |
|
| Успех | success |
|
| Ошибка | error |
|
| Пул исчерпан | rate_limit |
|
| Отказ | deny |
|
| Выполнено | met |
|
| Не выполнено | not_met |
|
| Попадание | hit |
|
| Промах | miss |
|
| Одобрено | approved |
|
| Отклонено | rejected |
|
Что читать дальше
Как устроен флоу — входной узел, конечные узлы и группы палитры.
Собрано из openapi b070e1f, sdk contract 5cc7055, php ae4a53b, node 84bc62d