System Prompt
2026년 7월 16일
- System Prompt = 모든 사용자 발화 이전에 LLM에게 주어지는 기본 지시문. 에이전트의 정체성·역할·규칙·도구 사용 방침을 정의한다.
- 사용자 입력은 자주 바뀌지만 system prompt는 거의 고정 → prompt caching으로 비용 절감이 가장 큰 부분.
좋은 system prompt 구조
TEXT
자주 들어가는 7가지
- 역할 / 페르소나 — "당신은 ~다"
- 목표 — 이 에이전트가 최종적으로 달성해야 할 것
- 언어·톤 — 한국어·격식체 등
- 사용 가능한 도구 설명 — 각 도구의 언제 쓸지
- 출력 형식 규칙 — JSON·markdown
- 거부 정책 — 어떤 요청은 거부해야 하는지
- 메모리·컨텍스트 참조 규칙 — 사용자 정보를 어떻게 다룰지
모델별 차이
| 모델 | 특징 |
|---|---|
| OpenAI | role: "system" 메시지. 강하게 작용 |
| Anthropic Claude | 별도 system 파라미터. XML 태그(<rules>) 잘 따름 |
| Llama / Mistral | template에 따라 <<SYS>>...<</SYS>> |
| Gemini | systemInstruction 필드 |
흔한 함정
- 충돌하는 지시 — "친근하게" + "격식 있게" 같이 모순. 우선순위 명시 필요.
- 너무 긴 system prompt — 5K 토큰을 넘기면 중간 지시를 잊는다. 핵심을 끝부분에 반복.
- 부정 표현 남발 — "X 하지 마라"보다 긍정 표현이 더 잘 지켜진다.
- 프롬프트로 모든 걸 통제하려 함 — 코드 게이트·가드레일·도구 분기가 더 안정적인 경우가 많다.
외재화(externalization)
- 프롬프트를 코드 문자열로 박지 말고
prompts/system.md같은 별도 파일로 분리:- git diff가 깔끔해 변경 이력 추적.
- 비개발자도 PR 가능.
- 모델/언어별로 폴더 구분 가능.
- A/B 테스트가 쉽다.
Python
Prompt Caching 활용
- system prompt를 첫 1024+ 토큰으로 고정 → Anthropic·OpenAI cache hit.
- 사용자 발화는 그 뒤에 붙어 입력 단가 90%↓.
Python
관련
- Prompt Engineering — 상위 기법.
- LLM Provider 추상화 — 모델별 system 처리를 추상화.
- Tool Calling — 도구 설명이 보통 system에 들어감.