Menu

시스템 프롬프트란? 뜻과 바로 쓰는 예시

시스템 프롬프트는 AI 모델과의 대화 전체에 적용되는 상시 지시 모음입니다. 어디에 설정하는지, 무엇을 넣는지, 사용자 메시지와 어떻게 다른지 알아봅니다.

이 페이지의 모든 프롬프트는 수정한 뒤 ChatGPT, Claude 등 AI 앱에서 바로 열 수 있습니다.

시스템 프롬프트는 AI 모델이 대화가 시작되기 전에 받는 지시 모음으로, 이후의 모든 메시지에 적용됩니다. 모델의 역할, 독자, 규칙, 기본 답변 형식을 정하므로 메시지마다 반복할 필요가 없습니다. 프롬프트는 사용자가 쓰고, 시스템 프롬프트는 모델이 그 모든 프롬프트에 어떻게 답할지를 정합니다.

모든 채팅 앱은 이미 시스템 프롬프트를 쓰고 있습니다. ChatGPT, Claude, Gemini를 열면 모델은 이미 그 회사가 준 지시를 받은 상태이고, 채팅 창에는 그 지시가 보이지 않습니다. 개발자가 모델 위에 앱을 만들 때, 범용 모델을 코딩 튜터나 고객지원 어시스턴트, 커밋 메시지 작성기로 바꾸는 곳이 바로 시스템 프롬프트입니다.

시스템 프롬프트가 하는 일

채팅에서 모델의 입력에는 구조가 있습니다. 먼저 시스템 프롬프트가 오고, 그다음 사용자와 어시스턴트 메시지가 번갈아 이어지는 대화가 옵니다. 시스템 프롬프트는 대화 전체의 맨 위에 있으므로, 대화가 아무리 길어져도 모든 답변에서 모델 앞에 놓여 있습니다.

그 위치 덕분에 시스템 프롬프트는 항상 지켜야 할 것을 두기에 알맞은 곳입니다. 모델이 누구에게 말하는지, 무엇을 해도 되고 무엇을 하면 안 되는지, 답변이 기본적으로 어떤 모습이어야 하는지입니다. 또한 모델은 시스템 프롬프트와 사용자 메시지가 충돌하면 시스템 프롬프트에 더 큰 비중을 두도록 학습되어 있습니다. 이것은 경향이지 자물쇠가 아닙니다. 작정한 사용자는 때때로 모델이 시스템 프롬프트를 벗어나도록 설득할 수 있으므로, 시스템 프롬프트를 유일한 안전장치로 삼아서는 안 됩니다.

시스템 프롬프트와 사용자 메시지의 차이

시스템 프롬프트사용자 메시지
누가 쓰나개발자, 또는 앱 설정에서 여러분채팅 입력창에서 여러분
범위대화 전체요청 하나
주로 담는 내용역할, 독자, 규칙, 사실, 기본 형식할 일과 그에 필요한 자료
바뀌는 시점거의 안 바뀜매 턴
충돌할 때의 비중보통 더 높음보통 더 낮음

쓸 만한 판단 기준이 있습니다. 어떤 문장이 대화의 모든 메시지에 해당한다면 시스템 프롬프트에 넣고, 이번 요청에만 해당한다면 사용자 메시지에 넣으세요. "100단어 이내로 답해"는 어느 쪽에 넣어도 되지만, "아래 이메일을 요약해"는 언제나 사용자 메시지입니다.

시스템 프롬프트를 설정하는 곳

API에서 시스템 프롬프트는 별도의 입력입니다. OpenAI의 Python 라이브러리에서는 메시지 목록의 첫 번째 항목이고, 역할은 system입니다. OpenAI 문서에서는 최신 모델에서 같은 종류의 지시를 developer message라고도 부릅니다.

from openai import OpenAI

client = OpenAI()
MODEL = "your-model-id"  # e.g. from your provider's model list

response = client.chat.completions.create(
    model=MODEL,
    messages=[
        {"role": "system", "content": "You are a patient Python tutor. Give hints, not full solutions."},
        {"role": "user", "content": "Why does my loop stop at 9?"},
    ],
)
print(response.choices[0].message.content)

Anthropic의 Python 라이브러리에서는 최상위 system 매개변수이고, messages 목록에는 대화만 들어갑니다.

import anthropic

client = anthropic.Anthropic()
MODEL = "your-model-id"  # e.g. from your provider's model list

message = client.messages.create(
    model=MODEL,
    max_tokens=500,
    system="You are a patient Python tutor. Give hints, not full solutions.",
    messages=[{"role": "user", "content": "Why does my loop stop at 9?"}],
)
print(message.content[0].text)

Google의 Gemini API는 이를 system instruction이라고 부릅니다. 이름은 달라도 개념은 같습니다.

채팅 앱에서는 원래의 system 필드에 접근할 수 없습니다. 앱이 이미 자체 시스템 프롬프트를 쓰고 있기 때문입니다. 대신 앱이 알아서 포함해 주는 상시 지시를 추가할 곳이 있습니다. ChatGPT에서는 맞춤형 지침, 프로젝트 지침, 맞춤형 GPT의 지침이 그것입니다. Claude에서는 프로젝트 지침과 프로필의 개인 설정입니다. Gemini에서는 Gem의 지침입니다. 각 앱이 여러분의 텍스트를 자체 지시와 정확히 어떻게 합치는지는 모두 공개되어 있지 않지만, 실제로는 앱과 함께 쓰는 시스템 프롬프트처럼 동작합니다.

시스템 프롬프트에 넣을 것

  • 역할과 독자. "너는 프로그래밍을 시작한 지 한 달 된 학생들을 가르치는 튜터야"는 모든 답변의 어휘와 수준을 정합니다. 역할이 무엇을 바꾸고 무엇을 바꾸지 못하는지는 역할 프롬프팅에서 다룹니다.
  • 모든 턴에 적용되는 규칙. 모델이 항상 해야 하거나 절대 하면 안 되는 것입니다. 전체 풀이 대신 힌트를 준다, 제품에 대한 질문에만 답한다, 사용자의 언어로 답한다 같은 것들입니다.
  • 확실하지 않을 때 할 일. "아래 사실에 답이 없으면 모른다고 말해"는 막연한 "정확하게 답해"보다 지어낸 답변, 즉 할루시네이션을 훨씬 잘 막습니다.
  • 모델에게 필요한 사실. 제품 정보, 정책, 오늘 날짜, 사용자의 요금제. 모델은 학습 데이터만으로 여러분의 앱에 대한 질문에 답할 수 없습니다.
  • 기본 형식. 길이, 구조, 코드 블록 사용 여부. 프로그램이 출력을 읽는다면 정확한 형태를 주세요. 구조화된 출력을 참고하세요.

넣지 말아야 할 것

비밀 정보. 시스템 프롬프트는 비공개가 아닙니다. 사용자는 모델에게 지시를 그대로 말해 달라고 하거나 속여서 말하게 할 수 있고, 모델은 이를 안정적으로 거부하지 못합니다. API 키, 비밀번호, 공개되면 곤란한 것은 넣지 마세요. 시스템 프롬프트는 언젠가 사용자가 읽을 수도 있는 텍스트로 취급하고, 지시가 어떻게 무력화되는지는 프롬프트 인젝션을 참고하세요.

메시지 하나의 할 일. 시스템 프롬프트에 "이 기사를 요약해"라고 쓰면, 대화의 두 번째 메시지는 갈 곳이 없습니다.

서로 겹치는 규칙 더미. 서로 다른 때에 쓴 규칙 스무 개는 서로 모순되기 쉽고, 모델은 어느 규칙이 우선인지 추측해야 합니다. 규칙을 묶고, 중복을 없애고, 두 규칙이 부딪칠 수 있다면 우선순위를 밝히세요.

군더더기. 시스템 프롬프트는 요청마다 다시 전송되고 모델의 컨텍스트 윈도우를 차지하므로, 불필요한 문단 하나하나가 매 턴 비용이 됩니다.

시스템 프롬프트 예시

첫 번째 예시는 제품 안의 도움말 어시스턴트입니다. 시스템 프롬프트가 범위, 길이, 답할 수 없는 질문에 대한 규칙을 정하고, 모델에게 필요한 사실을 담고 있습니다. 탭을 바꿔 가며 다른 메시지를 보내 보세요. 같은 시스템 프롬프트가 세 가지 답변을 모두 좌우합니다.

System prompt
너는 가계부 앱 안에 있는 도움말 어시스턴트야. 앱 사용법에 대한 질문에만 답해. 모든 답변은 200자 이내로 해. 다른 주제에 대한 질문이면 앱에 대해서만 도와줄 수 있다고 말하고, 도와줄 수 있는 관련된 일을 제안해. 아래 사실로 답할 수 없는 질문이면 확실하지 않다고 말하고 고객센터에 문의하라고 안내해. 메뉴 이름이나 기능을 절대 지어내지 마. 사실: 거래 내역은 나눌 수 있다: 거래를 열고 나누기를 누른 다음, 카테고리와 금액을 고른다. 예산은 매달 1일에 초기화된다.
Fill in
결제 하나를 식료품과 생활용품으로 나누려면 어떻게 해요?
Try it
Chat apps receive the system prompt as the start of your message, so this tries its wording, not its priority. To test it as standing instructions, put it in the app's custom instructions or the API's system field.
Example replyReplies vary between models and runs.

거래 내역에서 해당 결제를 열고 나누기를 누르세요. 그다음 식료품과 생활용품 두 카테고리를 고르고 각각에 해당하는 금액을 입력하면 됩니다.

두 번째 예시는 채팅 앱의 맞춤형 지침이나 프로젝트 지침에 넣을 만한 텍스트입니다. 여러분이 누구인지, 어떤 답변을 원하는지 설명하므로 모든 대화가 거기서 출발합니다.

Prompt
System prompt
나에 대해: Node.js에서 TypeScript로 일하는 백엔드 개발자야. 기초는 안다고 가정하고 초보자용 설명은 건너뛰어. 원하는 답변 방식: 코드를 먼저 보여 주고, 설명은 최대 세 문장까지. 답이 특정 버전이나 설정에 따라 달라지면 그 점을 언급해 줘.
Fill in
JSON 파일은 어떻게 읽어?
Try it
Chat apps receive the system prompt as the start of your message, so this tries its wording, not its priority. To test it as standing instructions, put it in the app's custom instructions or the API's system field.
Example replyReplies vary between models and runs.
import { readFile } from "node:fs/promises";

const config = JSON.parse(await readFile("config.json", "utf8"));

인코딩을 넘기면 readFile이 문자열을 반환하고, JSON.parse가 이를 객체로 바꿉니다. 최상위 await는 ES 모듈(package.json의 "type": "module"이나 .mts 파일)에서만 동작하므로, 그렇지 않다면 async 함수로 감싸세요. 파일이 없거나 형식이 깨졌을 수 있다면 try/catch를 추가하세요.

시스템 프롬프트가 없으면 "JSON 파일은 어떻게 읽어?"처럼 짧은 질문에 모델은 언어를 추측해야 하고, 답변은 흔히 Python이나 일반 JavaScript로 나오며 JSON이 무엇인지에 대한 문단까지 붙습니다. 시스템 프롬프트가 있으면 답변은 올바른 언어와 런타임을 고르고, 기초 설명을 건너뛰고, 요청한 형태를 따릅니다.

어떤 어시스턴트를 만들든 같은 구조가 통합니다. 누구를 돕는지, 규칙, 확실하지 않을 때 할 일, 필요한 사실, 답변 형식입니다. 한 번 써 두고, 평범한 질문, 주제에서 벗어난 질문, 규칙을 깨려는 질문으로 테스트한 다음, 세 답변이 모두 원하는 대로 나올 때까지 고치세요.

자주 묻는 질문

시스템 프롬프트란 무엇인가요?

시스템 프롬프트는 대화가 시작되기 전에 AI 모델에게 주는 지시 모음으로, 이후의 모든 메시지에 적용됩니다. 보통 역할, 독자, 규칙, 기본 답변 형식을 정합니다. API에서는 별도의 system 필드나 메시지이고, 채팅 앱에서는 맞춤형 지침이나 프로젝트 지침이 같은 역할을 합니다.

시스템 프롬프트와 사용자 프롬프트는 어떻게 다른가요?

시스템 프롬프트는 대화 전체에 적용되는 상시 지시로, 보통 개발자가 쓰거나 설정에서 한 번 정합니다. 사용자 프롬프트는 한 가지를 요청하는 개별 메시지입니다. 둘이 충돌하면 모델은 시스템 프롬프트에 더 큰 비중을 두도록 학습되어 있지만, 이는 경향일 뿐 보장은 아닙니다.

ChatGPT, Claude, Gemini에서 시스템 프롬프트를 설정할 수 있나요?

원래의 system 필드는 아니지만 그에 가까운 기능이 있습니다. ChatGPT에는 맞춤형 지침, 프로젝트 지침, 맞춤형 GPT의 지침이 있습니다. Claude에는 프로젝트 지침과 프로필 설정이 있습니다. Gemini에는 Gem의 지침이 있습니다. 앱은 여기에 쓴 내용을 자체 시스템 지시와 합쳐 대화에 적용합니다.

사용자가 시스템 프롬프트를 보거나 빼낼 수 있나요?

그런 경우가 많습니다. 사용자가 모델에게 지시를 그대로 말해 달라고 하거나 속여서 말하게 할 수 있고, 모델은 이를 안정적으로 비밀로 지키지 못합니다. 비밀번호, API 키, 기밀 사업 정보는 절대 시스템 프롬프트에 넣지 말고, 시스템 프롬프트를 보안 경계로 삼지 마세요.

시스템 프롬프트는 얼마나 길어야 하나요?

모든 메시지에 적용되는 내용을 담을 만큼이면 되고, 그 이상은 필요 없습니다. 개인용이라면 서너 문장으로 충분합니다. 제품용 시스템 프롬프트는 역할, 규칙, 사실, 출력 형식을 담아 한 페이지에 이르는 경우가 많습니다. 모든 단어가 요청마다 함께 전송되므로 매번 토큰 비용도 듭니다.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기