피드로 돌아가기
Dev.toAI/ML
원문 읽기
Probabilistic Assertion 도입으로 LLM API 테스트 커버리지 100% 달성
A QA engineer's first AI testing project - FastAPI + local LLM + pytest
AI 요약
Context
전통적인 UI/API 테스트의 Deterministic한 검증 방식으로는 LLM의 비결정론적 출력 특성을 처리하는 데 한계 존재. 동일한 Prompt에 대해 매번 다른 정답이 생성되는 Probabilistic한 특성을 수용하는 새로운 테스트 전략 필요.
Technical Solution
- Distribution-based Assertion 도입을 통한 정답 범위(Envelope) 검증 및 70% 이상의 일치율로 회귀 테스트 수행
- num_predict 옵션 설정을 통한 Output Token 제한으로 LLM 특유의 과잉 생성으로 인한 Latency 병목 해결
- respx 라이브러리를 활용한 Ollama 외부 의존성 Mocking으로 Failure Path(502, 503) 강제 생성 및 테스트 속도 최적화
- pytest.mark.xfail을 활용한 Moderation Filter의 False Positive 사례 문서화 및 지속적 추적 체계 구축
- Fast(<1s)와 Full(~90s) 티어로 테스트 스위트를 분리하여 피드백 루프 속도 최적화
Impact
- Mocking 도입을 통해 Failure Path 테스트 실행 시간을 90s에서 50ms 미만으로 단축
- Token 제한 설정을 통해 Warm Request 응답 시간을 35s에서 1~3s 수준으로 개선
- Failure Path 검증 추가를 통해 테스트 커버리지 85%에서 100%로 확대
Key Takeaway
AI 시스템 테스트는 '정확성(Correctness)'이 아닌 '강건성(Robustness)' 검증으로 패러다임을 전환하여, 단일 값이 아닌 허용 가능한 결과의 분포와 형태를 정의하는 설계가 핵심임.
실천 포인트
- LLM 출력 검증 시 Exact Match 대신 Keyword Inclusion 기반의 확률적 임계값(Threshold) 설정 검토 - 모델 생성 길이 제약(Max Tokens)을 통한 Latency 테스트의 변동성 제거 - 단순 Blocklist 방식의 Moderation Filter를 Intent 기반의 Classifier 모델로 대체하여 False Positive 감소 - 알려진 버그를 단순 티켓으로 관리하지 않고 xfail 마커를 통해 테스트 코드 내 살아있는 문서로 관리