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

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-функцией

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

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

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

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

Агент:

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

HTTP запрос:

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

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

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

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

При параллельном режиме -- ограничение на количество одновременно выполняемых операций. Диапазон: 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 } }.