AI Agents for Beginners - 7. Planning Design Pattern

How to build planning agents that decompose complex goals into structured subtasks, route work to specialized agents, and iteratively re-plan based on real-world feedback.
June 9, 2026

AI Agents for Beginners - 7. Planning Design Pattern

이 글은 Microsoft의 AI Agents for Beginners 강좌 Lesson 07을 기반으로 정리한 내용입니다.

Defining the Overall Goal and Breaking Down a Task

복잡한 실세계 태스크는 단일 단계로 해결하기 어렵습니다.
AI Agent에게는 계획과 행동을 이끌 명확한 목표가 필요합니다. 예를 들어 "3일 여행 일정 생성"이라는 목표는 간단해 보이지만, 항공·숙박·액티비티 추천까지 포함하는 포괄적인 일정을 만들려면 구체적인 분해가 필요합니다.
목표가 구체적일수록 에이전트(와 협력자들)는 올바른 결과에 집중할 수 있습니다.
Planning Design Pattern Overview
Mermaid
flowchart TD Goal["Overall Goal\n'Generate a 3-day travel itinerary'"] --> Decompose["Task Decomposition\n하위 태스크로 분해"] Decompose --> T1["Flight Booking"] Decompose --> T2["Hotel Booking"] Decompose --> T3["Car Rental"] Decompose --> T4["Activities Booking"] T1 & T2 & T3 & T4 --> Plan["Structured Plan\n(JSON output)"] Plan --> Route["Route to\nSpecialized Agents"] Route --> Result["Cohesive Final\nItinerary"]
Planning Pattern의 세 가지 핵심 요소:
요소설명
Goal Setting에이전트가 무엇을 달성해야 하는지 명확히 정의. 구체적일수록 결과가 좋음
Task Decomposition복잡한 태스크를 독립적인 하위 태스크로 분해하여 각 전문 에이전트에 위임
Structured OutputLLM이 JSON 형식의 계획을 생성해 다운스트림 에이전트가 파싱·처리하기 쉽게 만듦

Task Decomposition

"3일 여행 일정 생성" 같은 목표는 간단해 보이지만 실제로는 여러 전문 영역으로 분해됩니다.
각 하위 태스크는 전담 에이전트 또는 프로세스가 처리하며, 모듈형 구조이므로 나중에 Food Recommendations, Local Activity Suggestions 등을 추가해 점진적으로 확장할 수 있습니다.
Travel Itinerary Task Decomposition
Mermaid
flowchart LR Main["Plan a family trip\nSingapore → Melbourne"] Main --> F["FlightBooking\n왕복 항공편 예약"] Main --> H["HotelBooking\n가족 친화적 호텔"] Main --> C["CarRental\n4인 가족용 렌터카"] Main --> A["ActivitiesBooking\n가족 액티비티"] Main --> D["DestinationInfo\n멜버른 여행 정보"]

Structured output

LLM이 생성한 계획을 다운스트림 시스템이 처리하려면 구조화된 출력이 필요합니다.
Pydantic 모델로 응답 스키마를 정의하면 타입 안전성과 자동 검증을 얻을 수 있습니다:
planning_agent.py
python
위 코드의 출력 예시:
planning_output.json
json
Structured Output Flow
Mermaid
flowchart TD User["User Request\n'Plan a family trip Singapore → Melbourne'"] --> Planner["Planner Agent\n(system_prompt + user_message)"] Planner --> LLM["LLM\nPydantic schema 기반 계획 생성"] LLM --> JSON["TravelPlan JSON\nmain_task + subtasks[]"] JSON --> V1["assigned_agent:\nflight_booking"] JSON --> V2["assigned_agent:\nhotel_booking"] JSON --> V3["assigned_agent:\ncar_rental"] JSON --> V4["assigned_agent:\nactivities_booking"] JSON --> V5["assigned_agent:\ndestination_info"]

Planning Agent with Multi-Agent Orchestration

Planning Agent는 생성된 계획을 바탕으로 전문 에이전트에게 작업을 라우팅합니다.
시나리오라우팅 방식
단일 태스크해당 전담 에이전트에 직접 전달
다중 태스크GroupChatManager를 통해 여러 에이전트가 협력
Planning Agent with Multi-Agent Orchestration
Mermaid
flowchart TD User["User\n'Plan a family trip Singapore → Melbourne'"] --> Planner["Planner Agent\nsystem_prompt 기반 계획 생성"] Planner --> LLM["LLM\nTravelPlan JSON 생성"] LLM --> Route{subtasks 수} Route -->|"단일 태스크"| Direct["전담 에이전트에 직접 전달"] Route -->|"다중 태스크"| GCM["GroupChatManager\n멀티에이전트 협업 조율"] GCM --> FA["FlightAgent"] GCM --> HA["HotelAgent"] GCM --> CA["CarRentalAgent"] GCM --> AA["ActivitiesAgent"] GCM --> DA["DestInfoAgent"] FA & HA & CA & AA & DA --> GCM GCM --> Summary["결과 취합·요약"] Direct --> Summary Summary --> User
GroupChatManager는 여러 에이전트의 결과를 취합해 최종 사용자에게 일관된 응답을 제공합니다.

Iterative Planning

일부 태스크는 한 번의 계획으로 완료되지 않습니다.
하위 태스크의 결과가 다음 단계에 영향을 미치거나, 사용자 피드백으로 재계획(re-planning)이 필요한 경우가 있습니다.
예를 들어:
  • 항공편 예약 중 예상치 못한 데이터 형식 → 전략 변경 후 호텔 예약 진행
  • 사용자가 "더 이른 항공편 원함" → 부분 재계획 트리거
iterative_planning.py
python
Iterative Planning Loop
Mermaid
flowchart TD Start["User Request"] --> Plan["Initial Plan\n(TravelPlan JSON)"] Plan --> Execute["Execute Subtasks\n(Specialized Agents)"] Execute --> Check{결과 검토} Check -->|"성공"| Next["Next Subtask\n또는 최종 응답"] Check -->|"실패 / 변경 필요"| Replan["Re-plan\n(context: Previous TravelPlan)"] Replan --> Execute Next --> Done["최종 여행 일정"]
context 파라미터로 이전 계획을 전달하면 LLM이 기존 결과를 바탕으로 수정된 계획을 생성합니다.

Summary

Lesson 07 Summary
Mermaid
flowchart LR Root["Planning\nDesign Pattern"] Root --> Goal["Goal Setting"] Root --> Decomp["Task\nDecomposition"] Root --> Struct["Structured\nOutput"] Root --> Orch["Multi-Agent\nOrchestration"] Root --> Iter["Iterative\nPlanning"] Goal --> G1["명확한 목표 정의"] Goal --> G2["구체적일수록 결과↑"] Decomp --> D1["하위 태스크로 분해"] Decomp --> D2["전담 에이전트 할당"] Struct --> S1["Pydantic 스키마"] Struct --> S2["JSON 계획 생성"] Orch --> O1["단일 → 직접 라우팅"] Orch --> O2["다중 → GroupChatManager"] Iter --> I1["실패 시 재계획"] Iter --> I2["context로 이전 계획 전달"]
  • Planning Design Pattern은 복잡한 목표를 관리 가능한 하위 태스크로 분해해 전문 에이전트에게 위임합니다
  • Pydantic 모델로 Structured Output을 정의하면 LLM 응답을 타입 안전하게 파싱하고 다운스트림 에이전트가 즉시 처리할 수 있습니다
  • Multi-Agent Orchestration으로 단일/다중 태스크를 적절한 에이전트에 라우팅하고, GroupChatManager로 협업을 조율합니다
  • 예상치 못한 결과나 사용자 피드백에 대응하는 Iterative Re-planning으로 실세계 제약에 맞게 계획을 동적으로 수정합니다
Jooojub
System S/W engineer
Explore Tags
Series
    Recent Post
    © 2026. jooojub. All right reserved.