피드로 돌아가기
Dev.toAI/ML
원문 읽기
131개 테스트 기반 4계층 Eval Harness 구축을 통한 LLM 시맨틱 회귀 방지
I Built a 131-Test Eval Harness Before Writing New Features. Here's the Silent Failure It Caught.
AI 요약
Context
LLM 기반 에이전트의 비결정적 특성으로 인해 기존 Unit Test의 Deterministic Contract 검증 방식으로는 런타임 시맨틱 오류 포착에 한계 발생. 특히 Groq(Llama 3.3)와 Claude 간의 모델 라우팅 구조에서 모델별 출력 형식 차이 및 시스템 프롬프트 무시로 인한 Silent Failure 위험 증가.
Technical Solution
- Layer 1(Deterministic): 메시지 파싱 및 라우팅 로직 검증을 위한 표준 Unit Test 설계로 비용 제로의 기본 정합성 확보
- Layer 2(Structured Output): LLM 호출 후 JSON 스키마 및 Tool 선택의 유효성을 검증하여 모델 간 출력 포맷 불일치 해결
- Layer 3(Behavioral/Semantic): LLM-as-judge 구조를 도입하여 응답의 의미론적 속성(예: 금융 조언 금지)을 확률적으로 평가하는 시맨틱 검증 구현
- Layer 4(Conversation State): 다회차 대화 시나리오 스크립트를 통한 컨텍스트 누수 및 상태 유지 능력 검증
- Property-based Testing: 특정 문자열 일치(String-match)가 아닌 응답의 '속성'을 검증하여 프롬프트 수정 시 테스트 깨짐 현상 방지
- Custom Harness 설계: 외부 프레임워크의 추상화 오버헤드를 제거하고 실제 라우팅 로직에 최적화된 600라인 규모의 경량 도구 직접 구현
실천 포인트
- LLM 출력물 검증 시 `assertEqual` 대신 'LLM-as-judge'를 통한 속성 기반 검증 도입 검토 - 모델 라우팅 구조 사용 시 모델별 출력 포맷 차이를 잡는 Structured Output Validation 계층 추가 - 테스트 비용 최적화를 위해 'Deterministic -> Structured -> Semantic -> Multi-turn' 순의 계층적 실행 파이프라인 구축 - 프롬프트 변경 시 테스트가 깨지지 않도록 '문구'가 아닌 '행위 속성' 중심으로 테스트 케이스 작성