태스크 분해 — '다 해줘'가 실패하는 이유

…

한줄 요약

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 호출로 완료할 수 없는가?”가 분해 기준이다.


더 알고 싶다면

🔗 관련 글

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