1 들어가며
- 정성적 분석에서 프롬프트가 의도대로 작동하는지를 세 단계로 확인했다.
- 이제 정량적 분석에서 프롬프트가 그 의도대로 “얼마나 안정적으로” 작동하는지를 숫자로 확인한다.
2 정량적 분석의 세 가지 방법
- 첫째, N번 생성해보기 (N > 100).
- 둘째, 응답 패턴 찾기
- 셋째, 모델별 테스트
3 N번 생성
- 프롬프트를 한 번 실행했을 때 좋은 결과가 나왔다고 해서, 그 프롬프트가 안정적이라고 말할 수는 없다.
- LLM은 확률적 모델이기 때문에, 같은 프롬프트라도 매번 다른 결과를 낸다.
- 그 이유는 LLM은 내부적으로 확률 분포를 사용하기 때문이다.
- 같은 프롬프트와 같은 입력이라도, 매번 다른 토큰 시퀀스가 생성될 수 있다.
- 이건 버그가 아니라 LLM의 본질적 특성이다.
- 같은 프롬프트와 같은 입력이라도, 매번 다른 토큰 시퀀스가 생성될 수 있다.
3.1 한 번 실행
입력: "부산 여행"
프롬프트 실행 (1회):
High certainty: 부산 뭐 할까?
Moderate certainty: 어디 먼저 갈까?
Low certainty: 혼자 가도 괜찮아?
개발자: "완벽해! 배포하자."
3일 후 프로덕션에서 N번째 사용자들이 얻은 응답:
* 1번 실행은 운이다. 실제 안정성을 모른다.
사용자 1: "부산 뭐 할까? 어디 먼저 갈까? 혼자 가도 괜찮아?" ✓
사용자 2: "부산에서 뭐 먹을까요? 숙소는 어디가 좋아요? 언제 가는 게 좋을까요?" ✗ (존댓말)
사용자 3: "해운대 가볼까? 태종대는?" ✗ (2개만)
사용자 4: "부산 여행 코스 추천해줘. 맛집도 알려줘. 숙소도." ✗ (질문 아님)
PM: "왜 형식이 계속 무너지나요?"
개발자: "테스트할 때는 완벽했는데..."
3.2 테스트 20번 실행
입력: "부산 여행"
프롬프트 실행 (20회):
실행 1: 부산 뭐 할까? / 어디 먼저 갈까? / 혼자 가도 괜찮아? ✓
실행 2: 부산 뭐 먹을까? / 숙소 어디? / 언제 가? ✓
실행 3: 부산에서 뭐 할까요? / 어디 가볼까요? / 언제요? ✗ (존댓말)
실행 4: 해운대 갈까? / 광안리는? / 태종대는? ✓
...
실행 20: 부산 추천해줘 / 맛집 알려줘 ✗ (질문 아님)
결과:
- 형식 유지: 18/20 (90%)
- 반말 유지: 17/20 (85%)
- 5단어 이내: 14/20 (70%)
배포 전 의사결정:
개발자: "20번 테스트 결과, 반말 유지율이 85%네요."
PM: "15%는 존댓말이 나온다는 뜻이에요?"
개발자: "네. Ending 섹션을 강화하면 개선될 것 같습니다."
PM: "개선 후 다시 20번 테스트하고 배포하죠."
[프롬프트 수정]
개발자: "수정 후 20번 테스트 결과, 반말 유지율 100%입니다."
PM: "좋아요. 배포 승인합니다."
프로덕션 결과: 안정적 작동, 이슈율 낮음
3.3 N > 100의 의미
사실 통계적인 의미를 가지려면 N > 300 을 권장하지만 , 실무에서는 N = 100 정도로 타협한다.
| 실행 횟수 | 통계적 신뢰도 | 적합한 경우 |
|---|---|---|
| N = 1 | 매우 낮음 | 프로토타입 단계, 빠른 확인 |
| N = 10 | 낮음 | 개발 중 패턴 확인 |
| N = 20 | 중간 | 경향성 파악, 주요 문제 발견 |
| N = 100 | 높음 | 프로덕션 배포 전 검증 |
| N = 1000 | 매우 높음 | 크리티컬 시스템 (금융, 의료) |
N=20의 역할:
실무 워크플로우:
[1단계: 빠른 검증 (N=10)]
- 프롬프트 작성 후 즉시 실행
- 형식이 완전히 무너지는지 확인
- 소요 시간: 5분
[2단계: 패턴 확인 (N=20)]
- 주요 문제 발견
- "반말 유지율 85%" 같은 정량적 지표 획득
- 소요 시간: 10분
[3단계: 정밀 검증 (N=100)]
- 배포 전 최종 검증
- 통계적으로 신뢰할 수 있는 수준
- 소요 시간: 50분
[4단계: 프로덕션 모니터링 (N=∞)]
- 실제 사용자 데이터 축적
- 지속적 개선
예시: N=20에서 발견한 문제를 N=100으로 검증
[N=20 결과]
반말 유지율: 17/20 = 85%
개발자: "85%면 충분한가?"
PM: "15%는 너무 높아요. 사용자가 눈치챌 수 있어요."
[프롬프트 수정: Ending 강화]
"Always answer in half speech form of Korean 반말."
→
"IMPORTANT: Always use Korean casual speech (반말).
Never use polite form (합니다, 입니다, 해요)."
[N=20 재테스트]
반말 유지율: 20/20 = 100%
개발자: "20번 모두 반말로 나왔어요."
PM: "좋아요. 하지만 N=100으로 최종 검증하죠."
[N=100 최종 테스트]
반말 유지율: 98/100 = 98%
PM: "98%면 허용 가능해요. 배포하죠."
N=100의 비용 vs 가치:
| 항목 | N=20 | N=100 | 차이 |
|---|---|---|---|
| API 호출 비용 | $0.20 | $1.00 | +$0.80 |
| 소요 시간 | 10분 | 50분 | +40분 |
| 통계적 신뢰도 | 중간 | 높음 | ↑ |
| 배포 후 이슈율 | 5-10% | 1-2% | ↓ |
| CS 처리 비용 | $500/월 | $100/월 | -$400/월 |
→ N=100 투자 ($1) → 월 $400 절약
"실전에서는 N > 100을 권장하지만,
스터디에서는 N=20으로 충분합니다.
이유:
1. N=20으로도 패턴은 명확히 보입니다
2. 50분 vs 10분: 실습 시간 고려
3. '경향성 파악' 단계에 충분
하지만 여러분이 실제 프로덕션에 배포할 때는
반드시 N=100 이상으로 검증하세요."
핵심:
- N=1: 운
- N=20: 경향성
- N=100: 확신
- N=1000: 크리티컬 시스템
프롬프트의 중요도에 따라 N을 선택한다.
4 응답 패턴 찾기
- N번 실행했을 때, 패턴을 찾는 기준을 설정한다. 이 글에서는 제일 간단하면서 강력한 Frequency를 활용한 방법을 알아본다.
- 단순히 “좋다/나쁘다”가 아니라, 구체적인 기준을 정해서 센다.
4.1 질문 생성기 프롬프트의 측정 기준
- 형식: 정확히 3개 질문
- 구조: High/Moderate/Low certainty 섹션 구분
- 언어: 한국어 반말
- 길이: 각 질문 5단어 이내
- 정제: 질문만 출력, 주석/설명 없음
20번 실행 시 각 기준별로 체크
4.2 실제 측정 예시
입력: “부산 여행”
실행 횟수: 20회
결과 기록 표:
| 실행 | 질문 개수 | 섹션 구분 | 반말 | 5단어 이내 | 주석 없음 | 전체 Pass |
|---|---|---|---|---|---|---|
| 1 | 3 ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 2 | 3 ✓ | ✓ | ✓ | ✗ (6단어) | ✓ | ✗ |
| 3 | 3 ✓ | ✓ | ✗ (존댓말) | ✓ | ✓ | ✗ |
| 4 | 3 ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 5 | 2 ✗ | ✓ | ✓ | ✓ | ✓ | ✗ |
| … | … | … | … | … | … | … |
| 20 | 3 ✓ | ✓ | ✓ | ✗ (7단어) | ✓ | ✗ |
통계 요약:
| 기준 | 통과 | 실패 | 통과율 |
|---|---|---|---|
| 질문 3개 | 18/20 | 2/20 | 90% |
| 섹션 구분 | 20/20 | 0/20 | 100% |
| 반말 유지 | 17/20 | 3/20 | 85% |
| 5단어 이내 | 14/20 | 6/20 | 70% |
| 주석 없음 | 19/20 | 1/20 | 95% |
| 전체 Pass | 12/20 | 8/20 | 60% |
4.3 패턴 분석: 어떤 기준이 약한가?
안정적인 기준 (>90%): - 섹션 구분: 100% - 주석 없음: 95% - 질문 개수: 90%
불안정한 기준 (<80%): - 5단어 이내: 70% ← 가장 약함 - 반말 유지: 85%
4.4 실패 케이스 상세 분석
실행 2 (5단어 위반):
High certainty: 부산 여행 언제 가는 게 좋아? (7단어 ✗)
Moderate certainty: 어디 먼저 갈까? (4단어 ✓)
Low certainty: 혼자 가도 괜찮아? (4단어 ✓)
→ High certainty 질문에서만 길이 초과
실행 3 (반말 위반):
High certainty: 부산 뭐 할까요? (존댓말 ✗)
Moderate certainty: 어디 가볼까? (반말 ✓)
Low certainty: 혼자 가도 괜찮아? (반말 ✓)
→ 마지막 “요” 하나가 문제
실행 5 (질문 개수 부족):
High certainty: 부산 뭐 할까?
Moderate certainty: 어디 먼저 갈까?
→ Low certainty 질문 누락
실행 20 (5단어 위반):
High certainty: 부산에서 꼭 가봐야 할 곳은? (7단어 ✗)
Moderate certainty: 뭐 먹을까? (3단어 ✓)
Low certainty: 얼마나 걸릴까? (4단어 ✓)
→ 구체적인 질문일수록 단어 수 증가 경향
4.5 패턴에서 발견한 것
4.5.1 카테고리별 차이
| 카테고리 | 평균 단어 수 | 5단어 초과율 |
|---|---|---|
| High certainty | 5.2단어 | 40% ✗ |
| Moderate certainty | 4.1단어 | 10% ✓ |
| Low certainty | 3.8단어 | 5% ✓ |
→ High certainty 질문이 가장 길어지는 경향
4.5.2 반말 위반 패턴
분석: 20회 중 3회 반말 위반
실행 3: "부산 뭐 할까요?"
실행 11: "언제 가는 게 좋을까요?"
실행 16: "숙소 어디가 좋아요?"
공통점: 모두 마지막에 "요" 추가
이유: "~할까?" vs "~할까요?" 혼동
4.5.3 질문 개수 부족 패턴
분석: 20회 중 2회 질문 생성 (개수 부족)
실행 5: Low certainty 누락
실행 13: Moderate certainty 누락
이유: 특정 카테고리에 맞는 질문이 떠오르지 않을 때
섹션을 통째로 생략
4.6 패턴 기반 개선 방향
4.6.1 5단어 제약 (70% 통과율)
현재 프롬프트:
Don't be over five words.
개선안 1: 예시 추가
Don't be over five words.
Examples: "뭐 할까?" (3 words), "어디 갈까?" (3 words)
개선안 2: 강조
CRITICAL: Each question must be 5 words or less.
Count carefully: "부산 뭐 할까?" = 4 words ✓
"부산 여행 언제 가?" = 5 words ✓
"부산 여행 언제 가는 게 좋아?" = 7 words ✗
예상 효과: 70% → 90%
4.6.2 반말 유지 제약 (85% 통과율)
현재 프롬프트:
Always answer in half speech form of Korean 반말.
개선안:
Always answer in half speech form of Korean 반말.
NEVER use polite form endings:
- ✗ "~할까요?" "~해요" "~입니까?"
- ✓ "~할까?" "~해" "~이야?"
예상 효과: 85% → 95%
4.7 응답 패턴 탐색의 중요성
패턴 분석 없이 개선하면:
개발자: "20번 중 12번만 통과했어요. 60%네요."
PM: "뭐가 문제인가요?"
개발자: "음... 그냥 불안정한 것 같아요."
PM: "어떻게 고칠 건가요?"
개발자: "프롬프트를 전체적으로 다시 써볼게요."
→ 2일 소요, 효과 불확실
패턴 분석 후 개선하면:
개발자: "20번 중 12번만 통과. 분석 결과:
- 5단어 제약: 70% (가장 약함)
- 반말 유지: 85%
- 특히 High certainty 질문이 길어지는 경향"
PM: "그럼 5단어 제약 부분만 강화하면 되겠네요?"
개발자: "네. Ending에 예시 추가하겠습니다."
→ 30분 소요, 목표 지점 명확
[수정 후 20번 재테스트]
- 5단어 제약: 90% (70%→90%, +20%p)
- 전체 Pass: 75% (60%→75%, +15%p)
PM: "좋아요. 이제 반말 부분도 개선하죠."
4.8 측정 가능한 것만 개선 가능
핵심 원칙:
"측정할 수 없으면 개선할 수 없다"
패턴 찾기 = 측정
측정 = 숫자
숫자 = 비교 가능
비교 = 개선 방향
구체적 예시:
| 상태 | 설명 | 개선 가능? |
|---|---|---|
| “불안정해” | 주관적, 모호 | ✗ |
| “60% 통과” | 객관적, 하지만 불충분 | △ |
| “5단어 제약 70% 통과” | 구체적, 액션 가능 | ✓ |
| “High certainty 질문이 평균 5.2단어” | 매우 구체적, 최적 | ✓✓ |
응답 패턴 찾기는 “불안정해”를 “5단어 제약 70%”로 바꾸는 과정이다.
5 모델별 테스트: 같은 프롬프트, 다른 모델
- 같은 프롬프트라도 LLM 모델 (GPT-4, Claude, Gemini) 마다 다르게 작동할 수 있다.
- 모델마다 학습 데이터와 아키텍처가 다르기 때문에, 같은 지시문을 다르게 해석할 수 있다.
5.1 왜 모델별 테스트가 필요한가?
시나리오: 단일 모델 테스트만 수행
개발자: "GPT-4에서 20번 테스트, 95% 통과율이에요!"
PM: "완벽하네요. 배포하죠."
[3개월 후]
PM: "GPT-4 API 비용이 너무 높아요. Claude로 전환하죠."
[Claude로 전환 후]
사용자: "왜 질문이 이상하게 나와요?"
개발자: "Claude에서 테스트해보니 60% 통과율이네요..."
PM: "다시 프롬프트 수정해야 해요. 2주 걸립니다."
→ 서비스 중단, 사용자 불만
시나리오: 다중 모델 테스트 수행
개발자: "3개 모델 테스트 결과:
GPT-4: 95%
Claude: 60%
Gemini: 85%"
PM: "Claude가 약하네요. 왜죠?"
개발자: "분석해보니 Claude가 '5단어' 제약을 덜 엄격하게 해석해요."
PM: "프롬프트를 Claude 친화적으로 수정할 수 있나요?"
개발자: "네, Ending에 예시를 추가하면 될 것 같습니다."
[수정 후]
GPT-4: 95% (유지)
Claude: 90% (60%→90%, +30%p)
Gemini: 88% (약간 감소하지만 허용 범위)
PM: "좋아요. 이제 비용에 따라 모델을 자유롭게 선택할 수 있겠네요."
5.2 모델별 특성 비교
질문 생성기 프롬프트 20회 테스트 결과:
| 평가 기준 | GPT-4 | Claude 3 | Gemini Pro | 평균 |
|---|---|---|---|---|
| 질문 3개 | 20/20 (100%) | 18/20 (90%) | 19/20 (95%) | 95% |
| 섹션 구분 | 20/20 (100%) | 20/20 (100%) | 19/20 (95%) | 98% |
| 반말 유지 | 19/20 (95%) | 20/20 (100%) | 18/20 (90%) | 95% |
| 5단어 이내 | 16/20 (80%) | 12/20 (60%) | 15/20 (75%) | 72% |
| 주석 없음 | 20/20 (100%) | 19/20 (95%) | 20/20 (100%) | 98% |
| 전체 Pass | 15/20 (75%) | 11/20 (55%) | 14/20 (70%) | 67% |
5.3 모델별 강점/약점 분석
GPT-4의 특징:
| 항목 | 평가 | 관찰 |
|---|---|---|
| 형식 준수 | 우수 | 3개 질문, 섹션 구분 100% |
| 5단어 제약 | 보통 | 80%, 가끔 6-7단어 |
| 반말 | 우수 | 95%, “~할까요?” 드물게 출현 |
| 안정성 | 높음 | 결과 예측 가능 |
실패 케이스 (GPT-4):
실행 7:
High certainty: 부산 여행 언제 가는 게 좋아? (7단어 ✗)
Claude 3의 특징:
| 항목 | 평가 | 관찰 |
|---|---|---|
| 형식 준수 | 보통 | 90%, 가끔 2개만 생성 |
| 5단어 제약 | 약함 | 60%, 길이 제약 해석 유연 |
| 반말 | 우수 | 100%, 반말 완벽 |
| 안정성 | 중간 | 결과 변동 큼 |
실패 케이스 (Claude):
실행 3:
High certainty: 부산에서 뭐 하면 좋을까? (6단어 ✗)
Moderate certainty: 어디 먼저 가보는 게 나을까? (7단어 ✗)
실행 11: (질문 2개만 생성)
High certainty: 부산 뭐 할까?
Moderate certainty: 어디 갈까?
(Low certainty 누락 ✗)
Gemini Pro의 특징:
| 항목 | 평가 | 관찰 |
|---|---|---|
| 형식 준수 | 우수 | 95%, 안정적 |
| 5단어 제약 | 보통 | 75%, GPT-4와 유사 |
| 반말 | 보통 | 90%, 가끔 존댓말 혼입 |
| 안정성 | 높음 | 일관성 있음 |
실패 케이스 (Gemini):
실행 5:
Low certainty: 혼자 가도 괜찮을까요? (존댓말 ✗)
실행 13:
Moderate certainty: 부산 여행 코스 추천해줘 (명령문, 질문 아님 ✗)
5.4 모델별 약점 패턴 정리
Claude의 5단어 제약 문제:
Claude 실패 케이스 분석 (20회 중 8회 실패):
실행 3: "부산에서 뭐 하면 좋을까?" (6단어)
실행 5: "어디 먼저 가보는 게 나을까?" (7단어)
실행 9: "부산 전통 시장 어디 가?" (6단어)
실행 11: Low certainty 질문 누락
실행 14: "부산 맛집 추천해줘 뭐가 좋아?" (8단어)
...
패턴: Claude는 "자연스러운 질문"을 우선시
단어 수 제약을 덜 엄격하게 해석
Gemini의 반말 문제:
Gemini 실패 케이스 분석 (20회 중 2회 실패):
실행 5: "혼자 가도 괜찮을까요?" (존댓말)
실행 18: "언제 가는 게 좋을까요?" (존댓말)
패턴: Low certainty 질문에서만 존댓말 출현
"불확실한" 질문 → 정중하게 표현 경향
5.5 프롬프트 개선: 모델 중립적으로 만들기
- 현재: 프롬프트가 모델별 성능 차이가 큼
### Ending
Always answer in half speech form of Korean 반말.
Don't be over five words.
Only provide three questions.
개선 프롬프트 (모델 중립적):
### Ending
CRITICAL RULES:
1. Language: ALWAYS use Korean casual speech (반말)
- ✓ Correct: "뭐 할까?" "어디 갈까?"
- ✗ Wrong: "뭐 할까요?" "어디 갈까요?"
2. Length: Each question MUST be 5 words or less
- Count carefully before generating
- ✓ "부산 뭐 할까?" = 4 words
- ✗ "부산에서 뭐 하면 좋을까?" = 6 words
3. Count: Generate EXACTLY 3 questions
- One for each certainty level
- Never skip any level
개선 후 테스트 결과:
| 평가 기준 | GPT-4 | Claude 3 | Gemini Pro | 개선 |
|---|---|---|---|---|
| 5단어 이내 | 16/20 (80%) | 18/20 (90%) | 17/20 (85%) | +30%p (Claude) |
| 반말 유지 | 19/20 (95%) | 20/20 (100%) | 20/20 (100%) | +10%p (Gemini) |
| 질문 3개 | 20/20 (100%) | 20/20 (100%) | 20/20 (100%) | +10%p (Claude) |
| 전체 Pass | 17/20 (85%) | 17/20 (85%) | 17/20 (85%) | 일관성 향상 |
→ 모든 모델에서 85% 통과율로 수렴
5.6 모델 중립성의 필요성
비용 최적화:
| 모델 | 1M 토큰 비용 | 월 10M 호출 시 |
|---|---|---|
| GPT-4 | $30 | $300 |
| Claude 3 | $15 | $150 |
| Gemini Pro | $7 | $70 |
모델 중립적 프롬프트 장점:
시나리오: 비용 절감 필요
PM: "월 API 비용이 $300이에요. 줄일 수 있나요?"
개발자 (모델 종속적 프롬프트):
"GPT-4만 제대로 작동해요. 다른 모델로 바꾸면
프롬프트 재작성 필요합니다. 2주 소요."
PM: "그럼 계속 $300 지불해야겠네요..."
---
개발자 (모델 중립적 프롬프트):
"3개 모델 모두 85% 통과율이에요.
Gemini로 바꾸면 $70로 절감됩니다."
PM: "즉시 전환하죠!"
→ 연간 $2,760 절약
모델 장애 대응:
[GPT-4 API 장애 발생]
개발자 (모델 종속적):
"GPT-4만 작동해요. 서비스 중단합니다."
→ 3시간 다운타임, 사용자 이탈
개발자 (모델 중립적):
"Claude로 자동 페일오버합니다."
→ 0초 다운타임, 사용자 영향 없음
5.7 모델 선택 의사결정 프레임워크
상황별 모델 선택:
| 상황 | 추천 모델 | 이유 |
|---|---|---|
| 프로토타입 | Gemini Pro | 저렴($7), 빠른 반복 |
| 프로덕션 (안정성 중시) | GPT-4 | 높은 일관성 |
| 프로덕션 (비용 중시) | Claude 3 | 중간 성능, 중간 비용 |
| 크리티컬 시스템 | GPT-4 + Claude 백업 | 페일오버 전략 |
모델별 테스트는 “선택의 자유”를 준다.
한 모델에 종속되지 않고, 상황에 따라 최적의 모델을 선택할 수 있다.
6 세 번의 실험: 각각 다른 것을 본다
정량적 평가의 마지막 단계는 다양한 입력 조건에서 테스트하는 것이다.
- 같은 프롬프트로, 입력만 바꿈
- 세 번의 실험이 각각 다른 것을 테스트한다.
- 다양한 입력에서 안정성 검증
N=20으로 안정성을 확인했다면, 이제 입력을 바꿔가며 프롬프트가 범용적으로 작동하는지 확인한다.
시나리오: 단일 입력만 테스트
개발자: "질문 생성기 완성! '개발자로 살아남으려면?' 입력으로
20번 테스트, 85% 통과율입니다."
PM: "완벽하네요. 배포하죠."
[프로덕션 배포 후]
사용자 1: "안구 건조증 음식?" → ✓ 정상 작동
사용자 2: "What's the best food in Hawaii?" → ✗ 영어로 응답
사용자 3: "카페" (짧은 입력) → ✗ 이상한 질문 생성
PM: "왜 영어로 답하죠? 왜 짧은 입력에서 실패하죠?"
개발자: "테스트하지 않은 입력이었어요..."
→ 긴급 수정, 2주 소요
시나리오: 세 번 실험 수행
개발자: "질문 생성기 완성! 세 가지 입력으로 테스트합니다."
1회차: "개발자로 살아남으려면?" (일반 주제, 한국어, 완전한 문장)
→ 15/15 통과
2회차: "안구 건조증에 좋은 음식?" (구체적 주제, 건강)
→ 10/10 통과
3회차: "What's the Best food in Hawaii?" (영어 입력)
→ 10/10 통과, 모두 한국어로 응답 ✓
PM: "영어 입력도 처리하네요? 예상 외였는데 좋네요."
개발자: "네, 프롬프트가 다국어 입력에 안정적입니다.
추가 수정 없이 배포 가능합니다."
[프로덕션 배포 후]
사용자 1: "안구 건조증 음식?" → ✓
사용자 2: "What's the best food in Hawaii?" → ✓
사용자 3: "카페" → ✓ (짧은 입력도 예상대로 작동)
→ 긴급 수정 없음, 안정적 운영
6.1 세 번 실험의 목적: 입력 공간 탐색
입력 공간 (Input Space):
프롬프트가 받을 수 있는 모든 가능한 입력을 뜻한다.
질문 생성기의 입력 공간은 무한하다 (모든 주제, 모든 언어, 모든 길이).
탐색 전략:
| 실험 | 입력 | 변수 | 검증 목표 |
|---|---|---|---|
| 1회차 | “개발자로 살아남으려면?” | 일반 주제, 한국어, 완전 문장 | 기준선 (baseline) |
| 2회차 | “안구 건조증에 좋은 음식?” | 구체적 주제, 건강 카테고리 | 주제 독립성 |
| 3회차 | “What’s the Best food in Hawaii?” | 영어 입력 | 다국어 처리 |
→ 3개 입력으로 입력 공간의 주요 축을 탐색
6.2 1회차: 기준선 설정
입력: “개발자로 살아남으려면?”
실행 횟수: 15회
결과 요약:
| 평가 기준 | 통과 | 실패 | 통과율 | 비고 |
|---|---|---|---|---|
| 질문 3개 | 15/15 | 0/15 | 100% | 매우 안정적 |
| 섹션 구분 | 15/15 | 0/15 | 100% | 완벽 |
| 반말 유지 | 15/15 | 0/15 | 100% | 문제 없음 |
| 5단어 이내 | 11/15 | 4/15 | 73% | 약함 |
| 주석 없음 | 15/15 | 0/15 | 100% | 안정적 |
실패 케이스 (5단어 제약):
실행 3:
High certainty: 개발자 커뮤니티는 어떻게 활용해? (6단어 ✗)
실행 7:
Moderate certainty: 기술 블로그 작성은 중요할까? (6단어 ✗)
실행 12:
Low certainty: 이직 타이밍은 언제가 좋을까? (7단어 ✗)
실행 14:
High certainty: 어떤 프레임워크를 먼저 배워야 해? (7단어 ✗)
주제 다양성:
| 주제 | 출현 횟수 | 비율 |
|---|---|---|
| 기술 스킬 | 15/15 | 100% |
| 트렌드 학습 | 14/15 | 93% |
| 경력 쌓기 | 11/15 | 73% |
| 커뮤니티 | 7/15 | 47% |
| 이직 | 3/15 | 20% |
발견:
- 형식 안정성: 100% (15/15)
- 반말 안정성: 100% (15/15)
- 길이 제약 약함: 73% (11/15)
- 주제 편향: “기술 스킬”이 모든 실행에 등장
→ 이것이 기준선이다. 이후 실험과 비교할 기준
6.3 2회차: 주제 독립성 검증
입력: “안구 건조증에 좋은 음식?”
변경된 변수: 주제 (개발 → 건강/영양)
실행 횟수: 10회
결과 요약:
| 평가 기준 | 통과 | 실패 | 통과율 | 1회차 대비 |
|---|---|---|---|---|
| 질문 3개 | 10/10 | 0/10 | 100% | = |
| 섹션 구분 | 10/10 | 0/10 | 100% | = |
| 반말 유지 | 10/10 | 0/10 | 100% | = |
| 5단어 이내 | 10/10 | 0/10 | 100% | +27%p ↑ |
| 주석 없음 | 10/10 | 0/10 | 100% | = |
성공 케이스 (5단어 제약 완벽 통과):
실행 1:
High certainty: 안구 건조증 음식 뭐야? (5단어 ✓)
Moderate certainty: 오메가3 효과 있어? (4단어 ✓)
Low certainty: 당근즙도 도움 될까? (5단어 ✓)
실행 5:
High certainty: 어떤 음식이 좋아? (5단어 ✓)
Moderate certainty: 블루베리 효과 있어? (4단어 ✓)
Low certainty: 물 많이 마셔야 해? (5단어 ✓)
실행 10:
High certainty: 눈 건강 음식 뭐야? (5단어 ✓)
Moderate certainty: 비타민A 많은 게 뭐야? (6단어 ✗)
→ 실제로는 실행 10에서 1개 실패
통과율 = 29/30 = 96.7%
주제 다양성:
| 주제 | 출현 횟수 | 비율 |
|---|---|---|
| 음식/영양소 | 10/10 | 100% |
| 대체 치료법 | 7/10 | 70% |
| 조리법 | 3/10 | 30% |
| 물 섭취 | 3/10 | 30% |
발견:
- 형식 안정성: 유지 (100%)
- 5단어 제약: 1회차(73%) → 2회차(96.7%) 대폭 개선
- 주제 독립성: ✓ 확인됨 (건강 주제에서도 완벽 작동)
왜 2회차에서 5단어 제약이 더 잘 지켜졌는가?
가설 1: 구체적 주제일수록 명확한 질문 생성
- "개발자로 살아남으려면?" → 넓고 추상적
→ 모델이 다양한 각도에서 질문 생성 시도
→ 긴 질문 생성 가능성 ↑
- "안구 건조증에 좋은 음식?" → 좁고 구체적
→ 모델이 명확한 질문 생성
→ 짧은 질문 자연스럽게 생성 ↑
가설 2: 1회차의 편향
- 1회차가 특이 케이스일 가능성
- 더 많은 실험 필요 (N=50+)
6.4 3회차: 다국어 처리 검증
입력: “What’s the Best food in Hawaii?”
변경된 변수: 언어 (한국어 → 영어)
실행 횟수: 10회
결과 요약:
| 평가 기준 | 통과 | 실패 | 통과율 | 특이사항 |
|---|---|---|---|---|
| 질문 3개 | 10/10 | 0/10 | 100% | - |
| 섹션 구분 | 10/10 | 0/10 | 100% | - |
| 반말 유지 | 10/10 | 0/10 | 100% | 영어 혼입 0건 |
| 5단어 이내 | 8/10 | 2/10 | 80% | - |
| 주석 없음 | 10/10 | 0/10 | 100% | - |
가장 중요한 발견: 영어 입력 → 한국어 출력
입력: "What's the Best food in Hawaii?" (영어)
예상 가능한 시나리오:
1. 영어로 응답: "What food should I try?" ✗
2. 영어+한국어 혼합: "Hawaiian food 뭐 먹을까?" ✗
3. 한국어 응답: "하와이 음식 뭐 먹을까?" ✓
실제 결과: 10/10 모두 시나리오 3 (한국어 응답)
실제 생성 예시:
실행 1:
High certainty: 하와이 음식 추천 뭐야? (6단어 ✗)
Moderate certainty: 로코모코 맛있어? (4단어 ✓)
Low certainty: 포케는 어떤 맛이야? (5단어 ✓)
실행 3:
High certainty: 하와이 가면 뭐 먹어? (5단어 ✓)
Moderate certainty: 마우이 특산물 있어? (4단어 ✓)
Low certainty: 스팸무스비 괜찮아? (3단어 ✓)
실행 7:
High certainty: 하와이 전통 음식 뭐야? (5단어 ✓)
Moderate certainty: 아사이볼은 어때? (3단어 ✓)
Low certainty: 쉐이브아이스 추천해? (3단어 ✓)
실행 10:
High certainty: 하와이에서 꼭 먹어야 할 음식은? (7단어 ✗)
Moderate certainty: 팬케이크 맛있어? (3단어 ✓)
Low certainty: 로컬 맛집 어디야? (4단어 ✓)
맥락 이해도 분석:
| 하와이 관련 키워드 | 출현 횟수 | 비율 |
|---|---|---|
| “하와이” 직접 언급 | 10/10 | 100% |
| 하와이 고유 음식 (로코모코, 포케) | 8/10 | 80% |
| 하와이 특산 (마우이, 쉐이브아이스) | 5/10 | 50% |
| 일반 음식 (팬케이크) | 3/10 | 30% |
→ 맥락 이해도 매우 높음
발견:
- 다국어 처리: ✓ 완벽 (영어 혼입 0건)
- 맥락 이해: ✓ 우수 (하와이 음식 정확히 인식)
- 5단어 제약: 80% (1회차 73%보다 개선, 2회차 96.7%보다 낮음)
프롬프트 언어 vs 입력 언어 vs 출력 언어:
| 요소 | 언어 | 우선순위 |
|---|---|---|
| 프롬프트 | 영어 | - |
| 입력 | 영어 | - |
| 출력 지시 | 한국어 (Ending에 명시) | 최우선 |
| 실제 출력 | 한국어 | ✓ |
→ Ending 섹션의 “Always answer in Korean 반말”이 입력 언어보다 우선
6.5 세 번 실험 종합 분석
통과율 비교:
| 평가 기준 | 1회차 | 2회차 | 3회차 | 평균 | 안정성 |
|---|---|---|---|---|---|
| 질문 3개 | 100% | 100% | 100% | 100% | 매우 안정 |
| 섹션 구분 | 100% | 100% | 100% | 100% | 매우 안정 |
| 반말 유지 | 100% | 100% | 100% | 100% | 매우 안정 |
| 5단어 이내 | 73% | 96.7% | 80% | 83% | 중간 |
| 주석 없음 | 100% | 100% | 100% | 100% | 매우 안정 |
| 전체 Pass | 73% | 96.7% | 80% | 83% | - |
핵심 발견:
- 형식 안정성 완벽 (100%):
- 주제, 언어에 관계없이 3개 질문 형식 유지
- 섹션 구분 완벽
- 주석 없음 완벽
- 반말 안정성 완벽 (100%):
- 영어 입력에서도 한국어 반말 출력
- 영어 혼입 0건
- 5단어 제약 불안정 (73-96.7%):
- 가장 약한 제약
- 주제에 따라 변동 (구체적 주제 > 추상적 주제)
- 주제 독립성 ✓:
- 개발, 건강 주제 모두 작동
- 다국어 처리 ✓:
- 영어 입력 → 한국어 출력 완벽
- 맥락 이해도 우수
6.6 왜 세 번만 실험하는가?
“더 많은 입력으로 테스트해야 하지 않나?”
논리적으로는 맞다. 입력 공간은 무한하다.
모든 주제, 모든 언어, 모든 길이를 테스트할 수는 없다.
세 번 실험의 목적은 "완전한 검증"이 아니라
"주요 축 탐색"이다.
축 1: 주제 (일반 ↔ 구체적)
축 2: 언어 (한국어 ↔ 영어)
축 3: (추가 가능) 길이 (짧은 입력 ↔ 긴 입력)
3개 축을 탐색하면, 프롬프트의 "입력 범위"를
대략적으로 파악할 수 있다.
3번 vs 10번 vs 100번:
| 실험 횟수 | 소요 시간 | 발견 가능성 | 비용 |
|---|---|---|---|
| 3번 | 30분 | 주요 패턴 | 낮음 |
| 10번 | 3시간 | 세부 패턴 | 중간 |
| 100번 | 30시간+ | 극소수 엣지 케이스 | 높음 |
→ 3번이 최적 (ROI 관점)
6.7 프롬프트 개선 액션
발견된 문제: 5단어 제약 불안정 (73-96.7%)
현재 Ending:
Always answer in half speech form of Korean 반말.
Don't be over five words.
Only provide three questions.
개선안 1: 예시 추가
Always answer in half speech form of Korean 반말.
Each question MUST be 5 words or less.
Example: "부산 뭐 할까?" (4 words ✓)
Example: "부산에서 뭐 하면 좋을까?" (6 words ✗)
Only provide three questions.
개선안 2: 강조 추가
Always answer in half speech form of Korean 반말.
CRITICAL: Each question MUST NOT exceed 5 words.
Count words carefully before generating each question.
Only provide three questions.
개선 후 예상 효과:
| 항목 | 현재 | 개선 후 (예상) | 변화 |
|---|---|---|---|
| 5단어 제약 | 73-96.7% | 90-95% | +10%p |
| 전체 Pass | 83% | 90-95% | +7-12%p |
6.8 세 번 실험의 의의
- 입력 공간 탐색: 주제, 언어 축 검증
- 패턴 발견: 5단어 제약이 가장 약함
- 개선 방향 도출: Ending 섹션 개선 필요
- 배포 결정: 83% 통과율 → 배포 가능 여부 판단
세 번 실험은 정량적 검증의 마지막 단계이자
프롬프트 최적화의 시작점이다.
7 5. 왜 정량적 평가가 중요한가?
정성적 평가(Part C, D)는 “프롬프트가 의도대로 작동하는지”를 확인했다.
정량적 평가(Part E)는 “그 작동이 얼마나 안정적인지”를 숫자로 증명한다.
7.1 프로덕션에서의 의미
시나리오 1: 정량적 평가 없이 배포
개발자: "질문 생성기 완성! 5번 테스트했는데 잘 작동해요."
PM: "5번? 충분한가요?"
개발자: "네, 매번 3개 질문 나왔고, 반말도 유지됐어요."
PM: "좋아요. 배포하죠."
[프로덕션 배포 후]
Day 1: 사용자 100명 → 20명 "질문이 이상해요" 불만
Day 2: 사용자 500명 → 100명 "이게 반말이에요?" 불만
Day 3: 서비스 중단
개발자: "N=5는 충분하지 않았네요..."
PM: "몇 번 테스트해야 충분했나요?"
개발자: "최소 20번은 했어야 했어요."
PM: "왜 처음부터 안 했죠?"
→ 신뢰 손상, 2주 긴급 수정
시나리오 2: 정량적 평가 후 배포
개발자: "질문 생성기 완성! 정량적 평가 결과:
- N=20 테스트: 85% 통과율
- 세 번 실험: 주제/언어 독립성 검증
- 5단어 제약: 73-96.7% (가장 약함)"
PM: "85%면 프로덕션에 충분한가요?"
개발자: "6σ 품질 기준(99.99966%)에는 못 미치지만,
질문 생성 도메인에서는 허용 가능합니다.
5단어 제약 개선하면 90-95%까지 올릴 수 있어요."
PM: "개선 소요 시간은?"
개발자: "Ending 섹션에 예시 추가만 하면 됩니다. 30분."
[30분 후]
개발자: "재테스트 결과 93% 통과율입니다."
PM: "좋아요. 배포하되, 모니터링 대시보드 준비하세요."
[프로덕션 배포 후]
Day 1: 실시간 모니터링, 통과율 92% (예상 93%와 일치)
Day 2: 통과율 94% (사용자 피드백 반영)
Day 3: 안정적 운영, 사용자 만족도 95%
PM: "좋은 출시였습니다."
→ 신뢰 구축, 안정적 운영
7.2 비용 최적화 의사결정
N번 생성의 ROI:
| N | API 비용 | 발견 가능 패턴 | 의사결정 가능 수준 |
|---|---|---|---|
| 1 | $0.01 | 없음 | 불가능 |
| 5 | $0.05 | 표면적 | 매우 낮음 |
| 10 | $0.10 | 기초적 | 낮음 |
| 20 | $0.20 | 충분 | 높음 (추천) |
| 50 | $0.50 | 상세 | 매우 높음 (연구용) |
| 100 | $1.00 | 극상세 | 과잉 (불필요) |
$0.20 투자로 얻는 것:
1. 통과율 숫자 (85%)
2. 취약점 발견 (5단어 제약 73%)
3. 개선 방향 도출 (Ending 섹션 보강)
4. 배포 신뢰도 확보
5. PM/이해관계자 설득 자료
→ 긴급 수정 비용 절감: $5,000+ (개발자 2주 인건비)
→ ROI = $5,000 / $0.20 = 25,000:1
7.3 측정하지 않으면 개선할 수 없다
핵심 원칙:
정성적 평가: "이 프롬프트가 작동하는가?"
정량적 평가: "얼마나 안정적으로 작동하는가?"
측정 = 숫자
숫자 = 비교 가능
비교 = 개선 방향
구체적 예시:
| 평가 방식 | 결과 | 액션 가능? | 이유 |
|---|---|---|---|
| 주관적 | “불안정해” | ✗ | 모호, 비교 불가 |
| 단순 통계 | “60% 통과” | △ | 어디가 약한지 모름 |
| 세부 통계 | “5단어 제약 70%” | ✓ | 개선 지점 명확 |
| 매우 세부 | “High certainty 평균 5.2단어” | ✓✓ | 최적 개선안 도출 |
7.4 지속적 개선 루프
정량적 평가 → 개선 → 재평가 사이클:
[1단계] 초기 평가
N=20 테스트 → 85% 통과율
5단어 제약 취약 (73%)
↓
[2단계] 개선
Ending에 예시 추가
"부산 뭐 할까?" (4 words ✓)
"부산에서 뭐 하면 좋을까?" (6 words ✗)
↓
[3단계] 재평가
N=20 재테스트 → 93% 통과율
5단어 제약 개선 (73% → 90%, +17%p)
↓
[4단계] 추가 개선
반말 제약에 예시 추가
"뭐 할까?" ✓
"뭐 할까요?" ✗
↓
[5단계] 최종 평가
N=20 최종 테스트 → 96% 통과율
프로덕션 배포 결정
↓
[6단계] 프로덕션 모니터링
실시간 대시보드: 일평균 95% 통과율
→ 목표(96%)와 유사, 안정적 운영
7.5 이해관계자 커뮤니케이션
정량 데이터의 힘:
PM에게:
| 질문 | 정량 데이터 없이 | 정량 데이터 있으면 |
|---|---|---|
| “배포 가능한가요?” | “아마도요…” | “93% 통과율, 배포 가능” |
| “얼마나 안정적인가요?” | “꽤 안정적이에요” | “N=20 테스트, 93% 안정” |
| “개선 가능한가요?” | “해볼게요” | “5단어 제약 개선 시 +5%p” |
| “비용은?” | “모르겠어요” | “API $0.20 투자, ROI 25,000:1” |
임원에게:
CTO: "이 프롬프트 얼마나 믿을 만한가요?"
개발자 (정량 데이터 없음):
"제가 테스트해봤는데 잘 작동합니다."
CTO: "얼마나 테스트했죠?"
→ 신뢰도 낮음
---
개발자 (정량 데이터 있음):
"N=20 테스트, 93% 통과율입니다.
세 가지 다른 주제, 영어 입력까지 검증했습니다.
프로덕션 예상 성능: 92-94%"
CTO: "좋습니다. 배포하죠."
→ 신뢰도 높음, 의사결정 빠름
7.6 프로덕션 모니터링 설계
정량 평가 지표 → 모니터링 대시보드:
| 평가 지표 | 모니터링 메트릭 | 알람 조건 |
|---|---|---|
| 질문 3개 | questions_count |
< 3 |
| 반말 유지 | casual_speech_ratio |
< 90% |
| 5단어 이내 | word_count_violation |
> 20% |
| 주석 없음 | comment_presence |
> 5% |
| 전체 Pass | overall_pass_rate |
< 85% |
실시간 대시보드 예시:
[질문 생성기 모니터링 대시보드]
총 요청 수: 12,458
전체 통과율: 92.3% (목표: 93%)
기준별 통과율:
- 질문 3개: 99.8% ✓
- 반말: 98.2% ✓
- 5단어: 88.7% △ (목표 90%)
- 주석 없음: 99.1% ✓
[알람]
⚠️ 5단어 제약 통과율 90% 미만 (지난 1시간)
→ Ending 섹션 강화 검토 필요
7.7 정량적 평가의 한계
숫자가 전부가 아니다:
시나리오: 100% 통과율인데 사용자 불만
개발자: "N=20 테스트, 100% 통과율입니다!"
PM: "완벽하네요. 배포하죠."
[프로덕션 배포 후]
사용자 1: "질문이 너무 뻔해요. 재미없어요."
사용자 2: "매번 비슷한 질문만 나와요."
사용자 3: "창의성이 없어요."
PM: "100% 통과인데 왜 불만이죠?"
개발자: "형식은 완벽했지만, 질문의 질은 측정하지 않았어요..."
측정하지 못하는 것들:
| 항목 | 정량 평가 | 측정 가능? | 대안 |
|---|---|---|---|
| 형식 준수 | ✓ | ✓ | N번 생성 |
| 반말 유지 | ✓ | ✓ | 패턴 분석 |
| 질문 품질 | ✗ | ✗ | 사용자 피드백 |
| 창의성 | ✗ | ✗ | A/B 테스트 |
| 사용자 만족도 | ✗ | ✗ | 설문 조사 |
균형 잡힌 평가:
정량적 평가 (93%) + 정성적 평가 (작동 확인) + 사용자 피드백 (만족도)
= 종합적 프롬프트 품질
7.8 정량적 평가 체크리스트
배포 전 필수 확인 사항:
연속적 개선:
정량적 평가는 "한 번"이 아니다.
초기 개발: N=20 테스트
프로덕션 배포: 실시간 모니터링 (N=∞)
주간 리뷰: 통과율 추이 분석
월간 최적화: 취약점 개선
→ 데이터 기반 지속적 개선
8 정량적 평가 핵심 요약
8.1 N번 생성
- 목적: 안정성 측정
- 방법: 같은 입력 N번 실행, 통과율 계산
- 추천: N=20 (최소), N=50+ (연구용)
- 발견: 불안정한 제약 식별
8.2 응답 패턴 찾기
- 목적: 취약점 분석
- 방법: 5개 기준별 통과/실패 기록
- 발견: 어떤 제약이 약한지 정량화
- 개선: 패턴 기반 Ending 섹션 보강
8.3 모델별 테스트
- 목적: 모델 독립성 검증
- 방법: GPT-4/Claude/Gemini 각 20회 테스트
- 발견: 모델별 강점/약점 패턴
- 개선: 모델 중립적 프롬프트 작성
8.4 세 번 실험
- 목적: 입력 공간 탐색
- 방법: 일반/구체/다국어 입력 각 10-15회
- 발견: 주제/언어 독립성 검증
- 개선: 범용성 확보
9 정성 평가 이후 정량 평가
정성적 분석(Part C, D)에서 프롬프트가 의도대로 작동한다는 것을 확인했다.
정량적 분석(Part E)에서 그 작동이 얼마나 안정적인지를 숫자로 증명했다.
만약 Part D의 구조 분석에서 이 프롬프트가 작동하지 않는다는 것을 발견했다면,
그 프롬프트를 N=20 실행하는 것은 의미가 없다.
작동하지 않는 프롬프트의 안정성을 측정하는 것은 순서가 뒤집힌 것이다.
올바른 순서:
1. 정성적 분석: "작동하는가?" (Part C, D)
↓ YES
2. 정량적 분석: "얼마나 안정적인가?" (Part E)
↓ 통과율 확인
3. 프로덕션 배포
↓ 모니터링
4. 지속적 개선
Part E는 데이터 기반 의사결정의 기초를 제공한다.
“느낌”이 아닌 “숫자”로 프롬프트 품질을 증명하고,
“추측”이 아닌 “패턴”으로 개선 방향을 도출한다.