LLM 평가 (Evaluation)
LLM 평가 (Evaluation)
평가는 AI 앱 출력의 품질을 측정하는 일이에요 — 응답이 정확한지, 근거에 기반하는지, 안전한지, 사용자 의도에 부합하는지 같은 걸요. 전통적인 소프트웨어와 달리 LLM 출력은 단순한 assertion으로는 테스트할 수 없어요. 평가는 이런 상황에서 회귀를 잡고, 모델·프롬프트 변경을 비교하며, 배포 전에 자신감을 쌓는 체계적인 방법을 제공해요. Phoenix는 결정적 코드 기반 평가자(정확 매치, regex, 커스텀 휴리스틱)와, 두 번째 모델이 루브릭에 맞춰 출력을 점수화하는 LLM-as-a-judge 평가자를 모두 지원해요.
두 가지 평가 방식
- 클라이언트 측 평가(SDK): Python·TypeScript SDK로 Phoenix 트레이스·데이터셋·어떤 데이터 소스에든 평가를 실행해요. 평가 로직·판정 모델·파이프라인을 온전히 제어할 수 있어요.
- 서버 측 평가(UI): Phoenix UI에서 평가자를 설정해 데이터셋에 연결하면, 코드 없이 실험 결과를 자동으로 점수화해요.
주요 특징
- 모델 비종속(Model Agnostic): OpenAI·LiteLLM·LangChain·AI SDK 등 어댑터로 판정 모델을 쉽게 교체하거나 선호하는 프로바이더를 유지할 수 있어요.
- 강력한 입력 매핑: 중첩 데이터·복잡한 입력을 평가자 요구사항에 쉽게 매핑해요.
- 사전 빌드 메트릭: RAG·도구 호출 에이전트 같은 일반 과제와 사용 사례용 메트릭이 준비돼 있어요.
- 평가자 네이티브 계측: 평가자가 OpenTelemetry 트레이싱으로 관찰·데이터셋 큐레이션에 활용돼요.
- 고속 성능: 내장 동시성·배칭으로 최대 20배 속도 향상을 얻을 수 있어요.
- 내장 설명(Explanations): 모든 Phoenix LLM 평가가 기본적으로 설명을 반환해 더 나은 결과·더 풍부한 신호를 제공해요.
도구 호출로 구조화 출력(Structured Output via Tool Calling)
LLM 평가자는 자유 텍스트를 파싱하는 대신 함수 호출(도구 사용)로 구조화된 판정을 추출해요. Phoenix는 평가자 출력 설정에서 도구를 생성해요. 예를 들어 correctness 평가자는 label(correct/incorrect enum)과 explanation을 properties로 갖는 object 타입 파라미터를 갖는 도구가 돼요. LLM은 자유 텍스트 대신 이 도구를 호출하도록 요구받고, Phoenix는 도구 호출을 파싱해 라벨을 숫자 점수에 매핑해요. 이 방식은 클라이언트 측 SDK와 서버 측 평가자 모두에 적용돼요.
실행기(Executors)
내부적으로 Phoenix는 평가를 더 빠르고 안정적으로 실행하는 실행기를 사용해요. 인프라 복잡성을 자동으로 처리해 주는 부분이에요.
- rate limit 처리: LLM 프로바이더가 요청을 조절하면 자동으로 재시도해요.
- 오류 관리: 일시적 실패와 영구 오류를 구분해 재시도가 API 예산을 낭비하지 않게 해요.
- 동적 동시성: 프로바이더 성능에 따라 병렬도를 조절해 rate limit을 트리거하지 않으면서 처리량을 극대화해요.
이 덕분에 수천 건의 평가를 직접 재시도·동시성 코드를 작성하지 않고도 실행할 수 있어요.
평가자 트레이싱(Evaluator Tracing)
모든 평가자 실행은 OpenTelemetry로 자동 트레이스되어 전용 Phoenix 프로젝트로 전송돼요. 평가자가 어떻게 판단하는지 완전히 투명하게 확인할 수 있고, 입력 데이터·판정 LLM에 보낸 정확한 프롬프트·모델의 전체 추론·최종 점수·실행 시점이 모두 포착돼요. Phoenix 트레이스 뷰어로 평가 트레이스를 탐색해 체계적 편향을 찾아내고, 평가자 성능을 지속적으로 개선할 수 있어요.
더 알아보기
- 프로덕션 상시 모니터링: Arize AX 온라인 평가(Online Evals) — 경고·임계값 트리거
- 커스텀 LLM 평가자: 프롬프트 템플릿으로 평가자 만들기
- 사전 빌드 메트릭: 충실성·관련성 등 미리 테스트된 평가자 사용하기