byteforce

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분
1

평가할 프롬프트 v1 — AWS 작업에 Python·JSON·정규식만 출력

2

데이터셋 = task 속성을 가진 JSON 객체 배열

3

데이터셋은 손으로, 또는 Claude로 생성

4

생성엔 빠른 모델 Haiku가 적합

5

응답 파싱 = prefill ```json + stop ``` + json.loads

6

dataset.json으로 저장

먼저 짚고 갈 용어
generate_dataset()
Claude로 테스트 데이터셋을 생성하는 함수. 큰 프롬프트로 task 목록을 받아 파싱한다.
task (속성)
데이터셋 각 객체가 가진, 시킬 일을 설명하는 필드.
Haiku
빠르고 저렴한 모델. 데이터셋 생성 같은 대량·단순 작업에 적합하다.
json.dump · dataset.json
파이썬 객체를 파일에 JSON으로 저장. 나중에 평가 때 불러온다.

목표 & 초안 프롬프트

The goal & prompt v1

이 레슨에서 평가할 프롬프트의 목표는, 사용자의 AWS 작업 요청에 코드로 답하는 것입니다. 출력은 셋 중 하나 — Python·JSON·정규식 — 이고, 설명·헤더·푸터는 없습니다.

1단계로 초안(v1)을 씁니다. 사용자 작업을 {task}로 끼워 넣는 단순한 프롬프트입니다.

평가 대상 프롬프트 · v1
prompt = f"""
Please provide a solution to the following task:

{task}
"""

데이터셋을 코드로 생성

Generating the dataset

데이터셋은 task 속성을 가진 JSON 객체 배열입니다. 손으로 만들 수도 있지만, 여기선 Claude(Haiku)로 생성합니다. 빠르고 저렴해 이런 대량 생성에 잘 맞습니다.

001_prompt_evals.ipynb · generate_dataset()
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로 파싱합니다. 구조화된 데이터 레슨에서 배운 그대로입니다.

생성 & 저장

Test & save

함수를 정의했으면 바로 호출해 현실적인 데이터가 나오는지 확인합니다.

generate_dataset() 호출
dataset = generate_dataset()
dataset
출력 · 테스트 케이스 3개
[{'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'}]
데이터셋 생성 미리보기 · Haiku → ```json → json.loads
Claude 응답(raw) · ```json 으로 prefill하고 ``` 에서 stop [ { "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" } ]
↓ json.loads(text) — 문자열을 파이썬 리스트로
PYTHONboto3로 모든 S3 버킷을 나열하는 Python 함수
JSONDynamoDB 테이블 읽기 전용 접근을 허용하는 IAM 정책(JSON)
REGEX유효한 S3 버킷 이름을 매칭하는 정규표현식

큰 프롬프트로 Claude(Haiku)에게 task 속성을 가진 JSON 배열을 생성하게 하고, prefill + stop sequence로 raw JSON만 받아 json.loads로 파이썬 리스트로 만듭니다.

마지막으로 데이터셋을 파일로 저장합니다. 나중에 프롬프트를 평가할 때 쉽게 불러오기 위해서입니다.

dataset.json 으로 저장
with open("dataset.json", "w") as f:
    json.dump(dataset, f, indent=2)

정리 & 점검

Recap & check
핵심 정리
  • 평가할 프롬프트 v1: AWS 작업에 Python·JSON·정규식만, 설명 없이.
  • 데이터셋 = task 속성을 가진 JSON 객체 배열.
  • 생성은 Haiku로 — prefill ```json + stop ``` + json.loads.
  • json.dump(..., indent=2)dataset.json에 저장.

Q1이 레슨에서 평가할 프롬프트(v1)의 목표 출력은?

Q2데이터셋 생성에 빠른 모델(Haiku)이 적합한 이유에 가까운 것은?

Q3generate_dataset이 Claude의 ```json 응답에서 순수 JSON만 받는 방법은?

MEMBER SESSION REQUIRED · REGISTRATION IS FREE

여기부터는 등록한 분에게 열립니다.

전 코스는 계속 무료입니다. 등록하면 이 코스의 남은 76개 레슨을 끝까지 읽을 수 있습니다.

등록하고 이어서 읽기

이미 등록하셨다면 그때 쓰신 이메일을 넣어 주세요.