Skip to Content

Цикл (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.

component20