Sign in to save your progressYou can keep reading without an account, but completed lessons won't be saved.
Sign in

이제 평가 데이터셋이 준비되었으니, 핵심 평가 파이프라인을 구축할 차례입니다. 이 작업은 각 테스트 케이스를 가져와 프롬프트와 병합하고, Claude에 전달한 다음, 결과를 채점하는 과정을 포함합니다.

평가 프로세스는 명확한 워크플로우를 따릅니다: 테스트 케이스 데이터셋을 가져와 각각을 프롬프트 템플릿과 결합하고, 처리를 위해 Claude에 전송한 다음, 그레이더 시스템을 사용하여 출력을 평가합니다.

핵심 함수 구축하기

평가 파이프라인은 각각 특정한 역할을 담당하는 세 가지 주요 함수로 구성됩니다. 가장 간단한 함수부터 시작해 보겠습니다 - 개별 프롬프트 실행을 처리하는 함수입니다.

run_prompt 함수

이 함수는 테스트 케이스를 가져와 프롬프트 템플릿과 병합합니다:

python
def run_prompt(test_case):
    """Merges the prompt and test case input, then returns the result"""
    prompt = f"""
Please solve the following task:

{test_case["task"]}
"""
    
    messages = []
    add_user_message(messages, prompt)
    output = chat(messages)
    return output

지금은 프롬프트를 매우 간단하게 유지하고 있습니다. 형식 지정 지침을 포함하지 않았기 때문에, Claude는 우리가 필요한 것보다 더 장황한 출력을 반환할 가능성이 높습니다. 평가 프로세스를 반복하면서 이 부분을 나중에 개선할 것입니다.

run_test_case 함수

이 함수는 단일 테스트 케이스를 실행하고 결과를 채점하는 과정을 조율합니다:

python
def run_test_case(test_case):
    """Calls run_prompt, then grades the result"""
    output = run_prompt(test_case)
    
    # TODO - 채점
    score = 10
    
    return {
        "output": output,
        "test_case": test_case,
        "score": score
    }

지금은 하드코딩된 점수 10을 사용하고 있습니다. 채점 로직은 이후 섹션에서 상당한 시간을 투자할 부분이지만, 이 자리 표시자를 통해 전체 파이프라인 구조를 테스트할 수 있습니다.

run_eval 함수

이것은 전체 데이터셋을 처리하는 메인 오케스트레이터입니다:

python
def run_eval(dataset):
    """Loads the dataset and calls run_test_case with each case"""
    results = []
    
    for test_case in dataset:
        result = run_test_case(test_case)
        results.append(result)
    
    return results

이 함수는 데이터셋의 모든 테스트 케이스를 순회하며 각각을 처리하고, 모든 결과를 하나의 리스트로 수집합니다.

평가 실행하기

평가 파이프라인을 실행하려면, 데이터셋을 로드하고 메인 함수를 호출합니다:

python
with open("dataset.json", "r") as f:
    dataset = json.load(f)

results = run_eval(dataset)

처음 실행할 때는 시간이 걸릴 것으로 예상하세요 - Claude Haiku를 사용하더라도 전체 데이터셋을 처리하는 데 30초 이상 걸릴 수 있습니다. 최적화 기법은 나중에 다루겠지만, 지금은 인내심이 중요합니다.

결과 살펴보기

평가가 완료되면, 형식화된 JSON 출력으로 결과를 확인할 수 있습니다:

python
print(json.dumps(results, indent=2))

결과 구조는 객체들의 배열을 포함하며, 각 객체는 하나의 테스트 케이스 실행을 나타냅니다. Claude의 출력(형식 제약이 없어 상당히 장황한 경향이 있음), 원본 테스트 케이스 정의, 그리고 점수를 확인할 수 있습니다.

우리가 달성한 것

이 시점에서, 우리는 핵심 평가 파이프라인을 성공적으로 구현했습니다. 다음을 수행할 수 있습니다:

  • 데이터셋에서 테스트 케이스 가져오기
  • 프롬프트 템플릿과 병합하기
  • Claude로부터 응답 받기
  • 모든 결과를 수집하고 정리하기

부족한 부분은 지능적인 채점입니다 - 지금은 모든 응답에 고정된 점수를 부여하고 있을 뿐입니다. 다음 단계는 Claude의 출력이 실제로 올바른지 평가할 수 있는 그레이더를 구축하는 것이며, 이것이 바로 평가 시스템의 진정한 정교함이 발휘되는 부분입니다.

이 파이프라인 구조는 단순해 보일 수 있지만, 대부분의 AI 평가 시스템이 구축되는 기반을 나타냅니다. 복잡성은 테스트 실행의 기본적인 오케스트레이션이 아니라 채점 로직과 프롬프트 최적화에 있습니다.