피드로 돌아가기
A QA engineer's first AI testing project - FastAPI + local LLM + pytest
Dev.toDev.to
AI/ML

Probabilistic Assertion 도입으로 LLM API 테스트 커버리지 100% 달성

A QA engineer's first AI testing project - FastAPI + local LLM + pytest

Sara Bezjak2026년 4월 24일6intermediate

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 마커를 통해 테스트 코드 내 살아있는 문서로 관리

원문 읽기