[AI] 프롬프트 엔지니어링
개요
- LLM이 원하는 결과를 출력하도록 입력(프롬프트)을 설계하는 기술
- 별도의 모델 학습 없이 프롬프트 작성만으로 LLM 성능을 크게 향상시킬 수 있음
- 적용 대상: ChatGPT, Gemini, Claude 등 모든 LLM
기본 프롬프트 구성 요소
- 지시(Instruction): 모델에게 수행할 작업을 명확히 설명
- 컨텍스트(Context): 판단에 필요한 배경 정보 제공
- 입력 데이터(Input): 처리할 실제 데이터
- 출력 형식(Output Format): 원하는 응답 형식 지정 (JSON, 표, 목록 등)
주요 기법
제로샷 (Zero-shot)
- 예시 없이 지시만으로 태스크 수행
- 간단한 작업이나 모델이 이미 잘 알고 있는 태스크에 효과적
다음 텍스트의 감정을 긍정/부정/중립 중 하나로 분류하세요.
텍스트: "오늘 날씨가 정말 좋네요."
퓨샷 (Few-shot)
- 소수의 예시(shot)를 프롬프트에 포함해 패턴을 보여주고 태스크 수행
- 특수한 형식이나 모델이 익숙하지 않은 태스크에 효과적
다음 형식으로 날씨를 분류하세요.
예시1: "눈이 왔어요." → 겨울
예시2: "꽃이 피었어요." → 봄
입력: "나뭇잎이 떨어지고 있어요." → ?
사고 연쇄 (CoT, Chain-of-Thought)
- “단계별로 생각해봐” 또는 추론 과정 예시를 포함해 복잡한 문제 해결
- 수학, 논리 추론, 멀티스텝 문제에 특히 효과적
Q: 사과 5개가 있는데 3개를 먹고 2개를 더 사면 몇 개?
A: 먼저 5개에서 3개를 빼면 2개가 남습니다.
그리고 2개를 더 사면 2 + 2 = 4개입니다.
- Zero-shot CoT: 예시 없이 “Let’s think step by step” 문구 추가
Self-Consistency
- 동일한 프롬프트로 여러 번 응답 생성 후 다수결로 최종 답 선택
- CoT와 함께 사용하면 추론 정확도 향상
역할 부여 (Role Prompting)
- 모델에게 특정 전문가 역할을 부여
- 톤, 전문성, 시각을 일관되게 유지
당신은 10년 경력의 시니어 백엔드 엔지니어입니다.
다음 코드를 리뷰해주세요: ...
구조화된 출력 요청
- JSON, Markdown 표, 코드 블록 등 특정 형식으로 출력 요청
- API 자동화, 파싱, 일관성이 필요한 경우 유용
다음 정보를 JSON 형식으로 추출하세요.
필드: name, age, city
텍스트: "홍길동은 서울에 사는 30세입니다."
고급 기법
RAG (Retrieval-Augmented Generation)
- 외부 문서 DB에서 관련 정보를 검색해 프롬프트에 삽입
- 최신 정보 활용, 환각 감소
- LLM 포스트 참고
ReAct (Reason + Act)
- 추론(Thought) → 행동(Action) → 관찰(Observation) 사이클 반복
- 도구(검색, 계산기, API) 호출과 추론을 결합한 에이전트 패턴
프롬프트 체이닝 (Prompt Chaining)
- 복잡한 작업을 여러 단계의 프롬프트로 분해
- 각 단계의 출력이 다음 단계의 입력이 됨
- 예: 문서 요약 → 핵심 주제 추출 → 분류
메타 프롬프트 (Meta Prompt)
- LLM에게 더 좋은 프롬프트를 직접 생성하도록 요청
- “다음 태스크에 더 효과적인 프롬프트를 작성해줘”
시스템 프롬프트 (System Prompt)
- API 사용 시 역할, 제약, 톤을 설정하는 고정 지시문
- 사용자 메시지보다 높은 우선순위
- 예시
당신은 친절한 고객 서비스 담당자입니다.
- 항상 한국어로 응답하세요.
- 경쟁사 제품을 언급하지 마세요.
- 모르는 내용은 정직하게 모른다고 답하세요.
프롬프트 작성 원칙
- 명확성: 모호한 표현 지양, 구체적으로 지시
- 맥락 제공: 필요한 배경 정보를 충분히 포함
- 출력 형식 지정: 원하는 응답 구조를 명시
- 제약 조건 명시: 길이, 언어, 형식 등 제한 사항 기재
- 반복 테스트: 다양한 프롬프트를 시도하고 결과 비교
- 부정 지시 주의: “하지 마라”보다 “이렇게 해라”가 더 효과적인 경우 많음