
AI의 인격을 컨트롤! GEAP System Instruction 실전 입문
요약
GEAP(구 Vertex AI) 환경에서 Gemini 모델의 역할과 말투를 고정하는 System Instruction 사용법을 소개합니다. 역할, 제약, 포맷의 3요소를 활용해 일관된 페르소나를 구현하는 실전 예시를 제공합니다.
핵심 포인트
- System Instruction을 통해 모델의 역할과 제약 사항을 사전에 고정 가능
- 모든 대화 턴에 자동으로 적용되어 프롬프트 중복 방지
- 역할, 제약, 포맷의 3요소를 구성하여 안정적인 답변 유도
- 코드 리뷰어, 고객 지원, 교육용 봇 등 다양한 캐릭터 설정 예시 제공
「챗봇을 만들었지만, 답변이 매번 제각각이라 안정적이지 않다」
「너무 정중해서 실무에서 사용하기 어렵다」
Gemini는 기본적으로 범용 어시스턴트 (Assistant)로서 행동합니다. System Instruction을 사용하면, 모델의 역할·말투·제약 사항을 미리 고정할 수 있습니다. 코드는 몇 줄 추가하는 것만으로 충분합니다.
본 기사에서는 GEAP (구 Vertex AI)에서 System Instruction을 사용하는 방법을 3가지 캐릭터 설정 예시와 함께 해설합니다.
System Instruction이란, 사용자 메시지보다 먼저 처리되는 「모델에 대한 사전 지시」입니다.
통상적인 API 호출은 다음과 같은 흐름입니다.
사용자 메시지 → 모델 → 답변
System Instruction을 추가하면 다음과 같이 됩니다.
System Instruction (역할·제약·포맷)
+
사용자 메시지
...
System Instruction은 모든 대화 턴 (Turn)에 자동으로 적용됩니다. 매번 프롬프트 (Prompt)에 「당신은 ○○입니다」라고 쓸 필요가 없어집니다.
GEAP 환경 구축이 아직 되지 않은 분은, 먼저 「Google Cloud에서 Gemini 사용하기: GEAP (구 Vertex AI) 입문」을 참조해 주세요.
본 기사에서는 다음 사항이 준비되어 있음을 전제로 합니다.
google-genai SDK가 설치됨 -
gcloud auth application-default login으로 인증됨 - 환경 변수가 설정됨
export GOOGLE_CLOUD_PROJECT="your-project-id"
export GOOGLE_CLOUD_LOCATION="global"
export GOOGLE_GENAI_USE_ENTERPRISE="True"
System Instruction은 types.GenerateContentConfig의 system_instruction 파라미터에 전달합니다.
from google import genai
from google.genai import types
client = genai.Client()
...
코드의 문제점만을 단적으로 지적하는 리뷰어 (Reviewer)입니다. 칭찬이나 서론은 불필요하며, 개선점만을 반환합니다.
코드:
REVIEWER_SI = """
당신은 10년 이상의 경력을 가진 시니어 엔지니어입니다.
코드 리뷰를 의뢰받으면, 다음 관점에서 엄격하게 평가해 주세요.
...
response = client.models.generate_content(
model="gemini-3.5-flash",
contents="""
...
출력 예시:
말투를 통일하고, 외부 고객 문의 대응을 담당하는 Bot입니다.
코드:
SUPPORT_SI = """
당신은 일본의 SaaS 기업 「CloudSample 주식회사」의 고객 지원 담당자입니다.
대응 규칙:
...
response = client.models.generate_content(
model="gemini-3.5-flash",
contents="비밀번호를 잊어버렸습니다. 어떻게 해야 하나요?",
...
출력 예시:
초등학생을 대상으로 쉽게 풀어서 설명하는 Bot입니다. 어려운 단어를 사용하지 않고, 친숙한 비유를 들어 가르칩니다.
코드:
TEACHER_SI = """
당신은 초등학교 3~5학년 대상의 가정교사입니다.
산수·과학·사회·국어의 어떤 질문에도 답합니다.
...
response = client.models.generate_content(
model="gemini-3.5-flash",
contents="왜 하늘은 파란색이야?",
...
출력 예시:
System Instruction을 작성할 때는, 「역할·제약·포맷」의 3요소를 의식하면 안정적입니다.
| 요소 | 작성해야 할 내용 | 예시 |
|---|---|---|
| 역할 | 누구로서 행동할 것인가 | 「10년 이상의 경력을 가진 시니어 엔지니어」 |
| 제약 | 해도 되는 것·해서는 안 되는 것 | 「경쟁 서비스 언급 금지」 |
| 포맷 | 출력의 구조·글자 수 | 「불렛 포인트 3줄 이내」 「200자 이내」 |
추상적인 지시보다 구체적인 역할 정의가 일관성을 높입니다.
× 「당신은 AI 어시스턴트입니다. 친근하게 말해 주세요."
○ 「당신은 〇〇사의 서포트 담당 Saki입니다. 경어로, 200자 이내로 답해 주세요."
「~해 주세요」뿐만 아니라 「~하지 마세요」를 명시함으로써,
기본 출력 패턴(긴 서론·모호한 표현·과도한 칭찬)을 억제할 수 있습니다.
system_instruction = """
...
금지 사항:
...
System Instruction이 길수록 모순이 생기기 쉽습니다. 기준은 300~500자입니다.
정말로 필요한 지시만 남기고, 불필요한 설명은 줄입시다.
Gemini는 사용자의 지시를 우선하는 경향이 있습니다.
System Instruction: 「영어로만 답변해 주세요"
사용자: 「일본어로 알려 주세요"
→ 일본어로 답변되는 경우가 있음
중요한 제약(예: 「경쟁사 정보를 절대 출력하지 마세요」)은 System Instruction에만 의존하지 말고,
앱 측에서도 출력 필터링(Filtering)을 검토해야 합니다.
generate_content에 contents로 멀티턴(Multi-turn) 대화를 전달하는 경우에도,
system_instruction은 config에 한 번 설정하면 모든 턴에 적용됩니다.
대화 이력(Conversation History) 안에 System Instruction을 포함할 필요는 없습니다.
response = client.models.generate_content(
model="gemini-3.5-flash",
contents=[
...
「간결하게 답해 주세요」와 「모든 관점을 망라해 주세요」를 동시에 쓰면,
모델이 어느 쪽을 우선할지 불분명해집니다. 지시 간의 모순은 체크가 필요합니다.
System Instruction을 사용하는 포인트는 3가지입니다.
types.GenerateContentConfig(system_instruction="...")를 전달하는 것만으로 작동
역할·제약·포맷의 3요소로 작성하면 안정적
부정형 지시( ~하지 마세요)도 효과적으로 사용
System Instruction은 Function Calling이나 멀티모달(Multimodal)과 조합함으로써 활용 범위를 더욱 넓힐 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기