결정론적 소프트웨어와 비결정적 AI 에이전트의 근본적 차이를 짚고, 전통적 QA 방법론의 한계와 에이전트 전용 3단계 테스트 모델을 소개합니다.
전통적인 소프트웨어 테스트는 하나의 강력한 전제 위에 세워져 있습니다. 동일한 입력에 대해 항상 동일한 출력이 나온다는 **결정론(Determinism)**입니다. 함수 add(2, 3)은 언제 호출하든 5를 반환하고, REST API에 같은 요청을 보내면 같은 응답이 돌아옵니다. 이 전제 덕분에 우리는 assert문 하나로 정확성을 검증할 수 있었습니다.
def test_add():
assert add(2, 3) == 5 # 항상 참 — 결정론적그러나 **AI 에이전트(AI Agent)**는 이 전제를 정면으로 깨뜨립니다. 같은 프롬프트를 주더라도 실행할 때마다 다른 문장을 생성하고, 다른 도구를 선택하며, 다른 순서로 작업을 수행합니다. 이것은 버그가 아니라 **LLM(Large Language Model)**의 본질적 특성입니다.
비결정성은 에이전트의 결함이 아닙니다. 창의적 문제 해결과 자연스러운 대화를 가능하게 하는 핵심 특성이며, 테스트 전략이 이에 맞게 진화해야 합니다.
두 패러다임의 차이를 구체적으로 비교해 보겠습니다.
| 차원 | 결정론적 소프트웨어 | 비결정적 에이전트 |
|---|---|---|
| 출력 예측 | 입력이 같으면 출력이 같음 | 입력이 같아도 출력이 다름 |
| 검증 방식 | 정확 일치(assertEqual) | 범위/점수 기반 평가 |
| 실패 정의 | 예상 출력과 불일치 | 품질 임계값 미달 |
| 상태 관리 | 명시적, 추적 가능 | 암묵적, 컨텍스트 의존 |
| 재현성 | 높음 | 낮음 — 동일 조건에서도 변동 |
| 테스트 비용 | 낮음 (밀리초 단위) | 높음 (API 호출 비용 + 지연) |
에이전트는 단순히 "응답을 생성하는 모델"이 아닙니다. 외부 도구를 호출하고, 멀티스텝 추론을 수행하며, 환경과 상호작용하는 자율적 시스템입니다. 이 복잡성이 테스트를 근본적으로 어렵게 만듭니다.
기존 QA 방법론을 에이전트에 그대로 적용하면 다음과 같은 문제에 부딪힙니다.
def test_agent_response():
response = agent.run("서울 날씨를 알려줘")
# 이 테스트는 거의 항상 실패합니다
assert response == "서울의 현재 기온은 15도이며 맑은 날씨입니다."에이전트는 "서울은 현재 15도로 화창합니다"라고 답할 수도, "현재 서울 기온 15도, 맑음"이라고 답할 수도 있습니다. 의미는 같지만 문자열은 다릅니다.
에이전트가 "항공편을 예약해 줘"라는 요청을 처리할 때, 한 번은 search_flights -> select_flight -> book_flight 순서로, 다른 한 번은 check_user_preferences -> search_flights -> compare_prices -> book_flight 순서로 실행할 수 있습니다. 두 경로 모두 올바른 결과를 낼 수 있지만, 고정된 호출 순서를 기대하는 테스트는 실패합니다.
멀티턴 대화에서 에이전트의 행동은 이전 턴의 맥락에 강하게 의존합니다. 단일 턴만 고립시켜 테스트하면 실제 사용 패턴을 반영하지 못합니다.
전통적인 단위 테스트는 밀리초 단위로 수천 개를 실행할 수 있습니다. 반면 에이전트 테스트는 LLM API 호출이 필요하므로, 건당 수초에서 수십 초가 걸리고 비용도 발생합니다. CI/CD 파이프라인에 수백 개의 에이전트 테스트를 넣는 것은 현실적이지 않을 수 있습니다.
이러한 한계를 극복하기 위해, 에이전트 테스트 커뮤니티에서는 3단계 테스트 모델이 표준으로 자리잡고 있습니다.
에이전트가 사용하는 **개별 도구(Tool)**의 정확성을 검증합니다. 도구 자체는 결정론적인 코드이므로 전통적인 테스트 방식이 통합니다.
비결정적 출력의 품질을 점수로 측정합니다. 정확 일치가 아닌, 충실성(Faithfulness), 관련성(Relevance), 일관성(Coherence) 등의 차원에서 0.0~1.0 사이의 점수를 매깁니다.
실제 사용자 시나리오를 처음부터 끝까지 시뮬레이션합니다. 시뮬레이션 사용자(Simulated User)가 에이전트와 멀티턴 대화를 나누며, 워크플로우가 성공적으로 완료되는지 검증합니다.
3단계 모델의 핵심은 비용 효율적인 피라미드 구조입니다. 저비용의 단위 테스트를 가장 많이, 고비용의 E2E 테스트를 가장 적게 실행합니다. 전통적인 테스트 피라미드와 동일한 원리입니다.
에이전트 테스트 분야는 빠르게 성숙하고 있습니다. 주요 도구와 프레임워크를 살펴보겠습니다.
LangChain, CrewAI 등 에이전트 개발 플랫폼들도 자체 평가 기능을 내장하기 시작했습니다. Anthropic은 "Demystifying evals for AI agents" 가이드를 통해 에이전트 평가의 모범 사례를 제시하고 있습니다.
DeepEval, Ragas 등 기존 LLM 평가 도구들도 에이전트 워크플로우 평가를 지원하도록 확장되고 있습니다.
본 시리즈는 총 10장에 걸쳐 AI 에이전트 테스트의 전체 여정을 다룹니다.
각 장은 이론과 실습을 균형 있게 다루며, Python과 TypeScript 코드 예제를 포함합니다. 시리즈를 끝까지 따라가면 실제 프로덕션 에이전트에 적용 가능한 품질 보증 파이프라인을 구축할 수 있습니다.
이번 장에서는 AI 에이전트 테스트가 왜 기존 소프트웨어 테스트와 근본적으로 다른지 살펴보았습니다. 핵심 내용을 요약하면 다음과 같습니다.
2장에서는 주요 에이전트 테스트 프레임워크를 깊이 비교합니다. Scenario, Agentest, Inspect AI, Braintrust의 아키텍처와 API를 살펴보고, 프로젝트 특성에 따른 선택 기준을 제시합니다. 직접 테스트 환경을 설정하는 실습도 포함됩니다.
이 글이 도움이 되셨나요?
관련 주제 더 보기
Scenario, Agentest, Inspect AI, Braintrust 등 주요 에이전트 테스트 프레임워크를 비교하고, 프로젝트 특성에 맞는 선택 기준과 환경 설정 방법을 안내합니다.
에이전트의 도구 호출 정확성을 이름, 파라미터, 출력의 3단계로 검증하는 방법과 모킹 전략, 도구 체인 순서 검증, 불필요한 호출 감지 기법을 다룹니다.
사용자 시뮬레이션 기반 멀티턴 대화 테스트, 워크플로우 완료 검증, 반복 호출 및 모순적 계획 감지 등 E2E 시나리오 테스트의 전체 방법론을 다룹니다.