Skip to main content

3. 에이전트 호출 함수 정의

mlflow.genai.evaluate()에 전달할 predict 함수를 정의합니다. 이 함수는 inputs dict를 받아서 에이전트의 응답 문자열을 반환해야 합니다.

Serving Endpoint 호출 방식

배포된 엔드포인트를 호출하는 방식입니다. 프로덕션 환경의 실제 성능을 측정할 때 사용합니다.

response.choices[0].message.content 구조 설명

Serving Endpoint는 OpenAI ChatCompletion API와 동일한 응답 구조를 따릅니다:

Agent 직접 호출 방식 (개발 중 테스트)

배포 전에 로컬에서 에이전트 코드를 직접 호출하여 빠르게 테스트할 때 사용합니다.

4. 평가 실행

기본 실행 (내장 스코어러 3종)

아래 코드는 평가 데이터셋의 각 질문에 대해 predict_fn을 호출하고, 3가지 내장 스코어러로 응답 품질을 채점합니다. 결과는 자동으로 현재 MLflow Experiment에 기록됩니다.

결과 테이블 확인

개별 질문별 점수를 DataFrame으로 확인할 수 있습니다. 낮은 점수를 받은 항목을 집중적으로 분석하세요.

5. 내장 스코어러 상세

Faithfulness 사용 (RAG 평가)

retrieved_context가 있어야 동작합니다. RAG 파이프라인에서 검색된 문서를 EvaluationResult에 함께 반환해야 합니다.

커스텀 Guidelines 스코어러

조직별 답변 규칙(한국어 작성, SQL 포함 등)을 Guidelines로 정의하면 자동으로 채점됩니다.

6. 커스텀 스코어러 작성

내장 스코어러로 부족할 때 직접 만들 수 있습니다.

@scorer 데코레이터 동작 원리

@scorer 데코레이터를 붙인 함수는 MLflow 평가 프레임워크가 자동으로 호출합니다. 함수의 파라미터 이름에 따라 자동으로 값이 주입됩니다:
  • inputs: 평가 데이터셋의 입력 값 (eval_dataset[i]["inputs"])
  • outputs: predict_fn이 반환한 에이전트 응답 문자열
  • expectations: 평가 데이터셋의 기대 값 (eval_dataset[i]["expectations"])
반환값은 {"score": 숫자, "justification": "이유 문자열"} 형식의 dict입니다.

7. Lakeflow Job으로 자동화

평가를 주기적으로 실행하려면 노트북을 만들어 Lakeflow Job에 등록합니다. 이렇게 하면 모델 변경이나 데이터 업데이트 후에도 품질을 지속적으로 모니터링할 수 있습니다.

평가 노트북 (eval_notebook.py)

아래 노트북은 평가 데이터셋 로드 -> 에이전트 호출 -> 평가 실행 -> 결과를 Delta 테이블에 기록하는 전 과정을 자동화합니다.

Job 등록 (Databricks CLI)

아래 명령은 매일 오전 9시(한국 시간)에 평가 노트북을 자동 실행하는 Lakeflow Job을 생성합니다.

Cron 표현식 해석: 0 0 9 * * ?

즉, **매일 오전 9시 0분 0초 (Asia/Seoul 시간대)**에 실행됩니다.

트러블슈팅

인증 실패: PERMISSION_DENIED 또는 401 Unauthorized

타임아웃: TimeoutError 또는 응답이 매우 느림

점수가 비정상적으로 낮을 때

correctness/mean이 0.3 이하로 나온다면 에이전트 문제가 아니라 평가 데이터셋 문제일 수 있습니다:
  • expected_response가 너무 구체적이면 의미는 맞지만 표현이 다른 답변에 낮은 점수를 줌
  • 핵심 키워드 중심으로 기대 답변을 작성하고, 세부 표현은 유연하게 허용하세요

평가 품질 개선 팁