Scenario, Agentest, Inspect AI, Braintrust 등 주요 에이전트 테스트 프레임워크를 비교하고, 프로젝트 특성에 맞는 선택 기준과 환경 설정 방법을 안내합니다.
에이전트 테스트 프레임워크는 단순한 유틸리티가 아닙니다. 테스트의 패러다임 자체를 결정합니다. 어떤 프레임워크를 선택하느냐에 따라 테스트 작성 방식, 평가 기준, CI/CD 통합 전략이 달라집니다.
2026년 현재, 에이전트 테스트 프레임워크는 크게 두 가지 방향으로 발전하고 있습니다.
이번 장에서는 프레임워크 무관 도구 4종을 중심으로 살펴보겠습니다.
Scenario는 LangWatch에서 개발한 에이전트 행동 테스트 프레임워크입니다. 가장 큰 특징은 에이전트 프레임워크에 무관하게 동작한다는 점입니다. LangGraph, CrewAI, Pydantic AI, 또는 직접 구현한 에이전트 모두 테스트할 수 있습니다.
Scenario의 테스트 구조는 세 가지 핵심 요소로 구성됩니다.
pip install scenario-testingfrom scenario import Scenario, ScenarioAgent, ScenarioResult
import pytest
class MyAgentAdapter(ScenarioAgent):
"""테스트 대상 에이전트를 Scenario에 연결하는 어댑터"""
async def call(self, message: str) -> str:
# 실제 에이전트 호출 로직
response = await my_agent.invoke(message)
return response.content
@pytest.mark.asyncio
async def test_weather_query():
agent = MyAgentAdapter()
result: ScenarioResult = await Scenario(
name="날씨 조회",
description="사용자가 서울 날씨를 물으면 정확한 정보를 제공해야 합니다",
agent=agent,
success_criteria=[
"에이전트가 weather_api 도구를 호출했는가",
"응답에 기온 정보가 포함되어 있는가",
"응답이 한국어로 작성되었는가",
],
).run()
assert result.success is TrueScenario의 가장 강력한 기능 중 하나는 has_tool_call API입니다. 에이전트가 올바른 도구를 올바른 파라미터로 호출했는지 검증할 수 있습니다.
async def test_flight_booking_tools():
result = await Scenario(
name="항공편 예약",
description="사용자가 항공편 예약을 요청하면 적절한 도구를 순서대로 호출해야 합니다",
agent=agent,
).run()
state = result.state
# 도구 호출 여부 검증
assert state.has_tool_call("search_flights")
assert state.has_tool_call("book_flight")
# 파라미터까지 검증
assert state.has_tool_call(
"search_flights",
parameters={"departure": "ICN", "arrival": "NRT"}
)Scenario는 pytest와 자연스럽게 통합됩니다. 기존 Python 테스트 인프라(pytest fixtures, parametrize, markers 등)를 그대로 활용할 수 있어 학습 곡선이 낮습니다.
Agentest는 Node.js/TypeScript 생태계를 위한 에이전트 테스트 프레임워크입니다. 두 가지 핵심 기능이 돋보입니다.
Agentest는 시뮬레이션 사용자를 내장하고 있습니다. 실제 사용자의 행동을 모방하는 LLM이 에이전트와 자동으로 대화하며, 멀티턴 시나리오를 검증합니다.
import { AgentTest, SimulatedUser, LLMJudge } from "agentest";
const test = new AgentTest({
agent: myAgent,
simulatedUser: new SimulatedUser({
persona: "기술에 익숙하지 않은 50대 사용자",
goal: "인터넷 뱅킹으로 50만 원 송금하기",
constraints: [
"한 번에 이해하지 못하면 다시 질문한다",
"전문 용어를 사용하지 않는다",
],
}),
judge: new LLMJudge({
criteria: [
"에이전트가 사용자 눈높이에 맞게 설명했는가",
"송금 프로세스가 완료되었는가",
"보안 확인 절차를 거쳤는가",
],
}),
maxTurns: 15,
});
const result = await test.run();
console.log(result.passed); // true / false
console.log(result.score); // 0.0 ~ 1.0
console.log(result.turnCount); // 실제 대화 턴 수Agentest의 LLMJudge는 평가 기준을 자연어로 정의할 수 있습니다. 복잡한 스코어링 함수를 직접 구현하지 않아도, LLM이 대화 전체를 분석하여 각 기준의 충족 여부를 판단합니다.
Inspect AI는 영국 AI 안전 연구소(UK AI Safety Institute)에서 개발한 에이전트 수준 평가 프레임워크입니다. 안전성과 보안 평가에 특화되어 있습니다.
Inspect AI의 차별점은 샌드박스(Sandbox) 환경입니다. 에이전트가 코드를 실행하거나 파일 시스템에 접근하는 작업을 안전한 격리 환경에서 수행할 수 있습니다. 이는 코드 생성 에이전트나 시스템 관리 에이전트를 테스트할 때 특히 중요합니다.
from inspect_ai import Task, task, eval
from inspect_ai.dataset import Sample
from inspect_ai.scorer import model_graded_fact
from inspect_ai.solver import generate, use_tools
from inspect_ai.tool import bash, python
@task
def code_generation_eval():
return Task(
dataset=[
Sample(
input="피보나치 수열의 10번째 값을 계산하는 Python 함수를 작성하세요",
target="55",
),
Sample(
input="주어진 리스트에서 중복을 제거하는 함수를 작성하세요",
target="중복이 제거된 리스트를 반환",
),
],
solver=[use_tools([python()]), generate()],
scorer=model_graded_fact(),
sandbox="docker", # Docker 컨테이너에서 코드 실행
)Inspect AI의 샌드박스 기능은 Docker가 필요합니다. CI 환경에서 Docker-in-Docker 설정이 필요할 수 있으므로, 인프라 요구사항을 사전에 확인하세요.
Braintrust는 실용적인 멀티스텝 에이전트 평가 플랫폼입니다. 실험 추적, 데이터셋 관리, 점수 비교가 하나의 플랫폼에 통합되어 있어 팀 단위 운영에 적합합니다.
import braintrust
experiment = braintrust.init(project="customer-support-agent")
for test_case in dataset:
with experiment.start_span(name="agent_run") as span:
result = await agent.run(test_case.input)
span.log(
input=test_case.input,
output=result,
expected=test_case.expected,
scores={
"relevance": evaluate_relevance(result, test_case),
"completeness": evaluate_completeness(result, test_case),
"tool_accuracy": evaluate_tool_usage(result, test_case),
},
)
experiment.summarize()Anthropic이 발표한 "Demystifying evals for AI agents" 가이드는 프레임워크보다 평가 설계 원칙에 초점을 맞춥니다. 주요 권고사항을 요약하면 다음과 같습니다.
| 기준 | Scenario | Agentest | Inspect AI | Braintrust |
|---|---|---|---|---|
| 언어 | Python | TypeScript | Python | Python/TS |
| 에이전트 무관성 | 높음 | 중간 | 높음 | 높음 |
| 도구 호출 검증 | 강력함 | 기본 | 기본 | 기본 |
| 시뮬레이션 사용자 | 외부 연동 | 내장 | 외부 연동 | 외부 연동 |
| 샌드박싱 | 없음 | 없음 | Docker | 없음 |
| 실험 추적 | LangWatch | 없음 | 내장 로그 | 강력함 |
| CI/CD 통합 | pytest | Jest/Vitest | CLI | API |
| 안전성 평가 | 기본 | 기본 | 강력함 | 기본 |
| 팀 협업 | LangWatch UI | 없음 | 없음 | 대시보드 |
다음 질문에 답하면 적합한 프레임워크를 찾을 수 있습니다.
하나의 프레임워크만 선택할 필요는 없습니다. 단위 테스트는 Scenario로, E2E 안전성 평가는 Inspect AI로, 실험 추적은 Braintrust로 조합하는 것도 좋은 전략입니다.
간단한 Q&A 에이전트를 대상으로 Scenario 테스트를 작성해 보겠습니다.
import pytest
from scenario import ScenarioAgent
class QAAgentAdapter(ScenarioAgent):
def __init__(self):
self.agent = create_qa_agent() # 실제 에이전트 생성
async def call(self, message: str) -> str:
response = await self.agent.arun(message)
return response
@pytest.fixture
def qa_agent():
return QAAgentAdapter()import pytest
from scenario import Scenario
@pytest.mark.asyncio
async def test_factual_accuracy(qa_agent):
"""사실 기반 질문에 정확하게 답변하는지 검증"""
result = await Scenario(
name="사실 정확성 검증",
description="대한민국의 수도를 물으면 정확하게 답변해야 합니다",
agent=qa_agent,
success_criteria=[
"응답에 '서울'이 포함되어 있는가",
"추가적인 잘못된 정보가 없는가",
],
).run()
assert result.success is True
@pytest.mark.asyncio
async def test_out_of_scope_handling(qa_agent):
"""범위 밖 질문에 적절히 대응하는지 검증"""
result = await Scenario(
name="범위 밖 질문 처리",
description="에이전트의 전문 분야가 아닌 질문을 받으면 정중하게 거절해야 합니다",
agent=qa_agent,
success_criteria=[
"모르는 내용을 지어내지 않는가",
"답변할 수 없음을 명확히 밝혔는가",
"관련 리소스를 안내했는가",
],
).run()
assert result.success is True# 테스트 실행
pytest test_qa_scenarios.py -v --tb=short이번 장에서는 4개의 주요 에이전트 테스트 프레임워크를 비교하고, 선택 기준을 정리했습니다.
3장에서는 에이전트 테스트의 기초 계층인 도구 호출 검증을 깊이 다룹니다. 도구 이름, 파라미터, 출력의 3단계 검증 전략과 모킹 기법, 도구 체인 순서 검증, 불필요한 호출 감지까지 실제 코드와 함께 실습합니다.
이 글이 도움이 되셨나요?
관련 주제 더 보기
에이전트의 도구 호출 정확성을 이름, 파라미터, 출력의 3단계로 검증하는 방법과 모킹 전략, 도구 체인 순서 검증, 불필요한 호출 감지 기법을 다룹니다.
결정론적 소프트웨어와 비결정적 AI 에이전트의 근본적 차이를 짚고, 전통적 QA 방법론의 한계와 에이전트 전용 3단계 테스트 모델을 소개합니다.
사용자 시뮬레이션 기반 멀티턴 대화 테스트, 워크플로우 완료 검증, 반복 호출 및 모순적 계획 감지 등 E2E 시나리오 테스트의 전체 방법론을 다룹니다.