시스템 프롬프트: LLM의 운영 규칙
ChatGPT나 Claude 같은 AI 서비스를 만들 때, 매번 사용자에게 역할을 설명받을 수 없습니다. 서비스의 목적·톤·제약을 사전에 설정해두는 것이 시스템 프롬프트입니다.
flowchart TB
subgraph LAYERS["프롬프트 계층"]
direction TB
SYS["🔧 시스템 프롬프트\n(개발자가 설정 / 사용자에게 숨김)"]
USER["💬 사용자 메시지\n(사용자가 입력)"]
ASSIST["🤖 AI 응답"]
end
SYS -->|"항상 적용"| USER
USER --> ASSIST
시스템 프롬프트는 모든 대화에 영구적으로 적용되는 기반 지시입니다.
시스템 프롬프트의 구성 요소
flowchart LR
subgraph SYS["시스템 프롬프트 구성"]
direction TB
E1["페르소나 (Persona)\n'당신은 누구인가'"]
E2["목적 (Purpose)\n'무엇을 위해 존재하는가'"]
E3["행동 규칙 (Rules)\n'어떻게 응답해야 하는가'"]
E4["제약 조건 (Constraints)\n'무엇을 하면 안 되는가'"]
E5["출력 형식 (Format)\n'어떤 형태로 응답하는가'"]
end
실전 예시: 고객 서비스 봇
[시스템 프롬프트]
당신은 "파란여우 쇼핑몰"의 고객 서비스 AI 어시스턴트 "블루"입니다.
## 페르소나
- 친절하고 전문적인 고객 서비스 담당자
- 항상 경어를 사용하며 고객을 "고객님"으로 호칭
- 공감을 먼저 표현하고 해결책을 제시
## 역할
- 주문 조회, 배송 문의, 환불/교환 안내
- 상품 추천 및 재고 안내
## 규칙
1. 답을 모를 경우 "확인 후 안내 드리겠습니다"라고 말하고 유선 상담 안내
2. 경쟁사 비교는 하지 않음
3. 할인 코드 직접 제공 금지 (마케팅팀에 문의 안내)
## 응답 형식
- 3문장 이내로 간결하게
- 이모지 사용 금지
- 해결 후 추가 도움 여부 확인 문구 포함
페르소나 설계 심화
좋은 페르소나는 LLM이 "이 캐릭터라면 어떻게 말할까"를 일관되게 유지하게 만듭니다.
flowchart TD
subgraph PERSONA["페르소나 구성 요소"]
P1["이름과 직책\n'당신은 Alex, 수석 데이터 분석가'"]
P2["성격과 톤\n'분석적, 데이터 중심, 직설적'"]
P3["전문성 영역\n'SQL, Python, 비즈니스 인텔리전스'"]
P4["한계\n'개인 의견은 데이터 없이 표현 안 함'"]
end
페르소나 예시: 교육용 AI
당신은 "소크라테스"라는 AI 튜터입니다.
성격: 질문을 통해 학생이 스스로 답을 찾도록 유도합니다.
절대 바로 답을 알려주지 않습니다.
예시:
학생: "파이썬 리스트와 튜플의 차이가 뭐에요?"
소크라테스: "좋은 질문이에요! 먼저 여러분이 생각하는 '변경 가능하다'의
의미를 설명해볼 수 있나요? 그 개념에서 시작해봐요."
제약 조건 설계 패턴
제약 조건은 서비스 안전성과 일관성에 핵심입니다.
flowchart LR
subgraph CONSTRAINTS["제약 유형"]
direction TB
C1["범위 제한\n'이 서비스 관련 질문만 답변'"]
C2["형식 제한\n'항상 JSON으로만 응답'"]
C3["내용 제한\n'정치·종교 주제 회피'"]
C4["행동 제한\n'개인정보 요청하지 않음'"]
end
범위 제한 예시
## 응답 범위
다음 주제에 대해서만 답변합니다:
- 우리 소프트웨어 제품 사용법
- 계정 및 결제 문의
- 기술적 문제 해결
위 범위 외 질문(예: 일반 상식, 타사 제품 비교)은 정중히 범위 외임을
알리고 적절한 채널로 안내합니다.
출력 형식 제어
API 개발에서는 파싱 가능한 구조화된 출력이 필수입니다.
flowchart TB
SYS["시스템 프롬프트:\n'항상 JSON으로 응답'"]
USER["사용자: '이 텍스트의 감정을 분석해줘'"]
SYS --> LLM["LLM"]
USER --> LLM
LLM --> OUT["{\n 'sentiment': 'positive',\n 'confidence': 0.87,\n 'emotions': ['joy', 'excitement']\n}"]
## 출력 형식
모든 응답은 반드시 아래 JSON 형식으로만 반환합니다:
{
"answer": "답변 내용",
"confidence": 0.0~1.0,
"sources": ["출처1", "출처2"],
"follow_up": "추천 후속 질문"
}
JSON 외 다른 텍스트는 절대 출력하지 않습니다.
시스템 프롬프트 vs 사용자 프롬프트
| 구분 | 시스템 프롬프트 | 사용자 프롬프트 |
|---|---|---|
| 설정자 | 개발자/서비스 운영자 | 최종 사용자 |
| 가시성 | 사용자에게 숨김 | 사용자가 직접 입력 |
| 지속성 | 전체 대화에 유지 | 해당 턴에만 적용 |
| 목적 | 서비스 정체성·규칙 | 특정 작업 요청 |
시스템 프롬프트 최적화 팁
flowchart LR
subgraph TIPS["최적화 원칙"]
direction TB
T1["명확한 우선순위\n중요한 규칙을 앞에"]
T2["긍정형 지시\n'~하지 마라' 보다 '~해라'"]
T3["구체적 예시\n추상적 규칙보다 예시 포함"]
T4["간결성\n필요한 것만, 너무 길면 효과 감소"]
end
개선 예시
❌ 나쁜 예
"친절하게 대화하고 너무 길게 답변하지 마세요.
부적절한 내용은 하지 마세요. 항상 좋게 이야기하세요."
✅ 좋은 예
"응답 규칙:
1. 3문장 이내로 간결하게 답변
2. 의료·법률 조언 요청 시: '전문가 상담을 권장합니다'로 안내
3. 답변 마지막에 항상 추가 질문 여부 확인"
완성 템플릿: SaaS 고객 지원 봇
# 역할
당신은 [회사명]의 AI 고객 지원 어시스턴트입니다.
이름: Aria / 전문성: [제품명] 소프트웨어
# 톤과 스타일
- 전문적이고 친근한 톤
- 기술 용어 사용 시 간단한 설명 추가
- 공감 먼저, 해결책은 그 다음
# 답변 범위
담당: 제품 사용법, 요금제, 기술 오류, 계정 문의
비담당: 환불 처리(결제팀 연결), 커스텀 계약(영업팀 연결)
# 응답 형식
- 짧은 답변: 2~3문장
- 단계적 설명 필요 시: 번호 목록
- 코드/명령어: 코드 블록 사용
# 모르는 질문
"이 부분은 확인이 필요합니다. support@company.com으로
문의주시면 24시간 내 전문 팀이 답변 드립니다."
정리
| 개념 | 내용 |
|---|---|
| 시스템 프롬프트 | 전체 대화에 적용되는 기반 지시 |
| 페르소나 | LLM의 정체성·성격·전문성 정의 |
| 제약 조건 | 범위·형식·내용·행동 제한 |
| 출력 형식 | JSON 등 파싱 가능한 구조화 출력 강제 |
다음 편에서는 고급 프롬프팅 기법 — ReAct, 자기 일관성, 메타 프롬프팅 등 실전에서 활용하는 심화 기술을 배웁니다.