promptfoo로 Bedrock 모델 성능, 객관적으로 평가하기
LLM 응답 품질의 불확실성 해소를 위해 promptfoo 오픈소스 프레임워크를 활용한 평가 방법 소개
Amazon Bedrock의 Claude Sonnet, Claude Haiku, Nova Pro 모델을 대상으로 성능 비교 평가 수행
결정적 평가와 모델 기반 평가(LLM judge) 방식을 결합하여 객관성과 주관적 품질 동시 측정
응답 속도, 정확성, 간결성 등 다양한 지표 기반 평가 및 가중 평균(Weighted Average)을 통한 최종 합격 여부 판정
promptfoo: LLM 평가를 위한 선언적 테스트 프레임워크
promptfoo는 LLM 애플리케이션 개발에서 프롬프트(Prompt)와 모델 변경 시 품질을 보장하기 위한 단위 테스트 프레임워크입니다. YAML 설정 파일 하나로 프롬프트, 비교 대상 모델(Provider), 테스트 케이스(Test Case)를 정의하여 다양한 조합의 평가를 한 번에 실행할 수 있습니다.
로컬 우선 실행(Local-first Execution): 테스트 데이터가 외부로 전송되지 않아 보안 및 컴플라이언스(Security & Compliance) 측면에서 유리합니다.
80+ 프로바이더 지원: OpenAI, Anthropic, Amazon Bedrock 등 다양한 LLM 제공사를 동일한 방식으로 평가 가능합니다.
CI/CD 통합: 테스트 실패 시 0이 아닌 종료 코드를 반환하여 빌드 자동 중단(Automated Build Failure)에 활용할 수 있습니다.
이러한 특징 덕분에 promptfoo는 LLM 기반 서비스의 지속적인 품질 관리(Continuous Quality Management)에 필수적인 도구로 자리매김하고 있습니다.
Amazon Bedrock: 통합 API로 다양한 LLM 모델 관리
Amazon Bedrock은 Anthropic의 Claude와 Amazon의 Nova 같은 이종 LLM 모델을 단일 API와 IAM 인증으로 호출할 수 있게 지원합니다. 이는 모델 제공사별 API 키 관리의 번거로움을 해소하고, 새로운 모델 도입 및 교체를 용이하게 합니다.
추론 프로파일(Inference Profile): AWS 리소스에 대한 인증 정보를 활용하여 Bedrock 모델 호출을 특정 리전으로 라우팅하고, 전 세계 리전으로 부하를 분산시켜 처리량과 가용성을 높입니다.
간편한 모델 추가: 설정 파일에 모델 ID만 추가하면 평가 대상 모델을 쉽게 확장할 수 있어, 최신 LLM 동향에 빠르게 대응할 수 있습니다.
Bedrock의 이러한 통합 관리 기능은 promptfoo와 같은 평가 도구와의 연동을 더욱 간편하게 만들어, LLM 기반 서비스의 효율적인 모델 선정 및 운영을 가능하게 합니다.
결정적 평가 vs. 모델 기반 평가 (LLM Judge)
promptfoo는 두 가지 핵심 평가 방식을 제공하여 LLM 응답의 품질을 다각도로 측정합니다.
결정적 평가(Deterministic Evaluation): 응답 시간(Latency), 특정 문자열 포함 여부(Contains), JSON 유효성(Is-JSON) 등 코드만으로 객관적 판정이 가능한 기준을 사용합니다. 이는 명확한 합격/불합격 판정이 필요할 때 유용합니다.
모델 기반 평가(Model-assisted Evaluation): 'llm-rubric'과 같은 기능을 통해 채점용 LLM(LLM Judge)이 자연어로 작성된 평가 기준을 해석하고 점수를 매깁니다. "기술적으로 정확한가?"와 같은 주관적이고 복잡한 품질 기준을 평가할 수 있어, 사람의 개입 없이도 일관된 평가가 가능합니다.
이 두 방식을 조합함으로써, promptfoo는 정량적 지표와 정성적 피드백을 모두 확보하여 LLM 응답의 신뢰도를 높입니다. 다만, LLM Judge의 성능은 평가 대상 모델보다 우수해야 한다는 점을 유의해야 합니다.
가중 평균과 Threshold를 이용한 종합 평가 점수 산출
promptfoo는 여러 평가 기준의 점수를 종합하여 최종 합격 여부를 결정합니다. 각 평가 기준에는 가중치(Weight)를 부여하여 중요도에 따라 점수에 반영할 수 있으며, 모든 기준의 점수는 가중 평균(Weighted Average)으로 계산됩니다.
Threshold 설정: 계산된 가중 평균 점수가 지정된 Threshold 값 이상일 때 해당 테스트 케이스를 통과시킵니다. 예를 들어 0.7 Threshold는 "대부분의 기준을 만족하지만 약간의 부족함은 허용"하는 현실적인 합격선으로 통용됩니다.
Threshold 미설정 시: 모든 개별 기준을 통과해야만 테스트 케이스가 통과됩니다.
이러한 메커니즘은 평가 기준의 중요도를 동적으로 조절하고, 유연한 합격/불합격 정책을 수립하는 데 도움을 줍니다. 결과적으로, 단순히 점수만 나열하는 것이 아니라 종합적인 품질 판단을 가능하게 합니다.
LLM Judge 비용 최적화 전략
LLM Judge를 활용한 평가는 응답 생성보다 채점 과정에서 더 많은 토큰을 소비하는 경향이 있습니다. 이는 채점 시마다 평가 기준과 함께 원본 답변 전체가 Judge 모델의 입력으로 들어가기 때문입니다.
Judge 모델 경량화: Claude Opus 대신 Claude Sonnet이나 Haiku와 같이 더 가벼운 모델을 채점용으로 사용하면 토큰 단가를 크게 절감할 수 있습니다.
Rubric 최적화: 평가 기준(Rubric) 수를 줄이거나 여러 기준을 통합하여 채점 요청 횟수 자체를 감소시킵니다.
비-LLM 검증 활용: 응답 길이 제한(Max Tokens)이나 특정 문자열 포함 여부 등 규칙 기반 평가는 JavaScript, Contains 연산자 등으로 대체하여 LLM 의존도를 낮춥니다.
이러한 비용 절감 전략은 LLM 평가의 경제성을 확보하고, 더 빈번하고 광범위한 테스트를 가능하게 하여 모델 품질 관리의 효율성을 높이는 데 기여합니다.