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

ForEach

Нода ForEach применяет вложенную операцию к каждому элементу входного массива. Элементы могут обрабатываться параллельно или последовательно, а результаты собираются в выходной массив с сохранением порядка.

Назначение​

  • Пакетная генерация изображений по списку описаний
  • Обработка каждого элемента массива агентом
  • Массовые HTTP-запросы к API
  • Трансформация каждого элемента функцией
  • Сохранение или проверка каждого элемента в данных проекта

Настройки​

Путь к массиву (inputPath)​

Dot-notation путь для извлечения массива из входных данных. Оставьте пустым, если вход уже является массивом.

Примеры:

  • Пустое поле -- если входные данные уже массив: ["a", "b", "c"]
  • items -- извлечь массив из { "items": [...] }
  • data.results -- вложенный путь
  • descriptions -- поле с описаниями

Кнопка справа от поля позволяет вставить ссылку на переменную из другой ноды.

Автоматическое определение

Если путь не указан и входные данные -- объект, система автоматически ищет массив по стандартным ключам: items, data, results, output, images, descriptions.

Операция для каждого элемента (innerNodeType)​

Выберите тип ноды, которая будет применена к каждому элементу:

ТипОписание
Генерация изображенийКаждый элемент -- промпт для генерации изображения
АгентКаждый элемент передается агенту как входные данные
HTTP-запросКаждый элемент отправляется как HTTP-запрос
СообщениеКаждый элемент обрабатывается шаблоном сообщения
ФункцияКаждый элемент обрабатывается JavaScript-функцией
OCR (Yandex Vision)Каждый элемент -- URL файла для распознавания текста
WhatsApp-шаблонКаждый элемент -- номер получателя: шаблон уходит на каждый номер отдельным сообщением
Данные проектаКаждый элемент читается, сохраняется, удаляется или занимает ключ в данных проекта

Настройки внутренней операции​

В зависимости от выбранного типа отображается блок настроек:

Генерация изображений:

  • Размер (1024x1024, 1536x1024, 1024x1536, Auto)
  • Качество (Auto, Low, Medium, High)

Агент:

  • Инструкции для агента

HTTP-запрос:

  • URL эндпоинта
  • HTTP-метод (GET, POST, PUT, PATCH)

Данные проекта:

  • Доступны операции «Прочитать», «Сохранить», «Занять ключ» и «Удалить».
  • Ключ «Сохранить» и «Занять ключ» должен зависеть от элемента -- включите в него {{_loop_item...}} или {{_loop_index}}, например order-{{_loop_item.id}}. Иначе все элементы попадут в одну запись.
  • Значение по умолчанию -- {{_loop_item}}.
  • Для операций «Сохранить» и «Занять ключ» срок хранения -- от 1 до 365 дней, по умолчанию 180.

Результат каждой итерации -- результат ноды «Данные проекта» для элемента. При ошибке на месте элемента в results стоит null, а ошибка попадает в errors.

Операции со списками -- без ForEach

Операции «Список записей», «Запрос», «Прочитать несколько», «Сохранить несколько» и «Занять несколько ключей» внутри ForEach недоступны. Для работы со списком используйте «Сохранить несколько» или «Прочитать несколько» в одной ноде Данные проекта.

Режим выполнения​

  • Параллельно -- элементы обрабатываются одновременно (быстрее, но потребляет больше ресурсов)
  • Последовательно -- элементы обрабатываются один за другим (медленнее, но предсказуемее)

Максимум параллельных задач​

При параллельном режиме -- ограничение на количество одновременно выполняемых операций. Диапазон: 1 -- 20. По умолчанию: 5.

Контекст цикла​

Внутри каждой итерации доступны специальные переменные:

ПеременнаяОписание
_loop_itemТекущий элемент массива
_loop_indexИндекс текущего элемента (начинается с 0)
_loop_totalОбщее количество элементов

Входные данные​

Массив (или объект, содержащий массив по указанному пути).

Выходные данные​

{
"__success": true,
"__error": false,
"results": [результат_0, результат_1, результат_2],
"errors": [],
"meta": {
"total": 3,
"succeeded": 3,
"failed": 0
}
}

Массив results сохраняет порядок входного массива. Если элемент обработан с ошибкой, на его позиции стоит null, а информация об ошибке попадает в errors.

Подключения​

  • Вход: один вход (слева)
  • Выход: один выход output (справа)

Примеры использования​

Пакетная генерация изображений​

  1. Агент генерирует список описаний изображений (массив строк).
  2. ForEach принимает этот массив.
  3. Внутренняя операция: генерация изображений.
  4. Результат: массив сгенерированных изображений.

Обработка списка заказов​

  1. HTTP-нода получает список заказов из API.
  2. ForEach (inputPath: orders) обрабатывает каждый заказ.
  3. Внутренняя операция: Агент анализирует заказ.
  4. Результат: массив анализов.

Параллельные API-вызовы​

  1. Функция формирует список запросов.
  2. ForEach отправляет каждый запрос через HTTP.
  3. Режим: параллельно, максимум 5 задач.
  4. Результат: массив ответов API.
Изоляция состояния

Каждая итерация ForEach работает с копией состояния. Это означает, что параллельные итерации не могут повлиять друг на друга -- переменные одной итерации не перезапишут переменные другой. Подробнее о циклах: Циклы и условия.

Пустой массив

Если входной массив пуст, ForEach возвращает пустой результат без ошибки: { "results": [], "meta": { "total": 0, "succeeded": 0, "failed": 0 } }.