실패 모드 — 에이전트가 망가지는 이유
MASFT(Berkeley, 2025)는 멀티 에이전트 실패 모드(multi-agent failure modes) 14개를 3개 범주로 정리합니다. Microsoft의 Taxonomy는 기존 AI 실패가 에이전트형(agentic) 설정에서 어떻게 증폭되는지 문서화합니다. 산업 현장 데이터는 다섯 가지 반복 모드로 수렴합니다. 환각된 행동(hallucinated actions), 범위 확대(scope creep), 연쇄 오류(cascading errors), 맥락 손실(context loss), 도구 오용(tool misuse)입니다.
유형: Learn + Build
언어: Python (stdlib)
선수 학습: Phase 14 · 05 (Self-Refine and CRITIC), Phase 14 · 24 (Observability)
소요 시간: 약 60분
학습 목표
- MASFT의 세 실패 범주와 각 범주의 구체적 모드 최소 네 가지를 말할 수 있습니다.
- 편향(bias), 환각(hallucination) 같은 기존 AI 실패가 에이전트형 실패에서 왜 증폭되는지 설명합니다.
- 산업 현장에서 반복되는 다섯 가지 모드와 완화책을 설명합니다.
- 에이전트 추적(agent traces)에 실패 모드 라벨을 붙이는 stdlib 감지기를 구현합니다.
문제
팀은 추적의 90%에서 잘 동작하는 에이전트를 출시합니다. 하지만 나머지 10%의 실패는 무작위 노이즈가 아닙니다. 작은 수의 반복 범주에 속합니다. 이름을 붙일 수 있게 되면, 모니터링하고 고칠 수 있습니다.
개념
MASFT (Berkeley, arXiv:2503.13657)
MASFT는 Multi-Agent System Failure Taxonomy의 약자입니다. 14개 실패 모드를 3개 범주로 묶습니다. 주석자 간 Cohen's Kappa는 0.88입니다. 즉 범주는 신뢰성 있게 구분됩니다.
핵심 주장은 다음과 같습니다. 실패는 더 나은 기반 모델(base model)로 고쳐야 할 LLM 한계가 아니라, 멀티 에이전트 시스템의 근본적인 설계 결함입니다.
Microsoft Taxonomy of Failure Mode in Agentic AI Systems
- 기존 AI 실패(편향, 환각, 데이터 유출)는 에이전트형 설정에서 증폭됩니다.
- 자율성(autonomy)에서 새로운 실패가 등장합니다. 대규모 의도치 않은 행동, 도구 오용, 임무 드리프트(mission drift)가 여기에 해당합니다.
- 이 백서는 에이전트형 제품의 위험 등록부(risk register)입니다.
Characterizing Faults in Agentic AI (arXiv:2603.06847)
- 실패는 오케스트레이션(orchestration), 내부 상태 진화(internal state evolution), 환경 상호작용(environment interaction)에서 생깁니다.
- 단순히 "나쁜 코드"나 "나쁜 모델 출력"만의 문제가 아닙니다.
LLM Agent Hallucinations Survey (arXiv:2509.18970)
주요 발현은 두 가지입니다.
- 지시 따르기 이탈(Instruction-following Deviation) — 에이전트가 시스템 프롬프트를 따르지 않습니다.
- 장거리 맥락 오용(Long-range Contextual Misuse) — 에이전트가 이전 턴의 맥락을 잊거나 잘못 적용합니다.
하위 의도 오류(sub-intention errors)에는 누락(omission), 중복(redundancy), 순서 오류(disorder)가 있습니다.
산업 현장에서 반복되는 다섯 가지 모드
Arize, Galileo, NimbleBrain의 2024-2026년 현장 분석은 다음 다섯 가지로 수렴합니다.
- 환각된 행동(Hallucinated actions). 에이전트가 존재하지 않는 도구를 호출하거나 인자를 지어냅니다.
- 범위 확대(Scope creep). 에이전트가 사용자의 요청을 넘어 작업 범위를 키웁니다. 추가 PR을 만들거나 추가 이메일을 보내는 식입니다.
- 연쇄 오류(Cascading errors). 하나의 잘못된 호출이 하류(downstream)에서 연쇄 효과를 일으킵니다. 환각된 SKU 하나가 네 번의 API 호출을 유발하면 다중 시스템 사고가 됩니다.
- 맥락 손실(Context loss). 긴 작업에서 초기 턴의 제약을 잊습니다.
- 도구 오용(Tool misuse). 올바른 도구를 잘못된 인자로 호출하거나, 아예 잘못된 도구를 호출합니다.
가장 치명적인 것은 연쇄입니다. 에이전트는 "내가 실패했다"와 "작업이 불가능하다"를 구분하지 못하며, 루프를 닫기 위해 400 오류 위에 성공 메시지를 환각하는 경우가 많습니다.
완화책: 모든 단계에 게이트 두기
추론 체인의 모든 단계에 자동 검증 게이트를 둡니다. 환경 상태와 비교해 사실 접지(factual grounding)를 확인합니다. 구체적으로는 다음과 같습니다.
- 단계별 안전 분류기(21강).
- 도구 호출 인자 검증(6강).
- 검색된 콘텐츠를 알려진 사실과 교차 확인(5강, CRITIC).
- 상태를 다시 확인해 성공 환각을 감지합니다. 예를 들어 파일이 실제로 만들어졌는지 다시 확인합니다.
실패 모니터링이 잘못되는 지점
- 크래시만 태깅하는 경우. 대부분의 에이전트 실패는 그럴듯한 출력을 만듭니다. 콘텐츠 수준 검사가 필요합니다.
- 기준선(baseline)이 없는 경우. 드리프트 감지는 마지막으로 좋았던 상태(last-known-good)가 필요합니다. 기준선이 없으면 "나빠지고 있다"고 말할 수 없습니다.
- 과도한 알림(Over-alerting). 모든 실패가 호출(page)을 발생시킵니다. 클러스터링하고 호출 빈도를 제한(rate-limit)해야 합니다.
만들어보기
code/main.py는 stdlib 실패 모드 태거(tagger)를 구현합니다.
- 다섯 가지 모드를 모두 포함하는 합성 추적 데이터셋입니다.
- 모드별 감지 함수입니다. 도구 호출, 출력, 반복 행동의 서명 패턴(signature patterns)을 봅니다.
- 각 추적에 라벨을 붙이고 모드 분포를 보고하는 태거입니다.
실행합니다.
python3 code/main.py
출력은 추적별 라벨과 집계 분포를 보여줍니다. Phoenix의 추적 클러스터링이 드러내는 내용을 저렴하게 재현한 것입니다.
사용해보기
- Phoenix는 프로덕션 드리프트 클러스터링에 사용합니다(24강).
- Langfuse는 세션 리플레이와 주석(annotation)에 사용합니다.
- 커스텀(Custom)은 관측성 플랫폼이 감지하지 못하는 도메인 특화 서명에 사용합니다.
산출물 만들기
outputs/skill-failure-detector.md는 추적 저장소에 연결되는, 도메인 맞춤 실패 모드 감지기를 생성합니다.
연습문제
- "성공 환각(success hallucination)" 감지기를 추가하세요. 에이전트는 성공을 반환했지만 목표 상태는 바뀌지 않은 경우입니다.
- 직접 만든 제품의 실제 추적 100개에 태그를 붙이세요. 어떤 모드가 지배적인가요? 고치는 비용은 얼마인가요?
- "연쇄 반경(cascade radius)" 지표를 구현하세요. N번째 단계에서 실패가 생겼을 때 하류(downstream) 단계 몇 개에 영향을 줬나요?
- MASFT의 14개 실패 모드를 읽어보세요. 제품에 적용되는 세 가지를 고르고 감지기를 작성합니다.
- 감지기 하나를 CI 작업에 연결하세요. 추적의 5% 이상이 한 모드로 태깅되면 빌드를 실패시킵니다.
핵심 용어
| 용어 | 흔한 설명 | 실제 의미 |
|---|
| MASFT | "멀티 에이전트 실패 분류" | Berkeley의 14개 모드 분류입니다. |
| 연쇄 오류(Cascading error) | "파급 실패" | 초기 실수 하나가 N개 단계로 전파되는 현상입니다. |
| 맥락 손실(Context loss) | "제약을 잊음" | 긴 작업에서 초기 턴의 사실이나 제약이 떨어져 나갑니다. |
| 도구 오용(Tool misuse) | "잘못된 도구 / 잘못된 인자" | 호출 자체는 유효하지만 사용 방식이 틀립니다. |
| 성공 환각(Success hallucination) | "가짜 완료" | 400 오류가 났는데 성공했다고 주장하고 상태는 바뀌지 않은 경우입니다. |
| 범위 확대(Scope creep) | "과도한 수행" | 요청받은 것보다 더 많이 수행합니다. |
| 지시 따르기 이탈(Instruction-following deviation) | "불복종" | 시스템 프롬프트나 사용자 제약을 무시합니다. |
| 하위 의도 오류(Sub-intention errors) | "계획 버그" | 계획 실행의 누락, 중복, 순서 오류입니다. |
더 읽을거리