LLM프롬프트 엔지니어링 · 4기초

시스템 프롬프트 설계 — LLM의 행동 방식을 제어하기

LLM프롬프트엔지니어링시스템프롬프트페르소나AI서비스

시스템 프롬프트: 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, 자기 일관성, 메타 프롬프팅 등 실전에서 활용하는 심화 기술을 배웁니다.

궁금한 점이 있으신가요?

협업·의뢰는 아래로, 가벼운 소통은 인스타그램 @bluefox._.hi도 환영이에요.