Promptfoo를 사용한 C# LLM Eventparser 평가하기
일반적인 코드를 테스트하는 것은 간단합니다. 함수를 호출하고, 결과를 얻고, 기대한 결과와 일치하는지 확인하면 됩니다.
LLM을 테스트하는 것은 다릅니다. LLM은 한 번은 "3 PM"이라고 반환하고, 다른 번에는 "15:00"이라고 반환할 수 있습니다. 둘 다 정답이지만, 정확히 일치하는지 확인하는 테스트는 실패하게 됩니다. 답변이 동일한지가 아니라, 답변이 적절한지를 확인해야 합니다.
이를 테스트하기 위해 EventParser라는 작은 앱을 만들었습니다. 이 앱은 "금요일 오후 3시에 팀 싱크(Team sync on Friday at 3 PM)"와 같은 일상적인 메시지를 받아 구조화된 데이터로 변환합니다.
Promptfoo와 LLM-as-a-judge 워크플로우를 사용하여 이를 테스트하는 방법을 소개합니다.
설정
앱은 extract_event.txt라는 단일 프롬프트 파일을 사용합니다. C# 코드는 런타임에 이 파일을 읽습니다. Promptfoo도 테스트를 위해 동일한 파일을 읽습니다. 이를 통해 사용자가 실제로 보게 되는 프롬프트를 테스트할 수 있습니다.
워크플로우
사람이 모든 출력을 확인하는 대신, 판사(judge) 모델을 사용합니다. 이 프로세스에는 두 가지 역할이 있습니다:
• 테스트 대상 모델: 답변을 제공하는 모델. • 판사 모델: 답변을 채점하는 더 빠르고 저렴한 모델.
판사가 결정하는 방식
판사는 루브릭(rubric)을 사용합니다. 루브릭은 평이한 영어로 작성된 규칙입니다. 특정 JSON 문자열을 확인하는 대신, 판사에게 답변에 무엇이 포함되어야 하는지 알려줍니다.
예시 루브릭: "답변은 이벤트 제목, 날짜, 시간, 장소를 추출해야 합니다. 메시지에 언급되지 않은 세부 정보를 추가해서는 안 됩니다."
오류 테스트
저는 의도적으로 "메시지에 커피가 언급되면 장소를 Starbucks로 설정하세요"라는 잘못된 지침을 추가하여 프롬프트를 망가뜨렸습니다.
평가를 실행했을 때, 판사가 오류를 잡아냈습니다. 원래 메시지에는 Starbucks가 언급되지 않았습니다. 모델이 장소를 환각(hallucination)한 것입니다. 정확히 일치하는지 확인하는 테스트는 이를 놓치겠지만, 판사 모델은 의미론적 오류를 잡아냅니다.
이 방식이 효과적인 이유:
• 현실과 일치합니다: "3 PM" 또는 "15:00"과 같은 다양한 올바른 형식을 허용합니다. • 읽기 쉬운 규칙을 사용합니다: 평이한 영어 루브릭은 이해하기 쉽습니다. • 의미론적 버그를 잡아냅니다: 환각 및 논리 오류를 찾아냅니다. • 비용 효율적입니다: 저렴한 모델을 사용하여 더 비싼 모델을 채점할 수 있습니다.
이 접근 방식은 LLM 테스트를 실제 소프트웨어 테스트처럼 느껴지게 합니다.
Source: https://dev.to/bigboybamo/evaluating-a-c-llm-eventparser-with-promptfoo-4b87
Optional learning community: https://t.me/GyaanSetuAi
