참고 학습 목표
- Zero-shot, Few-shot, Chain-of-Thought 기법의 차이를 동일 예시로 비교할 수 있다
- System Prompt 설계 5가지 패턴을 실무에 적용할 수 있다
- ReAct, Tree of Thought, Self-Consistency 등 고급 기법을 이해하고 적절한 상황에 선택할 수 있다
- Prompt Injection 공격의 원리와 방어 기법을 설명할 수 있다
- Databricks AI Playground와 MLflow Prompt Registry를 활용한 프롬프트 관리 워크플로우를 수립할 수 있다
Prompt Engineering이란?
LLM은 입력(프롬프트)에 따라 출력 품질이 크게 달라집니다. Prompt Engineering은 최적의 입력을 설계하여 최적의 출력을 얻는 체계적 방법론 입니다.성공 비유: 같은 재능을 가진 사람에게 “보고서 써줘”라고 하는 것과 “A4 2장 분량으로, 표를 포함하여, 경영진 대상으로, 지난 분기 매출 분석 보고서를 작성해주세요”라고 하는 것의 결과는 완전히 다릅니다. Prompt Engineering은 후자처럼 명확하게 요청하는 기술입니다.
| 요소 | 설명 | 나쁜 예 → 좋은 예 |
|---|---|---|
| 명확성 | 모호하지 않은 명확한 지시 | ”요약해줘” → “3문장으로 요약해주세요” |
| 구체성 | 원하는 형식, 길이, 스타일 명시 | ”분석해줘” → “표 형태로 장단점을 비교해주세요” |
| 맥락 | 충분한 배경 정보 제공 | ”고객 대응해줘” → “B2B SaaS 고객이 결제 오류를 문의했습니다” |
| 예시 | 입출력 예시를 통한 패턴 학습 | 설명만 → 예시 2~3개 포함 |
프롬프트의 과학: 왜 같은 질문에 다른 결과가 나오는가?
10,000개 이상의 프롬프트를 작성하며 깨달은 것이 있습니다. 프롬프트는 “글”이 아니라 “코드”에 가깝습니다. 단어 하나, 순서 하나가 출력을 완전히 바꿉니다. 이 섹션에서는 그 원리를 실험 결과와 함께 설명합니다.LLM은 프롬프트의 모든 단어에 반응한다
LLM은 입력의 모든 토큰에 Attention을 배분합니다. 즉, 단어 하나의 차이가 출력 전체를 변화 시킬 수 있습니다. 실험: “간결하게” vs “상세하게” 하나의 단어 차이참고 실무 팁: 출력 길이를 제어하고 싶다면 “간결하게/상세하게” 같은 모호한 표현 대신 “3문장으로”, “500자 이내로”처럼 정량적으로 지정 하세요. 훨씬 안정적인 결과를 얻을 수 있습니다.더 미묘한 차이도 영향을 줍니다:
| 프롬프트 표현 | 출력 경향 | 왜? |
|---|---|---|
| ”설명하세요” | 교과서 스타일, 객관적 | 설명문 학습 데이터 활성화 |
| ”알려주세요” | 대화체, 친근함 | 대화 학습 데이터 활성화 |
| ”분석하세요” | 구조화된 분석, 표 포함 경향 | 분석 보고서 학습 데이터 활성화 |
| ”비교하세요” | 표 형태, 장단점 나열 | 비교 문서 학습 데이터 활성화 |
프롬프트 순서가 결과를 바꾼다
LLM은 Transformer 아키텍처 특성상 프롬프트의 앞부분과 뒷부분에 더 높은 가중치 를 부여하는 경향이 있습니다 (Primacy-Recency Effect). 중간에 있는 지시는 무시될 가능성이 높습니다. 실험: 지시 순서 변경| 위치 | 배치할 지시 | 이유 |
|---|---|---|
| 맨 앞 (첫 줄) | 가장 중요한 지시 (역할, 핵심 제약) | Primacy Effect — 첫 인상이 전체 방향 결정 |
| 중간 | 보조적 지시 (형식, 스타일) | 상대적으로 가중치 낮음 |
| 맨 뒤 (마지막 줄) | 절대 어기면 안 되는 제약 | Recency Effect — 마지막 지시가 출력에 직접 영향 |
주의 핵심: System Prompt가 길어질수록 중간 지시가 무시될 확률이 높아집니다. 중요한 지시는 반드시 맨 앞 이나 맨 뒤 에 배치하세요. 특히 “절대 하지 마세요” 류의 안전 제약은 맨 뒤에 두는 것이 효과적입니다.
Negative Prompt의 함정
“~하지 마세요”라는 부정 지시는 직관과 달리 원치 않는 행동을 오히려 유발 할 수 있습니다. 왜 그럴까? LLM은 다음 토큰을 예측할 때, 프롬프트에 등장한 모든 단어의 의미를 활성화합니다. “비속어를 사용하지 마세요”라고 쓰면:- “비속어”라는 개념이 모델의 활성화 공간에서 강하게 점등됩니다
- 관련 토큰의 확률이 미세하지만 상승합니다
- 특히 Temperature가 높을 때 이 효과가 두드러집니다
| Negative (피하세요) | Positive (대신 이렇게) |
|---|---|
| “추측하지 마세요" | "확인된 사실만 답하세요" |
| "길게 쓰지 마세요" | "3문장 이내로 답하세요" |
| "기술 용어를 쓰지 마세요" | "초등학생도 이해할 수 있는 쉬운 말로 설명하세요" |
| "개인 의견을 넣지 마세요" | "객관적 사실과 데이터에 기반하여 답하세요" |
| "다른 주제로 벗어나지 마세요" | "오직 [주제]에 대해서만 답하세요” |
성공 원칙: 프롬프트에서 “하지 마세요”를 쓸 때마다 “대신 무엇을 해야 하는가?”를 생각하세요. 금지보다 지시가 항상 더 효과적입니다. 단, 안전 제약(System Prompt 누출 금지 등)은 예외적으로 부정 지시가 필요합니다.