2025.05.29 - [MS Azure, AI] - [프롬프트 엔지니어링] 1편: 프롬프트 엔지니어링 개요와 생성형 AI 작동 원리
2025.05.30 - [MS Azure, AI] - [프롬프트 엔지니어링] 2편: 좋은 프롬프트의 구조와 설계 원칙
2025.05.31 - [MS Azure, AI] - [프롬프트 엔지니어링] 3편: 역할 부여로 GPT의 응답 제어하기
2025.05.31 - [MS Azure, AI] - [프롬프트 엔지니어링] 4편: Few-shot 프롬프팅 개념과 활용 예시
2025.05.31 - [MS Azure, AI] - [프롬프트 엔지니어링] 5편: 출력 형식 제어하기 (표, 리스트, JSON 등)
2025.06.01 - [MS Azure, AI] - [프롬프트 엔지니어링] 6편: 감정, 톤, 문체 바꾸기
2025.06.03 - [MS Azure, AI] - [프롬프트 엔지니어링] 7편: 실패하는 프롬프트의 특징과 개선
2025.06.04 - [MS Azure, AI] - [프롬프트 엔지니어링] 8편: 반복 실험과 튜닝 전략 (A/B 테스트 등)
ChatGPT 같은 대화형 모델은 사용자 프롬프트 외에도 시스템 메시지라는 숨은 지시와 함께 동작한다는 사실을 알고 계신가요? 이번 편에서는 프롬프트 엔지니어링의 고급 주제로서 시스템 메시지의 역할과, 모델이 대화를 구성하는 내부 구조를 알아봅니다. 이를 이해하면 AI의 응답 경향을 더 잘 파악하고, 나아가 API 등을 활용할 때 강력한 초기 지침을 설정하는 방법을 알 수 있습니다.
핵심 개념 설명
대화의 3가지 역할: OpenAI GPT 모델은 대화를 시스템 메시지, 사용자(User) 메시지, 어시스턴트(Assistant) 메시지 세 가지 역할로 구분하여 이해합니다.
- 시스템 메시지: 대화의 시작에 주어지는 상위 지침으로, AI의 기본 역할, 말투, 제약 등을 지정합니다. 예: “너는 유능한 도우미야. 친절하고 정확하게 답변해.” 등의 내용.
- 사용자 메시지: 우리가 흔히 말하는 프롬프트에 해당합니다. 유저가 묻는 질문이나 요구 사항이 이 역할로 전달됩니다.
- 어시스턴트 메시지: AI(모델)가 사용자에게 보내는 응답이 이 역할로 표시됩니다.
ChatGPT UI에서는 시스템 메시지가 숨겨져 있지만, API 사용 시 직접 설정할 수 있습니다. 시스템 메시지는 모델 행동의 토대를 결정하며, 그 다음 사용자 프롬프트를 모델이 처리해 어시스턴트 응답을 생성하는 구조입니다.
시스템 메시지 활용: 프롬프트 엔지니어링의 연장선에서, 시스템 레벨에서 지시를 내리는 기법도 존재합니다. 예를 들어, 특정 작업 내내 일관된 톤을 유지하고 싶다면 시스템 메시지에 “항상 명랑한 어조로 답변할 것”을 명시할 수 있습니다. 혹은 “법률 전문가로서만 답하고, 모르는 것은 추측하지 마시오” 같은 규칙을 설정해 전체 대화의 베이스라인 규칙으로 삼습니다. 이렇게 하면 개별 사용자 메시지마다 일일이 지시하지 않아도, 모델이 기본적으로 그 지침을 참고하여 응답합니다.
응답 생성 구조: GPT 계열 모델은 사용자의 최신 질문뿐 아니라 대화 이력 전체를 참고하여 답을 만듭니다. 시스템 메시지 -> (1)사용자 질문 -> (1)AI 답변 -> (2)사용자 질문 -> (2)AI 답변... 이런 turn 기반 히스토리를 모두 입력으로 받아, 가장 최근에 추가된 사용자 메시지에 대한 어시스턴트 답변을 생성합니다. 따라서 이전 맥락이 영향을 미칠 수 있죠. 또한 시스템 메시지는 해당 내역의 가장 앞에 항상 존재하여, 모델이 대화 내내 잊지 말아야 할 방향성을 제공합니다.
예시 (시스템 메시지 효과):
- 시스템 메시지: “당신은 매우 까칠하고 냉소적인 성격의 AI이다.”
사용자: “안녕하세요, 자기소개 부탁해요.”
어시스턴트: "내 소개라... 뭐, 난 AI일 뿐인데 굳이 알아서 뭐할까만." (툴툴대는 냉소적 어조) - 반대로 시스템 메시지: “당신은 친절하고 예의바른 AI 비서이다.”
같은 사용자 질문에 대한 어시스턴트: "안녕하세요! 제 소개를 하자면, 저는 인공지능 기반 어시스턴트로서 여러분께 도움을 드리고 있습니다. 만나뵙게 되어 반갑습니다." (정중하고 친절한 어조)
위 예에서 보듯, 시스템 메시지 하나로 전체 응답 태도가 바뀌는 것을 볼 수 있습니다. 이러한 특성을 활용하면 서비스 개발 시 AI의 개성이나 브랜드 음성을 손쉽게 설정할 수 있습니다.
실습 예제
예시 1: 시스템 메시지 없는 경우 vs 있는 경우
- 시스템 메시지 없음 (기본 중립 설정)
사용자 프롬프트: 내일 날씨 서울 어떤지 알려줘.
모델 응답: "내일 서울의 날씨를 알려드리겠습니다. 현재 기상 예보에 따르면 서울은 오전에 구름 조금 끼다가 오후에는 맑을 것으로 예상됩니다. 최고 기온은 25°C 정도로 예상되고, 비 소식은 없습니다."
(기본적으로 친절하고 정보만 전달) - 시스템 메시지: 당신은 정보만 간략히 전달하는 날씨 방송 요약봇이다. 감탄사나 불필요한 예의문구 없이, 필요한 정보만 말한다.
같은 사용자 프롬프트: 내일 날씨 서울 어떤지 알려줘.
모델 응답: "서울 내일 날씨: 오전 구름 조금, 오후 맑음. 강수 확률 낮음. 낮 최고 25도."
-> 군더더기 없이 핵심만 전달하는 요약된 응답을 확인할 수 있습니다. 이는 시스템 메시지로 설정한 지침에 따른 것입니다.
예시 2: 대화 흐름에서 시스템 메시지 이용 (API 시나리오)
# 프롬프트 예시 |
System: "당신은 역사학자 AI입니다. 정확한 역사적 사실을 근거로 답변하며, 추측은 하지 않습니다." User: "로마제국이 멸망한 원인이 뭐야?" Assistant: "서기 476년 서로마 제국의 멸망 원인에는 여러 가지가 있습니다. 지나친 영토 확장으로 인한 국경 방어 약화, 경제적 위기와 인플레이션, 정치적 불안정과 부패, 게르만족 등의 침입 등이 복합적으로 작용했습니다." User: "그럼 동로마 제국은 얼마나 더 존속했어?" Assistant: "동로마 제국(비잔틴 제국)은 서로마 멸망 후에도 천 년가량 존속하여, 결국 1453년 오스만 제국에 의해 멸망했습니다." |
시스템 메시지 덕분에 전문적이고 정확한 어조로 일관되게 답변하며, 추측을 피하고 있는 것을 볼 수 있습니다. 만약 사용자의 질문에 모르는 부분이 있다면, 이 시스템 지침에 따라 “확실치 않은 정보는 제공하지 않는다”는 식으로 답할 것입니다.
자주 하는 실수 및 주의점
- 시스템 메시지 과용: 시스템 메시지에 지시를 너무 잔뜩 넣으면 모델이 산만해질 수 있습니다. 핵심 방향만 설정하고, 세부는 사용자 프롬프트에서 제시하는 게 나을 때도 있습니다.
- 시스템 vs 사용자 충돌: 만약 시스템에서 “정중하게” 하라고 했는데 사용자 프롬프트에서 “반말로 해봐”라고 하면 모델은 보통 사용자 말을 따르지만, 정도에 따라 혼란이 생길 수 있습니다. 가능하면 일관된 지침을 줘야 합니다. (시스템은 상위권한이지만, OpenAI 정책상 사용자 요청이 허용 범위면 존중하려고 함)
- 시스템 메시지 맹신 금물: 시스템 지시를 해뒀다고 100% 지킬 것이라고 보면 안 됩니다. 모델이 장황해지지 않게 하라 했는데도 장황해질 수 있고, 금지어를 넣지 말라 해도 경우에 따라 나올 수 있습니다. 완벽한 통제 수단은 아니지만, 강한 권고사항임을 이해하세요.
- 프롬프트 엔지니어링과 병행: 시스템 메시지는 기본 토대일 뿐, 각 질문에 대한 세부 지시는 여전히 사용자 프롬프트에서 하는 것이 정확합니다. 시스템에는 전체적인 스타일/룰을 설정하고, 개별 요청의 맥락이나 조건은 프롬프트에 담으세요.
요약 및 다음 편 안내
- 시스템 메시지는 프롬프트보다 상위 레벨에서 모델의 기본 행동방침을 정하는 역할을 합니다phdata.io. 이를 통해 AI의 전반적인 톤, 역할, 제약 등을 설정할 수 있습니다.
- 대화형 AI는 내부적으로 시스템 메시지 + 사용자 메시지(프롬프트) + 이전 맥락을 모두 참고하여 응답을 생성하므로, 맥락과 초기지침을 잘 활용하면 더 원하는 방향으로 답변을 유도할 수 있습니다.
- 일반 챗봇 UI에서는 시스템 메시지가 숨겨져 있지만, 우리가 앞서 사용한 역할 부여 프롬프트는 일종의 시스템 지침을 사용자 프롬프트에 담아 전달한 셈입니다. API를 사용할 땐 이러한 부분을 명시적으로 분리할 수 있습니다.
- 시스템 메시지는 서비스 차원의 통일된 AI 성격 부여에 유용하며, 내부 정책이나 어조 통일, 금지사항 설정 등에 쓰입니다.
- 다만, 시스템 지침과 사용자 요청이 충돌하지 않도록 유의하고, 모델이 이를 항상 따르는지 모니터링하면서 필요하면 조정해야 합니다.
마지막 편에서는 지금까지의 내용을 정리하며, 궁극적으로 자신만의 프롬프트 템플릿을 만들고 자산화하는 전략에 대해 논의하겠습니다.
2025.05.29 - [MS Azure, AI] - [프롬프트 엔지니어링] 1편: 프롬프트 엔지니어링 개요와 생성형 AI 작동 원리
2025.05.30 - [MS Azure, AI] - [프롬프트 엔지니어링] 2편: 좋은 프롬프트의 구조와 설계 원칙
2025.05.31 - [MS Azure, AI] - [프롬프트 엔지니어링] 3편: 역할 부여로 GPT의 응답 제어하기
2025.05.31 - [MS Azure, AI] - [프롬프트 엔지니어링] 4편: Few-shot 프롬프팅 개념과 활용 예시
2025.05.31 - [MS Azure, AI] - [프롬프트 엔지니어링] 5편: 출력 형식 제어하기 (표, 리스트, JSON 등)
2025.06.01 - [MS Azure, AI] - [프롬프트 엔지니어링] 6편: 감정, 톤, 문체 바꾸기
2025.06.03 - [MS Azure, AI] - [프롬프트 엔지니어링] 7편: 실패하는 프롬프트의 특징과 개선
2025.06.04 - [MS Azure, AI] - [프롬프트 엔지니어링] 8편: 반복 실험과 튜닝 전략 (A/B 테스트 등)
'IT공부방' 카테고리의 다른 글
[SC-900] SC-900이 뭐길래? 클라우드 시대의 보안 기초 자격증 (4) | 2025.06.08 |
---|---|
[프롬프트 엔지니어링] 10편: 템플릿 만들기 및 프롬프트 자산화 전략 (3) | 2025.06.06 |
[프롬프트 엔지니어링] 8편: 반복 실험과 튜닝 전략 (A/B 테스트 등) (2) | 2025.06.04 |
[프롬프트 엔지니어링] 7편: 실패하는 프롬프트의 특징과 개선 (0) | 2025.06.03 |
[프롬프트 엔지니어링] 6편: 감정, 톤, 문체 바꾸기 (0) | 2025.06.01 |