Цикл (Loop)
Описание
Компонент Loop позволяет организовать циклическую обработку списков данных. Он последовательно перебирает элементы входного массива (Data или DataFrame) и передает их по одному в выделенную ветку потока. После того как все элементы обработаны, компонент собирает результаты воедино и передает их дальше.
Это незаменимый инструмент для задач массовой обработки: например, когда нужно прогнать через нейросеть каждую строку из таблицы или перевести список документов один за другим.
Как работает компонент Loop
Компонент Loop представляет собой «мини-поток» внутри вашего основного сценария. Он позволяет циклично обрабатывать наборы данных.
1. Входные данные (Inputs)
- Компонент принимает список объектов Data или DataFrame (например, CSV-файл) через порт Inputs.
- Входные данные разделяются на отдельные элементы. Например, CSV-файл разбивается построчно.
- Компонент извлекает элементы по ключу
textдо тех пор, пока данные не закончатся. Каждый извлеченный элемент выводится как объект Data.
2. Процесс итерации (Item)
- Элементы по очереди передаются на выходной порт Item.
- Этот порт соединяется с компонентами, которые выполняют действия над каждым конкретным элементом.
- Важное правило: Только один компонент может быть подключен напрямую к порту Item, но далее вы можете строить цепочку любой длины.
3. Зацикливание (Looping)
- Последний компонент в вашей цепочке обработки должен обязательно подключаться обратно к порту Looping компонента Loop.
- Это дает сигнал системе перейти к обработке следующего элемента.
Компонент If-Else несовместим с компонентом Loop для создания условий внутри цикла.
4. Завершение (Done)
- Когда все элементы обработаны, результаты собираются (агрегируются) в один объект Data.
- Этот итоговый объект передается через порт Done следующему компоненту в основном потоке.
Принцип работы компонента можно представить в виде следующего кода:
for i in input: # Получаем входные данные как список
process_item(i) # Обрабатываем элемент через компоненты, подключенные к порту Item
if has_more_items():
continue # Возвращаемся к порту Looping для следующего элемента
else:
break # Выходим из цикла, когда элементы закончились
done = aggregate_results() # Собираем все возвращенные результаты в один список
print(done) # Отправляем агрегированные данные через порт DoneПример использования
В следующем примере компонент Loop итерирует (перебирает) CSV-файл до тех пор, пока не закончатся строки для обработки.
В этом сценарии порт Item передает каждую строку в компонент Type Convert для преобразования строки в объект Message. Затем это сообщение передается в компонент Structured Output для формирования структурированных данных, которые отправляются обратно в порт Looping компонента Loop.
После обработки всех строк компонент Loop загружает агрегированный список структурированных данных в базу данных Chroma DB через компонент Chroma DB, подключенный к порту Done.
