Skip to content

Loop 노드

Loop는 선언한 변수를 유지하고 갱신하면서 내부 워크플로우를 여러 회차에 걸쳐 순차 실행합니다. 각 회차 전후에 종료 조건을 확인하고, 조건을 만족하거나 Exit Loop에 도달하거나 최대 반복 횟수에 이르면 종료합니다.

언제 사용하나요?

  • 초안을 평가하고 기준을 만족할 때까지 수정할 때
  • 카운터, 누적 배열, 진행 상태처럼 이전 회차의 값을 다음 회차에서 사용할 때
  • 정해진 최대 횟수 안에서 조건 기반 재시도나 개선 작업을 수행할 때

배열의 각 항목을 서로 독립적으로 처리하려면 Iteration을 사용하세요. Loop의 회차는 병렬로 실행되지 않으며, 선언한 Loop 변수가 다음 회차로 이어집니다.

입력

Loop는 Loop 변수로 지속할 상태를 정의합니다. 각 변수의 초기값은 상수로 직접 입력하거나 Loop보다 앞서 실행되는 상위 노드의 출력에서 가져올 수 있습니다.

변수 타입초기값 예시
문자열"초안"
숫자0, 3.5
불리언true, false
객체{ "score": 0 }
배열[], ["first"]

변수 이름은 비어 있으면 안 되고 Loop 안에서 고유해야 합니다. loop_round는 엔진이 현재 완료 회차를 기록하는 데 사용하는 예약어이므로 변수 이름으로 사용할 수 없습니다.

주요 설정

설정설명
Loop 변수회차 사이에 유지할 상태입니다. 이름, 타입, 초기값의 종류와 값을 설정합니다.
종료 조건Loop 변수, loop_round 또는 내부 노드 출력에 적용할 비교 조건입니다.
조건 결합여러 종료 조건을 모두 만족해야 하는 AND 또는 하나만 만족해도 되는 OR를 선택합니다.
최대 반복 횟수본문을 실행할 수 있는 상한입니다. 1~100 사이의 정수만 사용할 수 있습니다.
오류 처리현재 실행 계약은 fail-fast만 지원합니다. 내부 노드가 실패하면 Loop 전체가 즉시 실패합니다.

종료 조건은 첫 회차를 시작하기 전 loop_round = 0 상태에서 한 번 확인하고, 각 회차가 끝난 뒤 다시 확인합니다. 따라서 초기값이 이미 조건을 만족하면 본문을 한 번도 실행하지 않고 종료할 수 있습니다. 특정 분기에서 실행되지 않은 내부 노드의 출력에 의존하는 조건은 그 회차에서 충족되지 않은 것으로 처리됩니다.

출력

Loop가 끝나면 각 Loop 변수의 최종값을 반환합니다. 실행 엔진 결과에는 실제로 완료한 회차 수인 loop_round도 함께 포함됩니다.

json
{
  "draft": "수정된 최종 초안",
  "score": 9,
  "loop_round": 3
}

첫 실행 전 종료 조건을 만족하면 loop_round0입니다. 최대 반복 횟수에 도달하거나 Exit Loop로 종료하면 마지막으로 실행한 회차 번호가 기록됩니다.

연결과 배치 제약

  • Loop 본문에는 LLM, Tool, Retriever, HTTP, Template, Code, Transform, Condition, Variable Assigner, Exit Loop 노드를 배치할 수 있습니다.
  • Input, Output, Note, Iteration이나 다른 Loop는 본문에 배치할 수 없습니다.
  • Loop와 바깥 워크플로우 사이를 직접 가로지르는 연결선은 만들 수 없습니다. 초기 변수는 상위 노드 출력 참조로 받고, 바깥에서는 Loop의 최종 변수 값을 참조합니다.
  • 본문에는 시작 노드가 하나 이상 있어야 하며, 모든 내부 노드는 시작 노드에서 도달할 수 있어야 합니다.
  • 본문 내부 연결은 순환이 없는 DAG여야 합니다. 반복은 내부 연결선이 아니라 Loop 컨테이너가 담당합니다.
  • Condition이 아닌 일반 내부 노드는 후속 노드를 하나만 가질 수 있습니다. Condition은 각 분기마다 후속 연결을 하나씩 가질 수 있고, 여러 경로를 한 노드로 합칠 수 있습니다.
  • Iteration이나 Loop 안에 또 다른 반복 컨테이너를 중첩할 수 없습니다.

예시

AI가 작성한 초안을 최대 5회까지 개선하고 점수가 8 이상이면 끝내는 흐름을 구성해 보겠습니다.

  1. Loop 변수 draft를 문자열로, score를 숫자로 추가합니다.
  2. draft의 초기값은 상위 노드의 초안을 선택하고 score0으로 설정합니다.
  3. 본문에 초안을 수정하는 LLM과 평가 점수를 만드는 LLM 또는 Code 노드를 배치합니다.
  4. Variable Assigner에서 새 초안과 점수를 각각 draft, score에 덮어씁니다.
  5. 종료 조건을 score >= 8로 설정합니다.
  6. 최대 반복 횟수를 5로 설정합니다.

점수가 세 번째 회차에 8 이상이 되면 Loop는 해당 회차를 마친 뒤 종료하고, 마지막 draft, scoreloop_round: 3을 반환합니다.

주의사항

  • 종료 조건은 첫 회차 전에도 평가됩니다. 본문을 반드시 한 번 실행해야 한다면 초기값이 종료 조건을 만족하지 않는지 확인하세요.
  • 내부 노드의 일반 출력은 다음 회차로 자동 전달되지 않습니다. 다음 회차에도 필요한 값은 Loop 변수로 선언하고 Variable Assigner로 갱신하세요.
  • 최대 반복 횟수는 안전 상한입니다. 종료 조건을 설정했더라도 조건이 끝내 충족되지 않으면 이 횟수에서 종료합니다.
  • Loop의 오류 정책은 fail-fast로 고정되어 있습니다. 내부 호출 실패를 계속 처리해야 한다면 해당 노드에서 오류를 정상 값으로 변환하거나 워크플로우 구조를 조정하세요.
  • Loop 변수의 상위 노드 참조는 Loop보다 먼저 실행되고 루트 Input에서 도달 가능한 경로에 있어야 하며, 선택한 값의 타입이 변수 타입과 일치해야 합니다.
  • loop_round는 예약어입니다. 같은 이름의 Loop 변수를 만들 수 없습니다.

관련 노드

  • Variable Assigner: 현재 Loop 변수를 갱신합니다.
  • Exit Loop: 특정 내부 경로에서 다음 회차 실행을 중단합니다.
  • Condition: Loop 본문의 실행 경로를 분기합니다.
  • Iteration: 배열의 각 항목을 독립적으로 처리합니다.