프롬프트 기본
효과적인 프롬프트는 원하는 결과를 안정적으로 얻는 핵심입니다. 이 페이지에서는 프롬프트 작성의 기본 원칙과 실용적인 기법을 다룹니다.
처음 시작하기
핵심 원칙 3가지:
- 명확하게 - "코드 작성해줘" ❌ → "Python으로 CSV 읽는 함수 작성해줘" ✅
- 맥락 제공 - 목적, 대상 독자, 제약사항 명시
- 예제 포함 - 원하는 출력 형식의 예시 제공
💡 비유: 프롬프트는 "요리 레시피"와 같습니다. 재료(입력), 조리법(단계), 완성품 사진(예시)이 명확할수록 좋은 결과!
그림 1: 프롬프트 품질 개선 프로세스 - 모호함에서 우수함으로
프롬프트 구조 아키텍처
효과적인 프롬프트는 여러 요소를 적절히 조합합니다. 각 요소의 역할을 이해하면 상황에 맞게 프롬프트를 설계할 수 있습니다.
그림 2: 프롬프트 구조 아키텍처 - 5가지 구성 요소와 실제 매핑 예시
Golden Rule: 프롬프트를 동료에게 보여주고 따라 하라고 해보세요. 동료가 이해할 수 없으면 AI도 이해하지 못합니다. (Anthropic 공식 가이드에서 권장하는 검증 방법)
기본 원칙
명확하게
프롬프트는 구체적이고 명확해야 합니다. 모호한 요청보다는 정확한 지시사항을 제공하세요.
코드 좀 써줘
Python으로 CSV 파일을 읽어서 각 행의 두 번째 열 값을 합산하는 함수를 작성해주세요.
함수 이름은 sum_second_column이어야 하고, pandas를 사용하지 말고 표준 라이브러리만 사용해주세요.
맥락 제공
작업의 목적, 대상 독자, 제약사항 등을 명시하면 더 나은 결과를 얻을 수 있습니다.
초등학교 5학년 학생들을 위한 광합성 설명을 작성해주세요.
전문 용어는 피하고, 쉬운 비유를 사용해서 설명해주세요.
3-4 문단 정도의 길이로 작성해주세요.
단계별 분해
복잡한 작업은 여러 단계로 나누어 요청하세요.
다음 작업을 단계별로 수행해주세요:
1. 주어진 텍스트에서 이메일 주소를 모두 추출
2. 추출한 이메일 주소의 도메인별로 그룹화
3. 각 도메인별 개수를 JSON 형식으로 출력
텍스트: [...]
형식 지정
원하는 출력 형식을 명시하면 AI 모델이 일관된 형식으로 응답합니다.
구조화된 출력
다음 제품 리뷰를 분석하고 JSON 형식으로 결과를 제공해주세요:
{
"sentiment": "긍정/중립/부정",
"rating": 1-5,
"key_points": ["포인트1", "포인트2", ...],
"summary": "한 줄 요약"
}
리뷰: [...]
마크다운 형식
Python 리스트 컴프리헨션에 대한 가이드를 작성해주세요.
다음 형식으로 작성해주세요:
- 제목은 ## 마크다운 헤더 사용
- 코드 예제는 ```python 코드 블록 사용
- 핵심 포인트는 **볼드** 처리
- 주의사항은 > 인용구 사용
예제 제공
원하는 스타일이나 형식의 예제를 제공하면 AI 모델이 패턴을 파악하여 유사한 출력을 생성합니다.
다음 형식으로 제품 설명을 작성해주세요:
예제 1:
입력: 노트북 - 16GB RAM, 512GB SSD, 15.6" 화면
출력: 🖥️ **강력한 성능**: 16GB RAM으로 멀티태스킹이 원활합니다.
💾 **넉넉한 저장공간**: 512GB SSD로 빠른 부팅과 파일 접근이 가능합니다.
📺 **몰입감 있는 화면**: 15.6인치 대화면으로 작업 효율을 높입니다.
예제 2:
입력: 스마트폰 - 128GB, 6.5" OLED, 5G
출력: 📱 **대용량 저장**: 128GB로 사진과 영상을 마음껏 저장하세요.
✨ **선명한 디스플레이**: 6.5인치 OLED로 생생한 화질을 경험하세요.
⚡ **초고속 연결**: 5G 지원으로 빠른 인터넷을 즐기세요.
이제 다음 제품을 같은 형식으로 설명해주세요:
입력: 태블릿 - 256GB, 11" LCD, WiFi
제약사항 명시
지켜야 할 규칙이나 피해야 할 사항을 명확히 하세요.
JavaScript로 배열에서 중복을 제거하는 함수를 작성해주세요.
제약사항:
- ES6+ 문법 사용
- Set을 사용하지 말 것
- 원본 배열은 변경하지 말 것
- 시간 복잡도는 O(n)이어야 함
- 함수 이름: removeDuplicates
역할 부여
모델에게 특정 전문가 역할을 부여하면 해당 관점에서 응답합니다.
당신은 20년 경력의 시니어 백엔드 개발자입니다.
코드 리뷰를 수행할 때 다음 사항에 집중합니다:
- 성능과 확장성
- 보안 취약점
- 코드 가독성과 유지보수성
- 베스트 프랙티스 준수
건설적이고 구체적인 피드백을 제공하되, 긍정적인 부분도 언급합니다.
반복적 개선
첫 응답이 완벽하지 않다면 추가 지시사항으로 개선하세요.
사용자: Python으로 간단한 계산기를 만들어줘
AI: [기본 계산기 코드 제공]
사용자: 좋아요. 이제 다음 기능을 추가해주세요:
1. 나눗셈 시 0으로 나누는 경우 에러 처리
2. 결과를 소수점 둘째 자리까지 반올림
3. 사용자가 'quit' 입력 시 프로그램 종료
AI: [개선된 코드 제공]
Before / After 비교
실제 프롬프트 개선 사례를 통해 효과적인 프롬프트 작성법을 배워보세요.
예제 1: 코드 작성 요청
| ❌ Before (모호함) | ✅ After (명확함) |
|---|---|
|
프롬프트: "Python으로 정렬 함수 만들어줘" 문제점:
|
프롬프트: "Python으로 병합 정렬(Merge Sort)을 구현해주세요. 요구사항: - 함수 이름: merge_sort - 입력: 정수 리스트 - 출력: 오름차순 정렬된 리스트 - 원본 리스트는 변경하지 않음 - 타입 힌트 포함" 개선점:
|
예제 2: 문서 작성 요청
| ❌ Before | ✅ After |
|---|---|
|
프롬프트: "블로그 글 써줘" 결과: 주제, 어조, 길이 모두 불명확 → 일반적인 글 |
프롬프트: "기술 블로그 글을 작성해주세요. 주제: Python 가상환경 사용법 대상 독자: 프로그래밍 입문자 어조: 친근하고 교육적 길이: 800-1000단어 구조: 1. 가상환경이 필요한 이유 2. venv 설치 및 설정 (예제 포함) 3. 자주 하는 실수와 해결법 4. 요약 및 다음 단계" 결과: 정확히 원하는 형식과 내용! |
예제 3: 데이터 분석 요청
| ❌ Before | ✅ After |
|---|---|
|
프롬프트: "이 데이터 분석해줘 [데이터 붙여넣기]" 결과: 일반적인 통계만 제공 |
프롬프트: "다음 매출 데이터를 분석해주세요: [데이터 붙여넣기] 분석 목표: - 월별 매출 트렌드 파악 - 전년 대비 성장률 계산 - 이상치 탐지 (급증/급감) 출력 형식: ## 요약 - 핵심 인사이트 3가지 ## 상세 분석 - 월별 데이터 테이블 - 성장률 그래프 (Python 코드) ## 권장사항 - 비즈니스 액션 아이템" 결과: 구조화된 인사이트 + 실행 가능한 권장사항! |
모호한 프롬프트 → 명확한 프롬프트 변환 공식:
- 무엇: 정확한 작업 정의
- 왜: 목적과 맥락 제공
- 어떻게: 구체적인 요구사항, 제약사항, 형식
- 예시: 원하는 스타일의 샘플
이 패턴을 따르면 90% 이상 원하는 결과를 얻을 수 있습니다!
해야 할 것 / 하지 말아야 할 것
- 구체적이고 명확한 지시사항 제공
- 원하는 형식과 구조 명시
- 예제 제공 (Few-shot learning)
- 제약사항과 요구사항 명확히 하기
- 복잡한 작업은 단계별로 분해
- 모호하거나 불명확한 요청
- 너무 많은 작업을 한 번에 요청
- 필요한 맥락 정보 생략
- 암묵적 기대사항 (명시적으로 표현하기)
- 부정적이거나 공격적인 표현
유용한 템플릿
분석 템플릿
다음 [대상]을 분석해주세요:
[대상 내용]
다음 측면에서 분석해주세요:
1. [측면 1]
2. [측면 2]
3. [측면 3]
각 측면에 대해:
- 주요 발견사항
- 근거
- 개선 제안 (해당되는 경우)
코드 작성 템플릿
[언어]로 [기능]을 구현해주세요.
요구사항:
- [요구사항 1]
- [요구사항 2]
- [요구사항 3]
제약사항:
- [제약사항 1]
- [제약사항 2]
예상 입력: [입력 예시]
예상 출력: [출력 예시]
Chain-of-Thought (사고 사슬)
Chain-of-Thought(CoT) 프롬프팅은 모델에게 중간 추론 단계를 명시적으로 보여주도록 유도하는 기법입니다. 복잡한 문제 해결, 수학, 논리적 추론에서 특히 효과적이며, Google Research의 Wei et al.(2022) 논문에서 처음 체계화되었습니다.
상점에서 사과 3개를 개당 1,500원에 사고, 바나나 2송이를 개당 3,000원에 샀습니다.
전체 결제 금액은 얼마인가요?
상점에서 사과 3개를 개당 1,500원에 사고, 바나나 2송이를 개당 3,000원에 샀습니다.
전체 결제 금액은 얼마인가요?
단계별로 생각해보세요:
Anthropic 공식 가이드에서는 이 기법을 "thinking"이라고 부르며,
Claude의 경우 API에서 thinking 파라미터를 통해 내장 지원합니다.
프롬프트에서 "단계별로", "차근차근", "이유와 함께 설명해줘" 등의 표현으로도 활성화할 수 있습니다.
CoT 변형 기법
| 기법 | 설명 | 활용 사례 |
|---|---|---|
| Zero-shot CoT | 예시 없이 "단계별로 생각해줘"만 추가 | 빠른 프로토타이핑, 간단한 추론 |
| Few-shot CoT | 추론 과정이 포함된 예시 제공 | 복잡한 수학, 논리 문제 |
| Self-Consistency | 여러 경로로 추론 후 가장 일관된 답 선택 | 높은 정확도가 필요한 의사결정 |
| Tree-of-Thought | 여러 추론 경로를 탐색하고 백트래킹 | 전략적 계획, 복잡한 문제 해결 |
Zero-shot vs Few-shot 비교
프롬프트 엔지니어링의 두 가지 기본 접근 방식을 이해하는 것이 중요합니다. Zero-shot은 예시 없이 바로 작업을 지시하고, Few-shot은 원하는 결과의 예시를 제공합니다.
그림 3: 프롬프트 기법 스펙트럼 - 작업 복잡도에 따른 기법 선택 가이드
XML 태그 구조화 (Claude)
XML 태그는 복잡한 프롬프트를 명확하게 구조화하는 Claude 특유의 강력한 기법입니다. Anthropic 공식 가이드에서 적극 권장하며, 지시사항, 맥락, 예시, 변수 입력을 각각의 태그로 구분하면 해석 오류를 크게 줄일 수 있습니다.
<instructions>
다음 리뷰를 분석하고 긍정/부정/중립으로 분류해주세요.
각 항목에 대해 근거를 인용구로 제시하세요.
</instructions>
<context>
이 분석은 전자상거래 플랫폼의 고객 만족도 조사를 위한 것입니다.
</context>
<review>
{리뷰 텍스트가 여기에 들어갑니다}
</review>
<output_format>
JSON 형식으로 출력해주세요:
{"sentiment": "긍정/부정/중립", "evidence": "인용문", "confidence": 0.0~1.0}
</output_format>
- 일관된 이름의 태그를 사용하세요 (
<instructions>,<context>,<input>등) - 자연스러운 계층 구조가 있으면 중첩 태그를 사용하세요 (예:
<documents>안에<document>) - 예시는
<examples>태그로 감싸서 지시사항과 구분하세요 - 사용자 입력이 들어가는 부분은
<user_input>등으로 명확히 표시하세요
System Prompt (시스템 프롬프트)
시스템 프롬프트는 모델의 기본 동작, 역할, 톤을 설정합니다.
API에서는 system 파라미터로 전달하며, 모든 대화에서 일관되게 적용됩니다.
import anthropic
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-sonnet-4-5-20250929",
max_tokens=1024,
system="""당신은 10년 경력의 시니어 Python 개발자입니다.
원칙:
- PEP 8 스타일 가이드 준수
- 타입 힌트 포함
- 명확한 변수명 사용
- 불필요한 주석 제외, 왜(Why)에 대한 주석만 포함
- 에러 처리 포함""",
messages=[
{"role": "user", "content": "이메일 유효성 검사 함수를 작성해줘"}
]
)
print(message.content)
- 시스템 프롬프트는 모델의 "성격"을 설정하는 데 적합합니다 (역할, 톤, 원칙)
- 구체적인 작업 지시는 사용자 메시지에 넣는 것이 더 효과적입니다
- 시스템 프롬프트가 너무 길면 사용자 메시지에 대한 응답 품질이 떨어질 수 있습니다
- 보안을 위해 시스템 프롬프트에 API 키나 민감 정보를 포함하지 마세요
핵심 정리
| 기법 | 핵심 | 적합한 상황 |
|---|---|---|
| 명확한 지시 | 구체적이고 직접적인 언어 사용 | 모든 프롬프트 |
| 맥락 제공 | 목적, 대상, 배경 설명 | 전문적/도메인 작업 |
| 형식 지정 | JSON, Markdown 등 출력 형식 명시 | 자동화, API 연동 |
| Few-shot | 3~5개 예시로 패턴 전달 | 특정 형식/톤 필요 시 |
| Chain-of-Thought | 중간 추론 과정 유도 | 수학, 논리, 분석 |
| XML 구조화 | 태그로 프롬프트 요소 구분 | 복잡한 Claude 프롬프트 |
| 시스템 프롬프트 | 모델 역할/원칙 사전 설정 | 일관된 톤/행동 필요 시 |
| 반복적 개선 | 첫 결과를 기반으로 점진적 정제 | 모든 프롬프트 |
실무 팁
- 작성 전: 목표와 성공 기준을 먼저 정의하세요
- 작성 시: 동료가 이해할 수 있는 수준으로 구체적으로 작성하세요
- XML 활용: 복잡한 프롬프트는 XML 태그로 구조화하세요 (Claude)
- 예시 포함: 원하는 출력 형식의 예시를 3~5개 제공하세요
- CoT 활용: 추론이 필요한 작업에는 "단계별로"를 추가하세요
- 시스템 프롬프트: 역할과 원칙은 시스템 프롬프트에, 작업은 사용자 메시지에
- 반복 개선: 첫 결과에 만족하지 말고 추가 지시로 정제하세요
- 모델별 차이: Claude는 XML 선호, GPT는 구어체 지시 선호
- 토큰 관리: 프롬프트가 길수록 비용과 지연 시간이 증가합니다