프롬프트 설계 원칙
좋은 프롬프트는 LLM에게 명확한 지시, 충분한 맥락, 기대하는 출력 형식을 전달합니다. 프롬프트 설계는 단순히 질문을 던지는 것이 아니라, 모델이 최적의 응답을 생성하도록 입력을 구조화하는 엔지니어링 작업입니다.학습 목표
이 문서를 완료하면 다음을 수행할 수 있습니다.- 프롬프트의 5대 구성 요소(RICFE)를 이해하고 활용할 수 있습니다
- 태스크 유형에 맞는 프롬프트 구조를 설계할 수 있습니다
- 흔한 안티 패턴을 식별하고 개선할 수 있습니다
- 시스템 프롬프트와 사용자 프롬프트의 역할을 구분할 수 있습니다
왜 중요한가
동일한 LLM이라도 프롬프트에 따라 결과 품질이 크게 달라집니다.핵심 개념: 프롬프트의 5대 구성 요소 (RICFE)
1. Role (역할)
모델이 어떤 전문가 역할로 응답해야 하는지를 정의합니다.- 응답의 전문성 수준을 조절합니다
- 용어 선택과 설명 깊이에 영향을 줍니다
- 특정 관점에서의 분석을 유도합니다
2. Instruction (지시)
무엇을 해야 하는지를 명확하게 전달합니다. 프롬프트에서 가장 중요한 부분입니다.- 구체적 동사 사용: “분석하세요”, “비교하세요”, “요약하세요” (vs “알려줘”)
- 단계 분해: 복잡한 작업을 명시적 단계로 나눕니다
- 범위 한정: 분석 대상과 관점을 명확히 합니다
- 부정 지시 포함: 하지 말아야 할 것도 명시합니다
3. Context (맥락)
모델이 응답에 활용할 배경 정보, 참조 데이터, 상황 설명을 제공합니다.- 관련 정보만 포함합니다 (불필요한 정보는 혼란 유발)
- 구조화하여 제공합니다 (목록, 표, 섹션)
- 모호한 용어를 정의합니다
4. Format (형식)
출력의 구조와 형태를 지정합니다.- 마크다운 구조: 헤딩, 목록, 표
- JSON 출력: 프로그래밍에서 파싱 용이
- 길이 제한: “200자 이내”, “3문장으로”
- 언어/톤: “격식체”, “구어체”, “기술 문서 스타일”
5. Examples (예시)
기대하는 입출력 예시를 직접 보여줍니다. Few-shot 프롬프팅의 핵심이며, 형식과 품질 기대치를 전달하는 가장 효과적인 방법입니다.시스템 프롬프트 vs 사용자 프롬프트
OpenAI API와 Claude API에서 프롬프트는 **역할(role)**에 따라 구분됩니다.| 구분 | System Prompt | User Prompt |
|---|---|---|
| 역할 | 행동 방침, 역할, 제약 | 처리할 데이터, 질문 |
| 변경 빈도 | 거의 고정 | 매 요청마다 변경 |
| 우선순위 | 높음 | 낮음 |
| 예시 | ”당신은 ~ 입니다”, “규칙:" | "이 텍스트를 분석하세요:“ |
프롬프트 설계 템플릿
분석 태스크
변환 태스크
생성 태스크
흔한 안티 패턴
1. 모호한 지시
2. 과도한 정보 제공
3. 모순되는 지시
4. 확인 없는 가정
프롬프트가 길어지면 비용이 많이 들지 않나요?
프롬프트가 길어지면 비용이 많이 들지 않나요?
입력 토큰에 대한 비용이 발생하지만, 잘 설계된 프롬프트는 재시도 횟수를 줄여 총 비용을 낮춥니다. 모호한 프롬프트로 3~4번 반복하는 것보다, 구체적인 프롬프트로 한 번에 원하는 결과를 얻는 것이 더 경제적입니다.
역할(Role) 지정이 정말 효과가 있나요?
역할(Role) 지정이 정말 효과가 있나요?
연구 결과에 따르면 역할 지정은 모델의 응답 품질에 유의미한 영향을 미칩니다. 특히 전문 지식이 필요한 태스크에서 관련 전문가 역할을 부여하면, 더 정확하고 전문적인 용어를 사용한 답변이 생성됩니다. 다만 과장된 역할(“세계 최고의 전문가”)보다 구체적 역할(“5년 경력 데이터 분석가”)이 더 효과적입니다.
JSON 같은 구조화된 출력을 안정적으로 받으려면?
JSON 같은 구조화된 출력을 안정적으로 받으려면?
- 형식을 명시적으로 정의하세요 (JSON 스키마 제공). 2. 예시를 포함하세요 (입출력 예시로 형식 학습). 3. JSON 모드를 사용하세요 (OpenAI의
response_format={"type": "json_object"}). 4. 출력 파싱 라이브러리를 활용하세요 (Pydantic, instructor). 이는 출력 파싱 문서에서 자세히 다룹니다.
시스템 프롬프트에 보안 관련 지시를 넣어도 되나요?
시스템 프롬프트에 보안 관련 지시를 넣어도 되나요?
시스템 프롬프트는 사용자에 의해 우회될 수 있습니다 (Prompt Injection). 비밀 정보나 API 키를 시스템 프롬프트에 넣지 마세요. 보안이 중요한 경우 서버 사이드 검증을 추가해야 합니다. 이는 안전장치 문서에서 다룹니다.
체크리스트
학습을 마치기 전에 아래 항목을 확인하세요.- RICFE 5대 구성 요소를 모두 설명할 수 있는가?
- 시스템 프롬프트와 사용자 프롬프트의 차이를 이해하는가?
- 분석/변환/생성 태스크에 맞는 프롬프트 템플릿을 작성할 수 있는가?
- 4가지 안티 패턴을 식별하고 개선할 수 있는가?
- JSON 등 구조화된 출력을 요청하는 프롬프트를 작성할 수 있는가?

