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(справа)
Примеры использования
Пакетная генерация изображений
- Агент генерирует список описаний изображений (массив строк).
- ForEach принимает этот массив.
- Внутренняя операция: генерация изображений.
- Результат: массив сгенерированных изображений.
Обработка списка заказов
- HTTP-нода получает список заказов из API.
- ForEach (inputPath:
orders) обрабатывает каждый заказ. - Внутренняя операция: Агент анализирует заказ.
- Результат: массив анализов.
Параллельные API-вызовы
- Функция формирует список запросов.
- ForEach отправляет каждый запрос через HTTP.
- Режим: параллельно, максимум 5 задач.
- Результат: массив ответов API.
Каждая итерация ForEach работает с копией состояния. Это означает, что параллельные итерации не могут повлиять друг на друга -- переменные одной итерации не перезапишут переменные другой. Подробнее о циклах: Циклы и условия.
Если входной массив пуст, ForEach возвращает пустой результат без ошибки: { "results": [], "meta": { "total": 0, "succeeded": 0, "failed": 0 } }.