프롬프트 엔지니어링이란?
LLM에게 원하는 출력을 얻도록 입력을 설계하는 기술입니다. 같은 질문도 어떻게 표현하느냐에 따라 답변 품질이 10배 이상 차이납니다.
핵심 기법 1: Zero-Shot vs Few-Shot
Zero-Shot: 예시 없이 지시만
감정 분석해줘: "이 제품 정말 별로였어요"
Few-Shot: 예시 제공
감정을 POSITIVE/NEGATIVE/NEUTRAL로 분류해줘.
예시:
"정말 훌륭한 서비스" → POSITIVE
"그냥 보통" → NEUTRAL
"완전 실망" → NEGATIVE
분류할 텍스트: "이 제품 정말 별로였어요"
Few-Shot이 Zero-Shot보다 평균 15-25% 정확도 높음.
핵심 기법 2: Chain-of-Thought (CoT)
단계적 사고를 유도합니다:
문제: A 공장이 하루 100개, B 공장이 하루 80개를 만든다.
두 공장을 합쳐 540개를 만들려면 며칠이 필요한가?
단계별로 생각해봐:
1. 두 공장의 하루 총 생산량은?
2. 540개를 만들려면 며칠인가?
Self-Consistency: CoT를 여러 번 실행해 다수결
from anthropic import Anthropic
client = Anthropic()
answers = []
for _ in range(5):
response = client.messages.create(
model="claude-sonnet-4-6-20251001",
max_tokens=500,
messages=[{
"role": "user",
"content": f"단계별로 생각해서 답하세요: {question}"
}]
)
answers.append(extract_final_answer(response.content[0].text))
# 가장 많이 나온 답 선택
from collections import Counter
final = Counter(answers).most_common(1)[0][0]
핵심 기법 3: Role Prompting
당신은 10년 경력의 시니어 백엔드 엔지니어입니다.
PostgreSQL 성능 최적화를 전문으로 하며,
항상 실행 계획(EXPLAIN ANALYZE) 기반으로 조언합니다.
다음 쿼리의 성능을 분석해주세요:
SELECT * FROM orders WHERE created_at > '2024-01-01';
페르소나 프레임워크:
- 전문성 수준 명시 (10년 경력, PhD 수준)
- 스타일 정의 (간결함, 수식 사용, 초보자 친화적)
- 제약 조건 부여 (500자 이내, 코드 포함)
핵심 기법 4: 출력 형식 제어
JSON 출력 강제:
import json
from anthropic import Anthropic
client = Anthropic()
response = client.messages.create(
model="claude-sonnet-4-6-20251001",
max_tokens=1000,
messages=[{
"role": "user",
"content": '''다음 제품 리뷰를 분석해서 반드시 JSON으로만 응답해주세요:
리뷰: "배터리 수명이 짧고 화면이 작지만 카메라는 훌륭해요"
응답 형식:
{
"sentiment": "POSITIVE|NEGATIVE|MIXED",
"pros": ["장점1", "장점2"],
"cons": ["단점1", "단점2"],
"score": 0-10
}'''
}]
)
result = json.loads(response.content[0].text)
Claude의 tool_use가 더 안정적:
response = client.messages.create(
model="claude-sonnet-4-6-20251001",
max_tokens=1000,
tools=[{
"name": "analyze_review",
"description": "리뷰 감정 분석",
"input_schema": {
"type": "object",
"properties": {
"sentiment": {"type": "string", "enum": ["POSITIVE", "NEGATIVE", "MIXED"]},
"pros": {"type": "array", "items": {"type": "string"}},
"cons": {"type": "array", "items": {"type": "string"}},
"score": {"type": "number", "minimum": 0, "maximum": 10}
},
"required": ["sentiment", "pros", "cons", "score"]
}
}],
tool_choice={"type": "tool", "name": "analyze_review"},
messages=[{"role": "user", "content": "배터리 수명이 짧고 화면이 작지만 카메라는 훌륭해요"}]
)
프롬프트 패턴 카탈로그
mindmap root((프롬프트 패턴)) 분석 SWOT 분석 근본 원인 분석 비교 분석 생성 템플릿 채우기 변형 생성 역할극 검증 악마의 변호인 체크리스트 검토 반론 생성 요약 핵심 3가지 TL;DR 계층적 요약
업무별 프롬프트 템플릿
코드 리뷰:
다음 코드를 시니어 엔지니어 관점에서 리뷰해줘.
중점 사항: 보안, 성능, 가독성, 테스트 가능성
각 이슈는 [심각도: HIGH/MED/LOW] 형식으로 표시해줘.
(여기에 리뷰할 코드 붙여넣기)
회의록 요약:
다음 회의록을 요약해줘.
출력 형식:
- 결정 사항 (bullet)
- 액션 아이템 (담당자, 기한)
- 다음 회의 안건
회의록:
{회의록}
이메일 작성:
다음 상황에 맞는 비즈니스 이메일을 작성해줘.
- 수신: {수신자 직함/관계}
- 목적: {핵심 목적}
- 톤: 공손하지만 단호함
- 길이: 3-4단락
배경: {상황 설명}
프롬프트 최적화 팁
- 구체적 수치 사용: "짧게" → "50자 이내로"
- 네거티브 지시 추가: "중복 없이", "전문용어 사용 금지"
- 예시 우선: 설명보다 예시가 더 효과적
- 단계 분리: 한 프롬프트에 여러 작업보다 단계적으로
- System/User 분리: 페르소나는 system, 작업은 user에
프롬프트 품질 평가는 LangSmith나 PromptFlow로 A/B 테스트하는 것을 권장합니다.





