AI 에이전트를 평가하는 방법
요약
비결정론적 특성을 가진 AI 에이전트를 효과적으로 테스트하고 평가하는 방법을 다룹니다. Pydantic Evals를 활용하여 구조적 데이터 타입을 검증하는 IsInstance 방식과 질적 측면을 평가하는 LLMJudge 방식을 소개합니다.
핵심 포인트
- AI 에이전트는 LLM의 비결정론적 특성으로 인해 전통적인 TDD 방식의 단언(assertion) 적용이 어려움
- Pydantic Evals는 결정론적 동작과 주관적 특성을 모두 테스트할 수 있는 평가 라이브러리 제공
- IsInstance 평가기를 통해 에이전트의 구조화된 출력 타입이 올바른지 검증 가능
- LLMJudge를 사용하여 공감 능력이나 전문성 같은 질적 측면을 LLM 심판 모델로 점수화
고전적인 테스트 주도 개발 (TDD)에서 우리는 결정론적 (deterministic) 결과물을 다룹니다. 우리는 이미 사전에 알고 있는 값과 타입에 대해 단언 (assertion)을 작성합니다 — assert result == expected와 같이 작성하고 다음 단계로 넘어갑니다.
AI 에이전트는 이러한 규칙을 따르지 않습니다. 기반이 되는 LLM (Large Language Model)이 비결정론적 (non-deterministic)이기 때문에, 동일한 입력을 두 번 주더라도 서로 다른 문구의 출력이 생성될 수 있습니다. 그 사실 하나만으로도 고전적인 단언 (assertion) 모델은 깨집니다.
하지만 일관성 문제 외에도 두 번째 문제가 있습니다. 예를 들어 고객 지원 에이전트가 있다고 가정해 봅시다. 우리는 이 에이전트가 고객과 대화할 때 도움이 되고, 공감하며, 전문적이고, 친절하기를 원합니다. 설령 출력이 일관적이라 하더라도, 어떻게 그런 특성들을 테스트할 수 있을까요? 단언할 수 있는 고정된 값이나 타입이 없습니다. "공감 능력"은 타입이나 정확한 문자열이 아니며, 주관적인 판단의 영역입니다.
따라서 우리는 두 가지 별개의 문제에 직면해 있습니다: 예측 불가능한 출력, 그리고 본질적으로 주관적인 특성들입니다. AI 에이전트를 테스트한다는 것은 이 두 가지를 모두 해결한다는 것을 의미합니다.
Pydantic Evals의 등장
Pydantic Evals는 Pydantic AI가 AI 에이전트의 출력을 테스트하기 위해 권장하는 방식입니다. 이는 바로 이러한 종류의 테스트를 위해 특별히 제작된 일련의 평가기 (evaluators)를 제공하는 평가 라이브러리입니다. 일부는 에이전트 동작의 결정론적인 부분을 위해, 일부는 판단이 필요한 부분을 위해 만들어졌습니다.
결정론적 동작 테스트하기: IsInstance
AI 에이전트의 모든 것이 예측 불가능한 것은 아닙니다. 에이전트가 구조화된 출력 타입 (structured output type)으로 설정되어 있다면, 비록 그 _내용_은 변하더라도 응답의 형태가 올바른지는 여전히 테스트할 수 있으며, 테스트해야만 합니다.
예를 들어, 구조화된 출력 타입을 반환하는 에이전트가 있다고 가정해 봅시다:
from pydantic_ai import Agent
from dataclasses import dataclass
...
우리는 IsInstance 평가기를 사용하여 출력이 해당 Response 타입의 인스턴스인지 확인하는 테스트 케이스를 정의할 수 있습니다:
from pydantic_evals import Case
from pydantic_evals.evaluators import IsInstance
...
이는 정신적으로는 전형적인 단언 (assertion)입니다. 우리가 기대하는 타입을 정확히 알고 있으므로, 이를 직접 테스트합니다. 판단 (judgment call)이 필요하지 않습니다.
비결정론적 동작 테스트하기: LLMJudge
IsInstance와 같은 구조적 체크는 더 어려운 문제, 즉 "응답이 실제로 좋았는가?"라는 문제에는 도움이 되지 않습니다. 응답이 공감적이었나요? 전문적이었나요? 고객의 질문에 답변했나요?
여기에서 LLMJudge가 등장합니다. 이는 LLM을 심판 (judge)으로 사용하여, 사용자가 정의한 일련의 기준에 따라 에이전트의 출력을 평가합니다. 즉, 타입 체크로는 절대 잡아낼 수 없는 응답의 질적 (qualitative) 측면을 점수화합니다.
from pydantic_evals.evaluators import LLMJudge
quality_case = Case(
...
내부적으로 LLMJudge는 에이전트의 출력과 루브릭 (rubric)을 심판 모델 (judge model)로 전송하며, 심판 모델은 응답이 기준을 얼마나 잘 충족하는지를 반영하는 점수(및 종종 그 이유)를 반환합니다. 정확한 값에 대해 단언하는 대신, 하나의 "표준 (standard)"에 대해 단언하는 것입니다.
IsInstance와 LLMJudge를 함께 사용하면 앞서 언급한 두 가지 문제를 모두 해결할 수 있습니다. 결정론적 (deterministic) 부분에 대한 구조적 정확성과, 그 외 모든 것에 대한 루브릭 기반 점수 산출을 모두 다룹니다.
전체 워크스루 시청하기
루브릭 설정, 점수 읽기, 단일 테스트 스위트에서 여러 평가기 (evaluators)를 결합하는 방법을 포함하여 LLMJudge에 대해 더 자세히 다루는 내용은 제 YouTube 채널의 Master Pydantic AI 시리즈 중 일부인 이 영상에서 확인하실 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기