AI 워크플로우 패턴 5가지 — 상황에 맞는 설계 고르기

…

RoundPrep 제4화. 체인으로만 묶었다가 중간 단계에서 매번 끊겼다. “이 문제는 어떤 패턴의 그림으로 그려야 하지?”가 이 글의 출발점이다.

한줄 요약

올바른 패턴 선택이 시스템 복잡도와 비용을 결정한다 — 체인, 병렬, 라우팅, 오케스트레이터-서브에이전트, 평가-최적화 중 문제에 맞는 것을 골라야 한다.

테제

패턴을 고르지 않고 코드부터 쓰면, RoundPrep은 if문 유적지가 된다.

스테이크

박과장은 다이어그램을 원한다. 서진은 “이게 순차야 병렬이야?”를 한 마디로 말할 수 있어야 한다.

전환점 — RoundPrep 메모

팀이 처음 고른 “순차 파이프라인”이 야간 알림 분기에서 깨졌다. 그때 슈퍼바이저·그래프 이야기가 나온다.

본문

패턴이 왜 중요한가

오케스트레이션을 처음 설계할 때 가장 흔한 실수는 “모든 것을 다 연결”하는 것이다. 에이전트를 많이 만들고, 복잡하게 엮고, 대형 시스템처럼 보이게 한다.

결과는 대부분 실망스럽다. 비용은 많이 들고, 오류 발생 지점은 여러 개고, 디버깅은 어렵다.

문제에 맞는 패턴을 고르면 이 반대다. 단순하게 시작하고, 필요할 때 복잡도를 추가한다. 5가지 패턴을 이해하면 새 문제를 만났을 때 “이건 어떤 패턴으로 풀 수 있지?”를 빠르게 판단할 수 있다.


패턴 1 — 체인 (Chain)

가장 단순하다. AI 출력이 다음 AI의 입력이 된다.

[AI 1] → [AI 2] → [AI 3] → 최종 출력

의료 예시: 외래 환자가 증상을 구술한다 → AI1이 구조화된 증상 목록으로 변환 → AI2가 관련 가이드라인을 검색 → AI3가 의사용 요약 작성

언제 쓰나: 각 단계가 이전 단계의 출력만 있으면 충분할 때. 처리 순서가 명확하고 고정일 때.

주의점: 체인이 길수록 초기 오류가 증폭된다. 1단계에서 5% 오류가 생기면 5단계를 거치면서 커진다. 체인은 짧게 유지하는 것이 좋다.


패턴 2 — 병렬화 (Parallelization)

독립적인 태스크를 동시에 실행하고 결과를 합친다.

            ┌→ [AI A] ─┐
[입력] ─────┤           ├→ [취합] → 출력
            └→ [AI B] ─┘

두 가지 방식이 있다:

섹션 병렬화: 큰 작업을 나눠서 동시에 처리한다. 예: 100명 환자 데이터를 10개 그룹으로 나눠서 동시 분석 → 결과 합치기

투표(Voting): 같은 질문을 여러 AI에게 독립적으로 물어본다.

같은 흉부 X-ray를 3개의 AI에게 동시에 판독
→ AI1: "폐렴 의심"
→ AI2: "폐렴 의심"
→ AI3: "정상"
→ 2:1 다수결 → "폐렴 의심"으로 결론

중요한 결정에서 단일 AI 판단보다 신뢰도가 높아진다.

언제 쓰나: 태스크 간 의존성이 없을 때. 속도가 중요할 때. 높은 신뢰도가 필요할 때.


패턴 3 — 라우팅 (Routing)

입력 분류에 따라 다른 처리 경로로 보낸다.

[입력] → [분류기] → {
    의학적 질문 → [임상 AI]
    응급 상황 → [응급 프로토콜 AI]
    행정 문의 → [행정 AI]
    처방전 문의 → [약제 AI]
}

의료 예시: 원격진료 플랫폼에서 환자 문의가 들어오면 먼저 분류한다. 의학적 질문인지, 예약 변경인지, 처방전 재발급인지에 따라 전문화된 처리 경로로 보낸다.

언제 쓰나: 다양한 입력 유형이 존재할 때. 각 유형에 최적화된 처리가 필요할 때.

함정: 분류기가 틀리면 잘못된 경로로 간다. 분류기 성능이 전체 시스템의 병목이 될 수 있다. 분류 실패 시 기본 경로(fallback)를 반드시 만들어야 한다.


패턴 4 — 오케스트레이터-서브에이전트 (Orchestrator-Subagents)

중앙 오케스트레이터가 복잡한 태스크를 분해하고 전문 서브에이전트에게 위임한다.

[오케스트레이터]
    ├→ 서브에이전트 A (태스크 1)
    ├→ 서브에이전트 B (태스크 2)
    └→ 서브에이전트 C (태스크 3)
         ↓ (결과 수집)
    [오케스트레이터] → 통합 → 최종 출력

의료 예시: 복잡한 환자 케이스 종합 평가

  • 오케스트레이터: 전체 평가 계획 수립
  • 서브에이전트 1: 심혈관 관련 소견 정리
  • 서브에이전트 2: 약물 최적화 검토
  • 서브에이전트 3: 사회적 요인 및 환경 평가
  • 오케스트레이터: 세 결과를 종합해서 다학제 계획 작성

언제 쓰나: 태스크가 사전에 완전히 결정되지 않을 때. 다양한 전문성이 필요할 때. 태스크가 너무 복잡해서 단일 AI로는 컨텍스트 한계에 걸릴 때.


패턴 5 — 평가-최적화 루프 (Evaluator-Optimizer)

AI가 결과를 생성하고, 다른 AI(또는 같은 AI)가 평가하고, 기준 미달이면 개선을 반복한다.

[생성 AI] → [평가 AI] → {
    기준 통과 → 출력
    기준 미달 → [피드백] → [생성 AI]  ← 루프
}

의료 예시: 의무 기록 초안 자동화

  • AI1이 구술 내용으로 SOAP 노트 초안 작성
  • AI2(평가자): “투약 섹션에 용량이 누락됨, 알레르기 기록 없음”
  • AI1: 피드백 반영해서 재작성
  • AI2: “기준 충족”
  • 의사에게 검토용으로 전달

언제 쓰나: 품질 기준이 명확할 때. 첫 번째 시도가 항상 완벽하지 않을 때.

반드시 필요한 것: 루프 탈출 조건. 평가자가 너무 엄격하거나 기준이 모순적이면 영원히 루프에 갇힌다. 최대 반복 횟수를 설정하고, 그것을 넘기면 현재 최선의 결과를 반환하거나 사람에게 에스컬레이션한다.


패턴 선택 가이드

상황추천 패턴
단계가 명확하고 순서 고정체인
독립 태스크, 속도/신뢰도 중요병렬화
입력 유형이 다양라우팅
복잡한 태스크, 동적 분해 필요오케스트레이터-서브에이전트
품질 보증, 자동 검토 필요평가-최적화

실제 시스템은 이 패턴들을 조합한다. 예를 들어 “라우팅 → 각 경로에서 오케스트레이터-서브에이전트 → 마지막에 평가-최적화”처럼.

패턴 하나로 시작해서 필요할 때 다른 패턴을 추가하는 것이 현명한 접근이다. 처음부터 모든 패턴을 다 쓰면 복잡도만 올라간다.


이 패턴들을 구체적인 코드로 구현하는 LangGraph → LangGraph 입문

역할 기반 팀을 만드는 CrewAI가 어떤 패턴에 해당하는지 → CrewAI 입문


다음 회의 한 줄

서진: “우리는 지금 패턴 이름부터 합의하고 코드는 그다음에 갑시다.”

다음 화

패턴이 정해졌다면 동시에 긁을 수 있는 것부터 줄인다 — 병렬 실행

편집 초안(cu2604021138). 프레임워크·API·임상 규정은 발행일 이후 바뀔 수 있으니 공식 문서와 병원 정책을 기준으로 확인한다.


더 알고 싶다면

🔗 관련 글

← 오케스트레이션 시리즈 전체 보기