1. 왜 Trace 분석과 평가가 필요한가
LLM (Large Language Model) 기반 애플리케이션과 에이전트 (Agent) 는 블랙박스 특성을 갖습니다. 동일한 입력에도 확률적으로 다른 출력이 나오며, 내부 추론 과정이 불투명합니다. 이런 특성은 다음 세 가지 문제를 만들어냅니다.1-1. 블랙박스 문제
전통적인 소프트웨어는 단위 테스트 (Unit Test) 로 품질을 보장할 수 있습니다. 하지만 LLM 응답은 결정론적이지 않기 때문에, 실제 실행 흔적 (Trace) 을 기록하고 분석 해야만 문제의 원인을 추적할 수 있습니다.| 일반 소프트웨어 | LLM 애플리케이션 |
|---|---|
| 입력 → 결정론적 출력 | 입력 → 확률적 출력 |
| 단위 테스트로 검증 가능 | Trace 기반 분석 필요 |
| 코드 디버깅으로 원인 파악 | Span 단위 분석으로 원인 파악 |
| 배포 후 변경 없음 | 프롬프트/모델/데이터 드리프트 발생 |
1-2. 프로덕션 품질 보장
개발 환경에서 잘 동작하던 앱이 프로덕션에서 품질이 저하되는 이유는 다양합니다.- 데이터 드리프트 (Data Drift): 사용자가 예상치 못한 질문 패턴 사용
- 모델 드리프트 (Model Drift): LLM 공급자가 모델을 조용히 업데이트
- 컨텍스트 오염 (Context Pollution): 검색된 문서의 품질 저하
- 프롬프트 엣지 케이스 (Prompt Edge Case): 특정 입력에서만 실패하는 케이스
1-3. 비용 최적화
LLM API 호출 비용은 입력/출력 토큰 수에 비례합니다. Trace 데이터를 분석하면 다음을 최적화할 수 있습니다.- 불필요하게 긴 시스템 프롬프트 식별
- 중복 LLM 호출 (캐싱으로 대체 가능한 구간) 발견
- 응답 생성에 불필요한 토큰이 포함된 패턴 탐지
- 고비용 모델 호출을 저비용 모델로 대체 가능한 케이스 분류
2. Trace 검색과 필터링
2-1. mlflow.search_traces() API
mlflow.search_traces() 는 기록된 Trace 를 Python 코드로 검색하는 핵심 API 입니다. 반환값은 pandas.DataFrame 입니다.
2-2. 태그 기반 필터링
2-3. 상태 및 시간 기반 필터링
2-4. UI에서의 Trace 탐색
MLflow UI 에서 Trace 를 탐색할 때는 다음 경로를 사용합니다.- Experiment 페이지 →
Traces탭 클릭 - 좌측 필터 패널에서 Status, 날짜 범위, 태그 필터 적용
- 특정 Trace 클릭 → Span 트리 (Span Tree) 뷰에서 단계별 실행 확인
- Span 클릭 시 입출력 (Input/Output), 속성 (Attributes), 이벤트 (Events) 상세 확인
Databricks 환경에서는 MLflow UI 가 Workspace UI 에 통합되어 있습니다. Experiment 페이지 접근 경로: Experiments → (실험명) → Traces 탭