다크 모드
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_round는 0입니다. 최대 반복 횟수에 도달하거나 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 이상이면 끝내는 흐름을 구성해 보겠습니다.
- Loop 변수
draft를 문자열로,score를 숫자로 추가합니다. draft의 초기값은 상위 노드의 초안을 선택하고score는0으로 설정합니다.- 본문에 초안을 수정하는 LLM과 평가 점수를 만드는 LLM 또는 Code 노드를 배치합니다.
- Variable Assigner에서 새 초안과 점수를 각각
draft,score에 덮어씁니다. - 종료 조건을
score >= 8로 설정합니다. - 최대 반복 횟수를
5로 설정합니다.
점수가 세 번째 회차에 8 이상이 되면 Loop는 해당 회차를 마친 뒤 종료하고, 마지막 draft, score와 loop_round: 3을 반환합니다.
주의사항
- 종료 조건은 첫 회차 전에도 평가됩니다. 본문을 반드시 한 번 실행해야 한다면 초기값이 종료 조건을 만족하지 않는지 확인하세요.
- 내부 노드의 일반 출력은 다음 회차로 자동 전달되지 않습니다. 다음 회차에도 필요한 값은 Loop 변수로 선언하고 Variable Assigner로 갱신하세요.
- 최대 반복 횟수는 안전 상한입니다. 종료 조건을 설정했더라도 조건이 끝내 충족되지 않으면 이 횟수에서 종료합니다.
- Loop의 오류 정책은
fail-fast로 고정되어 있습니다. 내부 호출 실패를 계속 처리해야 한다면 해당 노드에서 오류를 정상 값으로 변환하거나 워크플로우 구조를 조정하세요. - Loop 변수의 상위 노드 참조는 Loop보다 먼저 실행되고 루트 Input에서 도달 가능한 경로에 있어야 하며, 선택한 값의 타입이 변수 타입과 일치해야 합니다.
loop_round는 예약어입니다. 같은 이름의 Loop 변수를 만들 수 없습니다.
관련 노드
- Variable Assigner: 현재 Loop 변수를 갱신합니다.
- Exit Loop: 특정 내부 경로에서 다음 회차 실행을 중단합니다.
- Condition: Loop 본문의 실행 경로를 분기합니다.
- Iteration: 배열의 각 항목을 독립적으로 처리합니다.