멀티에이전트 역할 분리 설계: 분석·예측·의사결정 에이전트를 나누는 기준(재현성·디버깅·안전성)
최종 수정: 작성자: Finyul
단일 LLM로 트레이딩을 만들면 가장 흔히 터지는 문제가 “분석(근거) + 예측 + 의사결정(행동)이 한 덩어리로 섞이는 것”입니다. 그 순간부터 출력이 흔들리고(재현성↓), 어디서 틀렸는지 못 찾고(디버깅↓), 잘못된 확신이 주문으로 연결됩니다(안전성↓). 이 글은 멀티에이전트 역할 분리를 “감”이 아니라 경계(금지행동)·계약(JSON)·제약(리스크 룰)으로 설계하는 방법을 제공합니다.
코너스톤에서 전체 폐루프(분석→예측→결정→실행)를 먼저 보고 싶다면 LLM 멀티에이전트 투자 시스템(MAS) 완전 가이드를 참고하세요.

역할 분리를 해야 ‘시스템’이 된다: 단일 LLM의 3가지 구조적 실패
1) 혼합 출력: “왜 샀는지”가 남지 않는다
단일 LLM은 한 번의 응답에 근거→전망→행동을 섞어 말합니다. 그 결과:
- 근거(입력)가 로그에 남지 않거나
- “근거는 약한데 행동만 강한” 출력이 생기고
- 같은 입력이어도 문장 스타일에 따라 결론이 달라집니다.
2) 근거 부재/출처 누락: 리플레이(Replay)가 불가능
운영에서 가장 중요한 질문은 “맞았냐?”가 아니라 “다시 돌리면 같은 결론이 나오냐?”입니다. 출처/필드가 고정되지 않으면 리플레이가 깨지고, 개선도 불가능해집니다.
3) 과신/환각 + 과매매: 실전 리스크가 ‘주문’으로 전이
LLM이 단정적으로 말할수록 위험합니다. 특히 변동성 급변 구간에서 “확신”이 포지션 과확대로 연결되면 시스템이 한 번에 망가집니다.
| 비교 항목 | 단일 LLM(역할 미분리) | 역할 분리(MAS) | 공개 연구 수치(참고) |
|---|---|---|---|
| 재현성 | 텍스트 출력 흔들림, 같은 입력에도 결론 변동 | 역할 경계 + JSON 계약으로 출력 안정 | sideways 임계: Nv≈30일, qL/qU=30%/70%, τhigh/τlow≈1.4/0.7 |
| 검증 | 근거/출처 추적 어려움 | 단계별 JSON 검증(필수 필드/허용 액션) + 로그/리플레이 | 예측 호라이즌: T+1/T+5/T+20, 다기간 sideways: ε5=√5·θ, ε20=√20·θ |
| 리스크 | 과신이 주문으로 직결 | 이산 액션 + 실행 검증 게이트 | MDD% Mean: -4.09 / -3.46 / -11.12. Worst(Min): -8.07 / -8.24 / -24.19 |
| 운영 난이도 | 초기 구현 쉬움(단, 운영 불안정) | 초기 설계 필요(단, 운영 안정/감사 가능) | 거래비용 0.03%, 28개 펀드, 2024-10~2025-10, 초기자본 RMB 1,000,000 |
| 추천 대상 | 아이디어 검증/프로토타입 | 운영·자동화·백테스트·실거래 연결 | CR%: 15.50 / 13.75 / 10.69. Sharpe: 1.71 / 1.77 / 0.75 |
역할 분리의 핵심은 “무엇을 하지 말아야 하는가(금지 행동)”를 정하는 것
역할 분리는 ‘업무 분장’이 아닙니다. 출력의 범위를 좁히고, 금지행동을 강제하는 설계입니다.
원칙 1) 분석(Analysis)은 “사실/상태”만 — 주문/비중 언급 금지
해야 할 일: “무슨 일이 있었나?”, “현재 상태는 어떤가?”를 구조화
하지 말아야 할 일: “매수/매도/비중 확대” 같은 행동 지시
원칙 2) 예측(Prediction)은 “확률 분포”만 — 단정형 추천 금지
해야 할 일: T+1/T+5/T+20 등 기간별 Up/Down/Side 확률
하지 말아야 할 일: “무조건 오른다”, “지금 사라” 같은 단정
원칙 3) 의사결정(Decision)은 “포지션 조절”만 — 연속값·재량 확대 금지
해야 할 일: 허용된 이산 액션으로만 출력(예: +20%, -40%, hold)
하지 말아야 할 일: “올인”, “이번엔 73%로” 같은 연속값/임의값
원칙 4) 실행(Execution)은 LLM이 아니라 “규칙 엔진” — 검증 없이 주문 금지
해야 할 일: 계정상태(Account State) + 제약 검증 후 주문 발행
하지 말아야 할 일: LLM 텍스트를 그대로 주문으로 번역
분석(Analysis) = "사실/상태만"
- 분석 에이전트 4종: Announcement / Event / Price Momentum / Market
- 공시 입력: 최근 7일(자연일) + 가격 추세 5–20 거래일
예측(Prediction) = "확률/호라이즌만"
- T+1 / T+5 / T+20
- sideways 임계: Nv≈30일, qL/qU=30%/70%, τhigh/τlow≈1.4/0.7, ε5=√5·θ, ε20=√20·θ
결정(Decision) = "이산 액션만"
- 허용 액션: close, -40, -20, hold, +20, +40, upper limit
실행+로그(Execution & Logging) = "검증 후 주문"
- 거래비용 0.03%(0.0003), 초기자본 RMB 1,000,000
- 28개 펀드, 2024-10~2025-10
경계(금지행동) · 계약(JSON) · 제약(리스크)
(핵심) 1장으로 끝내는 역할 정의서: 책임(RACI) + 입력/출력 + 금지 행동
아래 표를 팀의 “설계 명세서(Definition of Done)”로 쓰면, 역할 분리가 무너지지 않습니다. 분석 에이전트 4종과 예측·결정·실행·로깅으로 나누어 보기 쉽게 정리했습니다.
분석 에이전트 4종
| 역할 | 책임 | 입력 → 출력 | 금지 | 로그 |
|---|---|---|---|---|
| Announcement Agent | 공시·영향 구조화 | 입력: 최근 7일 공시 + 5~20 거래일 가격 추세 → 출력: 유의미 공시 여부, 방향 영향, 횡보에서 증폭/흡수 | 매수/매도/비중 지시 | doc_id, claim, confidence |
| Event Agent | 이벤트·리스크 알림 | 입력: 고임팩트 뉴스 + 분기/운영 리포트 → 출력: 핵심 이벤트·리스크 알림 | 단정형 추천 | event_id, impact, source |
| Price Momentum Agent | 가격·모멘텀 라벨 | 입력: MA5/10/20/60, RSI, Bollinger, Volume, 20일 up/down 통계 → 출력: trend/momentum/volatility/volume, 지지저항 상태 라벨 | 포지션 액션 출력 | indicators, labels |
| Market Agent | 거시·4분면 해석 | 입력: 국채금리 20일 변화 구간, 주식 20일 수익률·RSI 규칙 → 출력: 4분면(Quadrant I~IV) + 거시 해석 | 단일 종목 주문 지시 | quadrant, macro_label |
예측·결정·실행·로깅
| 역할 | 책임 | 입력 → 출력 | 금지 | 로그 |
|---|---|---|---|---|
| Prediction Agent | 확률 분포 출력 | 입력: 4개 분석 에이전트 JSON 출력 → 출력: T+1/T+5/T+20 Up/Down/Side 확률(sideways: Nv≈30, qL/qU=30%/70%, τ≈1.4/0.7) | 주문/비중 지시 | horizon, probabilities, sum=1 |
| Decision Agent | 이산 액션 선택 | 입력: 예측 확률 + 제약 상태 → 출력: 허용 액션 7개(close, ±20, ±40, hold, upper limit) | 허용 집합 밖 액션 | action, constraints_applied, rationale |
| Execution Engine | 검증 후 주문 | 입력: 거래비용 0.03%, 초기자본 RMB 1M → 출력: 검증 통과 시 주문 / 실패 시 HOLD+사유 로그 | 검증 없이 주문 | gate_result, order_id, fail_reason |
| Logging/Replay | 입출력·검증 기록 | 입력: 모든 단계 입출력/검증 → 출력: CR/Sharpe/MDD 등 성과지표 기록 | 근거 없이 요약만 저장 | snapshot_id, metrics, timestamp |
예시: 연구에서 사용된 ‘의사결정 이산 액션’(실제 값)
중국 공모 REITs를 대상으로 한 LLM 멀티에이전트 투자 시스템 연구에서는 의사결정 출력을 이산 포지션 조절 신호로 제한합니다. 예:
- close position
- reduce position by 40% / 20%
- hold unchanged
- increase position by 20% / 40%
- increase position to the upper limit
이 방식의 요지는 단순합니다. 모델이 아무리 확신해도 한 번에 과격하게 못 움직이게 만드는 것입니다.
핸드오프(연결) 설계: 에이전트가 만나는 지점은 ‘데이터 계약(JSON)’이다
역할 분리가 실패하는 가장 흔한 이유는 “역할”이 아니라 출력 포맷입니다. 포맷이 흔들리면 검증이 깨지고, 검증이 깨지면 운영이 깨집니다.
최소 계약 3종(이거 없으면 운영 불가)
- 분석 → 예측 계약: signals[], evidence, confidence, risk_flags
- 예측 → 결정 계약: horizons(T+1/T+5/T+20), probabilities(sum=1)
- 결정 → 실행 계약: action(허용 집합), constraints_applied, rationale
샘플(미니)로는 아래 정도만 있어도 충분합니다.
{
"analysis": {"signals":[{"claim":"neutral","evidence":[{"doc_id":"D-001"}],"confidence":0.62}]},
"prediction": {"T5":{"up":0.44,"down":0.18,"side":0.38}},
"decision": {"action":"increase_20","constraints_applied":["position_cap","step_size"]}
}에이전트 출력을 표준화하려면 에이전트 출력 표준화(JSON 스키마) 설계 템플릿을 참고하세요.
| 단계 | 필수 필드 | 검증 규칙 | 실패 예시 |
|---|---|---|---|
| 분석 | signals[], evidence | action/비중 없음 | “매수 추천” 포함 |
| 예측 | up, down, side (sum=1) | 합=1, 0≤p≤1 | 합≠1 또는 단정 문장 |
| 결정 | action, constraints_applied | action ∈ 허용 집합 | 73%, 올인 등 연속값 |

디버깅이 쉬워지는 구조: “문제는 어느 에이전트에서 생겼나?”를 5분 안에 찾는 법
역할 분리의 진짜 가치는 성능보다 원인 규명 속도입니다.
디버깅 루틴 5단계(리플레이 중심)
- 입력 스냅샷 고정(가격/문서/지표 동일)
- 분석만 재실행 → signals/evidence 품질 확인
- 예측만 재실행 → 확률 합=1, 과신 여부 확인
- 결정만 재실행 → action이 제약을 침범하는지 확인
- 실행 게이트 확인 → 왜 주문이 막혔는지(또는 왜 통과했는지) 확인
전략 운영에서 로그·리플레이(리뷰) 구조를 만들려면 전략 운영에서 로그/리플레이(리뷰) 구조 만들기를 참고하세요.
입력 스냅샷 고정
- 공시: 최근 7일(자연일)
- 가격 추세: 최근 5–20 거래일
분석만 재실행(4개 에이전트)
- Price Momentum 지표: MA5/10/20/60, RSI(6/12/24), Bollinger(20,2σ)
예측만 재실행
- 호라이즌: T+1/T+5/T+20
- sideways 파라미터: Nv≈30, q=30%/70%, τ≈1.4/0.7, ε5=√5·θ, ε20=√20·θ
결정만 재실행
- 허용 액션: close, -40, -20, hold, +20, +40, upper limit
실행 게이트 확인 + 로그 확인
- 거래비용 0.03%(0.0003) 반영
- 백테스트 설정: 28개 펀드, 2024-10~2025-10, 초기자본 RMB 1,000,000
입력 고정 · 단계별 재실행 · 게이트 확인
안전장치(리스크) 관점에서의 역할 분리: LLM은 ‘결정’해도 실행은 ‘허가’받아야 한다
역할 분리만 해도 좋아지지만, 마지막 안전장치는 실행 레이어 검증 게이트입니다.
권장 제약 5종(최소 세트)
- 포지션 상한(position cap)
- 스텝(step size)
- 페이스(pace restriction)
- 손실 트리거(일일/연속 손실 제한)
- 거래 빈도 제한(과매매 방지)

| 제약 종류 | 걸리는 위치 | 차단되는 사고 |
|---|---|---|
| 포지션 상한 | 결정/실행 | 과도한 비중·레버리지 |
| 스텝 | 실행 | 한 번에 대량 증감 |
| 페이스 | 실행 | 과매매·연속 주문 |
| 손실 트리거 | 실행 | 연패 시 추가 노출 |
| 거래 빈도 | 실행 | 과도한 회전율 |
운영 메모
어떤 게이트에서든 실패하면 기본값은 HOLD + 실패 사유 로그가 안전합니다. “불확실하면 하지 않는다”를 시스템에 박아두는 게 장기 생존에 유리합니다.
실증 사례: 역할 분리 + 이산결정이 성과·낙폭을 어떻게 바꿨나(공개 연구)
역할 분리(분석 4종 + 예측 + 이산 의사결정)를 포함한 멀티에이전트 프레임워크를 중국 공모 REITs에 적용한 공개 연구의 백테스트(2024-10~2025-10, 28개 펀드 평균)에서는, 에이전트 전략이 벤치마크(Buy&Hold) 대비 누적수익·샤프 개선 + 낙폭 축소를 보고합니다.
실증 수치 예시
| 지표 | Agent-DeepSeek-R1 | Agent-Qwen3-8B-FT | Buy&Hold |
|---|---|---|---|
| CR(%) | 15.50 | 13.75 | 10.69 |
| Sharpe | 1.71 | 1.77 | 0.75 |
| MDD(%) | -4.09 | -3.46 | -11.12 |
※ 이 수치가 “수익 보장”을 의미하진 않습니다. 다만 역할 분리와 제약 설계가 운영 가능한 리스크 구조를 만드는 데 유리하다는 실증 사례로 참고할 만합니다. 출처: arXiv 2602.00082 Table 1.
자주 하는 오해 교정: 멀티에이전트 = 모델 여러 개? (꼭 그렇진 않다)
- 같은 모델이어도 역할 프롬프트 + 스키마로 에이전트화할 수 있습니다.
- 멀티에이전트의 목적은 “정확도”만이 아니라 감사 가능성(audit), 재현성, 안전장치입니다.
- 다만 에이전트가 과도하게 늘면 비용/지연/조정 복잡도가 급증합니다.
| 구성 | 장점 | 단점 |
|---|---|---|
| 3개(최소) | 분석·예측·결정만 분리, 단순 | 입력 다양성 제한 |
| 5개(표준) | 분석 4종+예측 등, 균형 | 설계·로그 관리 필요 |
| 8개(복잡) | 세분화된 신호·검증 | 비용·지연·조정 복잡도 급증 |
시스템 비용(대형 호출 vs 소형 파인튜닝) 비교는 대형 모델 호출 vs 소형 모델 파인튜닝에서 다룹니다.
바로 적용하는 체크리스트: 내 시스템은 ‘역할 분리’가 되어 있는가?
- 경계 체크: 분석이 행동을 말하지 않는가? 예측이 단정하지 않는가? 결정이 연속값을 내지 않는가?
- 계약 체크: JSON 스키마/필수 필드/검증 규칙/폴백(HOLD)이 있는가?
- 운영 체크: 입력 스냅샷·출력·게이트 결과·주문 결과가 리플레이 가능한가?
LLM 환각을 줄이는 “프롬프트 제약(용어·근거·형식)”은 LLM 환각 줄이는 프롬프트 제약 체크리스트에서 정리했습니다.
FAQ
자주 묻는 질문
- 분석 에이전트가 "매수"까지 말하면 왜 위험하죠?
- 분석이 행동까지 말하면, 나중에 오류가 났을 때 근거(분석)가 틀린 건지, 행동 규칙이 틀린 건지 분리가 안 됩니다. 디버깅이 불가능해집니다.
- 예측은 왜 단정이 아니라 확률이어야 하나요?
- 확률은 의사결정/제약과 결합하기 쉽고, "과신"을 측정(캘리브레이션)할 수 있습니다. 단정형은 과매매와 리스크 전이에 취약합니다.
- 결정 에이전트가 리스크를 통제하면 실행 레이어가 꼭 필요할까요?
- 네. 결정이 아무리 보수적이어도 실행 단계에서 중복 주문/거래정지/상한 초과 같은 현실 변수로 사고가 납니다. 실행은 규칙 엔진이 맡아야 합니다.
- 최소 구성(가장 작은 역할 분리)은 어떻게 시작하나요?
- (1) 분석 1개(가격 모멘텀) → (2) 예측 1개(T+5 확률) → (3) 결정 이산액션(±20/hold) → (4) 실행 게이트(상한/중복/시장상태) + 로그부터 시작하세요.
결론: 역할 분리는 “분업”이 아니라 “경계+계약+제약”이다
멀티에이전트 역할 분리의 핵심은 간단합니다. 경계(금지행동)로 섞임을 막고 → 계약(JSON)으로 흔들림을 막고 → 제약(리스크 룰)으로 실전 사고를 막으세요.