Перейти к основному содержимому

Блок «Цикл»

Блок Цикл позволяет несколько раз повторить часть процесса.

предупреждение

Циклы доступны только в движке версии 2.

Как добавить на холст

  1. Перейдите в проект и на левой панели выберите Конструктор.
  2. Перетащите блок Код и логикаЦикл на холст.

У блока есть два выхода:

  • Тело цикла — выполняется на каждой итерации. Присоедините ветку процесса, которая будет повторяться.
  • После цикла — выполняется после завершения цикла. Присоедините продолжение процесса.

Настройки

Дважды нажмите на блок Цикл, чтобы открыть настройки.

Тип цикла for

Используйте for, чтобы повторять цикл заданное количество раз.

НастройкаОписание
Начальное значениеЗначение счетчика до первой итерации. Например, 0.
ШагИзменение счетчика после каждой итерации. Например, укажите 1, чтобы увеличивать счетчик каждый раз на единицу.
Условие для счетчикаУсловие для продолжения цикла. Например, выберите Меньше и укажите 5, чтобы повторять цикл, пока счетчик не достигнет 5.

В теле цикла вы можете получать данные о текущем состоянии:

  1. Дважды нажмите на блок Цикл.

  2. Нажмите , чтобы скопировать ID цикла. При обращении к данным добавьте перед ID /: например, /cycle_abcde.

  3. Получите данные:

    • Context.get({key: "/cycle_abcde.value"}) — текущее значение счетчика.
    • Context.get({key: "/cycle_abcde.iteration"}) — номер итерации, начиная с 0.

Режим forEach

Используйте forEach, чтобы перебирать элементы массива.

НастройкаОписание
МассивМассив для перебора.
Элементов за итерациюКоличество элементов для одной итерации.

В теле цикла вы можете получать данные о текущем состоянии:

  1. Дважды нажмите на блок Цикл.
  2. Нажмите , чтобы скопировать ID цикла. При обращении к данным добавьте перед ID /: например, /cycle_abcde.
  3. Получите данные:
    • Элементы массива в текущей итерации:
      • 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.

В теле цикла вы можете получать номер текущей итерации:

  1. Дважды нажмите на блок Цикл.
  2. Нажмите , чтобы скопировать ID цикла. При обращении к данным добавьте перед ID /: например, /cycle_abcde.
  3. Получите номер итерации: Context.get({key: "/cycle_abcde.iteration"}). Отсчет начинается с 0.

Таймауты

Таймауты доступны во всех режимах.

  • Максимальное время итерации ограничивает одну итерацию. После таймаута цикл сразу переходит к следующей.
  • Максимальное время цикла ограничивает общее время выполнения цикла. В случае таймаута цикл завершится с ошибкой Cycle timeout.

Пример

Пользователь хочет подобрать отели сразу в нескольких городах. Процесс по очереди подбирает отели для каждого города, а затем отправляет пользователю общую сводку.

Пример цикла
подсказка

Агент может обработать несколько городов и без цикла. Однако в этом случае порядок и количество вызовов функций зависят от модели. Цикл делает процесс более предсказуемым: каждый город обрабатывается отдельно по одной и той же схеме.

В этом примере:

  1. В блоке Цикл выбран режим forEach. Цикл обрабатывает массив ["Москва", "Санкт-Петербург", "Казань"], по одному городу за итерацию.
  2. На каждой итерации функция Context.get получает текущий город по ключу /cycle_abcde.item. Результат функции доступен в следующем блоке через previousResult.
  3. В поле Запрос для агента указана подстановка {{ previousResult }}, поэтому агент получает текущий город. Затем он вызывает функцию поиска отелей, выбирает подходящие варианты и сохраняет результат в заметки с помощью AgentContext.addNote.
  4. После обработки всех городов цикл заканчивается и процесс переходит ко второму агенту.
  5. Второй агент использует накопленные заметки и отправляет пользователю итоговую сводку по городам.