CPN 한국어 자습서 · 러닝패스 2 / 4 — Building with the Claude API
프롬프트 평가
Generating test datasets
평가 파이프라인을 직접 구현하기 시작합니다. 먼저 평가할 프롬프트(AWS 코드 도우미)를 쓰고, Claude로 평가 데이터셋을 생성합니다. 앞서 배운 prefill + stop sequence로 응답을 JSON으로 파싱하고, dataset.json으로 저장합니다.
Stephen Grider · Anthropic 기술 스태프
우리만의 커스텀 프롬프트 평가 워크플로를 만들기 시작합니다. 프롬프트를 쓰고, 그 성능을 평가하는 코드를 씁니다. 먼저 프롬프트부터 보죠. 이 프롬프트의 목표는 사용자가 AWS 관련 코드를 쓰도록 돕는 것입니다. 사용자가 도움이 필요한 작업을 입력하면, 세 가지 출력 중 하나로 답합니다 — Python, JSON 설정, 또는 정규표현식. 설명·헤더·푸터 없이 그 출력만 줘야 합니다.
1단계, 초안 프롬프트를 씁니다. 오른쪽에 v1을 이미 써 뒀습니다 — "다음 작업에 대한 해법을 제시하라"라고 하고, 사용자 작업({task})을 끼워 넣습니다.
2단계, 데이터셋을 만듭니다. 데이터셋은 프롬프트에 넣을 입력들의 묶음이고, 프롬프트와 입력의 조합마다 실행합니다. 여기선 JSON 객체 배열로, 각 객체에 task 속성이 있습니다. 각 task를 프롬프트에 넣어 Claude에 보냅니다.
데이터셋은 손으로 만들 수도 있고 Claude로 생성할 수도 있습니다. 참고로, 이런 생성 작업엔 Haiku 같은 빠른 모델이 안성맞춤입니다 — 여기서도 그렇게 합니다. 노트북에서 Haiku로 샘플 데이터셋을 생성하는 코드를 씁니다.
노트북에는 코스 내내 쓰던 코드가 들어 있습니다 — 상단 셀에서 client를 만들고 환경 변수를 로드하고, 같은 헬퍼 함수 셋을 정의합니다. 그 아래 generate_dataset 함수를 정의하고, 시작용으로 꽤 큰 프롬프트를 넣었습니다. 이 노트북은 강의에 첨부돼 있으니, 다운로드해 프롬프트를 복사하거나 노트북을 직접 쓰면 타이핑을 아낄 수 있습니다.
이 프롬프트는 Claude에게 테스트 케이스를 생성하라고 합니다 — JSON 객체 배열로, 각 객체에 할 일을 설명하는 task 속성을 둡니다. 지금은 3개만 생성하게 합니다. 데이터셋을 실제로 만들 수 있는지 확인하기엔 충분합니다.
이제 함수 안에 코드를 더해, 이 프롬프트를 Claude에 보내고 task 목록을 받아 JSON으로 파싱합니다. JSON 파싱에는 앞서 본 prefill + stop sequence 방법을 씁니다. 함수 안에서 messages 리스트를 만들고, user 메시지로 프롬프트를 넣고, assistant 메시지로 백틱 세 개와 json을 prefill하고, stop_sequences로 백틱 세 개를 줘 chat을 호출한 뒤, json.loads(text)를 반환합니다.
셀을 실행해 함수를 정의하고, 아래에서 빠르게 테스트합니다. 데이터셋을 출력해 현실적인 데이터가 나오는지 확인하면 — 세 가지 테스트 케이스가 나옵니다: Python 함수, JSON 설정, 정규표현식. 좋은 출발입니다.
다음으로 이 데이터셋을 파일에 저장합니다. 나중에 프롬프트를 평가할 때 쉽게 불러오기 위해서죠. dataset.json 파일을 쓰기 모드로 열고 json.dump에 indent=2를 줍니다. 실행하면 노트북과 같은 디렉터리에 dataset.json이 생기고, 그 안에 task 목록이 들어 있습니다. 평가 데이터셋이 준비됐습니다.
이 장에서 배우는 것What you'll learn
약 5분평가할 프롬프트 v1 — AWS 작업에 Python·JSON·정규식만 출력
데이터셋 = task 속성을 가진 JSON 객체 배열
데이터셋은 손으로, 또는 Claude로 생성
생성엔 빠른 모델 Haiku가 적합
응답 파싱 = prefill ```json + stop ``` + json.loads
dataset.json으로 저장
이 레슨에서 평가할 프롬프트의 목표는, 사용자의 AWS 작업 요청에 코드로 답하는 것입니다. 출력은 셋 중 하나 — Python·JSON·정규식 — 이고, 설명·헤더·푸터는 없습니다.
1단계로 초안(v1)을 씁니다. 사용자 작업을 {task}로 끼워 넣는 단순한 프롬프트입니다.
prompt = f""" Please provide a solution to the following task: {task} """
데이터셋은 task 속성을 가진 JSON 객체 배열입니다. 손으로 만들 수도 있지만, 여기선 Claude(Haiku)로 생성합니다. 빠르고 저렴해 이런 대량 생성에 잘 맞습니다.
import json def generate_dataset(): prompt = """ Generate an evaluation dataset for a prompt evaluation. The dataset will be used to evaluate prompts that generate Python, JSON, or Regex specifically for AWS-related tasks. Generate an array of JSON objects, each representing a task that requires Python, JSON, or a Regex to complete. Example output: ```json [ { "task": "Description of task" } ] ``` Please generate 3 objects. """ messages = [] add_user_message(messages, prompt) add_assistant_message(messages, "```json") # prefill text = chat(messages, stop_sequences=["```"]) return json.loads(text)
응답을 순수 JSON으로 받는 부분이 핵심입니다 — assistant를 ```json으로 prefill하고 stop_sequences=["```"]로 닫는 펜스에서 끊은 뒤 json.loads로 파싱합니다. 구조화된 데이터 레슨에서 배운 그대로입니다.
함수를 정의했으면 바로 호출해 현실적인 데이터가 나오는지 확인합니다.
dataset = generate_dataset() dataset
[{'task': 'Write a Python function that lists all S3 buckets using boto3'},
{'task': 'Create an IAM policy in JSON granting read-only access to a DynamoDB table'},
{'task': 'Write a regular expression that matches valid AWS S3 bucket names'}]큰 프롬프트로 Claude(Haiku)에게 task 속성을 가진 JSON 배열을 생성하게 하고, prefill + stop sequence로 raw JSON만 받아 json.loads로 파이썬 리스트로 만듭니다.
마지막으로 데이터셋을 파일로 저장합니다. 나중에 프롬프트를 평가할 때 쉽게 불러오기 위해서입니다.
with open("dataset.json", "w") as f: json.dump(dataset, f, indent=2)
task 속성을 가진 JSON 객체 배열.json.loads.json.dump(..., indent=2)로 dataset.json에 저장.Q1이 레슨에서 평가할 프롬프트(v1)의 목표 출력은?
AWS 작업에 대해 세 형식 중 하나의 raw 출력만 줍니다 — 부가 설명 없이.
Q2데이터셋 생성에 빠른 모델(Haiku)이 적합한 이유에 가까운 것은?
데이터셋 생성은 대량·단순 작업이라, 빠르고 저렴한 모델이 잘 맞습니다.
Q3generate_dataset이 Claude의 ```json 응답에서 순수 JSON만 받는 방법은?
구조화된 데이터 레슨의 기법 그대로 — prefill로 시작 강제, stop으로 끝 자르기, json.loads로 파싱.
데이터셋이 준비됐습니다. 이제 이 데이터셋의 각 입력을 프롬프트에 넣어 Claude에 보내고, 평가를 실제로 실행합니다. → 평가 실행하기
전 코스는 계속 무료입니다. 등록하면 이 코스의 남은 76개 레슨을 끝까지 읽을 수 있습니다.
이미 등록하셨다면 그때 쓰신 이메일을 넣어 주세요.