멀티에이전트 평가 체계

trace DB 기반 측정·개선 파이프라인 — 핵심 성능 지표 · 개선 레버 · 평가셋

출처: eval_ph1 (19실험) eval_v2 (4팀 · 22테이블 DB) 기준일 2026-06-16

1배경과 목표

멀티에이전트는 단일 모델 정확도 점수만으로 평가할 수 없다. 평가 대상은 “여러 역할이 협업하고, 도구를 사용하며, 상호 검토를 거쳐 임무를 완수하는가”이다.

관측된 대표 실패 양식

접근. 한 번에 한 변수만 변경하고 matched A/B로 측정하여 인과를 분리한다.

진행 현황 (2026-06-16) — 두 트랙

다음 트랙

2성능 프레임워크 — 6축 종합 점수 (eval_v2)

멀티에이전트 성능을 한 점수로 합산하는 eval_v2의 설계 프레임워크. 6개 축의 가중합으로 산출한다. 주의 — 라이브 트랙(eval_ph1)은 이 6축이 아니라 개별 메트릭으로 진단한다(§3). 6축은 방법론 토대로 이해.

측정 대상가중치
Task정답성 (exact / answer match)0.25
Efficiency토큰·턴·지연의 예산 대비 효율0.20
Coordination역할 준수 + 정보 전달 충실도0.15
Tool도구 선택·인자 정확도0.15
Safety환각·PII (위반 시 veto)0.15
Alignment톤·형식 적절성 (LLM-judge, 현재 보류)0.10
Safety veto. 안전 위반이 적발되면 다른 축 점수와 무관하게 총점을 39점으로 강제 제한한다.

6축 선정의 공신력 — 외부 정석과의 정합 (DESIGN §8.1)

이 설계가 한 것출처 / 정석
에이전트 "구성(config)"을 end-to-end 평가AutoGenBench (Microsoft)
다차원(6축) 채점 — 무엇을 평가에이전트 평가 서베이 (arXiv:2503.16416)
pass^k 신뢰성 (k회 반복)τ-bench/Sierra (arXiv:2406.12045) + AutoGenBench variance
룰 + LLM-judge 혼합 채점G-Eval · 2026 실무 합의(deterministic+judge+human)
트레이스/궤적 기반 채점OTel GenAI semconv · TRAJECT-Bench (arXiv:2510.04550)
Safety 거부권(veto)다기준 의사결정 PROMETHEE veto
평가 2축(objectives × process) 분류KDD 2025 평가 서베이 (arXiv:2507.21504)
결론. 6축은 즉흥이 아니라 학계 서베이의 평가 골격 + Microsoft AutoGenBench 설계와 일치하는 "프로덕션 평가형" 정석. (단 메트릭 구현은 아직 경량 룰 기반 프로토타입 — judge 보정·human 라벨이 다음 단계.)

토폴로지 4종

토폴로지구성Coordination 영향Tool 복잡도
Solo1 에이전트낮음낮음
PipelinePlanner → Searcher → Writer (고정 순서)중간중간
OrchestratorLead 동적 선택 + 병렬 Searcher ×2높음높음
Critic위 + 검증 루프최고최고
발견. 토폴로지 복잡도는 성능을 보장하지 않는다. 강한 모델 앞에서 구조를 복잡화한 개입은 대부분 실패했다(EXP-60·63).

3개선 힌트가 되는 메트릭 후보 — 4 카테고리

지표는 품질·비용·행동·근거 네 축으로 묶어 동시에 읽는다.

카테고리지표정의 · 읽는 법좋은 방향
품질success / format_valid정규화 후 exact-match / “FINAL ANSWER” 형식 준수
pass@kk회 중 1회 이상 성공. pass@1과의 갭 = 불안정성↑, 갭↓
cite_f1F1(예측 출처, gold 출처)
비용total_tokens / estimated_cost_usdinput+output, 가격 스냅샷↓ (품질 유지 시)
tokens_per_success / latency·turns정답 1건당 비용 / 루프 낭비 탐지
행동tool_error_rate에러 ÷ 호출→ 0
loop_ratemax_messages 도달 run ÷ 전체 = 수렴 실패율
근거grounded%run당 웹검색 성공(결과≥1) — 호출이 아님
recency / citation_count현재 시점 텍스트 신호 / claim↔source 쌍질 우선
핵심 구분. grounded%는 검색 성공에 기반한 견고한 사실 신호다. recency는 텍스트 신호로 환각으로도 생성될 수 있다. 관측 사례: 한 팀이 recency 0.84(최신처럼 보임)인데 grounded 0.0(실제 검색 차단) — 이 간극이 환각 위험을 나타낸다.
관찰 원칙. pass@1 단독으로 판단하지 않고 tokens · latency · grounded% 를 한 화면에서 함께 본다.

4Score를 올리는 법 — 개선 레버 분류

19개 실험에서 통한 레버와 통하지 않은 레버가 뚜렷하게 갈렸다 (채택 13 · 기각 5 · 보류 2).

통함 도구 · 데이터 · 입력

  • 멀티포맷 파서 (도구 기능)
  • 첨부 경로 주입 (도구 입력)
  • 형식 프롬프트 수정 (입력 스키마)
  • status-aware 검색 (데이터 재정렬)
  • web_search 활성화 (도구 추가)
  • 과검색 제거 · 도구 dedupe (데이터 필터)

안 통함 프롬프트 · 구조

  • grounding 강제
  • RoundRobin 토폴로지 (구조 변경, 97→7%)
  • disambig 프롬프트 (80→27%)
  • max_messages 축소
  • 출처 인용 강제 (양↑ → 불안정)
교훈. 좋은 베이스라인에서는 도구·데이터의 국소(surgical) 수정이 프롬프트 튜닝·구조 변경보다 신뢰롭다.

두 개선 패턴

실증 궤적 — 분석 도메인 (반도체 동향, v2 → v6) · grounded 정정본

versionn_searchgrounded%total_tokenslatency_mean실제 상태
v2 stale00%29.4k280s2024 지식 (베이스라인)
v3 (EXP-65)17.30%97.1k602s검색 17회 전부 실패 → 환각
v4 lite (EXP-66)5.70%17.8k209s비용↓ 그러나 여전히 환각
v5 cited (EXP-67)5.00%28.6k306s기각 — 환각 위 인용만 과다
v6 (EXP-68)4.0100%21.3k177s실제 grounded (51% 성공) — 유일
정정 — 측정이 환각을 잡은 사례. 초기엔 "grounded 0→100% (v3부터)"로 판정했으나, 후속 검증(6/14~15)에서 v3~v5는 키리스 DDG 차단으로 검색 205건 중 성공 0건 → 2026 수치를 환각한 것으로 드러났다. grounded 지표를 "호출"→"성공(결과≥1)"으로 정정하니 실제 grounded는 v6(35/68=51%)가 유일. recency(최신처럼 보임)만 높고 grounded=0인 것이 환각의 정확한 신호였다 → 이후 검색 백엔드를 키리스 DDG에서 firecrawl로 교체.

5방향별 평가셋 — 어떤 능력엔 어떤 셋

평가셋타겟 능력대표 수치 / 구성
GAIA L1/L2도구 사용 · 첨부 처리v1 39.2% → v5 57.4% (+18.2pp), 첨부 0% → 43.4%
research-bench (eval_ph1)최신 사실 grounding · 인용5주제 × 2팀 = 10 run (LLM경쟁·Nvidia실적·미중규제·한국수출 + DP 대조군)
eval-corpus (지식그래프)멀티홉 추론 · 출처 정밀도(cite_f1)1~3 hop 태스크 · gold 경로
매핑. 최신성 → 웹검색셋 · 도구 역량 → GAIA · 멀티홉 → corpus · 검색 무관 경계 테스트 → DP(control).

6DB · 평가 시스템 구조

eval_v2는 PostgreSQL 22테이블 정규화 trace DB에 run_stream을 무손실로 적재한다. 모든 지표는 DB 실측에서 산출된다.

① run 1개의 metric 라이프사이클

③ 집계 뷰 · materialized views

② 가공

① 수집 · 무손실 기록

코드·DB 실측 대조

AutoGen run_stream

runs INSERT
PostgreSQL trace DB · 22 tables

event 로깅
runner / logger · ~47 events/run

aggregation
중간 집계

scoring
scorer · 2차 채점

mv_batch_summary

mv_tool_summary

experiments

메트릭 4축
품질 · 비용 · 행동 · 근거

Grafana 대시보드 · SQL 리포트

수집(runs·event) → 가공(aggregation·scoring) → 집계 뷰(mv_*·experiments) → 메트릭 4축 → Grafana

② 측정 → 개선 플라이휠

품질↑ + 비용↓

능력↑ · 비용↑

회귀 / 노이즈

① 모든 run 기록
trace DB

② 메트릭 특이점
이상치 발견

③ 슬라이스 원인 분석
예: L2 · attachment

④ 1변수 개입
도구 · 데이터 · 입력

⑤ matched A/B 측정

⑥ 판정

Dominant
무조건 채택

Trade-off
가치 판단

기각 · 보류

1변수 개입 + matched A/B → Dominant / Trade-off / 기각 판정 → 반복
신뢰 원칙. 검증되지 않은 지표는 사용하지 않는다. 모든 수치는 코드·DB 실측으로 대조한다 (run당 ~47 events 검증).

7메트릭 변화추이 — eval_ph1 라이브 실측

실험 과정에서 메트릭이 실제로 어떻게 움직였나. 배치 analysis_*_20260613(EXP-65~68 그라운딩 플라이휠) · research_*_20260612(EXP-60 토폴로지). 아래는 Grafana 라이브 대시보드와 동일 쿼리의 정적 렌더.

메트릭 변화추이 — eval_ph1 실측
① 토큰(k) ② 지연(s) ③ 검색 횟수 (품질 pass@1=1.00 전 구간 고정) ④ EXP-60 토폴로지 회귀 · 색: 회색 baseline · 황 trade-off · 초록 채택 · 빨강 기각
읽는 법. v3에서 검색을 켰지만 17회 전부 실패→환각(grounded 0). v4·v6은 비용을 줄였고, 실제로 근거를 잡은 건 v6뿐(검색 4회 전부 성공). pass@1=1.00은 환각이어도 통과해 이 차이를 못 잡으니 grounded(성공)을 봐야 한다. EXP-60은 토폴로지 1변수만 바꿔 pass@1 0.967→0.067 붕괴. 라이브: Grafana 대시보드 →

그 외 주요 메트릭 추이 — 한 선그래프 (정규화, ★grounded 포함)

주요 메트릭 추이 선그래프
분석 플라이휠 v2→v6, 각 메트릭 최대=1.0 정규화 — ★grounded 성공률(v6에서만 0→1.0) + pass@1·format_valid(1.00 고정 앵커) + 대화 턴 · input/output 토큰 분해 · 지연 · 검색수.
핵심 — "마지막 단계가 좋아졌다"는 이 한 줄에만 보인다. 빨간 ★grounded 라인이 v6에서만 0→1.0으로 치솟는다. 비용(토큰·지연)으로는 오히려 v4가 더 싸 보여 v6의 우위가 안 드러나고, pass@1·format_valid은 환각이어도 1.00이라 무력하다. → 실제 개선을 보려면 grounded 성공을 봐야 한다. (출처수/cite_f1은 이 analysis 배치엔 trace DB 미적재라 제외.)

선그래프 메트릭의 실제 값 (정규화 전 원시 수치, v2→v6)

versionpass@1format_validgrounded%total_turnsinput_tokens koutput_tokens ktotal_tokens klatency_mean sn_searchn_search_ok
v2 stale1.001.000%5.015.613.829.428000
v3 (EXP-65)1.001.000%10.365.531.697.160217.30
v4 lite (EXP-66)1.001.000%5.08.79.117.82095.70
v5 cited (EXP-67)1.001.000%6.313.714.928.63065.00
v6 (EXP-68)1.001.00100%5.011.69.721.31774.04.0
정규화 선그래프는 "모양(추이)" 비교용이고 이 표가 실제 값이다. total_turns·latency·n_search는 v3에서 정점(과욕) → v6는 n_search 4회로 최소이면서 전부 성공(n_search_ok=4).
latency 집계 주의 — mean이지 p95가 아니다. 분석 배치는 버전당 n=3이라 p95(tail)는 무의미(3점의 p95≈최댓값). 단 EXP-60(n=30)에선 mean이 tail 악화를 가렸다: round_robin이 mean 194s < 234s로 빨라 보였지만 p95 435s > 390s로 tail은 더 나쁨. → 표본이 커지면 latency는 p50/p95로 보는 게 정직하다.

그래프 메트릭 사전 — 개념 · 계산식 · 출처

메트릭개념 (무엇을·왜)계산식출처 · 방향
pass@1첫 시도 정답률 — 한 번에 맞히나성공 run ÷ 전체 run (attempt=1). 성공 = 정규화 후 exact-match(분석 도메인은 Task 충족)runs.success · ↑
pass@k / pass^kpass@k=k회 중 1회+ 성공(잠재력) · pass^k=k회 전부 성공(일관성)pass@k ≈ 1−(1−p)k · pass^k = pk반복 run · ↑
format_valid출력이 "FINAL ANSWER" 형식을 지켰나형식 준수 run ÷ 전체 (파서 검사)runs.format_valid · ↑
total_tokens한 run이 쓴 토큰 합 = 비용 프록시input_tokens + output_tokensruns.total_tokens · ↓
input_tokens / output_tokens프롬프트(누적 입력) vs 생성(추론 포함) 토큰모델 usage 합산runs.input/output_tokens · ↓
latency 집계=meanrun 벽시계 소요 시간. 여기선 평균(mean) — 분석 배치 n=3이라 p95 등 백분위수는 무의미(3점의 p95≈최댓값). 운영/SLO에선 p50·p95·p99 권장(tail이 UX 결정).(ended_at − started_at) = latency_ms÷1000. p95 = percentile_cont(0.95)runs.latency_ms · ↓
total_turns에이전트 발화 수 — 루프 낭비 신호run 내 message 이벤트 수runs.total_turns · ↓(과도 시)
n_search (검색 호출)웹검색 도구를 몇 번 불렀나 = 의도tool_call 중 name LIKE '%search%' 개수events · —
n_search_ok (성공 검색)실제 결과를 받은 검색 수 = 성과검색 tool_result 중 빈 결과"(…)"·tool_error 제외events (migration 010) · ↑
grounded / grounded%run이 실제 근거를 잡았나 (환각의 반대)run: grounded = (n_search_ok ≥ 1 AND not simulated) · % = grounded run ÷ 전체v_analysis_grounded · ↑
관련 개념(차트엔 없지만 서사에 등장). recency = 출력이 현재 시점을 언급하는 텍스트 신호(0~1, 약함 — 환각으로도 생성) · cite_f1 = 인용 출처와 gold의 F1 = 2·P·R/(P+R) (P=cite_precision, R=cite_recall) · hallucination_risk = (recency ≥ 0.5 AND not grounded) — 즉 "최신처럼 보이는데 근거 없음".