벤치마크: SWE-bench, GAIA, AgentBench
세 벤치마크가 2026년 에이전트(Agent) 평가의 기준축을 이룹니다. SWE-bench는 코드 패치(code patching) 능력을 검증하고, GAIA는 다재다능한 도구 사용(generalist tool use)을 검증하며, AgentBench는 다중 환경 추론(multi-environment reasoning)을 검증합니다. 각 벤치마크의 구성, 오염(contamination)에 얽힌 이야기, 그리고 무엇을 측정하지 않는지를 함께 파악해야 합니다.
유형: Learn
언어: Python (stdlib)
선수 학습: Phase 14 · 06 (Tool Use)
소요 시간: 약 60분
학습 목표
- SWE-bench의 평가 장치(test harness)인
FAIL_TO_PASS를 설명하고, 왜 단위 테스트(unit test)로 게이트(gate)를 거는지 설명할 수 있습니다.
- SWE-bench Verified(OpenAI, 500개 task)가 왜 존재하는지, 어떤 항목을 제거하는지 설명할 수 있습니다.
- GAIA의 설계 철학을 설명할 수 있습니다. 사람에게는 쉽지만 AI에게는 어려우며, 세 가지 난이도 단계를 갖는다는 점을 포함합니다.
- AgentBench의 8개 환경과, 오픈소스 LLM이 마주한 주된 걸림돌(blocker)을 말할 수 있습니다.
- SWE-bench+의 오염 분석 결과(contamination finding)와 그 의미를 요약할 수 있습니다.
문제
리더보드(leaderboard)는 어떤 모델이 한 벤치마크에서 1위를 차지했는지를 알려줍니다. 그러나 다음과 같은 것은 알려주지 않습니다.
- 벤치마크가 오염되었는지 여부. 즉, 정답이 학습 데이터(training data)에 들어가 있거나 테스트 누출(test leakage)이 있는지 여부.
- 그 벤치마크가 우리가 정말 관심 있는 능력을 측정하는지 여부. 코드 작성인지, 웹 탐색(browsing)인지, 다재다능한 일반 작업인지.
- 평가자(evaluator)가 견고한지 여부. 추상 구문 트리 매칭(AST matching)인지, 상태 검사(state check)인지, 사람의 검토(human review)인지.
숫자를 인용하기 전에, 세 가지 기준 벤치마크와 그 실패 양상을 먼저 알아야 합니다.
개념
SWE-bench (Jimenez et al., ICLR 2024 oral)
- 인기 있는 파이썬(Python) 저장소(repository) 12개에서 가져온 실제 GitHub issue 2,294개로 구성됩니다.
- 에이전트가 입력으로 받는 것: 수정(fix) 직전 커밋(commit) 시점의 코드베이스(codebase)와 자연어로 작성된 이슈(issue) 설명.
- 에이전트가 산출물로 내놓는 것: 패치(patch).
- 평가자가 하는 일: 패치를 적용하고 저장소의 테스트 묶음(test suite)을 실행합니다. 이때 패치는
FAIL_TO_PASS 테스트(이전에는 실패했지만 이제는 통과해야 하는 테스트)를 뒤집어야 하며, 동시에 PASS_TO_PASS 테스트(이미 통과하던 테스트)는 깨뜨리지 않아야 합니다.
SWE-agent(Yang et al., 2024)는 공개 당시 12.5%를 기록했습니다. 이는 모델이 이해할 수 있는 파일 편집 명령(file editor commands)과 검색 문법 등, 에이전트와 컴퓨터 사이의 상호작용 방식(agent-computer interface)을 강조한 결과였습니다.
SWE-bench Verified
OpenAI가 2024년 8월에 공개했습니다. 사람이 직접 선별한 500개 task로 구성된 부분집합(subset)입니다. 모호한 이슈, 신뢰할 수 없는 테스트, 수정 방향이 불분명한 task를 제거합니다. "에이전트가 실제로 출시 가능한 패치를 만들어내는가?"를 평가하는 주된 벤치마크입니다.
오염(Contamination)
- SWE-bench 이슈의 94% 이상이 대부분의 모델 학습 컷오프(cutoff) 이전에 작성된 것입니다.
- SWE-bench+는 성공한 패치 중 32.67%가 이슈 본문 안에 정답이 누출(leak)되어 있었음을 발견했습니다. 즉, 모델이 설명 안에서 이미 수정 방법을 본 셈입니다. 또한 31.08%는 테스트 커버리지(test coverage)가 약해 의심스러운 것으로 분류되었습니다.
- Verified는 이보다 깨끗하지만, 오염이 전혀 없는 상태(contamination-free)는 아닙니다.
실무적인 의미는 이렇습니다. SWE-bench에서 50%를 기록한 모델이 SWE-bench+에서는 35%를 기록할 수 있습니다. SWE-bench 성능을 주장할 때는 항상 두 점수를 함께 보고해야 합니다.
GAIA (Mialon et al., Nov 2023)
- 총 466개 질문이며, huggingface.co/gaia-benchmark의 비공개 리더보드(private leaderboard)용으로 300개가 보존됩니다.
- 설계 철학은 "사람에게는 개념적으로 쉽지만(92%), AI에게는 어렵다(플러그인을 사용한 GPT-4 기준 15%)"입니다.
- 추론, 멀티모달(multi-modality), 웹, 도구 사용을 평가합니다.
- 세 단계 난이도를 가지며, Level 3는 여러 모달리티(modality)를 가로지르는 긴 도구 호출 사슬(tool chain)을 요구합니다.
GAIA는 "다재다능한 능력(generalist capability)"을 측정하고 싶을 때 실행하는 벤치마크입니다. 코드 특화 벤치마크와 혼동하지 않도록 주의해야 합니다.
AgentBench (Liu et al., ICLR 2024)
- 코드(Bash, DB, KG), 게임(Alfworld, LTP), 웹(WebShop, Mind2Web), 그리고 자유 형식 생성(open-ended generation)을 아우르는 8개 환경으로 구성됩니다.
- 다중 턴(multi-turn) 방식이며, 분할(split)당 약 4k–13k 턴(turn)이 소요됩니다.
- 주요 발견은, 오픈소스 LLM이 상용 모델을 따라잡지 못하는 주된 걸림돌이 장기 추론(long-term reasoning), 의사결정(decision-making), 지시 수행(instruction following)이라는 점입니다.
이들이 측정하지 않는 것
- 실제 운영 비용(토큰(token), 실제 소요 시간(wall-clock)).
- 적대적 조건에서의 안전 동작.
- 여러분의 도메인에서의 성능(이 부분은 자체 평가(eval)를 만들어야 하며, 30강에서 다룹니다).
- 꼬리 실패(tail failures). 벤치마크는 평균값을 내놓지만, 실제 운영자는 최악의 1%를 신경 씁니다.
벤치마킹이 잘못되는 지점
- 단일 숫자에 대한 집착(single-number fixation). SWE-bench 50%라는 값은 P50/P75/P95 비용과 단계 분포(step distribution)에 비하면 정보량이 훨씬 적습니다.
- 오염된 주장(contaminated claims). Verified나 SWE-bench+를 언급하지 않은 채 SWE-bench 점수만 보고하면 오해를 일으킵니다.
- 벤치마크 자체를 개발 목표로 삼는 것(benchmark-as-development-target). 벤치마크에 과도하게 최적화하면 실제 프로덕션에서의 유용성과 멀어지게 됩니다.
만들어보기
code/main.py는 SWE-bench를 본뜬 작은 평가 장치(harness)를 구현합니다.
- 합성된 버그 수정(bug-fix) task 3개.
- 패치를 제안하는 스크립트형 "에이전트".
FAIL_TO_PASS(버그가 이제 고쳐졌는가)와 PASS_TO_PASS(기존 동작을 깨뜨리지 않았는가)를 확인하는 테스트 실행기(test runner).
- 질문 분해 깊이를 기준으로 한 GAIA 스타일 난이도 분류기.
다음과 같이 실행합니다.
python3 code/main.py
출력은 task별 해결률(resolution rate)과 난이도별 결과를 보여 주며, 평가자 규칙을 구체적으로 체감하게 해 줍니다.
사용해보기
- SWE-bench Verified는 코드 에이전트를 평가할 때 사용합니다. 항상 Verified 점수를 함께 보고합니다.
- GAIA는 다재다능한 에이전트(generalist agent) 평가에 사용합니다. 비공개 리더보드 분할(private leaderboard split)을 사용합니다.
- AgentBench는 다중 환경 비교(multi-environment comparison)에 사용합니다.
- 자체 평가(custom evals)는 여러분 제품의 실제 모양에 맞춘 평가로, 30강에서 다룹니다.
산출물 만들기
outputs/skill-benchmark-harness.md는 임의의 코드베이스–task 쌍에 대해 FAIL_TO_PASS / PASS_TO_PASS 게이트를 갖춘 SWE-bench 스타일의 평가 장치를 만들어 줍니다.
연습문제
- (쉬움) 작은 평가 장치를 실제 저장소 하나에 옮겨 보세요. 알고 있는 버그에 대한
FAIL_TO_PASS 테스트 3개를 작성해 보세요.
- (중간) 단계 수(step-count) 지표를 추가해 보세요. 3개 task에서 해결당 평균 에이전트 단계 수는 몇 번인가요?
- (중간) SWE-bench+ 논문을 읽어 보세요. 정답 누출(solution-leakage) 검사를 구현해 보세요(이슈 본문과 디프(diff)를 패턴 매칭(pattern-match)합니다).
- (어려움) 공개 분할(public split)에서 GAIA 질문 하나를 내려받으세요. GPT-4급 에이전트가 어떻게 해결할지 추적(trace)해 보세요. 어떤 도구가 필요한가요?
- (어려움) AgentBench의 환경별 분석(breakdown)을 읽어 보세요. 여러분의 제품 영역과 가장 닮은 환경은 무엇이며, 그 환경에서 SOTA는 어떤 모습인가요?
핵심 용어
| 용어 | 흔한 설명 | 실제 의미 |
|---|
| SWE-bench | "코드 에이전트 벤치마크(code agent benchmark)" | 2,294개의 GitHub 이슈로 구성되며, 패치는 FAIL_TO_PASS 테스트를 뒤집어야 한다. |
| SWE-bench Verified | "깨끗한 SWE-bench" | OpenAI가 사람의 손으로 선별한 500개 task. |
FAIL_TO_PASS | "수정 게이트(fix gate)" | 이전에는 실패했지만 패치 후 통과해야 하는 테스트. |
PASS_TO_PASS | "회귀 방지 게이트(no-regression gate)" | 이전에 통과했고, 패치 후에도 여전히 통과해야 하는 테스트. |
| GAIA | "다재다능한 벤치마크(generalist benchmark)" | 사람에게는 쉽고 AI에게는 어려운 466개의 다중 도구(multi-tool) 질문. |
| AgentBench | "다중 환경 벤치마크(multi-env benchmark)" | 8개 환경에 걸친 장기 다중 턴(long-horizon multi-turn) 벤치마크. |
| 오염(Contamination) | "학습 데이터 누출(training-set leak)" | 벤치마크 task가 모델 학습 데이터에 포함된 상태. |
| SWE-bench+ | "오염 감사(contamination audit)" | 성공한 SWE-bench 패치 중 32.67%에서 정답 누출(solution leakage)을 발견. |
더 읽을거리