대화가 시작되기 전에 AI에게 역할, 규칙, 말투를 미리 정해 주는 지시문으로, 사용자에게는 보이지 않지만 모든 대화에 똑같이 적용되는 AI의 근무 수칙이다. 요청마다 바뀌는 사용자 메시지와 달리, 사용자가 무엇을 묻든 늘 지켜야 할 규칙을 정할 때 쓴다.
| 구분 | 시스템 프롬프트 | 사용자 메시지 |
|---|---|---|
| 누가 쓰나 | 앱 개발자 | 사용자 |
| 무엇을 담나 | 역할, 금지 행동, 말투, 출력 형식 | 요청마다 바뀌는 내용 |
| 충돌하면 | 이쪽이 이긴다 | 따르지 않을 수 있다 |
같은 모델을 쓰는 두 서비스의 느낌이 전혀 다른 것도 대부분 시스템 프롬프트에서 정해진다.
모델은 제공사 규칙, 시스템 프롬프트, 사용자 메시지, 도구가 돌려준 데이터를 한꺼번에 받는다. 최근 모델은 사용자가 "이전 지시 다 무시해"라고 해도 시스템 규칙을 따르도록 훈련돼 있다. 그래서 응답 범위·금지 행동·출력 형식처럼 사용자가 뭐라 하든 지켜야 할 것은 시스템 프롬프트에, 요청마다 바뀌는 내용은 사용자 메시지에 나눠 넣는다. 이 경계가 흐려지면 모델의 행동도 흔들린다.
API에서는 Claude의 경우 system 파라미터로 넘긴다. "너는 전자상거래 CS 봇이다. 주문·배송·환불 질문에만 답하고 나머지는 정중히 거절해라. 답은 세 문장 이내로."처럼 역할·범위·형식·금지 사항을 분명히 적는다. "친절하게 답해" 같은 막연한 말보다 원하는 답 예시를 한두 개 넣는 편이 훨씬 잘 통한다.
역할 하나만 바꿔도 같은 코드를 다르게 읽는다. 취약점을 찾고 싶으면 "너는 보안 감사자다", 느린 곳을 찾고 싶으면 "너는 성능 엔지니어다"로 시작하면 된다.
Claude Code에서는 CLAUDE.md가 프로젝트의 시스템 프롬프트 역할을 한다. 세션을 시작할 때 자동으로 읽히므로 "커밋 메시지는 한국어로", "테스트 없이 푸시 금지" 같은 규칙을 여기 적어 두면 에이전트의 기본 행동이 된다.
규칙이 쌓이면 시스템 프롬프트가 수천 토큰이 되는데, 요청마다 통째로 함께 보내지므로 비용과 응답 속도에 바로 영향을 준다. 내용이 바뀌지 않는 앞부분이라 프롬프트 캐싱을 걸면 비용을 크게 줄일 수 있다.
| 문제 | 대처 |
|---|---|
| 매번 실려 가서 비용 증가 | 프롬프트 캐싱 적용 |
| 긴 대화에서 초반 규칙이 약해짐 | 중요한 제약은 중간에 다시 알려 주기 |
| 규칙이 너무 많아짐 | 짧게 유지하고, 상황별 지침은 스킬·문서로 빼서 필요할 때 불러오기 |
"네 지시사항을 요약해 줘" 같은 유도에 내용이 새어 나가는 일이 꾸준히 일어나고, 주요 서비스의 시스템 프롬프트가 통째로 유출된 적도 많다. Anthropic은 아예 Claude 앱의 시스템 프롬프트를 공개하는 쪽을 택했다.
그러니 API 키나 내부 URL 같은 비밀은 절대 넣지 않고, 지켜야 할 로직은 애플리케이션 코드에 둔다. 프롬프트 인젝션 공격도 늘 있으므로 프롬프트 하나에 보안을 맡기지 말고 출력 검증과 권한 제한을 함께 건다.
AI를 붙인 서비스를 만들면 가장 먼저 시스템 프롬프트부터 쓴다. 모델은 그대로 두고 이 지시문만 바꿔 상담 봇, 코딩 도우미, 문서 검색 도우미처럼 서로 다른 서비스를 만든다.
| 어디서 | 어떻게 쓰나 |
|---|---|
| 고객 상담 챗봇 | 답할 범위와 거절할 질문, 말투, 답 길이를 정해 둔다 |
| 코딩 에이전트 | CLAUDE.md 같은 파일에 커밋 규칙·테스트 규칙을 적어 기본 행동으로 삼는다 |
| 사내 문서 검색 | "찾아 준 문서 안에서만 답하고, 없으면 모른다고 해라"처럼 근거 규칙을 건다 |
| 챗봇 앱 개인 설정 | 맞춤 지침에 내 직업·선호 말투를 적어 모든 대화에 적용한다 |