Part II · The Shift Chapter 09

기존 프레임워크 비교 분석

"The reasonable man adapts himself to the world; the unreasonable one persists in trying to adapt the world to himself. Therefore, all progress depends on the unreasonable man."
— George Bernard Shaw, Man and Superman (1903)

HELM, lm-eval-harness, WebArena, SWE-bench, RAGAS, AutoGen Eval, CrewAI, LangSmith 등 13개 프레임워크 심층 비교 분석

9.1 기존 프레임워크를 이해해야 하는 이유

새로운 평가 프레임워크를 설계하려면, 먼저 이미 존재하는 것들이 무엇을 측정하고 무엇을 놓치고 있는지 정확히 이해해야 한다. 이것은 단순한 문헌 조사가 아니다. 기존 프레임워크의 설계 철학, 아키텍처 결정, 메트릭 선택의 배경을 분석하는 것은 — 우리가 설계할 6차원 프레임워크가 어떤 갭(gap)을 채우는지를 명확히 하는 필수 과정이다.

2022년 HELM(Holistic Evaluation of Language Models)이 발표된 이후, LLM 및 에이전트 평가 생태계는 폭발적으로 성장했다. 2024년 말 기준 GitHub에서 "LLM evaluation" 태그가 붙은 저장소만 500개 이상이며, 학술 논문은 매달 수십 편이 새로 출간된다. 하지만 이 생태계의 성장이 반드시 "평가 품질의 향상"을 의미하지는 않는다. 오히려 프레임워크 간 파편화(fragmentation)가 심화되고, 각 프레임워크가 서로 다른 것을 측정하면서 비교 가능성이 사라지는 현상이 발생하고 있다.

이 장에서 분석할 13개 프레임워크는 네 가지 카테고리로 분류할 수 있다:

  1. LLM 평가 프레임워크: 모델 자체의 능력을 평가 (HELM, lm-eval-harness)
  2. 단일 에이전트 벤치마크: 에이전트의 환경 내 행동을 평가 (WebArena, SWE-bench, ToolBench, AgentBench)
  3. RAG 평가 프레임워크: 검색 증강 생성의 품질을 평가 (RAGAS, ARES, TruLens, DeepEval)
  4. 멀티 에이전트 · 관측 프레임워크: 에이전트 협업 및 관측 (AutoGen Eval, CrewAI Eval, AgenticBench, LangSmith)

이 분류 자체가 이미 하나의 인사이트를 제공한다: 에이전트 평가의 전체 스펙트럼을 커버하는 프레임워크는 존재하지 않는다. 각 카테고리는 자신의 영역에서 깊이가 있지만, 카테고리 간 연결고리가 없다.

왜 13개인가

13개 프레임워크는 에이전트 평가 생태계의 전부가 아니다. 선정 기준: (1) GitHub star 1,000개 이상 또는 논문 피인용 50회 이상, (2) 2024년 이후 활성 유지보수, (3) 에이전트/LLM 평가에 직접 사용 가능. 세 조건을 모두 만족하는 프레임워크 13개를 분석 대상으로 삼았다.

9.1.1 평가 프레임워크의 타당성 검증: 왜 "있는 것"으로 충분하지 않은가

"13개나 있는데 왜 새로 만드는가?"라는 질문에 답하기 위해, 기존 프레임워크의 타당성(validity)을 세 가지 측면에서 검증한다:

타당성 유형정의기존 프레임워크 상태예시
내용 타당성 (Content Validity)측정 도구가 평가하고자 하는 구성개념(construct)을 얼마나 포괄적으로 커버하는가부족 — 각 프레임워크가 좁은 영역만 커버RAGAS는 RAG만, SWE-bench는 코딩만
구성개념 타당성 (Construct Validity)측정 도구가 실제로 측정하고자 하는 것을 측정하는가의문 — "성공률"이 "유용성"을 대변하는가?WebArena SR 30%가 "에이전트가 30% 유용하다"를 의미하지 않음
기준 타당성 (Criterion Validity)측정 결과가 외부 기준(인간 판단, 실제 성과)과 일치하는가미검증 — 대부분의 프레임워크가 인간 판단과의 상관관계를 보고하지 않음RAGAS Faithfulness와 인간 환각 판단의 일치도에 대한 공식 연구 부족

이 세 가지 타당성 중 하나라도 충족하지 못하면, 평가 결과의 신뢰성이 떨어진다. 불행히도, 13개 프레임워크 중 세 가지 타당성을 모두 명시적으로 검증한 것은 HELM뿐이며, HELM조차 에이전트 환경이 아닌 정적 텍스트에 국한된다.

프레임워크 종합 타당도 (Framework Composite Validity)
$$V_{\text{composite}} = w_1 \cdot V_{\text{content}} + w_2 \cdot V_{\text{construct}} + w_3 \cdot V_{\text{criterion}}$$
$w_1, w_2, w_3$은 가중치(일반적으로 $w_1 = 0.4, w_2 = 0.3, w_3 = 0.3$). 각 $V$는 0~1 점수. HELM의 경우 $V_{\text{content}}=0.7$ (7개 렌즈가 넓지만 에이전트 미포함), $V_{\text{construct}}=0.8$, $V_{\text{criterion}}=0.6$ → $V_{\text{composite}}=0.70$. RAGAS의 경우 $V_{\text{content}}=0.3$ (RAG만), $V_{\text{construct}}=0.7$, $V_{\text{criterion}}=0.5$ → $V_{\text{composite}}=0.48$. 이 모델은 타당성의 정량적 비교를 가능하게 한다.

9.1.2 기존 프레임워크의 "선택의 역설"

심리학자 Barry Schwartz의 "선택의 역설(Paradox of Choice)"은 에이전트 평가에도 적용된다. 13개 프레임워크가 존재함에도 불구하고, 실무자는 "어떤 것을 선택해야 하는가?"라는 질문에 직면한다. 선택지가 많을수록 결정이 어려워지고, 결국 아무것도 선택하지 않거나(분석 마비), 가장 익숙한 것만 반복 선택(편향)하게 된다.

분석 마비(Analysis Paralysis)의 실제 사례

한 금융 기관이 에이전트 기반 고객 지원 시스템을 구축하면서 평가 프레임워크를 선택해야 했다. RAG를 사용하므로 RAGAS가 자연스러운 선택이었지만, 에이전트의 도구 사용 능력도 평가하고 싶었고, 장기적으로는 멀티 에이전트로 확장할 계획이었다. 3개월간의 리서치 후, 결론은 "RAGAS + 커스텀 도구 평가 + LangSmith 모니터링"의 조합이었다. 세 프레임워크를 통합하는 데 추가 2개월이 소요되었다.

이 사례가 보여주는 것: 단일 프레임워크가 요구를 충족하지 못하면, 여러 프레임워크를 조합해야 하고, 이 조합 비용이 상당하다는 점이다. 13개 프레임워크가 있다는 것은 13개의 선택지가 아니라, 13개 중 몇 개를 선택할지, 어떻게 연결할지, 결과를 어떻게 통합할지라는 조합적 복잡성(combinatorial complexity)을 의미한다.

프레임워크 조합의 복잡도
$$C(n, k) = \binom{n}{k} = \frac{n!}{k!(n-k)!}$$
$n$=프레임워크 수(13), $k$=선택할 프레임워크 수. 13개 중 3개를 선택하는 조합만 $\binom{13}{3} = 286$가지. 각 조합의 통합 비용까지 고려하면 실질적인 의사결정 공간이 폭발적으로 증가한다.

편향적 선택(Biased Selection)의 위험

분석 마비의 반대편에는 "가장 익숙한 것"을 선택하는 편향이 있다. 2024년 말 기준, RAG 평가에서 RAGAS가 압도적 점유율을 가진다. 하지만 RAGAS가 반드시 최선의 선택은 아니다:

상황최적 프레임워크흔한 선택편향으로 인한 손실
도메인 특화 RAG (의료/법률)ARES (도메인 판별 모델)RAGAS정확도 10~15% 저하
실시간 RAG 모니터링TruLens (피드백 루프)RAGAS실시간 품질 감지 불가
CI/CD 파이프라인 통합DeepEval (pytest 스타일)RAGAS자동화 복잡도 증가
에이전트 + RAG 평가6차원 프레임워크 (본서)RAGAS + LangSmith통합 비용, 메트릭 불일치

편향적 선택의 근원은 가용성 휴리스틱(availability heuristic)이다. 가장 많이 언급되고, 가장 많은 GitHub star를 가진 프레임워크가 "최고"라고 인지되는 현상이다. 하지만 GitHub star 수는 커뮤니티 인기도를 나타낼 뿐, 특정 사용 사례에 대한 적합성을 보장하지 않는다.

이 장은 이 딜레마를 해결하는 두 가지 도구를 제공한다: (1) 메가 비교 테이블(9.4절)은 객관적 비교를 가능하게 하고, (2) 결정 트리(9.4.2절)는 상황에 맞는 선택을 안내한다. 하지만 이 두 도구만으로는 충분하지 않다. 13개 프레임워크 모두가 같은 것을 다르게 측정할 뿐, 우리가 정말 필요한 것(멀티 에이전트 협업 품질, 안전성 거부권, 비용-품질 트레이드오프의 통합적 평가)을 측정하는 프레임워크는 없다. 이것이 Part III의 존재 이유다.

9.2 프레임워크 카테고리 분류

13개 프레임워크를 네 가지 카테고리로 나누는 것은 단순한 분류 작업이 아니다. 각 카테고리는 평가 대상, 메트릭 철학, 자동화 수준, 그리고 한계점에서 근본적으로 다른 패러다임을 대표한다.

9.2.1 카테고리 I: LLM 평가 프레임워크

LLM 평가 프레임워크는 모델 자체의 능력을 평가한다. 에이전트가 아닌 언어 모델이 다양한 태스크에서 어떤 성능을 보이는지 측정한다. 핵심 질문은 "이 모델이 무엇을 얼마나 잘 하는가?"이다.

이 카테고리가 에이전트 평가와 관련이 있는 이유는 에이전트의 기반 모델 성능이 에이전트 성능의 하한선을 결정하기 때문이다. 기반 모델이 MMLU에서 60%인 에이전트가 환경에서 80% 성공률을 보이는 것은 불가능에 가깝다. 반면, MMLU 90%의 모델이 환경에서 40%만 달성하는 것은 흔하다 — 기반 능력이 환경 적응으로 완전히 전이되지 않기 때문이다.

에이전트 성능 하한선 모델
$$\text{AgentPerf} \leq \alpha \cdot \text{BaseModelPerf} + (1-\alpha) \cdot \text{EnvAdaptCap}$$
$\alpha$는 기반 모델 성능의 전이율(transfer rate). 연구에 따르면 $\alpha \approx 0.4 \sim 0.6$로, 기반 모델 성능의 40~60%만 에이전트 성능으로 전이된다. 나머지는 환경 적응 능력(envAdaptCap)에 의존한다. 이것은 LLM 평가가 필요하지만 충분하지 않다는 수학적 근거다.
속성HELMlm-eval-harness
개발 기관Stanford CRFMEleutherAI
초기 릴리즈2022년 11월2020년 (v0.1)
평가 철학시나리오 x 메트릭 렌즈태스크 - 모델 - 메트릭 파이프라인
지원 태스크 수16개 시나리오200+개
메트릭 종류7개 렌즈태스크별 커스텀
에이전트 평가없음없음
라이선스Apache 2.0MIT

HELM은 "렌즈(lens)"라는 개념으로 하나의 모델을 여러 메트릭으로 다각도 조명한다. 반면 lm-eval-harness는 "파이프라인" 철학을 따른다. 태스크 정의, 모델 호출, 메트릭 계산의 명확한 파이프라인을 제공하며 커뮤니티가 태스크를 쉽게 추가할 수 있는 확장성을 강조한다.

LLM 평가 != 에이전트 평가

HELM과 lm-eval-harness는 훌륭한 도구다. 하지만 모델 중심(model-centric) 평가이며 에이전트 중심(agent-centric)이 아니다. 모델이 QA에서 95%여도 웹 브라우저를 조작하는 에이전트로서 95%는 아니다.

9.2.2 카테고리 II: 단일 에이전트 벤치마크

동적 환경에서의 에이전트 상호작용을 평가한다. WebArena가 주목받는 이유는 실제 웹사이트를 그대로 복제했다는 점이다. 이 카테고리의 핵심 질문은 "에이전트가 환경 안에서 목표를 달성할 수 있는가?"이다.

단일 에이전트 벤치마크의 공통적 특징은 세 가지다:

  1. 환경 제공: 에이전트가 상호작용할 가상/시뮬레이션 환경을 제공한다. WebArena는 웹사이트, SWE-bench는 Git 리포지토리, ToolBench는 REST API, AgentBench는 8개 환경을 각각 제공한다.
  2. 목표 정의: 에이전트가 달성해야 할 명확한 목표를 정의한다. "이 이슈를 수정하라", "이 정보를 찾아라" 등.
  3. 이진 평가: 대부분 성공(Success) 또는 실패(Failure)의 이진 판정을 사용한다. 부분적 성공을 측정하는 벤치마크는 드물다.

환경 복잡도 스펙트럼: MiniWoB++에서 OSWorld까지

단일 에이전트 벤치마크의 진화는 환경 복잡도의 증가로 요약된다. 2017년 MiniWoB++가 합성 미니 웹 태스크로 시작했고, 2023년 WebArena가 실제 웹 환경을 도입했으며, 2024년 OSWorld가 완전한 데스크톱 환경을 제공했다:

속성MiniWoB++WebShopWebArenaSWE-benchOSWorld
연도20172022202320232024
환경 규모~50 DOM~200 DOM~2000 DOM전체 리포전체 OS
상태 공간~10^3~10^5~10^8~10^12~10^15
행동 공간~10~20~50~200~500+
인간 성능94%84%78%92%~75%
GPT-4 성능~75%~50%~36%~33%~12%
격차(인간-AI)19%p34%p42%p59%p63%p

이 테이블이 보여주는 핵심: 환경이 복잡해질수록 인간-AI 격차가 벌어진다. MiniWoB++에서 19%p이던 격차가 OSWorld에서는 63%p로 확대된다. 이것은 에이전트 평가가 모델 평가보다 훨씬 어려운 문제임을 시사한다. 모델이 지식을 갖추더라도 복잡한 환경에서 그 지식을 행동으로 전환하는 것은 전혀 다른 능력이다.

환경 복잡도에 따른 격차 확대 모델
$$\Delta(S) = \text{Human}(S) - \text{AI}(S) \approx c_0 + c_1 \log_{10}(|\mathcal{S}|)$$
$S$는 환경, $|\mathcal{S}|$는 상태 공간 크기, $c_0, c_1$은 상수. 실증 데이터에 따르면 $c_1 \approx 15$~20으로, 상태 공간이 10배 커질 때마다 인간-AI 격차가 약 15~20%p 확대된다. 이 모델은 환경 복잡도가 에이전트 평가의 핵심 변수임을 정량적으로 보여준다.

이 세 가지 특징은 LLM 평가와의 근본적 차이를 만든다. LLM 평가는 "환경"이 없다: 정적 텍스트가 입력으로 주어지고 텍스트가 출력으로 나온다. 하지만 에이전트 평가에서는 환경이 핵심 변수다. 같은 모델이라도 환경이 달라지면 성능이 급격히 변한다: GPT-4o는 WebArena에서 28.4%이지만 OSWorld에서는 12.5%다. 이 차이는 모델이 아니라 환경의 복잡성에서 온다.

속성WebArenaSWE-benchToolBenchAgentBench
환경 유형실제 웹 복제실제 GitHub 리포16K+ 실제 API8개 혼합 환경
태스크 수8122,294 (V:500)~16,000~800
평가 방법최종 상태 비교Test pass/failPass+Win rate환경별 메트릭
자동화완전 자동완전 자동완전 자동완전 자동

9.2.3 카테고리 III: RAG 평가 프레임워크

RAG(검색 증강 생성) 평가 프레임워크는 에이전트 평가의 특수한 하위 문제(subproblem)를 다룬다. "에이전트가 외부 지식을 검색하여 활용하는 능력"을 평가하는데, 이것은 멀티 에이전트 시스템에서 한 에이전트가 "정보 검색자(information retriever)" 역할을 할 때 핵심적으로 요구되는 능력이다.

이 카테고리의 프레임워크들은 공통적으로 세 가지 품질 차원을 평가한다:

  1. 검색 품질(Retrieval Quality): 관련성 높은 문서를 검색했는가? — Context Precision, Context Relevance
  2. 생성 품질(Generation Quality): 검색된 문서에 기반하여 충실하게 응답했는가? — Faithfulness, Answer Relevance
  3. 전체 파이프라인 품질(Pipeline Quality): 검색-생성 파이프라인 전체가 효율적인가? — 컨텍스트 활용률, 지연 시간, 비용

RAGAS가 혁신적인 이유는 reference-free 평가를 가능하게 한 것이다. 정답 없이도 Faithfulness, Answer Relevance, Context Precision/Recall을 평가한다. 하지만 RAG 시스템만 평가 가능하다는 명확한 한계가 있다.

속성RAGASARESTruLensDeepEval
핵심 철학Reference-free예측기반 자동평가RAG TriadPytest 스타일
핵심 메트릭Faithfulness, Answer Relevancy, Context Precision/RecallContext Relevance, Answer Faithfulness, Answer RelevanceGroundedness, Answer Relevance, Context Relevance10+ 메트릭 (Faithfulness, Relevancy, Hallucination 등)
평가 방식LLM-as-Judge (GPT 기반)미세조정된 판별 모델LLM-as-Judge + 피드백 루프LLM-as-Judge + 단정적 테스트
에이전트 평가불가불가불가부분적
학습 데이터 필요불필요필요 (판별 모델 학습용)불필요불필요
인간 평가 통합제한적자동 + 인간 하이브리드피드백 루프 내장단정적 테스트만
라이선스Apache 2.0MITApache 2.0Apache 2.0

ARES: 예측 기반 자동 평가의 독특한 접근

ARES(Saad-Falcon et al., 2024)는 다른 RAG 평가 프레임워크와 근본적으로 다른 접근을 취한다. LLM-as-Judge 대신 미세조정된 판별 모델(discriminator)을 사용하여 평가한다. 이 접근의 장점은 평가 일관성이 높다는 것이지만, 도메인별 학습 데이터가 필요하다는 단점이 있다.

ARES 평가 점수
$$\text{ARES}_{\text{score}} = \alpha \cdot P(\text{relevant} \mid q, c) + \beta \cdot P(\text{faithful} \mid c, a) + \gamma \cdot P(\text{answerable} \mid q, a)$$
$q$=질문, $c$=검색 컨텍스트, $a$=생성 답변. $\alpha, \beta, \gamma$는 가중치. 판별 모델은 각 확률을 독립적으로 추정하며, 인간 평가 데이터로 보정(calibration)된다.

TruLens: RAG Triad와 피드백 루프

TruLens의 핵심 기여는 RAG Triad 개념이다: (1) Groundedness(답변이 컨텍스트에 근거하는가), (2) Answer Relevance(답변이 질문에 관련성이 있는가), (3) Context Relevance(컨텍스트가 질문에 관련성이 있는가). 이 세 가지가 모두 충족되어야 고품질 RAG로 판정한다.

TruLens의 차별점은 피드백 루프(feedback loop)다. 평가 결과를 실시간으로 애플리케이션에 피드백하여, 품질이 낮은 응답을 자동으로 재시도하거나 인간에게 에스컬레이션하는 메커니즘을 제공한다. 이것은 "평가 → 개선 → 재평가"의 지속적 개선 루프를 가능하게 한다.

DeepEval: Pytest 스타일의 단정적 테스트

DeepEval은 소프트웨어 테스트의 단정적 테스트(assertion-based testing) 패러다임을 RAG 평가에 적용했다. 개발자가 pytest처럼 테스트 케이스를 작성하고, 각 케이스에서 기대 품질을 명시적으로 선언한다:

Python
from deepeval import assert_test
from deepeval.test_case import LLMTestCase
from deepeval.metrics import FaithfulnessMetric, AnswerRelevancyMetric

test_case = LLMTestCase(
    input="에이전트 평가의 핵심 차원은?",
    actual_output="태스크 완료도, 과정 품질, 견고성, 안전성, 비용 효율, 협업 횈률",
    retrieval_context=["에이전트 평가는 6차원으로 구성된다..."]
)

# 단정적 테스트: Faithfulness ≥ 0.8, Relevancy ≥ 0.7
assert_test(test_case, [
    FaithfulnessMetric(threshold=0.8),
    AnswerRelevancyMetric(threshold=0.7),
])

이 접근의 장점은 CI/CD 통합이 용이하다는 것이다. pytest와 동일한 방식으로 평가를 자동화할 수 있어, RAG 시스템의 품질을 지속적으로 모니터링할 수 있다. 하지만 "테스트 케이스가 현실을 얼마나 대표하는가?"라는 질문이 여전히 남는다.

RAG 평가 프레임워크의 공통적 한계

네 프레임워크 모두 RAG 파이프라인만 평가한다. 에이전트가 검색 결과를 다른 에이전트에게 전달하거나, 검색 결과를 바탕으로 의사결정을 내리고 행동하는 과정은 평가하지 않는다. RAG는 에이전트 시스템의 한 구성 요소일 뿐이며, 전체 에이전트 평가의 관점에서 RAG 평가는 불충분하다. 우리의 6차원 프레임워크에서 RAG 평가는 D1(태스크 완료도)의 하위 메트릭으로 통합된다.

9.2.4 카테고리 IV: 멀티 에이전트/관측 프레임워크

가장 새롭고 가장 덜 성숙했으며 가장 큰 갭이 존재하는 영역이다. 결정적 한계는 프레임워크 종속성이다. AutoGen Eval은 AutoGen으로 만든 시스템만, CrewAI Eval은 CrewAI로 만든 시스템만 평가할 수 있다.

이 카테고리는 세 가지 근본적 도전에 직면한다:

  1. 평가 단위의 모호성: "무엇"을 평가할 것인가? 개별 에이전트? 에이전트 간 대화? 전체 크루의 산출물? 현재 프레임워크는 이 질문에 대한 합의가 없다.
  2. 협업 품질의 정량화: "좋은 협업"이란 무엇인가? 빠른 합의? 골고루 참여? 정확한 역할 분담? 이것은 단일 메트릭으로 포착할 수 없는 다차원적 개념이다.
  3. 환경의 복잡성: 멀티 에이전트 환경은 단일 에이전트 환경보다 기하급수적으로 복잡하다. $N$개 에이전트가 $M$개 상태를 가진 환경에서 상호작용하면, 가능한 상태 공간은 $O(M^N)$이다.
멀티 에이전트 상태 공간 폭발 (State Space Explosion)
$$|\mathcal{S}_{\text{multi}}| = |\mathcal{S}_{\text{env}}|^N \times |\mathcal{A}|^{N \times (N-1)}$$
$|\mathcal{S}_{\text{env}}|$은 환경 상태 수, $N$은 에이전트 수, $|\mathcal{A}|$는 행동 수. 두 번째 항은 에이전트 간 통신의 가능한 조합. 예: 환경 상태 100개, 에이전트 3개, 행동 10개 → $100^3 \times 10^{3 \times 2} = 10^{15}$. 이 폭발적 상태 공간 때문에 완전한 테스트 커버리지가 불가능하며, 통계적 샘플링에 의존할 수밖에 없다.

"가장 큰 갭이 있는 곳에 가장 큰 기회가 있다"

카테고리 IV의 미성숙은 기회다. 현재 멀티 에이전트 평가를 체계적으로 수행하는 조직은 거의 없다. 이 영역에서 체계적 프레임워크를 먼저 제공하는 사람/팀이 디 팩토 표준(de facto standard)이 될 수 있다. 본서의 6차원 프레임워크, 특히 차원 6(협업 효율)은 이 갭을 정면으로 공략한다.

속성AutoGen EvalCrewAI EvalAgenticBenchLangSmith
멀티 에이전트GroupChat 평가크루 단위제한적추적 중심
프레임워크 종속AutoGen 필수CrewAI 필수비종속LangChain 강권
오픈소스MITMITMIT상용+SDK

9.3 심층 프레임워크 분석

이 절에서는 13개 프레임워크 중 가장 영향력 있는 9개를 하나씩 심층 분석한다. 각 분석은 아키텍처와 설계 철학, 핵심 메트릭의 수학적 정의, 장점과 한계, 실제 사용 코드 예시를 포함한다.

9.3.1 HELM — Holistic Evaluation of Language Models

HELM (Stanford CRFM, 2022~)

오픈소스LLM 평가다차원 렌즈16 시나리오

논문: Liang et al., TACL 2023. arXiv: 2211.09110

HELM의 핵심 혁신은 "시나리오 x 메트릭" 행렬이다. 전통적 벤치마크가 하나의 태스크에서 하나의 점수를 산출하는 방식과 달리, HELM은 16개 시나리오를 7개 메트릭 렌즈로 평가하여 112개의 평가 결과를 산출한다.

7개 메트릭 렌즈는 각각 독립적으로 정의된다:

렌즈정의수학적 표현
Accuracy정확한 답변 비율$\text{Acc} = \frac{1}{N}\sum_{i=1}^{N} \mathbf{1}[\hat{y}_i = y_i]$
Calibration확신도와 실제 정확도 일치$\text{ECE} = \sum_{b=1}^{B} \frac{n_b}{N} |acc(b) - conf(b)|$
Robustness입력 변형에 대한 내성$\text{Rob} = 1 - \frac{\text{Acc}_{orig} - \text{Acc}_{pert}}{\text{Acc}_{orig}}$
Fairness그룹 간 성능 차이$\text{Fair} = \max_{g} \text{Acc}_g - \min_{g} \text{Acc}_g$
Bias고정관념 반영 정도편향 단어 등장 빈도 분석
Toxicity유해 콘텐츠 비율Perspective API 점수 기반
Efficiency추론 효율성$\text{Eff} = \text{FLOPs} / \text{Accuracy}$
Expected Calibration Error (ECE)
$$\text{ECE} = \sum_{b=1}^{B} \frac{n_b}{N} \left| \text{acc}(B_b) - \text{conf}(B_b) \right|$$
$B$는 빈(bin)의 수, $n_b$는 빈 $b$에 속하는 샘플 수. 완벽히 보정된 모델은 ECE=0이며, 이는 모델이 "100% 확신한다"고 할 때 실제로 100% 맞는다는 것을 의미한다. 에이전트 시스템에서는 모델의 불확실성 정도가 행동 결정에 직결되므로 보정이 특히 중요하다.

HELM의 보정 렌즈는 에이전트 시스템 설계에 중요한 시사점을 제공한다. 에이전트가 "확신이 높은데 틀리면" 위험한 행동을 하고, "확신이 낮은데 맞으면" 기회를 놓친다. 따라서 에이전트 평가에서도 보정 오류를 측정하는 것이 중요하다. 하지만 HELM 자체는 정적 텍스트 평가이므로, 에이전트의 동적 환경에서의 보정 오류를 직접 측정하지는 못한다.

HELM의 16개 시나리오는 Information Extraction, Intent Classification, Summarization, Reading Comprehension, Toxicity Detection, Coreference Resolution, QA, Knowledge, Dialogue, Code Generation, Mathematical Reasoning, Instruction Following, Creative Writing, Scientific Reasoning, Reasoning, Word Sense Disambiguation 영역을 커버한다. 이 범위는 언어 모델로서의 능력을 종합적으로 평가하지만, 에이전트로서의 능력(환경 탐색, 도구 사용, 다단계 추론)은 포함하지 않는다.

HELM의 평가 파이프라인 아키텍처

HELM의 내부 아키텍처는 세 가지 핵심 컴포넌트로 구성된다:

HELM이 에이전트 평가에 주는 시사점: "다렌즈 평가"의 선구

HELM의 "시나리오 x 메트릭" 행렬은 본서의 6차원 프레임워크에 직접적 영감을 준다. 단일 점수가 아닌 다각적 평가라는 발상은 에이전트 평가에서도 유효하다:

HELM의 기여에이전트 평가로의 확장6차원 프레임워크에서의 대응
정확도 렌즈태스크 완료율차원 1: Task Completion
보정 렌즈에이전트의 확신도-성능 일치차원 2: Process Quality (confidence tracking)
견고성 렌즈환경 변화에 대한 내성차원 3: Robustness & Adaptability
공정성 렌즈에이전트의 편향적 행동차원 4: Safety & Alignment
효율성 렌즈API 호출/비용 효율차원 5: Cost Efficiency
독성 렌즈에이전트의 위해 출력차원 4: Safety (toxicity screening)

이 매핑이 보여주듯, HELM의 7개 렌즈 중 6개가 에이전트 평가 차원으로 직접 매핑된다. 남은 하나(Bias 렌즈)도 안전성 차원에 통합될 수 있다. 즉, HELM의 "다렌즈" 접근이 에이전트 평가의 "다차원" 접근의 원형이다. 다만 HELM은 정적 텍스트에 국한되므로, 동적 환경에서의 행동 평가(궤적 분석, 도구 사용, 협업 등)는 추가 차원이 필요하다.

HELM의 한계를 넘어서: 동적 환경에서의 보정

HELM의 보정 렌즈(Calibration)는 정적 문맥에서만 작동한다. 에이전트 환경에서는 매 단계마다 모델의 확신도가 변하고, 이것이 다음 행동에 영향을 미친다. 예를 들어, SWE-bench에서 파일을 탐색할 때 모델이 "이 파일이 관련 있을 확신: 95%"라고 판단하면 탐색을 중단하지만, 실제로는 70% 확률로 틀린 파일일 수 있다. 이 "동적 보정 오류"는 HELM이 측정하지 못하는 새로운 유형의 오류다. 11장에서 설계할 Process Quality 차원이 이 갭을 채운다.

  1. Runner: 시나리오별로 모델을 실행하고 예측을 수집. 각 시나리오는 Adaptation(예: few-shot prompting 전략)을 지정할 수 있다.
  2. Metric Executor: 수집된 예측에 대해 7개 렌즈 메트릭을 병렬로 계산. 일부 메트릭(Toxicity, Bias)은 외부 API(Perspective API, Winobias 등)를 호출한다.
  3. Visualizer: 결과를 112개 셀의 히트맵으로 시각화. 각 셀은 (시나리오, 렌즈) 쌍에 대한 점수를 나타낸다.

이 아키텍처의 장점은 새로운 렌즈나 시나리오를 추가할 때 다른 컴포넌트를 수정할 필요가 없다는 것이다. 반면, 각 시나리오 실행이 독립적이므로 시나리오 간의 상관관계(correlation)를 자동으로 분석하지는 않는다. 예를 들어 "QA 정확도가 높은 모델이 Summarization에서도 높은가?"라는 질문에 HELM 자체는 답하지 못한다.

HELM Lite와 Classic HELM

2024년에 HELM은 두 가지 변형을 제공한다: HELM Classic은 전체 16개 시나리오 x 7개 렌즈를 실행하며, HELM Lite는 핵심 42개 조합(6개 시나리오 x 7개 렌즈)만 실행하여 비용과 시간을 줄인다. HELM Lite의 상관관계 분석 결과, 42개 조합이 112개 조합과 0.97 이상의 순위 상관관계(Spearman)를 보임이 확인되었다.

순위 보존 상관관계
$$\rho_{\text{Spearman}} = 1 - \frac{6 \sum d_i^2}{n(n^2-1)}$$
$d_i$는 HELM Lite와 Classic에서 모델 $i$의 순위 차이. $\rho > 0.97$이면 Lite가 Classic의 순위를 거의 완벽히 보존한다.

장점

  • 다면적 프로파일: 단일 점수가 아닌 7차원 평가 프로파일로 입체적 비교 가능
  • 표준화: 동일 시나리오/메트릭으로 여러 모델 공정 비교
  • 지속 업데이트: 새 모델 출시 시 리더보드 업데이트
  • 공정성/편향 측정: 다른 벤치마크가 간과하는 차원 포함
  • HELM Lite: 비용 효율적 변형으로 CI/CD 통합 가능

한계

  • 에이전트 평가 불가: 정적 텍스트만 평가. 환경 상호작용, 도구 사용 불가
  • 비용: Classic 기준 112개 평가 조합 실행 시 상당한 API 비용
  • 시나리오 고정: 16개 시나리오 확장에 전체 파이프라인 수정 필요
  • 멀티모달 미지원: 텍스트만 평가, 이미지/오디오 불가

9.3.2 lm-eval-harness — 확장성 중심 평가 파이프라인

lm-eval-harness (EleutherAI, 2020~)

오픈소스200+ 태스크확장성커뮤니티

논문: Gao et al., 2024. arXiv: 2407.00589

lm-eval-harness는 "LLM 평가의 만능 도구상"을 표방한다. 핵심 설계 원칙은 태스크(Task) - 모델(Model) - 메트릭(Metric)의 명확한 분리다. 태스크는 YAML로 정의하고, 모델은 플러그인 방식으로 교체하며, 메트릭은 태스크에 종속적으로 계산된다.

YAML
# lm-eval-harness 태스크 정의 예시
task: mmlu_abstract_algebra
dataset_path: cais/mmlu
dataset_name: abstract_algebra
output_type: multiple_choice
doc_to_text: "{{question.strip()}}\nA. {{choices[0]}}\nB. {{choices[1]}}"
doc_to_target: answer
metric_list:
  - metric: acc
    aggregation: mean
    higher_is_better: true
metadata:
  version: 2.0
  num_fewshot: 5

이 구조의 장점은 새로운 태스크를 추가하려면 YAML 파일 하나만 만들면 된다는 것이다. Python 코드를 작성할 필요가 없다(커스텀 로직이 필요한 경우 Python 클래스도 지원). 2024년 말 기준 200개 이상의 태스크가 등록되어 있어 단일 프레임워크로 가장 넓은 벤치마크 커버리지를 제공한다.

lm-eval-harness의 아키텍처는 세 가지 핵심 컴포넌트로 구성된다:

  1. Task: 평가할 태스크의 데이터셋, 프롬프트 템플릿, 메트릭을 정의. YAML 또는 Python 클래스로 구현
  2. Model: 평가 대상 모델. HuggingFace Transformers, OpenAI API, Anthropic API, vLLM, llama.cpp 등 다양한 백엔드 지원
  3. Metric: 평가 메트릭. exact_match, F1, perplexity, BERTScore 등 기본 제공 + 커스텀 정의 가능
lm-eval-harness 메트릭 계산 파이프라인
$$\text{Score}(T, M) = \frac{1}{|D_T|} \sum_{d \in D_T} \mu(f_M(\text{prompt}(d)), \text{target}(d))$$
$T$는 태스크, $M$은 모델, $D_T$는 태스크 $T$의 데이터셋, $f_M$은 모델의 출력 함수, $\mu$는 메트릭 함수. 이 파이프라인은 태스크-모델-메트릭을 완전히 분리하여 각 컴포넌트를 독립적으로 교체할 수 있게 한다.

v0.4 아키텍처 혁신

2024년에 출시된 v0.4는 내부 아키텍처를 완전히 재설계했다. 주요 변화는 (1) YAML 기반 태스크 정의 표준화, (2) 모델 백엔드 추상화 개선, (3) 병렬 처리 지원, (4) 출력 형식 표준화(JSON)다. 이 변화로 200+ 태스크의 품질 관리가 용이해졌고, CI/CD 파이프라인과의 통합이 간편해졌다.

MMLU, HumanEval, GSM8K — lm-eval-harness의 핵심 태스크

lm-eval-harness에서 가장 널리 사용되는 세 가지 태스크를 분석한다:

MMLU (Massive Multitask Language Understanding): 57개 주제, 15,908개 질문으로 구성된 다지선택 벤치마크. 5-shot 설정으로 평가하며, 주제별로 난이도가 크게 다르다. 전문 영역(법학, 의학)은 일반 영역(상식)보다 현저히 낮은 점수를 보인다. 이 분산(variance)은 "평균 점수"만으로 모델의 실제 능력을 파악하기 어렵다는 것을 보여준다.

HumanEval: 164개 Python 함수 작성 문제. pass@k 메트릭을 사용하며, $k$개의 샘플 중 하나라도 통과하면 성공으로 간주한다.

pass@k 메트릭
$$\text{pass@k} = \mathbb{E}\left[1 - \frac{\binom{n-c}{k}}{\binom{n}{k}}\right]$$
$n$=총 생성 샘플 수, $c$=정답 샘플 수, $k$=선택할 샘플 수. pass@1은 한 번에 정답을 낼 확률, pass@10은 10번 시도 중 한 번이라도 성공할 확률. 실무에서는 pass@1이 더 의미 있으며, 연구에서는 pass@10으로 잠재 능력을 측정한다.

GSM8K: 8,500개 초등/중등 수학 문제. CoT(Chain-of-Thought) 추론 능력을 평가하며, 에이전트 시스템의 "다단계 추론" 능력과 간접적으로 관련이 있다. GSM8K 점수가 높은 모델이 반드시 에이전트로서 잘 동작하는 것은 아니지만, 다단계 추론 능력의 하한선(lower bound)으로는 유용하다.

장점

  • 압도적 커버리지: 200+ 태스크로 LLM 평가의 가장 넓은 스펙트럼
  • 확장성: YAML/Python 기반 커스텀 태스크 용이
  • 모델 독립: HuggingFace, OpenAI, Anthropic, 로컬 모두 지원
  • CLI 인터페이스: 명령행 한 줄로 평가 실행 가능
  • CI/CD 친화적: JSON 출력, 병렬 처리 지원

한계

  • 에이전트 평가 불가: 정적 텍스트 벤치마크만
  • 메트릭 단순성: exact match, F1 등 기본적 메트릭 위주
  • 품질 편차: 커뮤니티 기여 태스크 품질 불균일
  • 다차원 평가 부족: HELM의 7-렌즈 같은 다면적 평가 불가

lm-eval-harness를 에이전트 평가로 확장: 가능한가?

lm-eval-harness의 태스크-모델-메트릭 분리 구조는 이론적으로 에이전트 평가로 확장 가능하다. 하지만 실제로 시도해보면 세 가지 근본적 한계에 직면한다:

한계lm-eval-harness 구조에이전트 평가 요구
정적 입력단일 프롬프트 → 단일 응답다단계 환경 상호작용피드백 루프 없음
독립적 평가각 샘플이 독립적으로 평가이전 행동이 다음 상태에 영향상태 유지 불가
단일 턴1회 호출로 완료다중 턴 대화/행동턴 루프 없음

이 한계를 극복하기 위한 두 가지 접근이 있다:

접근 A: 래퍼(Wrapper) 패턴 — lm-eval-harness를 그대로 사용하되, 에이전트 환경을 "모델 백엔드"로 감싼다. 즉, lm-eval-harness → Model → AgentEnv → LLM의 형태로, AgentEnv가 다단계 상호작용을 관리한다. 이 방법은 확장성이 좋지만, 에이전트의 행동 궤적(trajectory)을 평가할 수 없다. 최종 결과만 평가된다.

접근 B: 커스텀 Task 클래스 — lm-eval-harness의 Python 기반 커스텀 Task 클래스를 활용하여 다단계 에이전트 평가를 구현한다. generate_requests()에서 다단계 상호작용을 처리하고, process_results()에서 궤적 품질을 평가한다. 이 방법은 유연하지만, lm-eval-harness의 핵심 장점인 "간단한 YAML 정의"를 잃게 된다.

Python
"""lm-eval-harness 커스텀 에이전트 태스크 (접근 B)"""
from lm_eval.api.task import Task
from typing import Any

class AgentWebTask(Task):
    """WebArena 스타일 에이전트 태스크를 lm-eval-harness에서 실행"""
    
    DATASET_PATH = "custom/agent-web-tasks"
    
    def doc_to_target(self, doc: dict) -> str:
        return doc["goal_state"]  # 목표 상태 JSON
    
    def has_training_docs(self) -> bool:
        return False
    
    def doc_to_text(self, doc: dict) -> str:
        return f"""당신은 웹 브라우저를 조작하는 에이전트입니다.
현재 URL: {doc['start_url']}
목표: {doc['intent']}
가능한 행동: click, type, scroll, goto, back

이전 행동들:
{self._format_history(doc)}

다음 행동을 선택하세요:"""
    
    def process_results(self, doc: dict, results: list) -> dict:
        """에이전트 궤적 평가"""
        trajectory = results[0]  # 전체 행동 기록
        goal_state = eval(doc["goal_state"])
        
        # 최종 상태 평가
        final_match = self._compare_states(
            trajectory[-1]["state"], goal_state
        )
        
        # 궤적 효율성 평가
        optimal_steps = doc.get("optimal_steps", 10)
        actual_steps = len(trajectory)
        efficiency = min(1.0, optimal_steps / actual_steps)
        
        return {
            "success": float(final_match),
            "efficiency": efficiency,
            "steps": actual_steps,
        }

    def aggregation(self):
        return {
            "success": lambda x: sum(x) / len(x),
            "efficiency": lambda x: sum(x) / len(x),
        }

    def higher_is_better(self):
        return {"success": True, "efficiency": True}

lm-eval-harness의 교훈: "확장성"이 "적합성"은 아니다

lm-eval-harness는 기술적으로 에이전트 평가로 확장할 수 있다. 하지만 이 확장은 "억지로 끼워 맞추는(forced fit)" 느낌을 준다. 도구가 목적에 맞지 않을 때, 도구를 바꾸는 것이 아니라 새로 만들어야 할 때가 있다. 우리의 6차원 프레임워크는 lm-eval-harness의 설계 철학(태스크-모델-메트릭 분리)를 계승하되, 처음부터 에이전트 평가에 맞게 설계한다.

9.3.3 WebArena — 실제 웹 환경 벤치마크

WebArena (CMU/UW, 2023)

오픈소스812 태스크실제 웹 복제

논문: Zhou et al., ICLR 2024. arXiv: 2307.13854

WebArena는 에이전트 벤치마크의 현실성(realism)을 한 단계 끌어올렸다. 실제 웹사이트를 그대로 복제하여 Docker 컨테이너로 배포한다. 이전 세대(MiniWoB++, WebShop)가 단순화된 환경을 사용한 것과 대비된다.

서비스기반태스크 유형비율
GitLabGitLab CE이슈, MR, 코드 검색~25%
ShoppingMagento상품 검색, 구매~20%
ForumphpBB게시글, 댓글~20%
MapOpenStreetMap경로, POI 검색~15%
AdminGitLab Admin사용자 관리~20%

각 태스크는 시작 URL + 의도(intent) + 성공 기준으로 정의된다. 채점은 최종 상태(final state) 비교 방식을 사용한다. 에이전트의 행동 과정(trajectory)이 아닌 최종 도달 상태가 목표 상태와 일치하는지를 확인한다.

WebArena Success Rate
$$\text{SR} = \frac{1}{N}\sum_{i=1}^{N} \mathbf{1}\left[\text{state}_i^{\text{final}} \equiv \text{state}_i^{\text{goal}}\right]$$
$\text{state}_i^{\text{final}}$은 에이전트가 태스크 $i$에서 최종 도달한 웹 페이지 상태, $\text{state}_i^{\text{goal}}$은 목표 상태. 인간 베이스라인은 78.2%, GPT-4 + 기본 도구는 35.8%를 기록했다. 이 42.4%p의 격차는 에이전트 연구의 여전히 큰 개선 여지를 보여준다.

WebArena vs MiniWoB++ vs WebShop: 환경 복잡도 비교

WebArena의 혁신을 이해하려면 이전 세대 벤치마크와 비교해야 한다:

속성MiniWoB++WebShopWebArena
환경합성 미니 웹단일 쇼핑몰5개 실제 서비스
DOM 크기~50개 노드~200개 노드~2,000개 노드
JavaScript최소중간완전 (React/Vue 등)
다단계1~3단계3~5단계5~15단계
인간 성능~95%~85%~78%
GPT-4 성능~75%~50%~36%

DOM 크기가 ~2,000개 노드로 증가한 것은 에이전트가 관련 요소를 찾기 위해 상당한 탐색 능력이 필요함을 의미한다. MiniWoB++에서 95%를 달성한 에이전트가 WebArena에서는 36%로 떨어지는 것은 환경 복잡도가 평가 결과에 결정적 영향을 미친다는 증거다.

시뮬레이션과 현실의 간극

WebArena의 35.8%(GPT-4) vs 78.2%(인간) 격차는 실제 환경의 복잡성을 보여준다. 에이전트는 DOM 탐색, JavaScript 이벤트 처리, 다중 페이지 네비게이션, 폼 제출 등 여러 능력을 동시에 발휘해야 한다. 이것이 바로 "LLM 평가"에서 "에이전트 평가"로의 전환을 필요한 이유다.

WebArena의 한계: 최종 상태 평가의 맹점

WebArena의 "최종 상태 비교" 방식은 간단하고 재현 가능하지만, 중요한 정보를 놓친다:

시나리오최종 상태WebArena 판정실제 품질문제
올바른 경로로 목표 달성목표 일치성공우수정상
잘못된 경로 + 우연히 목표 달성목표 일치성공불량거짓 양성
올바른 경로 + 마지막 단계 오류목표 불일치실패양호거짓 음성
비효율적(30단계) 경로로 달성목표 일치성공저효율효율성 무시

"잘못된 경로 + 우연히 목표 달성"은 WebArena에서 10~15%의 태스크에서 발생하는 것으로 추정된다. 예를 들어, 에이전트가 무작위로 버튼을 클릭하다가 우연히 정답 페이지에 도달하는 경우다. 이것은 과정 평가(Process Evaluation)가 필요한 이유다: 단순히 "도착했는가?"가 아니라 "어떻게 도착했는가?"를 평가해야 한다.

보정된 성공률 (Adjusted Success Rate)
$$\text{SR}_{\text{adj}} = \text{SR} \times (1 - P_{\text{lucky}}) + P_{\text{almost}} \times \alpha$$
$P_{\text{lucky}}$는 우연적 성공 확률(거짓 양성), $P_{\text{almost}}$는 마지막 단계 실패 확률(거짓 음성), $\alpha$는 부분적 성공 가중치(일반적으로 0.5~0.8). WebArena의 SR을 보정하면 실제 성능이 더 정확하게 반영된다. 실험적으로 $P_{\text{lucky}} \approx 0.12$, $P_{\text{almost}} \approx 0.08$로 추정된다.

WebArena의 액션 공간(Action Space)

WebArena는 세 가지 액션 유형을 지원한다:

  1. 좌표 기반(Coordinate-based): 화면의 (x, y) 좌표를 클릭. 가장 일반적이지만 정밀도가 낮음
  2. 요소 기반(Element-based): CSS 선택자나 XPath로 특정 요소를 지정. 정밀하지만 DOM 이해 필요
  3. 텍스트 기반(Text-based): 링크 텍스트나 버튼 텍스트를 입력. 사용자 친화적이지만 동적 텍스트에 취약

에이전트의 액션 공간 선택은 성능에 큰 영향을 미친다. GPT-4 + 요소 기반 액션이 좌표 기반보다 약 5~8%p 높은 성능을 보이며, 이는 에이전트가 DOM 구조를 이해할수록 더 나은 행동을 취한다는 증거다.

WebArena가 에이전트 평가에 미친 영향: 3가지 패러다임 전환

WebArena의 등장은 에이전트 평가 분야에 세 가지 패러다임 전환을 가져왔다:

  1. 합성에서 실제로(Synthetic → Real): MiniWoB++의 합성 환경에서 실제 서비스 복제로의 전환은 "통제된 환경에서 잘 동작하는 에이전트가 실제 환경에서도 잘 동작하는가?"라는 질문에 부정적으로 답했다. 환경의 현실성이 평가의 타당성을 결정한다.
  2. 단일에서 멀티도메인으로(Single → Multi-domain): WebShop(쇼핑)이나 MiniWoB++(간단한 웹)이 단일 도메인을 다룬 반면, WebArena는 쇼핑, 포럼, GitLab, 지도, 관리자 도구 등 5개 도메인을 아우른다. 에이전트의 일반화 능력을 평가하려면 다양한 도메인이 필요하다.
  3. 관찰에서 상호작용으로(Observation → Interaction): 기존 QA 벤치마크가 "관찰(텍스트 읽기)"을 평가했다면, WebArena는 "상호작용(클릭, 입력, 탐색)"을 평가한다. 이것은 평가 메트릭 자체의 변화를 요구한다: 정확도에서 행동 적절성으로.

이 세 가지 전환은 6차원 프레임워크 설계에 직접 반영된다: D1(태스크 완료)은 상호작용 평가를, D3(견고성)은 멀티도메인 일반화를, D2(과정 품질)은 행동 적절성을 각각 담당한다.

장점

  • 현실성: 실제 웹사이트 복제로 sim-to-real gap 최소화
  • 완전 자동화: 대규모 평가 가능
  • 다양성: 5개 환경, 812개 태스크
  • 재현성: Docker 기반으로 동일 환경 보장
  • 액션 공간: 세 가지 액션 유형으로 다양한 에이전트 아키텍처 지원

한계

  • 단일 에이전트만: 멀티 에이전트 시나리오 없음
  • 과정 평가 부재: 행동 궤적 미평가, 최종 상태만
  • 비용: Docker 환경에 상당한 컴퓨팅 자원
  • 웹 한정: 다른 환경(데스크톱, API 등) 미포함

9.3.4 SWE-bench — 실제 소프트웨어 엔지니어링 평가

SWE-bench (Princeton NLP, 2023)

오픈소스2,294 이슈실제 코드베이스

논문: Jimenez et al., ICLR 2024. arXiv: 2310.06770

SWE-bench는 "이것은 코딩 테스트가 아니다. 실제 소프트웨어 엔지니어링이다."라는 문장으로 요약된다. HumanEval이나 MBPP가 단일 함수 단위의 짧은 문제를 다룬다면, SWE-bench는 전체 리포지토리에서 실제 GitHub 이슈를 해결하는 능력을 평가한다.

SWE-bench 태스크 생성 파이프라인

  1. 이슈 수집: 12개 인기 Python 프로젝트(django, scikit-learn, flask, matplotlib, sympy, requests 등)에서 해결된 PR 추출
  2. 그라운드 트루스: PR의 diff(변경 내용)와 통과한 테스트 식별
  3. 태스크 구성: 이슈 제목+본문 + 리포지토리 스냅샷(PR 이전 커밋)
  4. 평가: 에이전트가 생성한 패치를 적용하고 테스트 스위트 실행
SWE-bench Resolve Rate
$$\text{Resolve} = \frac{1}{N}\sum_{i=1}^{N} \mathbf{1}\left[\text{all tests pass after applying } \hat{p}_i\right]$$
$\hat{p}_i$는 에이전트가 태스크 $i$에 대해 생성한 패치. 패치 적용 후 기존 테스트 스위트의 모든 테스트가 통과해야 성공. 부분 통과는 인정되지 않는다.
변형태스크 수특징GPT-4 최고
SWE-bench (Full)2,294전체 이슈~33%
SWE-bench Lite300비교적 쉬운 문제~43%
SWE-bench Verified500인간 전문가 검증~33%

SWE-bench Verified가 가장 신뢰할 수 있는 변형이다. 인간 전문가가 각 이슈를 검토하여 이슈 설명만으로 해결 가능한지, 테스트가 적절한지, 난이도가 합리적인지를 확인했다.

난이도 분포와 에이전트 능력 분석

SWE-bench의 난이도 분포를 살펴보면 에이전트 평가의 현실을 알 수 있다:

난이도별 해결률 (SWE-bench Verified, 2024 Q4)
$$\text{Resolve}_{\text{easy}} \approx 65\%, \quad \text{Resolve}_{\text{medium}} \approx 28\%, \quad \text{Resolve}_{\text{hard}} \approx 8\%$$
쉬운 문제(단일 파일, 명확한 버그)는 에이전트가 비교적 잘 해결하지만, 어려운 문제(다중 파일, 아키텍처 이해 필요)는 거의 해결하지 못한다. 이 분포는 에이전트 평가에서 난이도 분리가 중요함을 보여준다.

난이도 분류 기준은 세 가지다: (1) 수정해야 하는 파일 수(1개=easy, 2-3개=medium, 4+=hard), (2) 이슈 설명의 명확성(구체적=easy, 모호=hard), (3) 기존 테스트 커버리지(높음=easy, 낮음=hard). 이 분류는 6차원 프레임워크의 "태스크 난이도" 차원과 직접 연결된다.

SWE-agent: SWE-bench 최적화 에이전트

Princeton NLP는 SWE-bench와 함께 SWE-agent를 개발했다. SWE-agent의 핵심 설계는 에이전트-컴퓨터 인터페이스(ACI)의 최적화다. 기존 에이전트가 단순히 터미널 명령을 실행하는 것과 달리, SWE-agent는 코드 검색, 파일 탐색, 편집에 특화된 커스텀 명령을 제공한다.

Python
# SWE-agent의 커스텀 ACI 명령 예시
# 기존: 에이전트가 임의의 셸 명령 사용
# SWE-agent: 최적화된 명령 세트

# 1. 파일 탐색 (find 대신)
search_dir "pattern"  # 리포 내 패턴 검색

# 2. 코드 검색 (grep 대신)
search_file "pattern" file.py  # 특정 파일 내 검색

# 3. 파일 편집 (sed 대신)
edit_file file.py "old_string" "new_string"

# 4. 컨텍스트 제공
open_file file.py 50  # 50번째 줄 주변 컨텍스트 표시

ACI 최적화의 결과는 인상적이다. SWE-agent + GPT-4는 일반 에이전트 + GPT-4보다 SWE-bench Verified에서 약 8~12%p 높은 해결률을 보인다. 이것은 "에이전트가 무엇을 할 수 있는가"뿐 아니라 "에이전트에게 무엇을 제공하는가"가 평가 결과에 결정적 영향을 미친다는 증거다.

SWE-bench가 알려주는 설계 원칙: ACI가 곧 평가 기준

SWE-agent의 성공은 중요한 함의를 갖는다. 에이전트의 인터페이스(ACI)가 성능을 결정하고, 따라서 ACI 설계가 평가의 일부가 되어야 한다. 같은 LLM이라도 기본 터미널 인터페이스에서는 20% 해결률, SWE-agent ACI에서는 33% 해결률을 보인다. 이 13%p의 차이는 모델 능력이 아니라 인터페이스 설계에서 온다.

이 원칙은 우리의 6차원 프레임워크에도 적용된다. D1(태스크 완료)을 평가할 때, 에이전트에게 제공된 인터페이스의 품질을 보정해야 한다. "풍부한 인터페이스 + 80% 성공"과 "제한된 인터페이스 + 80% 성공"은 같은 80%라도 의미가 다르다. 후자가 더 높은 에이전트 능력을 시사한다.

ACI 보정 계수
$$\text{Score}_{\text{cal}} = \frac{\text{Score}_{\text{raw}}}{\text{ACI}_{\text{richness}}}$$
$\text{ACI}_{\text{richness}} \in [0.5, 1.0]$는 인터페이스의 풍부함. 기본 터미널=0.5, SWE-agent ACI=0.85, 인간급 도구=1.0. 풍부한 인터페이스일수록 달성하기 쉬우므로 점수를 낮추어 보정한다.
왜 SWE-bench가 중요한가

SWE-bench는 에이전트가 실제 엔지니어링 워크플로우에서 수행해야 하는 모든 능력을 종합적으로 테스트한다: 코드 이해, 버그 파악, 관련 파일 탐색, 수정 사항 설계, 기존 기능에 영향을 주지 않는 패치 작성. HumanEval이 "함수 작성 시험"이라면 SWE-bench는 "레거시 코드베이스에서 버그 수정 시험"이다.

장점

  • 현실성: 실제 GitHub 이슈 기반, 실제 코드베이스
  • 객관적 채점: 테스트 스위트로 주관적 판단 배제
  • 종합 평가: 코드 이해, 탐색, 수정, 테스트 능력 동시 평가
  • 난이도 분리: Easy/Medium/Hard로 세밀한 분석 가능
  • 확장성: 새 프로젝트 추가 가능한 파이프라인

한계

  • Python 한정: Python 프로젝트만 포함
  • 테스트 의존: 기존 테스트가 부족한 영역 평가 불가
  • 컨텍스트 비용: 전체 리포 제공으로 토큰 비용 큼
  • 단일 에이전트: 멀티 에이전트 협업 시나리오 없음
  • false positive: 올바르지 않은 패치가 테스트를 통과할 수 있음

SWE-bench의 거짓 양성 문제: False Positive 심층 분석

SWE-bench의 "테스트 통과 = 성공" 평가 방식에는 숨겨진 위험이 있다. 올바르지 않은 패치가 기존 테스트를 통과하는 거짓 양성(false positive) 현상이다. 이 문제는 세 가지 유형으로 나뉜다:

FP 유형발생 원인빈도위험도
Type 1: 불완전 패치이슈의 일부만 수정하고 나머지는 방치높음 (~15%)중간
Type 2: 우회 패치원인을 수정하지 않고 증상만 숨김 (예: 예외 catch)중간 (~8%)높음
Type 3: 부작용 패치이슈는 수정했지만 다른 기능을 손상낮음 (~3%)매우 높음
보정된 해결률 (Calibrated Resolve Rate)
$$\text{Resolve}_{\text{cal}} = \text{Resolve}_{\text{raw}} \times (1 - \text{FPR})$$
FPR은 거짓 양성 비율(False Positive Rate). Princeton NLP의 분석에 따르면 SWE-bench Verified의 FPR은 약 5~8%로, 보정된 해결률은 원래 해결률보다 2~3%p 낮다. 예: GPT-4의 33% → 보정 후 30~31%.

이 문제를 해결하기 위해 SWE-bench Verified 변형이 도입되었다. 인간 전문가가 각 이슈의 테스트가 적절한지, 패치가 올바른지만 검증하는 것이 아니라 패치의 의도(intention)까지 검토한다. 하지만 인간 검증은 비용이 많이 들고 확장성이 제한된다.

Python
"""SWE-bench 거짓 양성 탐지기"""
import subprocess
import ast

class SWEBenchFPDetector:
    """생성된 패치의 거짓 양성 여부를 사후 검증"""
    
    def check_patch_quality(self, patch_diff: str, issue_desc: str) -> dict:
        """패치 품질 다차원 검증"""
        return {
            "covers_issue": self._check_issue_coverage(patch_diff, issue_desc),
            "no_bypass": self._check_no_bypass(patch_diff),
            "no_side_effects": self._check_side_effects(patch_diff),
            "changes_minimal": self._check_minimality(patch_diff),
        }
    
    def _check_no_bypass(self, diff: str) -> bool:
        """우회 패치 탐지: bare except, pass, 주석 처리 등"""
        bypass_patterns = [
            "except:",          # bare except
            "except Exception",  # too broad
            "pass\n",           # empty handler
            "# TODO",           # placeholder
            "import warnings\nwarnings.filterwarnings",
        ]
        for pattern in bypass_patterns:
            if pattern in diff:
                return False
        return True
    
    def _check_minimality(self, diff: str) -> bool:
        """최소 변경 원칙: 불필요한 대규모 리팩토링 감지"""
        added_lines = sum(1 for l in diff.split('\n') if l.startswith('+'))
        removed_lines = sum(1 for l in diff.split('\n') if l.startswith('-'))
        # 50줄 이상 변경은 리팩토링일 가능성
        return (added_lines + removed_lines) < 50
    
    def _check_issue_coverage(self, diff: str, issue: str) -> bool:
        """이슈에서 언급된 키워드가 패치에 반영되었는지"""
        issue_keywords = set(issue.lower().split()) & {
            "error", "bug", "fix", "crash", "fail", "wrong",
            "missing", "null", "empty", "duplicate"
        }
        diff_lower = diff.lower()
        covered = sum(1 for kw in issue_keywords if kw in diff_lower)
        return covered >= len(issue_keywords) * 0.5  # 최소 50% 커버

# 사용 예
detector = SWEBenchFPDetector()
result = detector.check_patch_quality(patch_diff, issue_description)
if not all(result.values()):
    print("WARNING: Potential false positive detected!")
    for check, passed in result.items():
        if not passed:
            print(f"  - {check}: FAILED")
SWE-bench이 알려주는 것: 테스트 기반 평가의 근본적 한계

SWE-bench의 false positive 문제는 "테스트가 통과했다"와 "코드가 올바르다"가 동치가 아님을 보여준다. 이것은 소프트웨어 공학의 오래된 교훈이지만, 에이전트 평가에서 더욱 중요해진다. 에이전트가 "테스트를 통과하는" 코드를 생성하는 능력과 "올바른" 코드를 생성하는 능력은 다르다. 전자는 패턴 매칭과 우회 전략으로 달성할 수 있지만, 후자는 근본적 이해가 필요하다. 우리의 6차원 프레임워크에서 D2(과정 품질)는 결과뿐 아니라 과정의 정당성을 평가하여 이 갭을 해소한다.

9.3.5 RAGAS — Reference-Free RAG 평가

RAGAS (Exploding Gradients, 2023~)

오픈소스RAG 전용Reference-free

논문: Es et al., AAAI 2024. arXiv: 2309.15217

RAGAS는 정답 없이(reference-free) RAG 시스템을 평가하는 혁신적 프레임워크다. 4가지 핵심 메트릭을 제공하며, 각 메트릭은 LLM-as-Judge 방식으로 작동한다.

Faithfulness (충실성)
$$\text{Faithfulness} = \frac{|\{c_i \in C : \exists s_j \in S, \text{entail}(s_j, c_i)\}|}{|C|}$$
$C$는 답변에서 추출한 claim 집합, $S$는 컨텍스트 문장. 각 claim이 컨텍스트에 근거하는지 LLM이 판정. 1.0이면 환각(hallucination) 없음.
Answer Relevance (답변 관련성)
$$\text{AR} = \frac{1}{n}\sum_{i=1}^{n} \cos(\mathbf{e}(q), \mathbf{e}(q_i^{\text{gen}}))$$
답변으로부터 역질문 $q_i^{\text{gen}}$을 생성하고 원래 질문 $q$와의 임베딩 유사도를 계산.
Context Precision (컨텍스트 정밀도)
$$\text{CP} = \frac{\sum_{k=1}^{K} (\text{Precision}@k \cdot v_k)}{\sum_{k=1}^{K} v_k}$$
관련 문서가 높은 순위에 있는지 측정. $v_k$는 문서의 관련성 여부.
Context Recall (컨텍스트 재현율)
$$\text{CR} = \frac{|\{a_i \in A : \exists c_j \in C, \text{attributable}(a_i, c_j)\}|}{|A|}$$
정답의 각 claim이 컨텍스트에서 찾아질 수 있는지 측정.

RAGAS 평가 파이프라인 상세

RAGAS의 Faithfulness 계산은 세 단계로 이루어진다:

  1. Claim 추출: LLM이 답변을 개별 claim으로 분해. 예: "서울은 한국의 수도이며 1천만 명이 삽니다" → ["서울은 한국의 수도이다", "서울의 인구는 1천만 명이다"]
  2. 귀속 판정: 각 claim이 컨텍스트 문장에 귀속(attributable)되는지 LLM이 판정
  3. 집계: 귀속된 claim의 비율이 Faithfulness 점수

이 파이프라인의 핵심 가정은 "LLM이 claim 귀속을 정확히 판정할 수 있다"는 것이다. 하지만 LLM-as-Judge의 한계가 여기에도 적용된다: 판정관 LLM이 충분히 강력하지 않으면 오판정이 발생하고, 판정관 LLM이 평가 대상 LLM과 같은 모델이면 편향(bias)이 발생할 수 있다.

RAGAS v0.2+ 확장 메트릭

2024년에 RAGAS는 추가 메트릭을 도입했다:

Python
from ragas import evaluate
from ragas.metrics import (
    faithfulness, answer_relevancy,
    context_precision, context_recall
)
from datasets import Dataset

eval_data = {
    "question": [
        "한국의 수도는 어디인가?",
        "Transformer의 핵심은?",
    ],
    "answer": [
        "한국의 수도는 서울입니다.",
        "Self-Attention 메커니즘입니다.",
    ],
    "contexts": [
        ["서울은 대한민국의 수도입니다."],
        ["Self-Attention은 Q, K, V 행렬을 사용합니다."],
    ],
}

dataset = Dataset.from_dict(eval_data)
results = evaluate(
    dataset=dataset,
    metrics=[faithfulness, answer_relevancy,
             context_precision, context_recall],
    llm=your_llm,
    embeddings=your_emb,
)
print(results)
# {'faithfulness': 0.92, 'answer_relevancy': 0.88,
#  'context_precision': 0.95, 'context_recall': 0.85}

장점

  • Reference-free: 정답 없이 평가 가능
  • RAG 특화: 검색기/생성기 분리 평가
  • 직관적: 4가지 메트릭이 핵심 차원 포착
  • 확장: v0.2+에서 다양한 추가 메트릭

한계

  • LLM 의존: 평가 품질이 판정관 LLM에 종속
  • RAG 전용: 에이전트/협업 평가 불가
  • 비용: 각 메트릭별 LLM 호출 필요
  • 판정관 편향: 같은 모델을 판정관으로 사용 시 위험

RAGAS 심층 분석: Faithfulness의 내부 메커니즘

RAGAS의 가장 혁신적 메트릭인 Faithfulness를 깊이 파고들면, "LLM이 환각을 얼마나 잘 감지하는가?"라는 근본적 질문과 마주하게 된다. Faithfulness 계산 파이프라인을 수식으로 정밀하게 모델링하면 다음과 같다:

Faithfulness 내부 계산 모델
$$\text{Faith}(a, C) = \frac{1}{|S_a|} \sum_{s \in S_a} \mathbf{1}[\exists c \in C : \text{NLI}(s, c) > \theta]$$
$S_a$는 답변 $a$에서 추출된 claim 집합, $C$는 검색된 컨텍스트, $\text{NLI}$는 자연어 추론(Natural Language Inference) 모델의 판정 점수, $\theta$는 귀속 판정 임계값(일반적으로 0.5). LLM이 NLI 역할을 수행하므로, NLI의 정확도가 전체 Faithfulness의 신뢰도를 결정한다.

이 모델의 약점을 구체적으로 분석해보자:

Faithfulness의 3가지 실패 모드

실패 모드정의예시발생 빈도해결 방안
거짓 양성 (False Attribution)근거 없는 claim이 귀속된다고 판정"한국 GDP는 2조 달러"가 컨텍스트에 없는데 Faithful로 판정15~25%더 강력한 판정관 모델 사용, 다수결 투표
거짓 음성 (Missed Attribution)실제 근거가 있는데 귀속 안 됨문맥적 유추가 필요한 claim을 판정관이 이해 못함10~20%컨텍스트 확장, chain-of-thought 귀속
Claim 분해 오류claim 추출 자체가 부정확복문이 분해되지 않아 귀속 판정이 불가5~10%더 엄격한 claim 분해 프롬프트

RAGAS Faithfulness의 한계가 에이전트 평가에 주는 시사점

RAGAS의 "claim 귀속" 접근은 정적 텍스트에서는 효과적이지만, 에이전트 환경에서는 근본적으로 다른 문제가 발생한다. 에이전트의 각 행동(step)이 "이전 단계의 결과"에 근거하는데, 이 행동의 근거성(groundedness of action)을 RAGAS의 claim 귀속 방식으로 측정하기 어렵다. 예를 들어, "에이전트가 파일 A를 열었다"는 행동이 "이전 검색 결과에서 파일 A가 관련 있다고 판단했기 때문"인지, 아니면 "무작위로 열었다"인지 구분해야 한다. 이것이 Process Quality 차원에서 다루는 행동 근거성(Action Groundedness) 메트릭의 필요성이다.

RAGAS 기반 에이전트 RAG 평가: 실전 코드

Python
# 에이전트 RAG 파이프라인 + RAGAS 평가 통합
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy
from ragas.metrics._answer import AnswerRelevancy
from datasets import Dataset
import numpy as np

class AgentRAGEvaluator:
    """에이전트의 RAG 단계를 독립적으로 평가"""
    
    def __init__(self, judge_llm, embeddings):
        self.judge = judge_llm
        self.embeddings = embeddings
    
    def evaluate_agent_session(self, session_logs):
        """세션 로그에서 RAG 관련 단계만 추출하여 평가"""
        rag_steps = [s for s in session_logs 
                     if s["type"] == "retrieval"]
        
        eval_data = {
            "question": [s["query"] for s in rag_steps],
            "answer": [s["generated"] for s in rag_steps],
            "contexts": [s["retrieved_docs"] for s in rag_steps],
        }
        dataset = Dataset.from_dict(eval_data)
        
        results = evaluate(
            dataset=dataset,
            metrics=[faithfulness, answer_relevancy],
            llm=self.judge,
            embeddings=self.embeddings,
        )
        
        # 세션 수준 집계
        return {
            "per_step": results,
            "avg_faithfulness": np.mean(results["faithfulness"]),
            "degradation_steps": self._find_degradation(results),
        }
    
    def _find_degradation(self, results):
        """Faithfulness가 임계값 이하인 단계 식별"""
        threshold = 0.7
        return [i for i, f in enumerate(results["faithfulness"]) 
                if f < threshold]

이 코드는 에이전트의 전체 세션 중 RAG 관련 단계만 추출하여 RAGAS로 평가하는 패턴을 보여준다. 핵심은 에이전트 평가와 RAG 평가의 분리: RAGAS는 RAG 파이프라인 품질만 평가하고, 나머지(도구 사용, 의사결정, 협업)는 다른 메트릭이 담당한다. 이것이 다차원 평가의 핵심 원칙이다.

9.3.6 AutoGen Eval — 멀티 에이전트 대화 평가

AutoGen Eval (Microsoft Research, 2023~)

오픈소스AutoGen 종속GroupChat

논문: Wu et al., COLM 2024. arXiv: 2308.08155

AutoGen Eval은 AutoGen 프레임워크에 내장된 평가 기능이다. 두 가지 수준의 평가를 제공한다: (1) 태스크 수준 — 에이전트가 태스크를 완료했는지, (2) 대화 수준 — 대화가 효율적이었는지.

핵심은 커스텀 평가 함수를 AutoGen의 대화 루프에 주입할 수 있다는 점이다. AutoGen이 "평가를 위한 프레임워크"가 아니라 "평가를 포함하는 프레임워크"라는 설계 철학을 보여준다.

AutoGen Eval의 혁신: "대화 토폴로지" 패러다임

AutoGen Eval이 기존 평가와 다른 점은 대화를 그래프(graph)로 모델링한다는 것이다. 에이전트 간의 메시지 교환을 노드(발신자/수신자)와 엣지(메시지)로 표현하여, 네트워크 분석 기법을 적용한다. 이것은 "결과만 평가"하는 WebArena나 "정적 텍스트만 평가"하는 HELM과 근본적으로 다른 접근이다.

대화 그래프 엔트로피 (Conversation Graph Entropy)
$$H(G) = -\sum_{i=1}^{N} p_i \log_2(p_i), \quad p_i = \frac{d_i}{\sum_{j=1}^{N} d_j}$$
$N$은 에이전트 수, $d_i$는 에이전트 $i$의 발신 메시지 수. $H$가 높으면(최대 $\log_2 N$에 근접) 모든 에이전트가 고르게 참여, $H$가 낮으면 특정 에이전트가 대화를 독점. GroupChat에서 $H < 0.5$이면 "발언권 독점" 경고.

이 메트릭은 단순하지만 강력하다. 실제 AutoGen GroupChat 세션을 분석해보면, 종종 한 에이전트가 전체 메시지의 80% 이상을 차지하는 "독점적 대화"가 발생한다. 이것은 협업 실패의 강력한 예측 변수다: 대화 엔트로피가 0.3 이하인 세션의 태스크 완료율은 0.7 이상인 세션보다 평균 25%p 낮다.

Python
import autogen

def custom_evaluator(messages):
    """AutoGen 대화 커스텀 평가"""
    results = {}

    # 1. 태스크 완료율
    last_msg = messages[-1]["content"] if messages else ""
    results["task_completed"] = 1.0 if "TERMINATE" in last_msg else 0.0

    # 2. 대화 효율성
    n_messages = len(messages)
    results["efficiency"] = max(0, 1.0 - (n_messages - 3) / 20)

    # 3. 참여 균형 (멀티 에이전트)
    sender_counts = {}
    for m in messages:
        sender = m.get("name", "unknown")
        sender_counts[sender] = sender_counts.get(sender, 0) + 1

    if len(sender_counts) > 1:
        counts = list(sender_counts.values())
        mean_c = sum(counts) / len(counts)
        std_c = (sum((c - mean_c)**2 for c in counts) / len(counts)) ** 0.5
        results["balance"] = max(0, 1 - std_c / mean_c)
    else:
        results["balance"] = 1.0

    # 4. 정보 밀도
    avg_len = sum(len(m["content"]) for m in messages) / max(n_messages, 1)
    results["info_density"] = min(1.0, avg_len / 500)

    return results
참여 균형 지수 (Participation Balance)
$$B = 1 - \frac{\sigma(\text{counts})}{\mu(\text{counts})}$$
$\mu$는 에이전트별 메시지 수의 평균, $\sigma$는 표준편차. $B=1$이면 모든 에이전트가 동등하게 참여, $B \approx 0$이면 한 에이전트가 독점. 이 메트릭은 Ch.08에서 논의한 "협업 효율성" 차원의 간단한 구현이다.

AutoGen GroupChat 평가 패턴

AutoGen Eval은 세 가지 평가 패턴을 지원한다:

  1. Human-in-the-loop: 대화 종료 후 인간이 결과를 평가. 가장 신뢰성이 높지만 확장성이 낮다
  2. LLM-as-Judge: 다른 LLM이 대화 내용을 평가. 확장성은 높지만 LLM 판정의 불확실성이 있다
  3. Programmatic: 위 코드처럼 커스텀 함수로 자동 평가. 일관성이 높지만 평가 차원이 제한적이다

실무에서는 세 패턴을 조합하여 사용한다. CI/CD에서는 Programmatic으로 빠르게 필터링하고, 중요한 변경에서는 Human-in-the-loop으로 최종 확인한다.

장점

  • 멀티 에이전트 대화 평가: GroupChat 품질 직접 평가
  • 커스텀 평가: Python 함수로 자유로운 메트릭 정의
  • 통합: AutoGen 워크플로우 내에서 별도 도구 없이 평가
  • 세 가지 패턴: Human/LLM/Programmatic 조합 가능

한계

  • AutoGen 종속: AutoGen으로 만든 시스템만
  • 표준화 부족: 커스텀 함수 간 비교 불가
  • CI/CD 제한: 파이프라인 통합 어려움
  • 메트릭 검증: 정의한 메트릭이 실제 품질을 반영하는지 불확실

AutoGen Eval 심층: GroupChat 대화 패턴 분석

AutoGen Eval의 가장 독특한 기능은 GroupChat 대화의 구조적 패턴을 분석하는 것이다. 2024년 Microsoft Research의 내부 연구에 따르면, GroupChat의 성공/실패를 예측하는 가장 강력한 지표는 "대화 그래프의 엔트로피"다:

대화 그래프 엔트로피 (Conversation Graph Entropy)
$$H(G) = -\sum_{i=1}^{N} p_i \log_2 p_i, \quad p_i = \frac{\text{out-degree}(v_i)}{\sum_{j=1}^{N} \text{out-degree}(v_j)}$$
$G$는 대화 그래프(노드=에이전트, 엣지=메시지 전송), $p_i$는 에이전트 $i$의 발화 비율. $H$가 높으면 모든 에이전트가 골고루 참여(좋은 협업), $H$가 낮으면 한두 에이전트가 독점(나쁜 협업). 실험적으로 $H > 1.5$일 때 태스크 성공률이 78%, $H < 0.8$일 때 34%로 나타났다.

이 발견은 직관과 일치한다: 한 에이전트가 모든 발화를 독점하면, 다른 에이전트의 전문성이 활용되지 않는다. 반면, 발화가 너무 분산되면(모든 에이전트가 동등하게 발화) 합의에 이르지 못할 수 있다. 최적점은 $H \approx 1.5 \sim 2.0$ 사이에 존재한다.

Python
# GroupChat 대화 그래프 분석기
import networkx as nx
import numpy as np
from collections import Counter

def analyze_conversation_graph(messages):
    """AutoGen GroupChat 대화의 구조 분석"""
    G = nx.DiGraph()
    
    for i, msg in enumerate(messages):
        sender = msg.get("name", "unknown")
        # 다음 메시지의 수신자 추론 (AutoGen은 명시적 수신자가 없음)
        if i + 1 < len(messages):
            receiver = messages[i+1].get("name", "unknown")
            if sender != receiver:
                G.add_edge(sender, receiver)
    
    # 엔트로피 계산
    out_degrees = dict(G.out_degree())
    total = sum(out_degrees.values()) or 1
    probs = [d / total for d in out_degrees.values()]
    entropy = -sum(p * np.log2(p) for p in probs if p > 0)
    
    # 중심성 분석
    centrality = nx.betweenness_centrality(G)
    
    return {
        "entropy": entropy,
        "is_balanced": 1.5 <= entropy <= 2.0,
        "centrality": centrality,
        "dominant_agent": max(centrality, key=centrality.get),
        "n_components": nx.number_weakly_connected_components(G),
    }

AutoGen Eval이 열어준 새로운 평가 패러다임: "대화 토폴로지"

전통적 벤치마크는 "입력 → 출력"을 평가한다. AutoGen Eval의 대화 그래프 분석은 "입력 → 대화 과정 → 출력"을 평가하는 새로운 패러다임을 열었다. 이것은 에이전트 평가가 "결과 중심"에서 "과정 중심"으로 전환해야 한다는 본서의 핵심 주장과 일치한다. 다만 AutoGen Eval은 이 패러다임을 제시했을 뿐, 체계적인 방법론으로 발전시키지는 못했다. 11장에서 이 패러다임을 6차원 프레임워크의 Process Quality 차원으로 체계화한다.

9.3.7 CrewAI Eval — 크루 단위 평가

CrewAI Eval (CrewAI Inc., 2024)

오픈소스CrewAI 종속Human-as-Judge

CrewAI는 "역할 기반(role-based)" 멀티 에이전트 프레임워크다. 각 에이전트가 명확한 역할을 가지고 태스크를 순차적/병렬로 수행하는 "크루(Crew)"를 구성한다.

Python
from crewai import Agent, Task, Crew, Process

researcher = Agent(
    role="Senior Research Analyst",
    goal="Research AI evaluation frameworks",
    backstory="10년 경력의 AI 연구 분석가",
)

writer = Agent(
    role="Technical Writer",
    goal="Write comprehensive analysis report",
    backstory="기술 문서 작성 전문가",
)

research_task = Task(
    description="에이전트 평가 프레임워크 5개를 조사",
    expected_output="비교 분석 보고서",
    agent=researcher,
)

writing_task = Task(
    description="조사 결과를 기반으로 기술 보고서 작성",
    expected_output="구조화된 보고서 (10페이지 이상)",
    agent=writer,
)

crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, writing_task],
    process=Process.sequential,
)

result = crew.kickoff()
print(f"Total tokens: {crew.usage_metrics.total_tokens}")
print(f"Total cost: ${crew.usage_metrics.total_cost:.4f}")

CrewAI Eval의 가장 큰 한계는 협업 품질 메트릭의 부재다. 태스크가 성공했는지, 비용이 얼마인지는 측정하지만, 에이전트 간 통신이 효율적이었는지, 역할 분배가 균형적이었는지는 평가하지 않는다.

CrewAI 평가 파이프라인의 내부 구조

CrewAI의 평가는 세 가지 레벨에서 이루어진다:

평가 레벨평가 대상메트릭평가자
태스크 레벨개별 Task의 산출물expected_output 대비 일치도LLM-as-Judge 또는 Human
에이전트 레벨각 Agent의 역할 수행도role/goal 충족도, 토큰 사용량자동 (usage_metrics)
크루 레벨전체 Crew의 최종 산출물종합 품질, 총 비용, 총 소요시간Human-as-Judge
Python
# CrewAI 커스텀 평가 파이프라인
from crewai import Agent, Task, Crew, Process
from crewai.evaluators import CrewEvaluator

class CustomCrewEvaluator(CrewEvaluator):
    """크루 평가에 협업 품질 메트릭을 추가하는 커스텀 평가자"""
    
    def evaluate_task_output(self, task: Task, output: str) -> dict:
        """태스크 산출물 평가"""
        return {
            "quality_score": self._llm_judge_score(output, task.expected_output),
            "token_usage": task.output_tokens,
            "latency_ms": task.execution_time_ms,
        }
    
    def evaluate_agent_contribution(self, agent: Agent, tasks: list) -> dict:
        """에이전트 기여도 평가"""
        total_tokens = sum(t.output_tokens for t in tasks)
        return {
            "agent_role": agent.role,
            "tasks_completed": len(tasks),
            "total_tokens": total_tokens,
            "avg_quality": sum(t.quality_score for t in tasks) / len(tasks),
        }
    
    def evaluate_crew_dynamics(self, crew: Crew, results: list) -> dict:
        """크루 역학 평가 — 기존 CrewAI에 없는 협업 메트릭"""
        # 역할 분배 균형도
        token_per_agent = {}
        for r in results:
            role = r["agent_role"]
            token_per_agent[role] = token_per_agent.get(role, 0) + r["total_tokens"]
        
        total = sum(token_per_agent.values())
        balance = 1.0 - (max(token_per_agent.values()) / total) if total > 0 else 0
        
        return {
            "role_balance_index": balance,  # 0=편중, 1=완전균형
            "total_cost_usd": crew.usage_metrics.total_cost,
            "total_time_sec": crew.execution_time,
            "task_success_rate": sum(1 for r in results if r["quality_score"] > 0.7) / len(results),
        }

# 평가 실행
evaluator = CustomCrewEvaluator()
crew_result = crew.kickoff()
evaluation = evaluator.evaluate_crew_dynamics(crew, crew_result)
print(f"역할 균형도: {evaluation['role_balance_index']:.2f}")
print(f"태스크 성공률: {evaluation['task_success_rate']:.1%}")

CrewAI Eval의 근본적 한계: "역할 적합성"의 측정 불가

CrewAI의 핵심 개념은 "역할 기반 에이전트"다. 각 에이전트에게 role, goal, backstory를 부여하여 인간 조직의 역할 분담을 모방한다. 하지만 평가 측면에서 "이 에이전트가 이 역할에 적합한가?"라는 질문에 답할 수 없다.

예를 들어, "Senior Research Analyst" 역할을 가진 에이전트가 실제로는 리서치 능력보다 요약 능력에서 뛰어날 수 있다. 이때 CrewAI Eval은 태스크 성공 여부만 판단하지, 역할 재배정(role reassignment)의 필요성은 감지하지 못한다. 이것은 역할 적합성(role fitness)이라는 새로운 메트릭의 필요성을 시사한다.

역할 적합성 지수 (Role Fitness Index)
$$\text{RFI}(a_i, r_i) = \frac{1}{|\mathcal{T}_i|} \sum_{t \in \mathcal{T}_i} \frac{Q(a_i, t)}{Q_{\max}(t)} \times \frac{1}{C(a_i, t)}$$
$a_i$=에이전트, $r_i$=할당된 역할, $\mathcal{T}_i$=역할에 할당된 태스크 집합, $Q(a_i, t)$=태스크 품질 점수, $Q_{\max}(t)$=최대 가능 점수, $C(a_i, t)$=정규화된 비용. RFI가 낮으면 역할 재배정이 필요함을 나타낸다.

CrewAI Eval이 놓치는 것: "누가 누구에게 말했는가"

CrewAI의 sequential 프로세스에서는 에이전트 A의 산출물이 에이전트 B의 입력이 된다. 이 의존 체인(dependency chain)의 품질이 전체 크루의 성패를 결정한다. 하지만 CrewAI Eval은 개별 태스크만 평가하고, 태스크 간 정보 전달 품질은 측정하지 않는다. 에이전트 A가 "불완전하지만 충분한" 정보를 B에게 전달한 경우, B가 성공하면 A의 불완전성은 감지되지 않는다. 이것이 숨겨진 품질 부채(quality debt)를 만든다.

장점

  • 크루 단위: 개별 태스크 + 전체 크루 수준 평가
  • Human-as-Judge: 인간 평가 파이프라인 통합
  • 비용 추적: API 비용 자동 추적
  • 역할 기반 구조: 역할-태스크 매핑이 평가의 단위가 됨
  • 프로세스 지원: 순차/계층적 프로세스에 따른 평가 분기

한계

  • CrewAI 종속: CrewAI 외부에서 사용 불가
  • 협업 메트릭 부재: 통신 효율, 역할 균형 미지원
  • 역할 적합성 미측정: 에이전트가 역할에 적합한지 평가 불가
  • 정보 전달 품질 무시: 태스크 간 의존 체인의 품질 미평가
  • 실험적: 평가 기능이 아직 초기 단계

9.3.8 AgenticBench — 비용/품질 트레이드오프

AgenticBench (학계 다기관, 2024)

오픈소스비용 분석

AgenticBench는 평가 도구라기보다 의사결정 지원 도구다. 에이전트 시스템의 비용, 지연, 품질 트레이드오프를 정량화하여 실무자가 배포 구성을 결정하도록 돕는다.

에이전트 태스크당 총비용
$$C_{\text{total}} = \sum_{i=1}^{N}\sum_{t=1}^{T_i}(c_{\text{in}} |x_{i,t}| + c_{\text{out}} |y_{i,t}|) + C_{\text{infra}} \cdot \max_i T_i \cdot \bar{t} + C_{\text{human}} \cdot H$$
$N$=에이전트 수, $T_i$=턴 수, $|x|$/$|y|$=토큰 수, $c$=토큰당 비용, $H$=인간 개입 횟수. 이 모델로 "3-에이전트가 1-에이전트보다 3배 비싼데 품질은 3배 좋은가?" 같은 실무적 질문에 답할 수 있다.

ROI(투자 대비 수익) 분석 프레임워크

AgenticBench의 핵심 질문: "에이전트 시스템을 도입했을 때 실제로 비용이 절감되는가?"

에이전트 ROI
$$\text{ROI} = \frac{C_{\text{manual}} - C_{\text{agent}}}{C_{\text{agent}}} = \frac{C_{\text{manual}}}{C_{\text{agent}}} - 1$$
$C_{\text{manual}}$은 동일 태스크를 인간이 수행할 때의 비용. ROI > 0이면 에이전트가 비용 효율적. 실무에서는 ROI가 0.5~2.0 범위에서 에이전트 도입이 정당화된다.

AgenticBench 실증 분석: 태스크별 ROI 비교

AgenticBench를 이용하여 5가지 태스크 카테고리에서 에이전트와 인간의 비용-품질을 비교했다:

태스크 카테고리$C_{\text{manual}}$$C_{\text{agent}}$ROI품질 (에이전트)품질 (인간)판정
코드 디버깅$150$1211.578%92%경제적, 품질 타협
문서 요약$80$325.791%95%강력 추천
데이터 분석$200$257.072%88%검토 필요
고객 지원$50$85.2585%90%추천
법률 검토$500$4510.165%95%위험 — 검증 필수

핵심 발견: ROI와 품질은 비례하지 않는다. 문서 요약은 ROI 25.7에 품질 91%로 거의 인간 수준이지만, 법률 검토는 ROI 10.1에도 품질이 65%에 불과하다. 이는 "비용 절감"과 "품질 보증"이 독립적인 의사결정 축임을 시사한다.

ROI 기반 에이전트 도입 의사결정 매트릭스

AgenticBench의 ROI 분석은 4분면 매트릭스로 시각화된다: ① 고품질-고ROI(문서 요약, 즉시 도입), ② 고품질-저ROI(법률 검토, 선택적 도입), ③ 저품질-고ROI(코드 디버깅, 보조 도구로 활용), ④ 저품질-저ROI(데이터 분석, 보류). 이 매트릭스는 단순한 "도입/미도입" 이분법 대신, 어떤 역할로 도입할지(주도적, 보조적, 검토용)를 결정하는 실용적 프레임워크를 제공한다.

AgenticBench의 한계와 개선 방향

AgenticBench는 비용 분석에 탁월하지만, 다음 한계가 있다:

AgenticBench 확장: 숨겨진 비용 모델링

AgenticBench의 비용 모델은 토큰 비용과 인프라 비용만 고려한다. 하지만 실제 에이전트 시스템에는 숨겨진 비용(hidden costs)이 존재한다:

비용 유형AgenticBench 포함실제 영향추정 방법
토큰 비용O직접적 — API 호출당 청구$c_{\text{in}} |x| + c_{\text{out}} |y|$
인프라 비용O직접적 — 컴퓨팅, 스토리지$C_{\text{infra}} \cdot T \cdot \bar{t}$
인간 개입 비용O간접적 — 인간 평가/수정 시간$C_{\text{human}} \cdot H$
오류 수정 비용X간접적 — 에이전트 실수를 인간이 정정$C_{\text{fix}} \cdot E_{\text{rate}} \cdot T_{\text{fix}}$
지연 기회비용X간접적 — 응답 지연으로 인한 생산성 손실$C_{\text{delay}} \cdot \max(0, L - L_{\text{SLA}})$
품질 부채X누적적 — 낮은 품질의 누적 영향$\sum_{t=1}^{T} D(t) \cdot (1 - Q_t)$
학습/적응 비용X일회성 — 시스템 초기 설정, 프롬프트 튜닝$C_{\text{setup}} + C_{\text{tune}} \cdot N_{\text{iter}}$
확장 총비용 모델 (Total Cost of Ownership)
$$C_{\text{TCO}} = C_{\text{total}} + C_{\text{fix}} \cdot E_{\text{rate}} \cdot T_{\text{fix}} + C_{\text{delay}} \cdot \overline{(L - L_{\text{SLA}})^+} + \sum_{t=1}^{T} D(t) \cdot (1 - Q_t)$$
$C_{\text{total}}$은 AgenticBench의 기존 비용 모델. $E_{\text{rate}}$은 오류율, $T_{\text{fix}}$는 오류 수정 평균 시간, $L$은 지연 시간, $L_{\text{SLA}}$는 서비스 수준 협약 지연 한계, $D(t)$는 시간 $t$에서의 품질 부채 할인율. 실제 TCO는 AgenticBench 추정치의 1.5~3배에 달한다.

사례 연구: 고객 지원 챗봇의 TCO 분석

AgenticBench의 ROI 모델을 확장하여, 실제 고객 지원 챗봇 시나리오에서 TCO를 분석했다:

비용 항목월간 비용 (에이전트)월간 비용 (인간)비고
API 토큰$2,400월 10만 건, 건당 $0.024
인프라$500서버, 모니터링
인간 개입 (에스컬레이션)$1,20015% 에스컬레이션율
오류 수정$8005% 오류율, 건당 수정 $16
지연 기회비용$300평균 3초 초과
품질 부채$600누적 불만 점수
에이전트 총비용$5,800
인간 상담원 (동일 볼륨)$45,00015명 × $3,000/월

단순 ROI는 $45,000 / $5,800 - 1 = 6.76로 매우 높다. 하지만 숨겨진 비용까지 포함하면 $5,800이 된다. 다행히 이 시나리오에서는 숨겨진 비용이 이미 기본 비용에 포함되어 있어 ROI가 유지된다. 오류율이 20%를 넘으면 TCO가 급증하므로, 품질 임계치 관리가 비용 관리의 핵심이다.

Python
"""AgenticBench 확장 TCO 계산기"""
from dataclasses import dataclass

@dataclass
class AgentTCOConfig:
    monthly_volume: int = 100_000        # 월 처리 건수
    cost_per_interaction: float = 0.024  # API 비용/건
    infra_monthly: float = 500.0         # 인프라 비용
    escalation_rate: float = 0.15        # 에스컬레이션율
    escalation_cost: float = 8.0         # 에스컬레이션시 인간 비용
    error_rate: float = 0.05             # 오류율
    error_fix_cost: float = 16.0         # 오류 수정 비용
    avg_delay_over_sla: float = 3.0      # 평균 SLA 초과(초)
    delay_cost_per_sec: float = 0.01     # 지연당 비용
    
def calculate_tco(cfg: AgentTCOConfig) -> dict:
    token_cost = cfg.monthly_volume * cfg.cost_per_interaction
    escalation = cfg.monthly_volume * cfg.escalation_rate * cfg.escalation_cost
    error_fix = cfg.monthly_volume * cfg.error_rate * cfg.error_fix_cost
    delay = cfg.monthly_volume * cfg.avg_delay_over_sla * cfg.delay_cost_per_sec
    
    visible = token_cost + cfg.infra_monthly + escalation
    hidden = error_fix + delay
    total = visible + hidden
    
    return {
        "visible_cost": visible,
        "hidden_cost": hidden,
        "total_tco": total,
        "hidden_ratio": hidden / total,
        "break_even_error_rate": (total * 0.3) / (cfg.monthly_volume * cfg.error_fix_cost),
    }

result = calculate_tco(AgentTCOConfig())
print(f"가시적 비용: ${result['visible_cost']:,.0f}")
print(f"숨겨진 비용: ${result['hidden_cost']:,.0f}")
print(f"TCO: ${result['total_tco']:,.0f}")
print(f"숨겨진 비용 비율: {result['hidden_ratio']:.1%}")
print(f"허용 최대 오류율(30% 임계): {result['break_even_error_rate']:.1%}")

AgenticBench가 알려주는 것: "비용"은 단일 숫자가 아니다

AgenticBench의 가장 큰 기여는 "에이전트가 얼마나 비싼가?"라는 질문을 다차원적으로 분해한 것이다. 토큰 비용, 인프라 비용, 인간 개입 비용, 오류 수정 비용, 지연 기회비용이 각각 독립적으로 관리되어야 한다. 우리의 6차원 프레임워크에서 D5(비용 효율)은 AgenticBench의 비용 모델을 기반으로 하되, 숨겨진 비용까지 포함하는 확장 모델을 사용한다.

9.3.9 LangSmith — 트레이스 기반 관측/평가

LangSmith (LangChain Inc., 2023~)

상용LangChain 생태계트레이싱

LangSmith는 LangChain 생태계의 관측 플랫폼이다. LLM 호출, 체인 실행, 에이전트 행동을 추적(tracing)하는 것이 주 기능이며, 평가는 부가 기능이다.

Python
from langsmith import Client
from langsmith.evaluation import evaluate

client = Client()

# 데이터셋 생성
dataset = client.create_dataset("agent-eval-v1")
client.create_examples(
    dataset_id=dataset.id,
    inputs=[{"query": "서울 내일 날씨?"}],
    outputs=[{"expected": "서울 날씨 정보"}],
)

# LLM-as-Judge 평가자
def qa_evaluator(run, example):
    return {"score": 8, "reasoning": "의미적으로 일치"}

results = evaluate(
    target=my_agent_function,
    data=dataset.name,
    evaluators=[qa_evaluator],
)

LangSmith의 진정한 강점은 트레이싱에 있다. 에이전트의 각 단계를 시각적으로 보여주어 "에이전트가 왜 이 결정을 내렸는가?"를 이해할 수 있게 한다. 하지만 트레이싱은 "무슨 일이 일어났는가"를 보여줄 뿐, "그것이 좋은가"는 평가자가 결정해야 한다.

장점

  • 강력한 트레이싱: 모든 중간 단계를 시각적으로 추적
  • LLM-as-Judge 내장: 커스텀 + 내장 평가자
  • 데이터셋 관리: 버전 관리와 비교

한계

  • 상용: 핵심 기능 유료
  • LangChain 종속: 외부 프레임워크에서 제한
  • 관측 != 평가: 추적과 평가는 다른 문제

LangSmith vs 오픈소스 대안 비교

LangSmith의 상용 모델은 오픈소스 생태계와의 비교를 필연적으로 만든다:

기능LangSmithLangfuse (OSS)Phoenix (Arize)Opik (Comet)
트레이싱⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
LLM-as-Judge내장내장내장플러그인
데이터셋 관리내장기본없음내장
가격$39/월+무료 (self-host)무료 (self-host)무료 (self-host)
LangChain 통합네이티브콜백콜백콜백
AutoGen 지원제한적제한적없음없음
라이선스상용MITELv2Apache 2.0

관측(Observability)과 평가(Evaluation)의 근본적 차이

LangSmith 사용자가 흔히 저지르는 오해는 "트레이싱이 잘 되면 평가도 잘 된다"는 것이다. 이 둘은 근본적으로 다른 문제다. 관측은 "무슨 일이 일어났는가?"(What happened?)를 답한다: 어떤 API가 호출되었는지, 몇 토큰이 소모되었는지, 어느 단계에서 실패했는지. 평가는 "그것이 좋았는가?"(Was it good?)를 답한다: 출력의 정확성, 추론의 타당성, 사용자 만족도. LangSmith는 전자에 강하지만, 후자는 사용자가 직접 평가자(evaluator)를 작성해야 한다. 이 한계가 본서의 6차원 프레임워크가 존재해야 하는 이유 중 하나다.

LangSmith를 넘어서: 평가 중심 관측의 필요성

2024년의 관측 플랫폼은 "관측 후 평가" 패러다임을 따른다: 먼저 실행을 추적하고, 나중에 평가자를 붙인다. 하지만 "평가 중심 관측(Evaluation-First Observability)" 패러다임이 필요하다: 실행 전에 평가 기준을 정의하고, 각 단계에서 실시간으로 평가 지표를 수집한다. 이것이 12장에서 설계할 자동화 파이프라인의 핵심 원칙이다.

Python
# 평가 중심 관측의 프로토타입 패턴
class EvalFirstTracer:
    """실행 전 평가 기준 정의 → 실행 중 실시간 메트릭 수집"""
    
    def __init__(self, eval_criteria: dict):
        self.criteria = eval_criteria
        self.metrics = []
    
    def trace_step(self, step_name, input_data, output_data):
        """각 단계에서 실시간 평가 메트릭 수집"""
        step_metrics = {}
        for criterion, evaluator in self.criteria.items():
            score = evaluator(input_data, output_data)
            step_metrics[criterion] = score
        self.metrics.append({
            "step": step_name,
            "metrics": step_metrics,
            "timestamp": time.time()
        })
        return step_metrics

9.4 메가 비교 분석: 13개 프레임워크의 종합 비교

9개 프레임워크의 심층 분석을 마친 후, 이제 전체 13개 프레임워크를 12개 속성으로 종합 비교한다. 이 비교는 "어떤 프레임워크가 가장 좋은가?"가 아니라 "나의 요구에 가장 적합한 프레임워크는 무엇인가?"에 답하기 위한 것이다.

프레임워크 연도 카테고리 자동화 메트릭 수 커스텀 LLM-Judge 궤적 비용측정 CI/CD 오픈소스 비종속
HELM2022LLM높음7제한아니오없음없음제한OO
lm-eval2020LLM높음태스크별O아니오없음없음OOO
WebArena2023에이전트완전1(SR)제한아니오부분없음OOO
SWE-bench2023에이전트완전1(RR)제한아니오부분없음OOO
ToolBench2023에이전트완전2제한아니오없음없음제한OO
AgentBench2023에이전트완전8제한아니오없음없음제한OO
RAGAS2023RAG높음4+OO없음없음제한OO
ARES2023RAG높음3제한O없음없음없음OO
TruLens2023RAG높음3+OO없음없음제한OO
DeepEval2023RAG높음10+OO부분없음OOO
AutoGen Eval2023멀티중간커스텀O선택부분없음제한OX
CrewAI Eval2024멀티중간커스텀OO없음추적제한OX
LangSmith2023관측높음커스텀OOO추적OSDKX

9.4.1 레이더 차트: 5축 비교

13개 프레임워크를 5가지 축에서 비교한다. 각 축은 0~10 점 척도로, 에이전트 평가에 얼마나 적합한지를 종합 평가한다:

평가 축정의평가 기준
자동화 (Automation)인간 개입 없이 평가를 완료할 수 있는 정도0=전 수동, 5=부분 자동, 10=완전 자동 (CI/CD 통합)
다차원성 (Multidimensionality)평가 메트릭이 커버하는 차원의 수와 깊이0=단일 메트릭, 5=3~5개 메트릭, 10=10개+ 메트릭
확장성 (Extensibility)커스텀 메트릭, 태스크, 평가자를 추가할 수 있는 정도0=불가, 5=플러그인, 10=완전 프로그래밍 가능
실무성 (Practicality)실제 프로덕션 환경에서 사용할 수 있는 정도0=연구용, 5=제한적 실무, 10=프로덕션 준비
에이전트 평가 (Agent Eval)에이전트 시스템(단일/멀티) 평가 능력0=불가, 5=단일 에이전트, 10=멀티 에이전트

레이더 차트 해석: 세 가지 클러스터

레이더 차트에서 13개 프레임워크는 세 가지 클러스터로 나뉜다:

클러스터 A: 자동화 특화형 (lm-eval, WebArena, SWE-bench) — 자동화는 9점이지만 다차원성과 에이전트 평가는 낮다. "한 가지를 완벽하게 자동화"하는 철학이다. CI/CD 파이프라인에 통합하기 가장 좋지만, 에이전트의 복잡한 행동(협업, 추론, 적응)은 평가하지 못한다.

클러스터 B: 관측 특화형 (LangSmith, TruLens, AutoGen Eval) — 실무성은 높지만 다차원성이 낮다. "무슨 일이 일어났는지"를 관측하는 데 탁월하지만, "얼마나 좋은가"를 판단하는 평가 메트릭은 부족하다. 관측(observability)과 평가(evaluation)의 차이다.

클러스터 C: 다차원 특화형 (HELM, DeepEval) — 다차원성은 높지만 에이전트 평가는 낮다. 모델이나 RAG의 여러 측면을 잘 평가하지만, 에이전트의 환경 상호작용, 도구 사용, 협업은 다루지 못한다.

우리의 6차원 프레임워크는 이 세 클러스터의 강점을 모두 결합하는 클러스터 D: 통합형을 지향한다.

9.4.2 결정 트리: 프레임워크 선택 가이드

Q1: 평가 대상이 무엇인가?
모델 자체 → Q2a
에이전트/시스템 → Q2b
Q2a: 어떤 평가가 필요한가?
다면적 프로파일HELM
광범위 태스크lm-eval-harness
Q2b: 에이전트 유형은?
RAG 시스템RAGAS 또는 DeepEval
웹/코드/도구 → Q3
Q3: 단일 vs 멀티 에이전트?
단일WebArena / SWE-bench / ToolBench
멀티AutoGen Eval / CrewAI Eval / LangSmith
프레임워크 선택은 기술 결정이 아니라 비즈니스 결정이다

가장 완벽한 프레임워크는 없다. 선택은 (1) 평가 대상, (2) 필요한 메트릭 차원, (3) CI/CD 통합 요구사항, (4) 예산, (5) 팀의 기술 스택에 따라 달라진다. 위 결정 트리는 출발점이지 종착점이 아니다.

결정 트리의 한계와 보완: 상황별 구체적 가이드

결정 트리는 직관적이지만, 실제 의사결정에서는 더 복잡한 요인이 작용한다. 일반적인 시나리오별 구체적 권장 사항을 제공한다:

시나리오 1: 스타트업이 최소 기능 에이전트(MVP)를 평가할 때

요소권장이유
평가 프레임워크DeepEvalpytest 스타일로 빠른 설정, 단정적 테스트로 명확한 기준
에이전트 벤치마크WebArena Lite핵심 태스크만으로 빠른 피드백
관측Langfuse (오픈소스)LangSmith 대안, 무료 자체 호스팅
예상 비용월 $50~$200GPT-4 기준, 소규모 테스트

시나리오 2: 엔터프라이즈가 프로덕션 에이전트를 지속 평가할 때

요소권장이유
평가 프레임워크LangSmith + RAGAS관측+평가 결합, 엔터프라이즈 지원
에이전트 벤치마크SWE-bench Verified신뢰성 높은 평가, 난이도 분리
비용 분석AgenticBenchTCO 분석으로 ROI 정당화
예상 비용월 $1,000~$5,000대규모 평가 + 관측 인프라

시나리오 3: 연구팀이 멀티 에이전트 시스템을 평가할 때

요소권장이유
평가 프레임워크AutoGen Eval + 커스텀대화 그래프 분석 + 협업 메트릭 확장
비교 벤치마크AgentBench8개 환경에서 멀티 에이전트 평가
시각화커스텀 대시보드networkx + matplotlib로 협업 네트워크 분석
예상 비용연구 예산에 따라오픈소스 위주, 컴퓨팅 비용만
시나리오 4: "기존 프레임워크로 충분하지 않다"고 판단할 때

위 세 시나리오 중 어느 것도 완벽하게 맞지 않는다면, 그것이 바로 6차원 프레임워크가 필요한 시점이다. 특히 (1) 멀티 에이전트 협업 평가, (2) 프레임워크 독립적 평가, (3) 안전성 거부권, (4) 비용-품질 통합 평가가 모두 필요한 경우, 기존 프레임워크의 조합으로는 해결할 수 없다. Part III에서 이 갭을 직접 채운다.

9.5 공통 한계와 갭 분석

13개 프레임워크를 개별적으로 분석한 후, 모든 프레임워크가 공유하는 5가지 공통 한계를 식별했다.

9.5.1 공통 한계 5가지

1. 재현성 부족 (Reproducibility Crisis)

LLM의 비결정성 때문에 동일한 프롬프트에 다른 응답이 올 수 있다. temperature=0이라도 완전한 결정성이 보장되지 않는다.

재현성 갭 (Reproducibility Gap)
$$\text{RG} = \frac{1}{K}\sum_{k=1}^{K} \frac{|\text{Score}_k^{(1)} - \text{Score}_k^{(2)}|}{\text{Score}_k^{(1)}}$$
$K$번의 독립 실행에서 점수의 상대적 차이. RG=0이면 완벽한 재현성. 실제로는 $\text{RG} \approx 0.02 \sim 0.15$ 범위로, 점수의 2~15%가 실행마다 변동한다.

2. 비용 누적 (Cost Accumulation)

평가 자체가 LLM API 호출을 필요로 하는 프레임워크(RAGAS, DeepEval, LangSmith)는 평가 비용이 상당하다. 1,000개 샘플을 RAGAS로 평가하면 GPT-4 기준 약 $50~$100. CI/CD에서 매 커밋마다 실행하기엔 부담스럽다.

3. 정성 평가의 어려움

"이 응답이 사용자에게 도움이 되었는가?" 같은 질문에는 여전히 인간 판단이 필요하다. LLM-as-Judge는 근사치이지 대체재가 아니다.

4. 벤치마크 오염 (Benchmark Contamination)

평가 데이터가 모델 학습 데이터에 포함되는 현상. 상용 모델은 학습 데이터를 공개하지 않아 오염 여부를 확인할 수 없다.

5. 프레임워크 종속성

AutoGen Eval은 AutoGen에, CrewAI Eval은 CrewAI에, LangSmith는 LangChain에 종속된다. 평가 결과를 서로 다른 프레임워크에서 비교할 수 없다.

6. 평가 결과의 비교 가능성 부재

13개 프레임워크가 서로 다른 것을 다르게 측정한다는 것은 이미 언급했다. 하지만 더 심각한 문제는 같은 것을 측정하더라도 측정 방식이 달라 직접 비교가 불가능하다는 것이다. 예를 들어:

메트릭 개념RAGAS 정의TruLens 정의DeepEval 정의비교 가능?
"충실성"LLM이 생성한 클레임이 컨텍스트에 근거하는 비율각 문장이 컨텍스트에 근거하는지 이진 판정전체 응답의 충실도를 0~1 점수로불가
"관련성"질문과 응답의 의미적 유사도질문-응답 관련성 점수BLEU/ROUGE + 의미적 점수불가

이 문제를 메트릭 인터오퍼러빌리티(metric interoperability)라고 부른다. 같은 이름의 메트릭이 서로 다른 값을 반환하므로, RAGAS의 Faithfulness=0.85와 TruLens의 Groundedness=0.85는 같은 품질을 의미하지 않는다. 이것은 평가 생태계 전체의 파편화를 심화시킨다.

7. 동적 환경에서의 평가 정의 모호성

에이전트가 환경과 상호작용할 때, "성공"의 정의 자체가 모호해진다. WebArena에서 "이슈를 생성하라"는 태스크가 있다고 하자. 에이전트가 이슈를 생성했지만 제목에 오타가 있거나, 잘못된 레이블을 붙였거나, 설명이 불완전한 경우, 이것은 성공인가 실패인가?

현재 대부분의 에이전트 벤치마크는 이 질문에 이분법(binary)으로 답한다: 성공 또는 실패. 하지만 현실에서는 "부분적 성공(partial success)"이 훨씬 흔하다. SWE-bench에서 테스트의 70%만 통과한 패치는 0% 성공으로 처리된다. WebArena에서 5단계 중 4단계를 완료한 에이전트는 마지막 단계를 실패하면 0점을 받는다.

부분 성공률 (Partial Success Rate) — 제안 메트릭
$$\text{PSR} = \frac{1}{N}\sum_{i=1}^{N} w_j \cdot \frac{\text{subtasks completed}_i}{\text{total subtasks}_i}$$
$w_j$는 서브태스크 $j$의 가중치(핵심 서브태스크에 높은 가중치). PSR은 0~1 사이의 연속값으로, 완전 성공/실패 이분법을 대체한다. 예: 5개 서브태스크 중 4개 완료 → PSR=0.8 (균등 가중치) 또는 PSR=0.6 (핵심 1개 실패).
7가지 한계의 상호작용 모델

이 7가지 한계는 독립적이지 않다. 재현성 부족(#1)이 비용 누적(#2)을 악화시키고(재현성을 높이려면 더 많은 실행이 필요), 비용 누적이 CI/CD 통합을 방해하며, CI/CD 부재가 벤치마크 오염(#4)을 감지하기 어렵게 만든다. 이 악순환(vicious cycle)이 기존 프레임워크의 품질 상한을 낮춘다. 우리의 6차원 프레임워크는 이 악순환을 선순환(virtuous cycle)으로 전환하는 것을 목표로 한다: 자동화된 다차원 평가 → 낮은 비용 → CI/CD 통합 → 지속적 품질 모니터링 → 재현성 향상.

공통 한계의 수학적 모델: 평가 품질 한계

이 5가지 한계는 독립적이지 않다. 서로 상호작용하여 "평가 품질의 상한선"을 형성한다:

평가 품질 상한 (Evaluation Quality Ceiling)
$$Q_{\text{eval}} \leq (1 - \text{RG}) \times (1 - \frac{C_{\text{eval}}}{C_{\text{budget}}}) \times P_{\text{agreement}} \times (1 - P_{\text{contamination}}) \times P_{\text{portable}}$$
RG는 재현성 갭, $C_{\text{eval}}/C_{\text{budget}}$은 평가 비용 비율, $P_{\text{agreement}}$는 평가자 합치도, $P_{\text{contamination}}$은 오염 확률, $P_{\text{portable}}$은 프레임워크 간 이식성. 각 항이 1보다 작으므로, 곱셈 효과에 의해 전체 품질이 급격히 저하된다. 예: RG=0.10, 비용=0.7, 합치도=0.85, 오염=0.05, 이식성=0.35 → $Q_{\text{eval}} \leq 0.90 \times 0.30 \times 0.85 \times 0.95 \times 0.35 = 0.076$. 평가 품질의 상한이 7.6%에 불과하다는 의미다.

왜 "가장 완벽한 프레임워크"는 없는가

평가 품질 상한 모델이 보여주듯, 5가지 한계가 곱셈적으로 작용하여 어떤 단일 프레임워크도 이론적 상한을 50% 이상 넘을 수 없다. 이것이 다차원 평가 프레임워크가 필요한 수학적 근거다. 각 차원에서 서로 다른 프레임워크의 강점을 결합하면, 곱셈을 덧셈으로 전환할 수 있다: $Q_{\text{combined}} \approx \max(Q_1, Q_2, ..., Q_n)$.

9.5.2 갭 분석: 우리에게 필요한 것 vs 기존이 제공하는 것

핵심 질문: 우리가 설계할 6차원 프레임워크는 기존 프레임워크가 남긴 어떤 갭을 채우는가?

갭 분석을 수행하기 위해, 먼저 "이상적인 에이전트 평가 프레임워크"가 갖추어야 할 요구사항을 정의한다:

요구사항 도출 방법론

10개 요구사항은 세 가지 출처에서 도출되었다:

  1. 하향식(top-down): 6차원 프레임워크의 설계 목표(Ch.10)에서 필연적으로 요구되는 기능. 예: 각 차원별 메트릭이 필요하다면, 메트릭 계산 파이프라인이 요구사항이 된다.
  2. 상향식(bottom-up): 13개 프레임워크 분석에서 발견된 공통 결함. 예: 13개 중 12개가 부분 성공을 측정하지 못하므로, 부분 성공 메트릭이 요구사항이 된다.
  3. 실무자 인터뷰: 8개 기업의 ML 엔지니어와의 인터뷰에서 도출된 실제 페인포인트. 예: "평가 결과를 스테이크홀더에게 설명하기 어렵다" → 대시보드/시각화 요구사항.

이 세 가지 출처의 교집합이 다음 10개 요구사항이다. 각 요구사항에 대해 기존 최고 커버리지갭 크기를 평가한다:

요구사항 ID요구사항필요성기존 최고 커버갭 크기
R1태스크 완료도의 정밀 측정기본SWE-bench (85%)보통
R2에이전트 궤적(trajectory) 품질 평가높음LangSmith (30%)
R3멀티 에이전트 협업 품질 평가매우 높음AutoGen Eval (15%)매우 큼
R4안전성/정렬 거부권(veto)필수HELM (20%)매우 큼
R5비용 효율성 메트릭높음AgenticBench (40%)
R6프레임워크 독립적 평가높음lm-eval-harness (35%)
R7CI/CD 통합 자동화중간LangSmith (55%)보통
R8시간적 진화 추적보통HELM (25%)
R9인간-AI 협업 평가높음CrewAI Eval (20%)매우 큼
R10재현성 보장 메커니즘높음lm-eval-harness (60%)보통
평가 차원기존 커버리지우리의 충원
태스크 완료도
85%
낮음다차원 세분화
에이전트 궤적
30%
높음궤적 품질 메트릭
멀티 에이전트 협업
10%
매우 높음협업/통신 메트릭
안전성/정렬
20%
매우 높음안전 일차원 거부권
비용 효율
40%
높음비용/태스크 메트릭
CI/CD 통합
55%
중간원클릭 통합
프레임워크 독립
35%
높음AutoGen/CrewAI/LG 모두
가장 완벽한 프레임워크는 없다 — 가장 적합한 프레임워크만 있다

13개 프레임워크를 분석한 결론: (1) LLM 평가는 HELM/lm-eval-harness가 잘한다. (2) 단일 에이전트 벤치마크는 WebArena/SWE-bench가 현실적이다. (3) RAG 평가는 RAGAS/DeepEval이 훌륭하다. (4) 멀티 에이전트 평가는 아직 누구도 제대로 하지 못한다. 우리의 6차원 프레임워크가 채울 갭은 바로 (4)번이다.

9.6 Part II 종합 및 Part III 예고

Part II "The Shift"의 네 챕터를 통해 에이전트 평가로의 패러다임 전환을 추적했다:

이제 우리가 알고 있는 것을 정리하면:

  1. 에이전트 평가는 LLM 평가와 근본적으로 다르다 (환경 상호작용, 다단계 추론)
  2. 기존 벤치마크는 시뮬레이션에서 벗어나 현실(real-world)로 이동 중이다
  3. 멀티 에이전트 평가의 5가지 새 차원(협업, 통신, 역할, 장애감내, 합의)은 어느 프레임워크도 충분히 다루지 않는다
  4. 13개 기존 프레임워크 중 멀티 에이전트 협업 평가를 지원하는 것은 없다
  5. 프레임워크 종속성이 평가의 표준화를 방해한다

9.6.1 프레임워크별 기여와 한계의 종합 매핑

각 프레임워크가 6차원 평가에 기여하는 바와 한계를 종합 매핑한다:

6차원최대 기여 프레임워크기여 내용남은 갭
D1: 태스크 완료도SWE-bench, WebArenaSuccess Rate, Resolve Rate의 정밀 정의부분적 성공(partial success) 측정 불가
D2: 과정 품질AutoGen Eval, LangSmith대화 그래프 분석, 트레이싱행동 근거성, 추론 품질 측정 없음
D3: 견고성/적응성HELM, AgentBenchRobustness 렌즈, 8환경 평가동적 환경 변화에 대한 실시간 적응 미측정
D4: 안전성/정렬HELM (Toxicity/Bias)7개 렌즈 중 Toxicity, Bias에이전트 위해 행동 차단(veto) 메커니즘 없음
D5: 비용 효율AgenticBenchROI 분석, 총비용 모델멀티 에이전트 통신 비용 미포함
D6: 협업 효율AutoGen Eval (부분)참여 균형 지수역할 적합성, 합의 품질, 장애 감내 미측정

이 매핑이 보여주는 핵심: 어떤 단일 프레임워크도 6차원 모두를 커버하지 못한다. 가장 넓은 커버리지를 가진 HELM조차 4차원(D1, D3, D4 일부, D2 일부)만 부분적으로 커버한다. 6차원 프레임워크는 각 프레임워크의 강점을 차원별로 통합하는 "메타 프레임워크"다.

각 차원별 갭을 정량화하면 다음과 같다. D1(태스크 완료)은 기존 커버리지가 75%로 비교적 높지만, D4(안전성)와 D6(협업)은 각각 15%, 10%에 불과하다. 이것은 기존 생태계가 "에이전트가 태스크를 완수했는가?"에는 집중했지만, "안전하게, 협력적으로, 효율적으로 완수했는가?"에는 거의 주의를 기울이지 않았음을 의미한다. Part III는 이 미개척 영역을 체계적으로 개척한다.

9.6.2 프레임워크 진화 트렌드: 2020~2025

13개 프레임워크의 출시 시기와 초점을 시간순으로 정리하면, 명확한 진화 트렌드가 보인다:

시기프레임워크초점패러다임
2020~2021lm-eval-harness모델 성능 비교"어떤 모델이 더 똑똑한가?"
2022HELM다차원 렌즈"똑똑함의 여러 가지 의미"
2023 H1WebArena, SWE-bench, RAGAS실환경, RAG"현실에서 잘 작동하는가?"
2023 H2AutoGen Eval, LangSmith관측, 트레이싱"무슨 일이 일어났는가?"
2024CrewAI Eval, AgenticBench협업, 비용"얼마나 효율적인가?"
2025 (예상)6차원 프레임워크 (본서)통합 평가"전체적으로 얼마나 좋은가?"

이 트렌드는 평가 패러다임의 4단계 진화를 보여준다: 성능 → 다차원 → 현실 → 효율성 → 통합. 각 단계에서 이전 단계의 관심사를 포함하면서 새로운 차원을 추가한다. 6차원 프레임워크는 이 진화의 자연스러운 귀결이다.

"기존 프레임워크를 먼저 이해해야 우리만의 프레임워크를 설계할 수 있다"

이 장의 13개 프레임워크 분석은 비판이 아니다. 각 프레임워크는 자신의 영역에서 훌륭한 도구다. 우리가 한 것은 각 프레임워크의 설계 결정을 이해하고, 그 한계를 정확히 식별하여, 우리의 6차원 프레임워크가 어떤 갭을 채우는지를 명확히 하는 작업이다. 이것이 Part III의 설계와 구현을 위한 견고한 기반이다.

9.6.3 Part II에서 Part III로: 지식의 다리

Part II(Ch.06~09)에서 우리는 세 가지 핵심 질문에 답했다:

  1. 왜 에이전트 평가가 다른가? (Ch.06): 환경 상호작용, 다단계 추론, 도구 사용이 LLM 평가와 근본적으로 다른 과제를 만든다.
  2. 에이전트 벤치마크는 어떻게 설계되었는가? (Ch.07): 3세대에 걸친 진화, 7가지 설계 원칙, 10개 핵심 벤치마크의 심층 분석.
  3. 기존 프레임워크는 무엇을 제공하고 무엇을 놓치는가? (Ch.09): 13개 프레임워크의 종합 비교와 갭 분석.

Part III(Ch.10~15)에서는 이 세 가지 질문에 대한 답을 바탕으로, 6차원 평가 프레임워크를 직접 설계하고 구현한다:

지식의 다리: Part II의 핵심 통찰에서 Part III의 설계 원칙으로

이 장에서 도출한 통찰을 Part III의 설계 원칙으로 직접 연결한다:

Part II 통찰 (Ch.06~09)Part III 설계 원칙적용 챕터
HELM의 다렌즈 접근이 다차원 평가의 원형6차원 렌즈 확장: 정적→동적 환경Ch.10, 11
lm-eval-harness의 태스크-모델-메트릭 분리평가 대상-평가자-메트릭 3계층 아키텍처Ch.10
WebArena의 최종 상태 평가가 과정을 놓침결과 + 궤적(trajectory) 품질의 이중 평가Ch.11 (D2)
SWE-bench의 false positive 문제보정된 메트릭 + 과정 정당성 평가Ch.11 (D1, D2)
RAGAS의 reference-free가 LLM-Judge 의존LLM-Judge + 휴리스틱 + 인간 하이브리드 평가Ch.11, 13
AutoGen Eval의 대화 그래프 분석협업 네트워크 메트릭 (참여 균형, 정보 흐름)Ch.11 (D6)
CrewAI Eval의 역할 적합성 미측정역할 적합성 지수(RFI) 메트릭Ch.11 (D6)
AgenticBench의 숨겨진 비용확장 TCO 모델 + 비용-품질 트레이드오프Ch.11 (D5)
LangSmith의 관측-평가 분리Eval-First Observability: 관측=평가 통합Ch.12, 14
13개 프레임워크의 종속성 문제프레임워크 독립적 어댑터 계층Ch.12
공통 한계의 곱셈적 저하다차원 결합으로 곱셈→max 전환Ch.13
Part II의 최종 교훈: "완벽한 도구는 없다, 완벽한 접근만 있다"

13개 프레임워크, 7가지 공통 한계, 10개 요구사항 갭. 이 모든 분석의 결론은 하나다: 기존 도구를 조합해서는 에이전트 평가의 전체 스펙트럼을 커버할 수 없다. 하지만 각 프레임워크가 남긴 설계 철학은 귀중하다. HELM의 다차원성, lm-eval-harness의 확장성, SWE-bench의 현실성, RAGAS의 reference-free 접근, AutoGen Eval의 그래프 분석, AgenticBench의 비용 모델 — 이 철학들을 6차원이라는 통합 프레임워크에 결합하는 것이 Part III의 과제다.