UK AISI의 Inspect AI를 분석합니다. 에이전트 벤치마크 GAIA, SWE-Bench, Cybench의 실행, 샌드박싱 환경, 태스크/솔버/스코러 아키텍처, 멀티에이전트 평가까지 다룹니다.
3장과 4장에서 살펴본 lm-evaluation-harness와 HELM은 모델의 지식과 추론 능력을 평가하는 데 탁월합니다. 그러나 현대 AI 시스템은 단순히 질문에 답하는 것을 넘어, 도구를 사용하고, 파일을 수정하고, 웹을 탐색하고, 코드를 실행하는 **에이전트(Agent)**로 진화하고 있습니다.
에이전트 평가는 전통적 벤치마크와 근본적으로 다른 도전을 제시합니다.
UK AISI(AI Safety Institute)가 개발한 Inspect AI는 바로 이러한 에이전트 수준의 평가를 위해 설계된 프레임워크입니다.
Inspect AI의 핵심 아키텍처는 세 가지 구성요소의 조합으로 이루어집니다.
태스크는 데이터셋, 솔버, 스코러를 하나로 묶는 최상위 단위입니다.
from inspect_ai import Task, task
from inspect_ai.dataset import Sample, MemoryDataset
from inspect_ai.scorer import match
from inspect_ai.solver import generate, system_message
@task
def math_reasoning() -> Task:
"""수학 추론 능력을 평가하는 태스크입니다."""
dataset = MemoryDataset(
samples=[
Sample(
input="127과 83의 합에서 45를 빼면 얼마입니까?",
target="165",
),
Sample(
input="한 변의 길이가 7cm인 정사각형의 넓이는?",
target="49",
),
]
)
return Task(
dataset=dataset,
solver=[
system_message("당신은 수학 문제를 단계적으로 풀어주는 전문가입니다. 최종 답은 숫자만 작성하세요."),
generate(),
],
scorer=match(numeric=True),
)솔버는 모델이 문제를 해결하는 전략을 정의합니다. 단순한 한 번의 생성부터 복잡한 멀티스텝 에이전트 루프까지 다양한 전략을 조합할 수 있습니다.
from inspect_ai.solver import (
Solver,
TaskState,
generate,
solver,
system_message,
use_tools,
)
from inspect_ai.tool import bash, python
@solver
def coding_agent() -> Solver:
"""코드를 작성하고 실행하여 문제를 해결하는 에이전트 솔버입니다."""
return chain(
system_message(
"당신은 Python 코드를 작성하고 실행하여 문제를 해결하는 에이전트입니다. "
"bash()와 python() 도구를 사용하여 코드를 실행할 수 있습니다. "
"문제를 단계적으로 분석하고, 코드를 작성하여 검증하세요."
),
use_tools([bash(), python()]),
generate(),
)스코러는 모델의 출력을 정답과 비교하여 점수를 산출합니다. 단순 문자열 매칭부터 LLM 기반 채점까지 다양한 방식을 지원합니다.
from inspect_ai.scorer import Score, Scorer, Target, scorer, CORRECT, INCORRECT
@scorer(metrics=["accuracy"])
def code_execution_scorer() -> Scorer:
"""코드 실행 결과를 기반으로 채점합니다."""
async def score(state: TaskState, target: Target) -> Score:
# 모델이 생성한 코드의 실행 결과를 확인
last_output = state.messages[-1].content
if target.text.strip() in last_output:
return Score(value=CORRECT, explanation="실행 결과가 정답과 일치합니다.")
return Score(value=INCORRECT, explanation=f"기대: {target.text}, 실제: {last_output}")
return scoreInspect AI는 100개 이상의 사전 빌드 평가를 제공하며, 특히 에이전트 벤치마크에서 강점을 보입니다.
GAIA(General AI Assistants)는 실제 세계의 복잡한 질문에 답하기 위해 웹 검색, 파일 처리, 계산 등 다양한 도구를 복합적으로 사용해야 하는 벤치마크입니다.
from inspect_ai import eval
from inspect_ai.model import get_model
# GAIA 벤치마크 실행
results = eval(
tasks=["gaia"],
model=get_model("openai/gpt-4o"),
max_messages=30, # 에이전트 루프 최대 메시지 수
max_tool_calls=20, # 최대 도구 호출 수
)GAIA의 문제는 난이도에 따라 3단계로 구분됩니다.
| 레벨 | 설명 | 필요 도구 수 | 인간 정답률 |
|---|---|---|---|
| Level 1 | 단일 도구로 해결 가능 | 1-2개 | 92% |
| Level 2 | 복수 도구 조합 필요 | 3-5개 | 86% |
| Level 3 | 복잡한 다단계 추론 + 도구 사용 | 5개 이상 | 79% |
SWE-Bench는 실제 오픈소스 프로젝트의 GitHub 이슈를 해결하는 능력을 평가합니다. 에이전트는 코드베이스를 탐색하고, 버그를 찾고, 패치를 작성하고, 테스트를 통과시켜야 합니다.
from inspect_ai import Task, task
from inspect_ai.dataset import hf_dataset
from inspect_ai.scorer import includes
from inspect_ai.solver import generate, use_tools
from inspect_ai.tool import bash
@task
def swe_bench_lite() -> Task:
"""SWE-Bench Lite 벤치마크를 실행합니다."""
return Task(
dataset=hf_dataset(
"princeton-nlp/SWE-bench_Lite",
split="test",
),
solver=[
use_tools([bash(timeout=120)]),
generate(),
],
scorer=includes(),
sandbox="docker", # Docker 샌드박스에서 실행
)Cybench는 CTF(Capture The Flag) 스타일의 사이버 보안 도전 과제를 통해 에이전트의 보안 관련 능력을 평가합니다.
Cybench와 같은 보안 관련 벤치마크는 반드시 격리된 샌드박스 환경에서 실행해야 합니다. 에이전트가 네트워크 스캔, 취약점 공격 등의 행동을 수행하므로, 호스트 시스템이나 외부 네트워크에 영향을 미치지 않도록 해야 합니다.
에이전트 평가에서 샌드박싱(Sandboxing)은 선택이 아닌 필수입니다. Inspect AI는 Docker 기반 샌드박스를 네이티브로 지원합니다.
from inspect_ai import Task, task
from inspect_ai.solver import generate, use_tools
from inspect_ai.tool import bash, python
@task
def sandboxed_coding_eval() -> Task:
"""샌드박스된 환경에서 코딩 평가를 수행합니다."""
return Task(
dataset="my_coding_dataset",
solver=[
use_tools([
bash(timeout=60),
python(timeout=60),
]),
generate(),
],
scorer=code_execution_scorer(),
sandbox="docker",
sandbox_config={
"image": "python:3.12-slim",
"memory_limit": "2g",
"cpu_limit": 2,
"network_mode": "none", # 네트워크 격리
},
)샌드박스의 격리 수준은 평가 목적에 따라 조정합니다.
| 격리 수준 | 설정 | 사용 사례 |
|---|---|---|
| 최소 | 파일시스템만 격리 | 일반 코딩 태스크 |
| 중간 | 파일시스템 + 네트워크 제한 | 웹 스크래핑 관련 태스크 |
| 최대 | 완전 격리 + 리소스 제한 | 보안 관련 태스크 |
Inspect AI는 단일 모델 평가를 넘어 멀티에이전트 시스템의 평가도 지원합니다.
Inspect AI의 특별한 기능 중 하나는 외부 에이전트 시스템을 직접 평가할 수 있다는 점입니다. Claude Code, Codex CLI, Gemini CLI 등 외부 에이전트를 Inspect AI의 평가 파이프라인에 연결하여 동일한 벤치마크에서 비교할 수 있습니다.
from inspect_ai import Task, task
from inspect_ai.solver import Solver, TaskState, solver
@solver
def external_agent_solver(agent_command: str) -> Solver:
"""외부 에이전트를 솔버로 래핑합니다."""
async def solve(state: TaskState) -> TaskState:
import subprocess
# 외부 에이전트에게 태스크 전달
result = subprocess.run(
[agent_command, "--task", state.input_text],
capture_output=True,
text=True,
timeout=300,
)
state.output = result.stdout
return state
return solve멀티에이전트 시나리오에서는 에이전트 간의 협력이나 경쟁을 평가할 수 있습니다. 예를 들어, 한 에이전트가 문제를 분석하고 다른 에이전트가 해결하는 분업 구조의 효과를 측정할 수 있습니다.
멀티에이전트 평가에서는 전체 시스템의 결과뿐 아니라 각 에이전트의 개별 기여도도 함께 측정하는 것이 좋습니다. 이를 통해 병목이 되는 에이전트를 식별하고 시스템을 최적화할 수 있습니다.
Inspect Cyber는 Inspect AI의 사이버 보안 평가 전문 확장입니다. CTF 도전 과제를 에이전트에게 부여하고, 해결 과정과 결과를 체계적으로 평가합니다.
# Inspect Cyber 설치
pip install inspect-cyber
# CTF 벤치마크 실행
inspect eval inspect_cyber/ctf \
--model openai/gpt-4o \
--sandbox docker \
--max-messages 50Inspect Cyber가 평가하는 영역은 다음과 같습니다.
# 단일 태스크 실행
inspect eval my_task.py --model openai/gpt-4o
# 여러 모델로 동일 태스크 실행
inspect eval my_task.py \
--model openai/gpt-4o \
--model anthropic/claude-3-5-sonnet \
--model google/gemini-1.5-pro
# 결과를 특정 디렉토리에 저장
inspect eval my_task.py \
--model openai/gpt-4o \
--log-dir ./eval_logs/# 평가 로그 조회
inspect log list
# 특정 실행 결과 상세 보기
inspect log read <log-id>
# 웹 뷰어로 결과 시각화
inspect viewInspect AI의 웹 뷰어는 각 태스크 인스턴스에 대한 모델의 전체 대화 기록, 도구 호출 내역, 점수를 시각적으로 보여줍니다. 에이전트가 어떤 경로로 문제를 해결했는지 추적할 수 있어, 디버깅과 분석에 매우 유용합니다.
6장에서는 지금까지 살펴본 주요 프레임워크 외에 평가 도구 생태계 전체를 조망합니다. DeepEval, promptfoo, Evidently AI, W&B Weave, LangSmith, Ragas 등 실무 도구들을 비교하고, 학술 평가와 실무 평가의 차이점, 그리고 상황에 맞는 프레임워크 선택 기준을 제시합니다.
이 글이 도움이 되셨나요?
관련 주제 더 보기
DeepEval, promptfoo, Evidently AI, W&B Weave, LangSmith, Ragas 등 실무 평가 도구를 비교합니다. 학술 vs 실무 평가의 차이점과 프레임워크 선택 의사결정 트리를 제시합니다.
Stanford CRFM의 HELM을 분석합니다. 7가지 메트릭 차원, 16가지 핵심 시나리오, HELM Lite와 MedHELM 변형, 실행 방법과 결과 분석까지 종합적 평가 접근법을 탐구합니다.
도메인 특화 평가 하네스를 처음부터 설계하고 구축합니다. 평가 태스크 설계, 메트릭 정의, LLM-as-Judge 구현, 인간 평가 통합, Golden Dataset 관리를 코드와 함께 실습합니다.