day7_practice/plan_and_execute.py

Plan-and-Execute: 계획 → 실행 → 재계획 루프

planner가 요청을 단계 리스트로 쪼개고, execute가 맨 앞 단계 하나만 실행한 뒤 replan이 남은 계획을 유지·수정·종료 중에서 고릅니다. plan이 빌 때까지 execute ↔ replan을 돌고, 비면 finalize로 나갑니다.

그래프 구조

노드 4개, 고정 엣지 4개, 조건부 엣지 1개입니다. 순환은 replan → execute 한 군데뿐입니다.

START planner make_plan · LLM plan = steps execute execute_step · LLM plan = plan[1:] past_steps += [(단계, 결과)] replan replan · LLM continue → 변경 없음 revise → plan = 새 계획 finish → plan = [] after_ replan 라우팅 함수 (노드 아님) plan 남음 → "execute" plan == [] finalize finalize · LLM final_response = 답변 END
고정 엣지 add_edge 조건부: 루프 계속 조건부: 루프 탈출 노드 아래 회색 글씨 = 그 노드가 State에 쓰는 값

State: 누가 무엇을 쓰나

키리듀서쓰는 노드동작
user_request없음입력 처음 invoke에서 한 번 들어오고 이후 읽기 전용입니다.
plan없음 (덮어쓰기) planner execute replan 남은 할 일 큐입니다. execute가 plan[1:]로 맨 앞을 떼어내고, replan이 통째로 교체하거나 비웁니다.
past_stepsoperator.add execute (단계, 결과) 튜플 1개짜리 리스트를 반환하면 리듀서가 기존 리스트 뒤에 이어 붙입니다.
final_response없음 finalize past_steps 전체를 근거로 만든 최종 답변입니다.

실행 순서 예시

계획이 3단계이고 replan이 계속 continue를 고른 경우입니다. 마지막 단계를 실행하면 plan이 비므로 replan이 무엇을 고르든 finalize로 갑니다.

START→ planner→ execute ①→ replan→ execute ②→ replan→ execute ③→ replan→ finalize→ END

슈퍼스텝 수 = planner 1 + (execute + replan) × N + finalize 1 = 2N + 2. 7단계 계획이면 16스텝, LLM 호출도 16번입니다.

주의할 점