Блок «Цикл»
Блок Цикл позволяет несколько раз повторить часть процесса.
Циклы доступны только в движке версии 2.
Как добавить на холст
- Перейдите в проект и на левой панели выберите Конструктор.
- Перетащите блок Код и логика → Цикл на холст.
У блока есть два выхода:
- Тело цикла — выполняется на каждой итерации. Присоедините ветку процесса, которая будет повторяться.
- После цикла — выполняется после завершения цикла. Присоедините продолжение процесса.
Настройки
Дважды нажмите на блок Цикл, чтобы открыть настройки.
Тип цикла for
Используйте for, чтобы повторять цикл заданное количество раз.
| Настройка | Описание |
|---|---|
| Начальное значение | Значение счетчика до первой итерации. Например, 0. |
| Шаг | Изменение счетчика после каждой итерации. Например, укажите 1, чтобы увеличивать счетчик каждый раз на единицу. |
| Условие для счетчика | Условие для продолжения цикла. Например, выберите Меньше и укажите 5, чтобы повторять цикл, пока счетчик не достигнет 5. |
В теле цикла вы можете получать данные о текущем состоянии:
-
Дважды нажмите на блок Цикл.
-
Нажмите , чтобы скопировать ID цикла. При обращении к данным добавьте перед ID
/: например,/cycle_abcde. -
Получите данные:
Context.get({key: "/cycle_abcde.value"})— текущее значение счетчика.Context.get({key: "/cycle_abcde.iteration"})— номер итерации, начиная с0.
Режим forEach
Используйте forEach, чтобы перебирать элементы массива.
| Настройка | Описание |
|---|---|
| Массив | Массив для перебора. |
| Элементов за итерацию | Количество элементов для одной итерации. |
В теле цикла вы можете получать данные о текущем состоянии:
- Дважды нажмите на блок Цикл.
- Нажмите , чтобы скопировать ID цикла. При обращении к данным добавьте перед ID
/: например,/cycle_abcde. - Получите данные:
- Элементы массива в текущей итерации:
Context.get({key: "/cycle_abcde.item"})— используйте, если в поле Элементов за итерацию указано1. Возвращает один элемент.Context.get({key: "/cycle_abcde.batch"})— используйте, если обрабатываете несколько элементов за итерацию. Возвращает массив.
Context.get({key: "/cycle_abcde.index"})— индекс первого элемента текущей итерации, начиная с0.Context.get({key: "/cycle_abcde.iteration"})— номер итерации, начиная с0.
- Элементы массива в текущей итерации:
Режим while
Используйте while, чтобы повторять цикл, пока выполняется условие.
| Настройка | Описание |
|---|---|
| Условие | JavaScript-выражение. Тело цикла повторяется, пока условие истинно. |
| Максимум итераций | После выполнения максимального количества итераций цикл завершится с ошибкой Max iterations exceeded. |
В теле цикла вы можете получать номер текущей итерации:
- Дважды нажмите на блок Цикл.
- Нажмите , чтобы скопировать ID цикла. При обращении к данным добавьте перед ID
/: например,/cycle_abcde. - Получите номер итерации:
Context.get({key: "/cycle_abcde.iteration"}). Отсчет начинается с0.
Таймауты
Таймауты доступны во всех режимах.
- Максимальное время итерации ограничивает одну итерацию. После таймаута цикл сразу переходит к следующей.
- Максимальное время цикла ограничивает общее время выполнения цикла. В случае таймаута цикл завершится с ошибкой
Cycle timeout.
Пример
Пользователь хочет подобрать отели сразу в нескольких городах. Процесс по очереди подбирает отели для каждого города, а затем отправляет пользователю общую сводку.
Агент может обработать несколько городов и без цикла. Однако в этом случае порядок и количество вызовов функций зависят от модели. Цикл делает процесс более предсказуемым: каждый город обрабатывается отдельно по одной и той же схеме.
В этом примере:
- В блоке Цикл выбран режим forEach. Цикл обрабатывает массив
["Москва", "Санкт-Петербург", "Казань"], по одному городу за итерацию. - На каждой итерации функция
Context.getполучает текущий город по ключу/cycle_abcde.item. Результат функции доступен в следующем блоке черезpreviousResult. - В поле Запрос для агента указана подстановка
{{ previousResult }}, поэтому агент получает текущий город. Затем он вызывает функцию поиска отелей, выбирает подходящие варианты и сохраняет результат в заметки с помощьюAgentContext.addNote. - После обработки всех городов цикл заканчивается и процесс переходит ко второму агенту.
- Второй агент использует накопленные заметки и отправляет пользователю итоговую сводку по городам.