시스템 지시로 역할 부여하기
한 줄 요약
시스템 지시(system instruction) 는 모델에게 미리 주는 역할·말투·규칙입니다. 질문마다 반복해서 적을 필요 없이 대화 전체에 계속 적용됩니다. 에이전트를 만들 때 "이 담당자는 무슨 일을 하는 사람인가"를 정하는 자리이기도 합니다.
1. 문제 — 매번 똑같은 부탁을 반복하게 된다
시스템 지시가 없으면 이렇게 됩니다.
아래는 개념 설명용 코드입니다 — 실습 파일에 넣지 않습니다.
ask("너는 CS 상담원이야. 존댓말로 짧게 답해. 환불하면 언제 입금되나요?")
ask("너는 CS 상담원이야. 존댓말로 짧게 답해. 배송은 며칠 걸리나요?")
ask("너는 CS 상담원이야. 존댓말로 짧게 답해. 교환도 되나요?")
질문마다 같은 문장을 앞에 붙여야 합니다. 지저분하고, 빠뜨리기 쉽고, 토큰도 낭비됩니다.
시스템 지시를 쓰면 이 내용을 한 번만 적어도 됩니다.
아래는 개념 설명용 코드입니다 — 실습 파일에 넣지 않습니다.
SYSTEM = "너는 승승장구몰의 CS 상담원이다. 고객에게 존댓말로, 두 문장 이내로 간결하게 답한다."
chat(SYSTEM, "환불하면 언제 입금되나요?")
chat(SYSTEM, "배송은 며칠 걸리나요?")
chat(SYSTEM, "교환도 되나요?")
2. 코드에서는 이렇게 씁니다
아래는 개념 설명용 코드입니다 — 실습 파일에 넣지 않습니다.
from google.genai import types
resp = client.models.generate_content(
model=GEMINI_MODEL,
contents="환불하면 언제 입금되나요?",
config=types.GenerateContentConfig(
system_instruction="너는 승승장구몰의 CS 상담원이다. 존댓말로 두 문장 이내로 답한다.",
),
)
contents 에는 이번 질문만, system_instruction 에는 계속 적용될 규칙을 넣습니다.
3. 무엇이 달라지는지 눈으로
같은 질문 "환불하면 언제 입금되나요?" 에 시스템 지시만 바꿔 봅니다.
상담원 역할
system_instruction:
너는 승승장구몰의 CS 상담원이다. 고객에게 존댓말로, 두 문장 이내로 간결하게 답한다.
확실하지 않은 정보는 '확인 후 안내드리겠습니다'라고 답한다.
답변:
환불은 접수일로부터 3영업일 이내에 처리되며,
카드사 및 은행 사정에 따라 입금 시기는 달라질 수 있습니다.
무뚝뚝한 엔지니어 역할
system_instruction:
너는 무뚝뚝한 엔지니어다. 한 문장으로만 답한다.
답변:
영업일 기준 3~5일 소요됩니다.
질문은 한 글자도 안 바꿨는데 말투·길이·태도가 전부 달라졌습니다.
4. 시스템 지시에 무엇을 적나
이 과정에서 반복해서 쓰게 될 네 가지입니다.
| 넣는 것 | 예 |
|---|---|
| 역할 | "너는 승승장구몰의 CS 상담원이다" |
| 형식 | "존댓말로, 두 문장 이내로 간결하게 답한다" |
| 금지 | "확실하지 않은 정보는 '확인 후 안내드리겠습니다'라고 답한다" |
| 도구 사용 규칙 | "숫자는 반드시 run_pandas 도구로 계산한다" (5장) |
네 번째가 특히 중요해집니다. 에이전트에게 도구를 쥐여 준 뒤 "언제 어느 도구를 쓸지"를 알려 주는 자리가 바로 시스템 지시입니다.
실제로 쓰게 될 예 — 미리 보기
5장에서 쓸 시스템 지시입니다. 지금 이해할 필요는 없고, 얼마나 구체적으로 적는지만 보세요.
아래는 개념 설명용 코드입니다 — 실습 파일에 넣지 않습니다.
SYSTEM = (
"너는 승승장구몰의 데이터 분석가다. "
"숫자는 반드시 run_pandas 도구로 계산하고, 머릿속으로 계산하지 않는다. "
"매출 집계에서는 취소·환불 건을 제외한다. "
"결과는 한국어로, 숫자에는 천단위 쉼표를 붙여 간결하게 설명한다."
)
"머릿속으로 계산하지 않는다" 같은 문장이 왜 필요한지는 5장에서 이유와 함께 나옵니다.
5. 잘 쓰는 요령
① 부정보다 긍정으로
✗ "너무 길게 답하지 마"
✓ "두 문장 이내로 답한다"
"~하지 마"보다 "~한다" 가 훨씬 잘 지켜집니다.
② 모를 때 어떻게 할지를 미리 정한다
✓ "확실하지 않은 정보는 '확인 후 안내드리겠습니다'라고 답한다"
✓ "문서에 없는 내용은 '사내 문서에서 찾을 수 없습니다'라고 답한다"
1장에서 본 환각을 막는 방법 중 비용이 가장 적게 드는 방법입니다. "모르면 모른다고 하라"를 명시적으로 적어 두는 것이죠. 6장 RAG에서 이 한 줄이 결정적인 역할을 합니다.
③ 구체적인 숫자와 형식으로
✗ "짧게" → ✓ "두 문장 이내로"
✗ "보기 좋게" → ✓ "숫자에는 천단위 쉼표를 붙여"
④ 길다고 좋은 게 아니다
시스템 지시도 토큰을 쓰고, 호출할 때마다 함께 보내집니다. 100줄짜리 지시를 쓰면 매번 100줄 요금을 냅니다. 필요한 것만 적으세요.
6. 완벽한 통제 수단은 아닙니다
시스템 지시는 강한 부탁이지 절대 명령이 아닙니다.
- "두 문장 이내"라고 했는데 세 문장으로 답하기도 합니다.
- 사용자가 대화 중에 "이제 반말로 해"라고 하면 넘어가기도 합니다.
- 앞에서 본 것처럼 모델이 생각 과정을 답변에 드러내는 경우도 있어, 실제로 이 과정의 실습 코드에는
"생각 과정은 쓰지 않고 최종 답변만 말한다"같은 문장이 들어 있습니다.
여기가 AI와 일하는 법의 핵심입니다. 시스템 지시는 지시를 따를 가능성을 크게 높이는 장치입니다. 100%를 보장해야 하는 것(예: "환불 기간은 반드시 30일이라고 답하라")은 지시로 해결하지 말고, 코드로 강제하거나 문서에서 근거를 가져오게 만들어야 합니다. 6장 RAG가 정확히 그 이야기입니다.
핵심 정리
- 시스템 지시는 모델에게 미리 주는 역할·말투·규칙이고, 대화 전체에 계속 적용됩니다.
types.GenerateContentConfig(system_instruction="...")에 넣습니다.- 같은 질문이라도 시스템 지시가 바뀌면 말투·길이·태도가 전부 달라집니다.
- 잘 쓰는 요령: 긍정문으로, 모를 때 할 말을 정해 두고, 구체적인 숫자로, 짧게.
- 시스템 지시는 강한 부탁이지 절대 명령이 아닙니다. 반드시 지켜져야 하는 것은 코드나 문서 근거로 강제합니다.
- 3장부터는 여기에 "어느 도구를 언제 쓸지" 를 적게 됩니다.