Skip to main content
이 문서는 AI 에이전트 섹션의 일부입니다.

왜 평가가 중요한가요?

AI 에이전트는 비결정적(같은 입력에 매번 다른 출력)이므로, “잘 동작하는 것 같다”라는 주관적 판단만으로는 품질을 보장할 수 없습니다. 프로덕션 배포 전에 체계적인 평가가 필수적이며, 배포 후에도 지속적인 모니터링이 필요합니다. 전통적인 소프트웨어는 유닛 테스트로 정확한 출력을 검증할 수 있지만, AI 에이전트의 출력은 자연어 이므로 문자열 일치로는 판단할 수 없습니다. 예를 들어, “구매 후 30일 이내 반품 가능합니다”와 “30일 이내에 무료로 반품하실 수 있습니다”는 같은 의미이지만 다른 문자열입니다. 이런 이유로 LLM을 심판(Judge)으로 사용 하여 의미적 평가를 수행하는 방식이 표준으로 자리잡았습니다.
💡 LLM-as-Judge란? 다른 LLM을 사용하여 에이전트의 답변을 평가하는 방식입니다. 사람이 직접 평가하는 것보다 훨씬 빠르고 일관적이며, 대규모 평가 데이터셋에서도 효율적으로 작동합니다. Databricks는 MLflow의 내장 Scorer를 통해 이 방식을 자동화합니다.

평가 워크플로우

에이전트 평가는 단발성 작업이 아니라, 개발-배포-운영 전체 주기에 걸쳐 반복되는 지속적인 프로세스 입니다. 아래 워크플로우를 따라 체계적으로 에이전트 품질을 관리할 수 있습니다.
단계작업설명
1평가 데이터셋 준비질문과 기대 답변을 구성합니다
2평가 실행mlflow.genai.evaluate()로 자동 평가합니다
3결과 분석메트릭, 개별 점수를 확인합니다
4품질 기준 통과 여부기준 충족 시 배포, 미충족 시 개선 단계로 이동합니다
5a배포품질 기준 통과 시 프로덕션에 배포합니다
5b개선프롬프트, RAG, Tool을 수정하고 다시 평가를 실행합니다

워크플로우 단계 설명

  1. 평가 데이터셋 준비: 에이전트가 답변해야 할 질문과 기대 답변을 구성합니다. 수동 작성, 프로덕션 트레이스 수집, FAQ 변환 등 다양한 방법으로 데이터를 확보합니다.
  2. 평가 실행: mlflow.genai.evaluate()를 호출하여 에이전트가 각 질문에 대해 생성한 답변을 자동으로 평가합니다. 내장 Scorer와 커스텀 Scorer를 조합하여 다양한 관점에서 품질을 측정합니다.
  3. 결과 분석: 전체 메트릭 요약과 개별 질문별 점수를 MLflow UI에서 확인합니다. 어떤 유형의 질문에서 점수가 낮은지 패턴을 파악합니다.
  4. 판단: 사전에 정의한 품질 기준(예: Correctness >= 0.85, Safety >= 0.95)과 비교하여 배포 여부를 결정합니다.
  5. 개선 또는 배포: 기준을 통과하면 배포하고, 그렇지 않으면 프롬프트 수정, RAG 청크 전략 변경, Tool 로직 개선 등을 통해 에이전트를 개선한 후 다시 평가합니다.

평가 실행

기본 평가

import mlflow

# 1. 평가 데이터셋 준비
eval_data = [
    {
        "inputs": {"question": "반품 정책이 뭔가요?"},
        "expectations": {"expected_response": "구매 후 30일 이내 무료 반품 가능합니다."}
    },
    {
        "inputs": {"question": "배송 기간은?"},
        "expectations": {"expected_response": "일반 2~3일, 특급 당일~익일입니다."}
    },
    {
        "inputs": {"question": "회원 등급 기준은?"},
        "expectations": {"expected_response": "Silver 50만원, Gold 200만원, Platinum 500만원 이상입니다."}
    }
]

# 2. 평가 실행
results = mlflow.genai.evaluate(
    data=eval_data,
    predict_fn=my_agent.predict,
    scorers=[
        mlflow.genai.scorers.Correctness(),       # 정확도
        mlflow.genai.scorers.Safety(),             # 안전성
        mlflow.genai.scorers.RetrievalGroundedness(), # 근거성
        mlflow.genai.scorers.Guidelines(           # 가이드라인 준수
            guidelines=[
                "답변은 한국어로 작성해야 합니다",
                "출처를 명시해야 합니다",
                "모르면 '확인 후 답변드리겠습니다'라고 해야 합니다"
            ]
        )
    ]
)

# 3. 결과 확인
print(results.metrics)
# {'correctness/mean': 0.87, 'safety/mean': 0.98, 'guidelines/mean': 0.73}

display(results.tables["eval_results"])

predict_fn 없이 사전 생성된 응답으로 평가

에이전트를 실시간으로 호출하지 않고, 이미 수집한 응답 데이터로도 평가할 수 있습니다. 이 방식은 비용을 절약하고 재현성을 보장합니다.
# 이미 수집된 응답 데이터 (예: Inference Table에서 추출)
eval_data_with_outputs = [
    {
        "inputs": {"question": "반품 정책이 뭔가요?"},
        "outputs": {
            "response": "30일 이내 무료 반품이 가능합니다.",
            "retrieved_context": [
                {"content": "당사의 반품 정책: 구매 후 30일 이내 무상 반품..."}
            ]
        },
        "expectations": {"expected_response": "구매 후 30일 이내 무료 반품 가능합니다."}
    }
]

# predict_fn 없이 평가 — 이미 생성된 응답을 사용
results = mlflow.genai.evaluate(
    data=eval_data_with_outputs,
    scorers=[
        mlflow.genai.scorers.Correctness(),
        mlflow.genai.scorers.RetrievalGroundedness(),
    ]
)

내장 Scorer 상세

Databricks는 MLflow를 통해 여러 가지 사전 구축된 Scorer를 제공합니다. 각 Scorer는 LLM Judge를 사용하여 에이전트 응답의 다양한 품질 측면을 평가합니다.
Scorer평가 내용기대답변 필요점수 범위상세 설명
Correctness답변이 기대 답변과 의미적으로 일치하는지0~1기대 답변과 에이전트 답변을 LLM이 비교하여 의미적 일치 여부를 판단합니다. 단어 수준이 아닌 의미 수준 비교입니다
Safety유해/부적절한 내용이 없는지0~1폭력, 혐오, 편향, 개인정보 노출 등 유해 콘텐츠 포함 여부를 검사합니다. 프로덕션 배포 전 필수 Scorer입니다
RetrievalGroundedness검색 문서에 근거한 답변인지 (환각 여부)0~1에이전트가 검색한 문서의 내용에 기반하여 답변했는지 검증합니다. 환각(Hallucination)을 탐지하는 핵심 Scorer입니다
RetrievalRelevance검색 문서가 질문과 관련있는지0~1RAG 파이프라인에서 검색 단계의 품질 을 평가합니다. 관련 없는 문서가 검색되면 낮은 점수를 받습니다
Guidelines사용자 정의 가이드라인 준수 여부0~1자유 형식 텍스트로 작성한 가이드라인을 LLM이 해석하여 준수 여부를 판단합니다. 비즈니스별 규칙을 평가할 때 유용합니다

Guidelines Scorer 활용 예시

Guidelines Scorer는 비즈니스 도메인에 맞는 맞춤형 규칙 을 평가할 때 매우 유용합니다. 아래 예시처럼 다양한 가이드라인을 정의할 수 있습니다.
# 금융 서비스 에이전트 가이드라인 예시
financial_guidelines = mlflow.genai.scorers.Guidelines(
    guidelines=[
        "투자 권유 시 반드시 '이 정보는 투자 조언이 아닙니다' 면책 조항을 포함해야 합니다",
        "고객의 개인 금융 정보(계좌번호, 잔액 등)를 응답에 포함하지 않아야 합니다",
        "근거 없는 수익률 예측을 하지 않아야 합니다",
        "관련 법규나 규정을 인용할 때는 정확한 조항을 명시해야 합니다"
    ]
)