ReWOO와 Plan-and-Execute: 분리형 계획 수립(Decoupled Planning)

ReAct는 생각(thought)과 행동(action)을 하나의 흐름 안에 섞어 진행합니다. ReWOO는 이를 분리합니다. 먼저 큰 계획을 한 번 세우고, 그다음 실행합니다. 이렇게 하면 토큰을 5배 적게 쓰고, HotpotQA에서는 정확도가 4%p 올라가며, 계획 수립기(planner)를 7B 모델로 증류(distill)할 수도 있습니다. Plan-and-Execute는 이 패턴을 일반화했고, Plan-and-Act는 이를 웹 탐색(web navigation)까지 확장했습니다.

유형: Build 언어: Python (stdlib) 선수 학습: Phase 14 · 01 (에이전트 루프) 소요 시간: 약 60분

학습 목표

  • ReWOO의 계획 수립기(Planner), 작업자(Worker), 해결기(Solver) 분리가 ReAct의 생각-행동이 섞인 루프보다 토큰을 절약하고 견고성을 높이는 이유를 설명합니다.
  • 계획 유향 비순환 그래프(Directed Acyclic Graph; DAG), 의존성 순서대로 실행하는 실행기(executor), 작업자 출력들을 조합하는 해결기를 모두 Python 표준 라이브러리만으로 구현합니다.
  • 2026년 기준 "다섯 가지 워크플로 패턴" 관점(Anthropic)을 사용해 어떤 작업을 선계획-후실행(plan-then-execute)으로 처리하고, 어떤 작업을 ReAct처럼 중간중간 반응하며 처리할지 판단합니다.
  • 긴 범위의 웹 또는 모바일 작업에서 Plan-and-Act의 합성 계획 데이터(synthetic plan data)가 필요한 시점을 알아봅니다.

문제

ReAct의 생각-행동-관찰(thought-action-observation)이 섞인 루프는 단순하고 유연합니다. 하지만 각 도구 호출(tool call)은 이전의 모든 맥락을 들고 가야 합니다. 여기에는 이전 생각들도 모두 포함됩니다. 그래서 토큰 사용량은 깊이가 깊어질수록 이차적으로(quadratically) 증가합니다. 더 나쁜 점은, 도구가 루프 중간에서 실패하면 모델이 오류 관찰(error observation)을 보고 전체 계획을 다시 추론해야 한다는 것입니다.

ReWOO(Xu et al., arXiv:2305.18323, 2023년 5월)는 이 문제를 보고 하나의 가정을 세웠습니다. 전체 계획을 먼저 세우고, 증거(evidence)를 병렬로 가져온 다음, 마지막에 답을 조합하자는 것입니다. 계획을 위한 LLM 호출 1번, 증거를 얻기 위한 N번의 도구 호출(병렬 가능), 해결을 위한 LLM 호출 1번이면 됩니다. 이 선택은 유연성을 일부 포기합니다. 계획이 정적(static)이기 때문입니다. 대신 토큰 효율이 훨씬 좋아지고 실패 양상이 더 명확해집니다.

사전 테스트

2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요

1.ReWOO가 HotpotQA 같은 다단계 작업에서 ReAct보다 약 5배 적은 토큰을 사용하는 이유는 무엇인가요?

2.ReWOO 아키텍처의 세 가지 역할은 무엇인가요?

0/2 답변 완료

개념

세 가지 역할

Planner:  user_question -> [plan_dag]
Workers:  [plan_dag]     -> [evidence]        (tool calls, possibly parallel)
Solver:   user_question, plan_dag, evidence -> final_answer

계획 수립기는 유향 비순환 그래프(DAG)를 만듭니다. 각 노드는 사용할 도구, 인자(arguments), 그리고 앞선 어떤 노드에 의존하는지를 이름으로 담습니다. 의존성은 #E1, #E2 같은 참조(reference)로 표현합니다. 작업자들은 노드를 위상 정렬(topological order) 순서로 실행합니다. 해결기는 그 결과를 한데 이어 최종 답을 만듭니다.

왜 토큰을 5배 적게 쓰는가

ReAct에서는 단계 수가 늘어날수록 프롬프트 길이가 선형으로 증가합니다. 10번째 단계의 프롬프트에는 생각 1, 행동 1, 관찰 1, 생각 2, 행동 2, 관찰 2가 모두 들어가고, 이런 식으로 계속 누적됩니다. 또한 각 중간 단계는 원래 프롬프트도 반복해서 포함합니다.

ReWOO는 큰 계획 수립 프롬프트를 한 번 지불하고, N개의 작은 작업자 프롬프트를 사용합니다. 각 작업자 프롬프트는 체인 전체가 아니라 해당 도구 호출만 담습니다. 마지막으로 해결기 프롬프트를 한 번 더 사용합니다. ReWOO 논문은 HotpotQA에서 토큰을 약 5배 적게 쓰면서도 절대 정확도 기준 +4%p를 기록했다고 보고합니다.

왜 더 견고한가

ReAct에서 세 번째 작업자가 실패하면, 루프는 진행 중인 흐름 안에서 오류를 해석하고 빠져나와야 합니다. ReWOO에서는 세 번째 작업자가 오류 문자열을 반환합니다. 해결기는 원래 계획과 함께 그 오류를 보고, 가능한 범위 안에서 품질을 낮춰 우아하게 대응(degrade gracefully)할 수 있습니다. 실패 위치가 단계 전체 흐름이 아니라 개별 노드 단위로 국소화됩니다.

계획 수립기 증류(Planner Distillation)

이 논문의 두 번째 결과는 다음과 같습니다. 계획 수립기는 관찰 결과를 보지 않기 때문에, 175B 교사 모델(teacher model)이 만든 계획 출력을 사용해 7B 모델을 미세 조정(fine-tune)할 수 있습니다. 작은 모델이 계획을 담당하면 추론(inference) 시점에 큰 모델이 반드시 필요하지 않습니다. 이제 이는 표준적인 방식이 되었습니다. 2026년의 많은 프로덕션 에이전트는 작은 계획 수립기와 큰 실행기(executor)를 조합하거나, 반대로 큰 계획 수립기와 작은 실행기를 조합합니다.

Plan-and-Execute (LangChain, 2023)

LangChain 팀의 2023년 8월 글은 ReWOO를 Plan-and-Execute라는 패턴 이름으로 일반화했습니다. 선행 계획 수립기(up-front planner)가 단계 목록을 만들고, 실행기가 각 단계를 실행하며, 선택적으로 재계획기(replanner)가 관찰 결과를 본 뒤 계획을 수정할 수 있습니다. 이는 ReWOO보다 ReAct에 조금 더 가깝습니다. 재계획기가 관찰 결과를 다시 계획 수립으로 가져오기 때문입니다. 하지만 토큰 절약이라는 장점은 유지합니다.

Plan-and-Act (Erdogan et al., arXiv:2503.09572, ICML 2025)

Plan-and-Act는 이 패턴을 긴 범위의 웹 및 모바일 에이전트로 확장합니다. 핵심 기여는 합성 계획 데이터입니다. 라벨이 붙은 궤적 생성기(trajectory generator)가 계획이 명시된 학습 데이터를 만듭니다. 이 데이터는 계획 수립기 모델을 미세 조정하는 데 사용됩니다. 이렇게 학습한 모델은 단일 ReAct 궤적이 일관성을 잃기 쉬운 WebArena류 작업에서도 30-50단계를 넘어 계속 작동할 수 있습니다.

무엇을 언제 고를 것인가

패턴적합한 경우
ReAct짧은 작업, 알 수 없는 환경, 반응형 예외 처리(reactive exception handling)가 필요한 경우
ReWOO구조화된 작업, 알려진 도구, 토큰에 민감한 작업, 병렬화 가능한 증거 수집
Plan-and-ExecuteReWOO와 비슷하지만 부분 실행 뒤 재계획이 필요한 경우
Plan-and-Act긴 범위의 작업(30단계 초과), 웹/모바일/컴퓨터 사용(computer-use)
Tree of Thoughts탐색(search)에 비용을 지불할 가치가 있는 경우(04강)

Anthropic의 2024년 12월 지침은 단순한 것부터 시작하라고 말합니다. 작업이 도구 호출 한 번과 요약 하나로 끝난다면 ReWOO를 만들 필요가 없습니다. 반대로 40단계짜리 조사 과제라면 ReAct만으로 처리하지 않는 편이 좋습니다.

만들어보기

code/main.py는 장난감 수준의 ReWOO를 구현합니다.

  • Planner - 프롬프트에서 계획 DAG를 만드는 스크립트형 정책입니다.
  • Worker - 레지스트리(registry)를 통해 각 노드의 도구 호출을 실행합니다.
  • Solver - 증거를 읽고 최종 답을 만드는 스크립트형 조합기입니다.
  • 의존성 해결(dependency resolution) - #E1 같은 참조를 앞선 작업자 출력으로 치환합니다.

데모는 "프랑스 수도의 인구를 백만 단위로 반올림하면 얼마인가?"라는 질문에 답합니다. 두 단계 계획을 사용합니다. (1) 수도를 찾고, (2) 인구를 찾은 뒤, 마지막에 답을 조합합니다.

실행합니다.

python3 code/main.py

실행 추적(trace)은 먼저 전체 계획을 보여주고, 그다음 작업자 결과를 보여준 뒤, 마지막으로 해결기의 조합 결과를 보여줍니다. 토큰 수(여기서는 대략적인 문자 수를 출력합니다)를 ReAct식으로 중간중간 섞어 실행한 경우와 비교해보세요. 이런 구조화된 작업에서는 ReWOO가 유리합니다.

사용해보기

LangGraph는 Plan-and-Execute를 레시피로 제공합니다. ReAct에는 create_react_agent를 사용하고, Plan-and-Execute에는 사용자 정의 그래프(custom graph)를 사용합니다. CrewAI의 Flows는 이 패턴을 직접 표현합니다. 작업을 앞에서 정의하면 Flow DAG가 이를 실행합니다. Plan-and-Act의 합성 데이터 접근은 아직 대부분 연구 영역에 가깝습니다. 다만 명시적 계획 DAG라는 런타임 패턴 자체는 LangGraph와 CrewAI Flows를 통해 프로덕션에서도 사용됩니다.

산출물 만들기

outputs/skill-rewoo-planner.md는 사용자 요청과 도구 카탈로그(tool catalog)를 받아 ReWOO 계획 DAG를 생성합니다. 실행기에 넘기기 전에 계획을 검증합니다. 검증 항목에는 순환이 없는지(acyclic), 모든 참조가 해결되는지, 모든 도구가 존재하는지가 포함됩니다.

연습문제

  1. 쉬움 — 독립적인 계획 노드에 대해 작업자 실행을 병렬화해보세요. 병렬 그룹이 2개 있는 6노드 DAG에서는 무엇을 얻을 수 있나요?
  2. 중간 — 어떤 작업자가 오류를 반환하면 실행되는 재계획기 노드를 추가해보세요. ReWOO를 Plan-and-Execute로 바꾸는 가장 작은 변경은 무엇인가요?
  3. 중간Planner를 작은 모델(7B급)로 교체하고, Solver는 프런티어 모델(frontier model)에 둬보세요. 전체 품질을 비교하세요. 이 분리는 어디에서 실패하나요?
  4. 어려움 — ReWOO 논문의 계획 수립기 증류에 관한 4장을 읽어보세요. 175B에서 7B로 줄이는 결과를 개념적으로 재현하려면 어떤 학습 데이터가 필요하고, 계획 품질은 어떻게 채점해야 하나요?
  5. 어려움 — 이 장난감 예제를 Plan-and-Act의 궤적 형태로 옮겨보세요. 이때 계획은 DAG가 아니라 순서열(sequence)입니다. 어떤 트레이드오프가 달라지나요?

핵심 용어

용어흔한 설명실제 의미
ReWOO"관찰 없는 추론(Reasoning without observations)"먼저 계획하고, 증거를 병렬로 가져온 뒤, 마지막에 해결합니다. 계획 프롬프트에는 관찰 결과가 들어가지 않습니다.
Plan-and-Execute"LangChain의 plan-execute 패턴"실행 뒤 선택적 재계획기 노드를 둔 ReWOO입니다.
Plan-and-Act"확장된 plan-execute"긴 범위 작업을 위해 합성 계획 학습 데이터를 사용하는 명시적 계획 수립기/실행기 분리입니다.
증거 참조(Evidence reference)"#E1, #E2, ..."디스패치(dispatch) 시점에 앞선 작업자 출력으로 치환되는 계획 노드 자리표시자입니다.
계획 수립기 증류(Planner distillation)"작은 계획 수립기, 큰 실행기"큰 교사 모델이 만든 계획 추적(planner trace)으로 작은 모델을 미세 조정하는 방식입니다.
토큰 효율(Token efficiency)"왕복 호출이 적다"논문에서 ReAct 대비 HotpotQA 토큰을 5배 적게 쓴 결과입니다.
DAG 실행기(DAG executor)"위상 정렬 디스패처(Topological dispatcher)"계획 노드를 의존성 순서대로 실행합니다. 각 수준에서는 병렬 실행이 가능합니다.

더 읽을거리

실습 코드

이 강의의 실습 코드 1개

main
Code

산출물

이 강의에서 생성된 프롬프트, 스킬, 코드 산출물 1개

rewoo-planner

Generate a validated ReWOO plan DAG from a user request and tool catalog.

Skill

확인 문제

3문제 · 모두 맞추면 완료 표시가 가능합니다

1.ReWOO 에이전트의 세 번째 작업자(worker)가 오류를 반환했습니다. 해결기(Solver)는 이를 어떻게 처리하며, ReAct의 루프 중간 실패 처리와 어떻게 다른가요?

2.순수한 ReWOO 대신 Plan-and-Execute를 선택해야 하는 경우는 언제인가요?

3.ReWOO의 계획 수립기 증류(planner distillation)가 7B 모델을 미세 조정해 계획을 생성하게 합니다. 이것이 계획 수립기에서는 가능하지만 해결기(solver)에서는 간단하지 않은 이유는 무엇인가요?

0/3 답변 완료

추가 문제 풀기

AI가 강의 내용을 바탕으로 새로운 문제를 생성합니다