Home Prompt Engineering Overview
Post
Cancel

Prompt Engineering Overview

Prompt Engineering

목차


Prompt Engineering의 역할

Prompt Engineering은 LLM이 원하는 작업을 정확하게 수행하도록 입력(Prompt)을 설계하는 기술이다. 같은 모델도 프롬프트 품질에 따라 성능이 크게 차이난다.

1
2
3
4
5
6
7
8
9
10
나쁜 프롬프트:
Q: "Python은?"
A: "Python은 프로그래밍 언어다" (애매함)

좋은 프롬프트:
Q: "초보자 관점에서 Python의 특징 3가지를 설명해 줘"
A: "1. 읽기 쉬운 문법...
    2. 강력한 라이브러리 생태계...
    3. ..."
(명확하고 상세한 답변)

프롬프트 요소

1
2
3
4
5
6
7
Prompt = Instruction + Context + Examples + Constraints + Output Format

1. Instruction: 무엇을 할 것인가?
2. Context: 배경 정보와 맥락
3. Examples: 원하는 형식과 스타일의 예시
4. Constraints: 제약과 주의사항
5. Output Format: 어떤 형식으로 결과를 원하는가?

Instruction

“명확한 명령이 왜 중요한가?”

명확한 명령은 모델이 작업의 목표를 확실히 이해하게 해 정확도를 높인다.

1
2
3
4
5
6
7
애매한 명령:
"코드를 작성해 줘"
→ 어떤 코드? 언어? 목적?

명확한 명령:
"Python으로 주어진 리스트의 중복 제거 함수를 작성해 줘"
→ 명확한 목표, 언어, 기능 지정

명령 작성 원칙

1
2
3
4
5
6
7
8
9
10
11
12
13
1. 동사로 시작
   - "설명해 줘"
   - "작성해 줘"
   - "비교해 줘"
   - "분석해 줘"

2. 구체적 목표
   - "프로그래밍을 가르쳐" (X)
   - "배열의 시간복잡도를 초보자 관점에서 설명해" (O)

3. 역할 할당
   - "너는 보안 전문가야. XXX의 취약점을 분석해"
   - "데이터 과학자 관점에서 이 데이터 세트를 분석해"

“prompt에 역할을 주는 것은 언제 도움이 되는가?”

역할을 할당하면 모델이 특정 전문성과 관점으로 답변하므로, 복잡한 분석이나 특정 분야의 설명이 필요할 때 효과적이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
역할 없이:
"Docker와 Kubernetes의 차이는?"
→ 일반적인 설명

역할 있이:
"DevOps 엔지니어 관점에서 Docker와 Kubernetes의 실무적 차이를 설명해"
→ 운영, 배포, 스케일링 중심의 답변

역할이 효과적인 경우:
✓ 도메인 전문 지식 필요
✓ 특정 관점의 분석 필요
✓ 복잡한 기술적 주제
✗ 단순 팩트 확인

Context

“프롬프트에 맥락(Context)은 왜 중요한가?”

맥락은 모델이 작업의 배경을 이해하고 더 적절한 답변을 생성하게 한다. 충분한 정보 제공이 핵심이다.

1
2
3
4
5
6
7
8
9
10
11
맥락 없이:
"이 코드의 문제점을 찾아"
→ 일반적인 조언만 가능

맥락 있이:
"이것은 마이크로서비스 아키텍처에서
실시간 주문 처리 서비스야.
성능과 안정성이 중요해.
[코드]
이 코드의 문제점을 찾아"
→ 아키텍처와 요구사항을 고려한 답변

“긴 context는 항상 좋은가?”

좋은 맥락은 길이가 아니라 관련성이다. 불필요한 정보가 많으면 모델이 혼동될 수 있다.

1
2
3
4
5
6
7
8
너무 짧은 맥락:
부족한 정보 → 일반적인 답변

적절한 맥락:
필요한 정보 + 배경 → 정확한 답변

너무 긴 맥락:
불필요한 정보 포함 → 혼동, 컨텍스트 윈도우 낭비

맥락 제공 가이드

1
2
3
4
5
6
7
8
9
10
11
12
13
1. 배경 정보
   - 문제 해결 배경
   - 제약 조건
   - 목표

2. 관련 정보
   - 기존 시스템 구조
   - 성능 요구사항
   - 보안 요구사항

3. 부정 정보 (하지 말아야 할 것)
   - "MySQL은 사용하지 마"
   - "REST API는 사용하지 말고 GraphQL만 사용"

Examples

“예시는 모델 출력 형식에 어떤 영향을 주는가?”

예시(Few-shot)는 모델이 원하는 형식과 스타일을 정확히 이해하게 한다. 예시가 많을수록 모델의 출력이 일관되고 정확해진다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
예시 없이:
Q: "영화 평가를 점수로 줘"
A: "좋아요. 7점"
A: "훌륭합니다. 8/10"
A: "별 4개" (불일관)

예시 있이:
"영화 평가를 다음 형식으로 줘:
Format: [영화명] - [점수]/10 - [한 문장 평가]

Example:
[인셉션] - 9/10 - 꿈 속 세계를 정교하게 구성한 걸작."

→ 일관된 형식

Few-shot vs Zero-shot

1
2
3
4
5
6
7
8
9
10
11
Zero-shot (예시 없이):
명령만 제공
→ 빠르지만 형식 불일관

One-shot (예시 1개):
명령 + 예시 1개
→ 기본 형식 제공

Few-shot (예시 2-5개):
명령 + 예시 여러 개
→ 패턴 학습, 일관성 높음

예시 작성 가이드

1
2
3
4
5
6
7
8
9
# 좋은 예시 구성
예시 1: 기본 케이스 (표준적인 입력)
예시 2: 엣지 케이스 (경계 케이스)
예시 3: 복잡한 케이스 (다양한 변수)

예시 내용:
- 현실적이어야 함
- 구분 가능해야 함
- 원하는 출력 형식을 명확히 보여줘야 함

구현 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Task: 감정 분석

Zero-shot:
"다음 리뷰의 감정을 분석해"
리뷰: "이 영화는 정말 좋아!"
Output: "긍정"

Few-shot:
"다음 리뷰의 감정을 긍정/중립/부정으로 분류해

Example 1:
리뷰: '최고의 영화야!'
감정: 긍정

Example 2:
리뷰: '그냥 그래요'
감정: 중립

Example 3:
리뷰: '시간 낭비였어'
감정: 부정

이제 다음을 분석해:
리뷰: '꽤 마음에 들었어요'
감정:"

→ 명확한 형식으로 답변

Constraints

“제약 조건은 무엇을 위해 필요한가?”

제약은 모델의 생성을 특정 범위 내로 제한해 원하지 않는 출력을 방지한다.

1
2
3
4
5
6
7
제약 없이:
"요약해 줘"
→ 길이, 스타일, 세부 수준 불명확

제약 있이:
"요약해 줘 (100단어 이내, 초보자 수준, 전문 용어 최소화)"
→ 명확한 가이드라인

일반적 제약

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
길이 제약:
- "300단어 이내"
- "5줄 이하"
- "한 문단"

스타일 제약:
- "초보자 관점에서"
- "기술적 용어 최소화"
- "비유를 1개 포함"
- "공식적인 톤"

내용 제약:
- "개인정보 포함하지 말 것"
- "최신 정보 기준 (2026년)"
- "Python만 사용"
- "부정적 표현 피할 것"

Output Format

“출력 형식을 명시하는 것이 왜 중요한가?”

명시적 형식은 모델의 출력을 구조화해 파싱하고 자동 처리를 쉽게 한다.

1
2
3
4
5
6
7
8
9
10
11
12
형식 없이:
"상품 추천 목록"
→ 마크다운? JSON? 일반 텍스트?

형식 명시:
"JSON 형식으로 반환:
{
  \"products\": [
    {\"name\": \"...\", \"price\": ..., \"reason\": \"...\"}
  ]
}"
→ 명확한 구조

형식 종류

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
구조화된 형식:
- JSON: 프로그래밍에 최적
- CSV: 표 데이터
- YAML: 설정 파일
- XML: 문서 구조

마크다운:
- 헤더로 섹션 구분
- 리스트로 항목 정렬
- 코드 블록으로 예시

표 형식:
| 헤더1 | 헤더2 |
|------|------|
| 값1  | 값2  |

예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Prompt:
"3개 영화 추천해 줘
JSON 형식:
{
  \"recommendations\": [
    {
      \"title\": \"영화명\",
      \"year\": 연도,
      \"reason\": \"추천 이유\"
    }
  ]
}"

Output:
{
  "recommendations": [
    {
      "title": "인셉션",
      "year": 2010,
      "reason": "과학적 기반의 판타지"
    },
    ...
  ]
}

→ 파싱 가능한 형식

Evaluation

“모델 답변은 어떻게 평가해야 하는가?”

평가는 작업의 목표에 따라 다른 기준을 적용해야 한다. 정확도, 완전성, 명확성, 형식 준수를 확인한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
평가 차원:

1. 정확성 (Accuracy)
   - 사실에 맞는가?
   - 최신 정보인가?

2. 완전성 (Completeness)
   - 명령을 모두 수행했는가?
   - 누락된 것은?

3. 명확성 (Clarity)
   - 이해하기 쉬운가?
   - 예시나 설명이 충분한가?

4. 형식 준수 (Format Compliance)
   - 요청한 형식인가?
   - JSON이 유효한가?

5. 관련성 (Relevance)
   - 맥락에 적절한가?
   - 조건을 위반하지 않았는가?

평가 체크리스트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
□ 목표 달성
  "모든 5개 항목을 다뤘는가?"
  
□ 정확도
  "팩트가 맞는가? 할루시네이션은 없는가?"
  
□ 형식
  "요청한 형식을 따랐는가?"
  
□ 제약 준수
  "word count, 스타일, 내용 제약을 지켰는가?"
  
□ 품질
  "답변이 충분히 상세한가?"

반복 개선

1
2
3
4
5
6
7
8
9
10
11
12
13
14
평가 결과 문제 발견 시:

정확도 문제:
→ Context 추가 또는 검증 요청
  "최신 정보를 기반으로 해"
  "출처를 명시해"

형식 문제:
→ 형식 예시를 더 명확히
  "정확히 이 JSON 형식 사용"

부정확성:
→ 제약 강화
  "환각을 피하고, 모른다면 '모른다'고 말해"

정리

개념설명
Instruction무엇을 할 것인가 (명령)
Context배경 정보와 맥락
Examples원하는 형식의 예시 (Few-shot)
Constraints길이, 스타일, 내용 제약
Output Format결과 형식 (JSON, CSV, 마크다운 등)
Evaluation답변 품질 평가 기준

This post is licensed under CC BY 4.0 by the author.