로드 중

프롬프트 평가 워크플로우를 구축할 때, 채점 시스템은 출력 품질에 대한 객관적인 신호를 제공합니다. 채점기(grader)는 모델 출력을 받아 측정 가능한 형태의 피드백을 반환합니다 - 일반적으로 1에서 10 사이의 숫자로, 10은 높은 품질을, 1은 낮은 품질을 나타냅니다.

채점기의 유형

모델 출력을 채점하는 데는 세 가지 주요 접근 방식이 있습니다:

  • 코드 채점기 - 커스텀 코드를 사용하여 프로그래밍 방식으로 출력을 평가합니다
  • 모델 채점기 - 다른 AI 모델을 사용하여 품질을 평가합니다
  • 인간 채점기 - 사람이 직접 출력을 검토하고 점수를 매깁니다

코드 채점기

코드 채점기를 사용하면 상상할 수 있는 모든 프로그래밍 방식의 검사를 구현할 수 있습니다. 일반적인 사용 사례는 다음과 같습니다:

  • 출력 길이 확인
  • 출력에 특정 단어가 포함되어 있는지 또는 포함되어 있지 않은지 확인
  • JSON, Python 또는 정규식에 대한 구문 검증
  • 적절한 읽기 수준을 보장하기 위한 가독성 점수

모델 채점기

모델 채점기는 추가 API 호출을 사용하여 출력을 평가함으로써 엄청난 유연성을 제공합니다. 다음과 같은 항목을 평가하는 데 유용합니다:

  • 응답 품질
  • 지시 사항 준수 품질
  • 완전성
  • 유용성
  • 안전성

인간 채점기

인간 채점기는 가장 큰 유연성을 제공하지만 상당한 단점도 있습니다. 인간은 상상할 수 있는 모든 기준에 대해 응답을 평가할 수 있지만, 그 과정은 시간이 많이 걸리고 지루합니다.

평가 기준 정의하기

채점기를 구현하기 전에 명확한 평가 기준이 필요합니다. 코드 생성 프롬프트의 경우, 다음에 초점을 맞출 수 있습니다:

  • 형식 - 설명 없이 Python, JSON 또는 정규식만 반환해야 합니다
  • 유효한 구문 - 생성된 코드는 유효한 구문을 가져야 합니다
  • 작업 준수 - 응답은 정확한 코드로 사용자의 작업을 직접적으로 다루어야 합니다

처음 두 기준은 코드 채점기와 잘 맞으며, 작업 준수는 유연성 때문에 모델 채점기에 더 적합합니다.

모델 채점기 구현하기

모델 채점기는 구현하기 가장 쉬운 경우가 많습니다. 기본 구조는 다음과 같습니다:

python
def grade_by_model(test_case, output):
    messages = []
    add_user_message(messages, eval_prompt)
    add_assistant_message(messages, "```json")
    eval_text = chat(messages, stop_sequences=["```"])
    return json.loads(eval_text)

채점 프롬프트는 포괄적이어야 하며 다음을 포함해야 합니다:

  • 채점기에 대한 명확한 역할 정의
  • 원래의 작업
  • 평가할 AI 생성 솔루션
  • 구체적인 출력 형식 요구 사항

단순히 점수만 요청하지 마세요. 숫자 점수와 함께 강점, 약점, 그리고 근거를 요청하세요. 이는 모델이 6점과 같은 중간 점수로 기본값을 설정하는 것을 방지하고 더 신중한 평가를 강제합니다.

채점기를 워크플로우에 통합하기

채점기 함수를 갖추었다면, 이를 테스트 케이스 러너에 통합하세요:

python
def run_test_case(test_case):
    output = run_prompt(test_case)
    
    # 모델 채점기를 호출합니다
    model_grade = grade_by_model(test_case, output)
    score = model_grade["score"]
    reasoning = model_grade["reasoning"]
    
    return {
        "output": output, 
        "test_case": test_case, 
        "score": score,
        "reasoning": reasoning
    }

모든 테스트 케이스를 실행한 후, 평균 점수를 계산하여 프롬프트 성능에 대한 객관적인 지표를 얻으세요:

python
from statistics import mean

def run_eval(dataset):
    results = []
    for test_case in dataset:
        result = run_test_case(test_case)
        results.append(result)
    
    average_score = mean([result["score"] for result in results])
    print(f"Average score: {average_score}")
    
    return results

이를 통해 개선에 집중할 수 있는 구체적인 숫자를 얻을 수 있습니다. 모델 채점기는 다소 변덕스러울 수 있고 더 나은 가이드가 필요할 수도 있지만, 반복하고 개선할 수 있는 객관적인 평가의 출발점을 제공합니다.