CPN 한국어 자습서 · 러닝패스 2 / 4 — Building with the Claude API
프롬프트 엔지니어링
Prompt engineering
이제 프롬프트를 더 좋게 다듬는 기법으로 넘어갑니다. 이 모듈은 하나의 예시 프롬프트(운동선수 식단)를 두고, 형편없는 초안에서 시작해 기법을 하나씩 적용하며 평가 점수가 오르는 것을 직접 확인하는 방식으로 진행됩니다.
Stephen Grider · Anthropic 기술 스태프
프롬프트 평가를 익혔으니, 이제 프롬프트 엔지니어링의 세계로 넘어갑니다. 프롬프트 엔지니어링은 이미 쓴 프롬프트를 어떤 식으로든 개선해 더 신뢰할 수 있고 더 높은 품질의 출력을 얻는 일입니다.
이 모듈은 이렇게 진행됩니다. 먼저 목표를 정하고, 그 프롬프트의 아주 형편없는 초안을 씁니다. 그걸 평가하면 곧바로 매우 낮은 점수가 나옵니다. 그다음 영상들에서 여러 프롬프트 엔지니어링 기법을 배우고 적용하는데, 적용할 때마다 평가를 다시 돌려 점수가 오르는 걸 봅니다.
평가는 이전 모듈에서 만든 파이프라인을 그대로 씁니다. 단, 함께 따라 코딩하려면 알아둘 점이 있습니다. 이전 파이프라인을 손봐서 특정 프롬프트가 아니라 거의 모든 프롬프트에 쓸 수 있게 더 유연하게 만들었습니다. 동봉된 노트북 001_prompting을 받으세요.
프롬프트의 목표는 이렇습니다. 운동선수의 키·몸무게·목표·식이 제한을 받아 하루치 식단을 생성하는 것입니다. 선수를 설명하는 입력을 받아 프롬프트에 끼워 모델에 보내고, 이상적인 출력을 얻는 게 목표입니다. 첫 버전은 그 이상과 전혀 다른 출력이 나오겠지만, 여러 기법으로 다듬어 점차 가까워집니다.
노트북을 열면 상단에 접힌 설정 셀들이 있습니다 — 최소 한 번은 실행하세요. 그다음 PromptEvaluator 인스턴스를 만듭니다. 데이터셋 생성·모델 채점 등을 한 클래스에 감싼 것입니다. 인자는 max_concurrent_tasks 하나 — 동시 API 호출 수입니다. 평가와 데이터셋 생성이 크게 빨라지지만, 서비스 할당량에 따라 rate limit 에러가 날 수 있습니다. 에러가 보이면 1(동시성 없음)로 낮추세요. 처음엔 3 정도를 권합니다.
generate_dataset 메서드로 데이터셋을 만듭니다. 프롬프트의 전체 목적(하루치 운동선수 식단)을 설명하고, prompt_input_spec 딕셔너리에 필요한 입력(height·weight·goal·dietary_restrictions)을 적습니다. 생성할 테스트 케이스 수는 빠른 진행을 위해 2~3개를 권합니다(실전 평가에선 훨씬 많이).
run_prompt 함수에서 프롬프트를 씁니다. 이 함수는 테스트 케이스마다 한 번씩 호출되고, 그 케이스의 prompt_inputs 딕셔너리를 인자로 받습니다. 그 입력을 프롬프트에 끼워 넣습니다. 일단 아주 단순하고 형편없는 첫 버전을 씁니다 — “이 사람은 뭘 먹어야 할까?”에 키·몸무게·목표·제한을 나열한 정도.
평가를 돌립니다. 평가 함수엔 extra_criteria라는 문자열 인자를 추가로 줄 수 있습니다. 모델 채점 시 고려할 추가 기준이죠. 여기선 “출력에 하루 총칼로리, 주요 영양소 분해, 정확한 음식·분량·시간이 포함돼야 한다”를 넣습니다.
첫 버전을 평가하면 형편없는 점수가 나옵니다 — 저는 2.32를 받았습니다. (점수가 오르는 걸 보여주려고 일부러 똑똑하지 않은 모델을 씁니다. 여러분 점수는 더 높을 수 있습니다.) 평가를 돌리면 노트북과 같은 폴더에 output.html이 생깁니다. 브라우저로 열면 케이스별 출력·점수·근거·기준이 잘 정리된 리포트가 보입니다 — 어디를 고칠지 파악하는 데 유용합니다.
이제 할 일은 하나 — 프롬프트를 개선하는 것입니다. 다음 영상부터 첫 번째 기법을 봅니다.
이 장에서 배우는 것What you'll learn
약 10분이 모듈은 하나의 프롬프트(운동선수 식단)를 기법으로 점점 개선하는 방식
유연해진 PromptEvaluator로 데이터셋 생성·평가를 감싼다
max_concurrent_tasks로 동시성 — rate limit 나면 1로
generate_dataset에 목적 + prompt_input_spec + 케이스 수
run_prompt에 형편없는 첫 프롬프트 → 평가 → 점수 2.32
extra_criteria로 채점 기준을 더하고, output.html로 결과를 본다
프롬프트 엔지니어링은 이미 쓴 프롬프트를 개선해 더 신뢰할 수 있고 높은 품질의 출력을 얻는 일입니다. 이 모듈은 하나의 예시 — 운동선수 하루 식단 프롬프트 — 를 두고, 형편없는 초안에서 출발해 기법을 하나씩 더하며 점수가 오르는 걸 확인합니다.
점수는 예시입니다. 핵심은 같은 평가 파이프라인으로 매번 측정하면, 기법을 더할수록 점수가 오르는 걸 객관적으로 확인할 수 있다는 점입니다.
이전 모듈의 평가 파이프라인을 거의 모든 프롬프트에 쓸 수 있게 다듬어 PromptEvaluator 클래스로 감쌌습니다. 동시성으로 속도도 올립니다.
from prompt_evaluator import PromptEvaluator # 모듈에 동봉된 클래스 evaluator = PromptEvaluator(max_concurrent_tasks=3) # rate limit 나면 1로 evaluator.generate_dataset( prompt_purpose="Write a compact, concise, one day meal plan for a single athlete", prompt_input_spec={ "height": "The athlete's height in cm", "weight": "The athlete's weight in kg", "goal": "The goal of the athlete", "dietary_restrictions": "The dietary restrictions of the athlete", }, num_test_cases=3, )
max_concurrent_tasks가 높으면 빠르지만 rate limit 에러가 날 수 있습니다. 에러가 보이면 1로 낮추세요(강사는 50, 여러분은 3 정도부터). 케이스 수도 빠른 진행을 위해 2~3개를 권합니다.
run_prompt은 테스트 케이스마다 호출되며 그 케이스의 prompt_inputs를 받습니다. 일단 아주 단순한 첫 버전을 씁니다.
def run_prompt(prompt_inputs): prompt = f""" What should this person eat? {prompt_inputs["height"]} {prompt_inputs["weight"]} {prompt_inputs["goal"]} {prompt_inputs["dietary_restrictions"]} """ # 프롬프트를 모델에 보내 output을 반환 return output
평가를 돌립니다. extra_criteria로 채점 시 고려할 기준을 더할 수 있습니다.
evaluator.run_eval(
run_prompt,
extra_criteria=(
"The output should include a daily caloric total, a"
" macronutrient breakdown, and meals with exact foods,"
" portions, and timing."
),
)Average score: 2.32
# 형편없는 점수. 일부러 약한 모델을 써 개선 효과를 보여 줍니다.평가를 돌릴 때마다 같은 폴더에 output.html 리포트가 생깁니다. 브라우저로 열면 케이스별 출력·점수·근거·기준이 정리돼 있어, 어디를 고칠지 파악하기 좋습니다.
PromptEvaluator가 데이터셋 생성·채점·평가를 감싼다 — max_concurrent_tasks 주의.extra_criteria로 채점 기준을 더하고, output.html로 결과를 본다.Q1이 모듈의 진행 방식은?
같은 평가 파이프라인으로 매번 측정하며 기법을 더해 점수를 객관적으로 끌어올립니다.
Q2rate limit 에러가 보이면?
동시 호출이 많을수록 빠르지만 rate limit에 걸립니다. 1로 낮추면 동시성 없이 안전합니다.
Q3extra_criteria는 무엇에 쓰이나요?
채점 모델이 출력을 평가할 때 함께 볼 기준(예: 칼로리·영양소·정확한 음식/분량/시간)을 넣습니다.
기준 점수가 생겼으니, 이제 첫 번째 기법으로 점수를 올려 봅니다. → 명료하고 직접적으로
전 코스는 계속 무료입니다. 등록하면 이 코스의 남은 76개 레슨을 끝까지 읽을 수 있습니다.
이미 등록하셨다면 그때 쓰신 이메일을 넣어 주세요.