태스크 분해 — '다 해줘'가 실패하는 이유
한줄 요약
AI에게 “종합 평가 보고서 작성해줘”라고 하면 실패율이 높다. 같은 목표를 명확한 단계로 분해하면 결과가 달라진다.
본문
왜 “다 해줘”가 실패하는가
2023년 OpenAI 내부 연구에서 확인된 패턴이 있다. 에이전트에게 복잡한 목표를 한 번에 주면 실패율이 높아진다. 목표를 명확한 단계로 분해해서 순서대로 줄수록 성공률이 올라간다.
이유는 LLM의 작동 방식에 있다. LLM은 텍스트를 생성할 때 “지금까지 생성한 내용”을 참고한다. 목표가 크고 복잡할수록 AI가 “어디까지 했는지, 다음에 뭘 해야 하는지”를 잃어버리기 쉽다.
반면 하나의 태스크가 명확하면 — “주어진 환자 데이터에서 신기능 수치만 뽑아서 CKD 스테이지를 분류해라” — AI는 집중해서 정확하게 처리한다.
좋은 태스크 분해의 기준
원자성 (Atomicity)
하나의 태스크는 하나의 명확한 결과물을 낸다.
나쁜 분해:
태스크 1: 환자 데이터 수집하고 분석해서 치료 계획까지 세워줘
→ 3가지가 하나에 섞여 있다
좋은 분해:
태스크 1: 환자 EMR에서 최근 6개월 Lab 결과 수집 → 출력: Lab 결과 표
태스크 2: Lab 결과로 CKD 스테이지 분류 → 출력: CKD 스테이지 + 근거
태스크 3: CKD 스테이지에 맞는 치료 가이드라인 검색 → 출력: 권고 요약
태스크 4: 가이드라인 기반 치료 계획 초안 → 출력: 치료 계획 문서
각 태스크가 완료됐는지 명확하게 확인할 수 있고, 어느 단계에서 실패했는지 정확히 알 수 있다.
의존성 명시
어떤 태스크가 어떤 태스크의 결과를 필요로 하는지 그린다.
[Lab 수집] ─┐
[EMR 요약] ─┤→ [CKD 분류] → [가이드라인 검색] → [치료 계획]
[약물 목록] ─┘
상위 3개는 독립적이므로 병렬 실행 가능. CKD 분류 이후는 순차 실행.
분해 깊이: 얼마나 잘게 자를까
너무 크면 AI가 헤맨다. 너무 작으면 오버헤드가 커진다.
경험칙: 하나의 태스크는 하나의 AI 호출로 처리할 수 있는 크기
- 너무 큰 태스크: “당뇨 환자 연간 관리 보고서 작성” (5개 이상의 행동이 필요)
- 적당한 태스크: “최근 4회 HbA1c 수치로 추이 분석 후 목표 달성도 평가”
- 너무 작은 태스크: “HbA1c 수치 가져와” (단순 데이터 조회는 툴 호출이면 충분)
동적 분해: 시작 전에 모든 것을 알 필요 없다
처음부터 모든 단계를 정해두지 않고, 실행하면서 다음 태스크를 결정하는 방식이다.
메트포르민 처방 가능 여부를 검토하는 AI를 예로 들면:
[생각] 신기능을 먼저 확인해야 한다
→ Lab 조회: eGFR = 28
[생각] eGFR 28이면 금기 기준 확인이 필요하다
→ 가이드라인 조회: eGFR < 30에서 메트포르민 금기
[생각] 금기이므로 대안 약물 정보가 필요하다
→ 가이드라인 조회: CKD Stage 4 당뇨 치료 대안 → GLP-1 RA 권고
[결론] 메트포르민 금기, GLP-1 RA 대안 제시
처음에는 “신기능 확인”만 계획했다. 결과를 보고 다음 단계가 결정됐다. 이 방식이 ReAct 패턴이다.
장점: 유연하고 초기에 모든 정보가 없어도 된다. 단점: 루프에 빠지거나 방향을 잃을 수 있다. 최대 반복 횟수를 반드시 설정해야 한다.
의료 AI 태스크 분해 실전 예시
연간 당뇨 관리 보고서 생성
병렬 실행 (서로 독립):
├─ [HbA1c 데이터] 최근 1년 4회 수치 수집
├─ [혈압/체중] 같은 기간 활력징후 수집
├─ [합병증 스크리닝] 눈·신장·발 검사 결과 수집
└─ [약물 이력] 처방 변경 기록 수집
순차 실행 (위 완료 후):
↓ [추이 분석] 각 지표별 목표 달성도 평가
↓ [위험 평가] 합병증 위험도 계산
↓ [권고안 생성] 내년 관리 목표 및 계획 제안
↓ [보고서 작성] 의사용 요약 + 환자용 설명 분리 생성
Human-in-the-Loop:
↓ [의사 검토] 권고안 확인 및 수정
↓ [최종 완성] 승인된 내용으로 보고서 완성
태스크 분해 시 자주 하는 실수
실수 1 — 승인 단계를 빠뜨린다
“AI가 다 처리하고 마지막에 보고서 출력”으로 설계하면, 중간 판단이 틀렸을 때 알 방법이 없다. 중요한 결정 전에 의사 확인 지점을 명시적으로 설계한다.
실수 2 — 실패 경로를 설계하지 않는다
“Lab 수집 실패 시 어떻게 할까”를 정해두지 않으면 워크플로우 전체가 멈춘다. 각 태스크마다 실패 시 동작(재시도, 스킵, 에스컬레이션)을 정해야 한다.
실수 3 — 너무 세밀하게 분해한다
5개면 될 것을 20개로 쪼개면 오케스트레이션 오버헤드가 실제 작업보다 커진다. “1개의 LLM 호출로 완료할 수 없는가?”가 분해 기준이다.
더 알고 싶다면
🔗 관련 글
- ReAct 패턴 — 실행 중 동적으로 태스크를 나누는 패턴
- 병렬 실행 — 분해한 태스크를 동시에 실행하는 방법
- 슈퍼바이저 패턴 — 분해된 태스크를 에이전트에 분배하는 구조
- AI 워크플로우 패턴 5가지 — 태스크 분해가 포함된 패턴 전체 지도