← 전체 해설 목록  ·  week-02 · 6강

6강 — 프롬프트 엔지니어링 기초

🎯 학습 목표

📖 해설

지난 시간 LLM API 연동에 성공했죠. AI에게 질문하고 답을 받았습니다. 그런데 같은 질문이라도 어떻게 묻느냐에 따라 답변 품질이 완전히 달라집니다. 오늘은 AI에게 잘 질문하는 기술, 프롬프트 엔지니어링을 배웁니다.

0. 시작 전 — 환경 설정 다시 잡기

Colab은 세션이 끊기면 설치한 라이브러리와 클라이언트 설정이 사라집니다. 그래서 실습을 시작할 때마다 지난 시간(LLM API 연동)에 만든 설정을 맨 위에서 한 번 다시 실행합니다. 새 내용은 아니고, 매번 반복하는 준비 단계입니다.

# ① OpenAI 호환 라이브러리 설치 (-q: 설치 로그를 조용히)
!pip install openai -q

# ② Colab Secrets에 저장해 둔 API 키 불러오기 (코드에 키를 직접 쓰지 않기 위함)
from google.colab import userdata
api_key = userdata.get('OPENROUTER_API_KEY')

# ③ OpenRouter를 향하도록 클라이언트 만들기 (base_url만 바꾸면 여러 모델을 같은 코드로 호출)
from openai import OpenAI
client = OpenAI(
    base_url="https://openrouter.ai/api/v1",
    api_key=api_key,
)
print("준비 완료!")

이 client 하나로 오늘 만들 모든 함수가 AI를 호출합니다.

1. 프롬프트란 — AI에게 보내는 지시문

프롬프트(prompt)는 AI에게 보내는 지시문입니다. 지난 시간에 보낸 "게임 리뷰 분석이 왜 중요한가요?" 그게 프롬프트예요.

요리 주문으로 비유해 봅시다. "김치찌개 주세요"라고만 하면 맵게 나올지 싱겁게 나올지 모릅니다. "덜 맵게, 두부 많이, 파 따로요"라고 구체적으로 말하면 원하는 맛이 정확히 나오죠. AI도 마찬가지입니다. 구체적으로 지시할수록 원하는 답변을 받습니다.

나쁜 프롬프트(모호) 좋은 프롬프트(구체적)
"이 리뷰 어때?", "분석해줘", "뭐가 문제야?" "감성을 긍정/부정/혼합 중 하나로 분류해줘", "리뷰에서 언급된 장점 3가지를 추출해줘", "게임의 주요 불만 사항을 요약해줘"
AI가 뭘 원하는지 몰라 이것저것 다 말함 뭘 해야 할지 명확해 정확히 수행

핵심: 무엇을 원하는지 + 어떤 형식으로 원하는지를 명확히 말하는 것. (그래서 "프롬프트 엔지니어"라는 고액 연봉 직업까지 생겼습니다.)

2. 시스템 롤 — AI에게 역할 부여하기

시스템 롤(system role)은 AI에게 역할을 부여하는 것입니다. 친구에게 "의사 선생님께 여쭤볼게요"라고 하면 친구가 의사인 척 답하잖아요. AI도 "너는 게임 리뷰 분석 전문가야"라고 역할을 주면 그 관점에서 더 전문적으로 답합니다. 역할 없이 물으면 일반적인 답변이 나오고요.

메시지는 role(역할)과 content(내용)로 이뤄집니다. - role: system → AI의 역할을 정의 ("너는 ~ 전문가야") - role: user → 사용자가 보내는 실제 질문

⚠️ 시스템 메시지는 항상 맨 앞, 유저 메시지보다 먼저 와야 합니다.

역할 유무의 차이를 보면 — 역할 없이 "great 게임 분석해줘"라고 하면 AI가 "이 리뷰는 긍정적인 감정을 표현하고 있습니다…" 하고 장황하게 답합니다. 반면 "너는 감성 분석 전문가야"라고 역할을 주면 "감성: 긍정 / 이유: great라는 강한 긍정 표현" 처럼 간결하고 구조화된 답이 나와요.

3. 출력 형식 지정 — 자동화의 열쇠

"이렇게 답해줘"라고 형식을 미리 알려주는 것입니다. - "한 단어로만 답해줘" → 긍정 또는 부정 (성능 좋은 모델은 잘 따르고, 약한 모델은 설명을 덧붙이기도 합니다) - "JSON 형식으로 답해줘" → 중괄호로 구조화된 데이터 - "번호 매겨 3가지로 답해줘" → 1. 2. 3. 정리

왜 형식을 지정할까요? 후처리가 쉬워지기 때문입니다. 리뷰 1,000개를 분석하는데 매번 장황한 텍스트가 나오면 정리하기 힘듭니다. 긍정/부정으로만 답하게 하면 바로 통계를 낼 수 있죠. 후처리가 쉬워진다 = 자동화가 가능해진다 = 시간·비용을 크게 줄인다는 뜻입니다.

4. 역할 + 형식을 결합한 완성 프롬프트

시스템 롤에 네 가지를 담으면 완성도가 높아집니다.

  1. 역할 정의 — "너는 게임 리뷰 감성 분석 전문가야"
  2. 작업 지시 — "리뷰를 읽고 감성을 분류해"
  3. 형식 지정 — "positive / negative / mixed 중 하나로만 답해"
  4. 제약 조건 — "다른 설명은 하지 마" (아주 유용한 팁)

이렇게 하면 "great game but too short"(장점·단점이 섞인 리뷰)에 대해 mixed라고만 답합니다.

5. 실습 — 감성 분석 함수 만들기

실습 편의와 재사용성을 위해 함수로 만듭니다. f-string(문자열 안에 변수를 끼워 넣는 방식)으로 리뷰 자리에 어떤 리뷰든 넣을 수 있어요.

def analyze_sentiment(review):
    """게임 리뷰의 감성을 positive / negative / mixed 중 하나로 분류한다."""
    response = client.chat.completions.create(
        model="google/gemini-2.0-flash-exp:free",
        messages=[
            # ① 시스템 롤: 역할 + 작업 + 형식 + 제약을 한 번에 정의 (항상 맨 앞!)
            {"role": "system", "content":
                "너는 게임 리뷰 감성 분석 전문가야. "
                "리뷰를 읽고 감성을 분류해. "
                "positive, negative, mixed 중 하나로만 답해. "
                "다른 설명은 하지 마."},
            # ② 유저 롤: 실제 분석할 리뷰 (f-string으로 변수 결합)
            {"role": "user", "content": f"다음 리뷰를 분류해: {review}"},
        ],
    )
    return response.choices[0].message.content.strip()

# 함수로 만들면 리뷰 1,000개도 반복문으로 쉽게 처리할 수 있다
reviews = [
    "이 게임 진짜 재밌어요 강추",
    "버그 너무 많고 자꾸 튕겨요",
    "이 게임은 내 마음을 설레게 해서 10분 하고 지웠습니다",  # 맥락 함정
]
for r in reviews:
    print(r, "→", analyze_sentiment(r))
# 예시 출력: positive / negative / mixed (모델·환경에 따라 다를 수 있음)

마지막 리뷰("설레게 해서 10분 하고 지웠습니다")처럼 앞은 긍정·뒤는 부정인 함정 리뷰도, 좋은 모델은 맥락을 알아채 mixed로 잘 잡습니다. assistant라는 롤도 있지만, 보통 system·user 두 가지를 주로 씁니다.

형식 지정의 효과 다시 보기: 역할만 주고 "간결하게 분석해"라고 하면 답은 깔끔해도 표준화가 안 돼서 사람이 중간에 들어가 내용을 추출해야 합니다. 반면 형식을 못 박으면(mixed로만) 그대로 자동 처리할 수 있어요.

6. 확장 — 아이디어만 바꾸면 다른 분석기가 된다

감성 분석은 이 과정의 핵심이지만, 같은 패턴으로 다른 분석기도 얼마든지 만들 수 있습니다. 예를 들어 "성능·버그 관련 리뷰만 골라내는" 함수를 봅시다.

def find_bug(review):
    """리뷰에 성능·버그 관련 내용이 있으면 True, 없으면 False를 반환한다."""
    response = client.chat.completions.create(
        model="google/gemini-2.0-flash-exp:free",
        messages=[
            {"role": "system", "content":
                "너는 게임 QA 분석가야. 리뷰에 버그·성능(렉, 튕김, 프레임 드랍 등) "
                "관련 내용이 있으면 True, 없으면 False로만 답해. 다른 설명은 하지 마."},
            {"role": "user", "content": f"리뷰: {review}"},
        ],
    )
    # .strip()으로 앞뒤 공백을 떼고, .upper()로 대문자로 통일한다
    return response.choices[0].message.content.strip().upper()

print(find_bug("게임이 자꾸 튕겨요. 프레임 드랍이 심해요"))  # TRUE
print(find_bug("스토리가 정말 감동적이었어요"))              # FALSE

흐름은 감성 분석과 똑같습니다. 어떤 아이디어를 가지느냐에 따라 형태만 바꾸면 돼요. 직접 짜도 되고, "find_bug 함수 완성해줘"처럼 AI에게 시키고 로직을 확인·수정하는 것도 좋은 개발 방식입니다.

답을 한 번 더 다듬는 .strip().upper(): "True로만 답해"라고 못 박아도, 모델이 true·TRUE처럼 소문자나 공백을 섞어 보낼 때가 있습니다. 이러면 if result == "TRUE": 같은 비교가 어긋나죠. 그래서 받은 답에 .strip()(앞뒤 공백 제거)과 .upper()(대문자 통일)를 한 번 더 걸어, 비교하기 좋은 형태로 정리해 둡니다. 프롬프트로 형식을 지정하고, 코드로 한 번 더 다듬으면 자동화가 한층 안정적입니다.

⚠️ Colab 실습 팁: 함수를 먼저 정의한 셀을 실행한 뒤 테스트 셀을 실행해야 합니다. 순서가 바뀌면 "함수가 정의되지 않았다"는 에러가 날 수 있어요(3강에서 배운 노트북 셀 실행 순서 주의와 같은 맥락).

실무에서 모든 리뷰를 담당자가 일일이 읽는 건 비용·시간이 큽니다. 이렇게 목적별 AI 분석기를 만들어 두고 True로 분류된 항목만 담당자에게 전달하면, 게임의 약점을 빠르게 찾아 개선할 수 있습니다.

🔑 핵심 용어

용어 쉬운 설명
프롬프트(prompt) AI에게 보내는 지시문. 구체적일수록 좋음
시스템 롤(system) AI에게 역할 부여. 항상 맨 앞
유저 롤(user) 사용자가 보내는 실제 질문
출력 형식 지정 "positive/negative/mixed로만" 등 답변 틀을 지정 → 자동화
제약 조건 "다른 설명은 하지 마" 같은 추가 규칙
f-string 문자열 안에 변수를 끼워 넣는 방식 (f"...{review}")
함수화 같은 패턴을 묶어 리뷰 1,000개를 반복 처리
.strip().upper() AI 답의 공백을 떼고 대문자로 통일해 비교·자동화하기 좋게 다듬기

🎮 게임 기획자 시점

"같은 패턴에 아이디어만 바꾸면 새 분석기가 된다"(감성 분석 → 버그 탐지)는 게 오늘의 핵심입니다. 기획자가 보고 싶은 축 — 과금 불만, 밸런스 논쟁, 신규 콘텐츠 반응 — 마다 시스템 롤의 역할 정의만 바꿔 전용 분석기를 찍어낼 수 있어요. 즉 무엇을 물을지 설계하는 사람이 분석의 방향을 쥡니다. 코딩은 AI가 하고, "어떤 질문이 비즈니스 가치가 있는가"는 기획자의 몫 — 이번 주 내내 강조된 "AI는 기술, 여러분은 도메인"이 프롬프트 설계에서 가장 선명하게 드러납니다.

⚠️ 흔한 오해 / 짚고 갈 점

✅ 30초 정리

  1. 프롬프트가 곧 품질. 같은 AI라도 구체적으로 물을수록 좋은 답이 나옵니다.
  2. 시스템 롤로 역할을 주면 전문적·간결한 답을, 출력 형식을 정하면 자동화 가능한 답을 얻습니다.
  3. 함수 + 역할/형식 패턴으로 감성 분석·버그 탐지 등 목적별 분석기를 찍어낼 수 있습니다.

▶️ 다음 강 연결

이로써 2주차(Day2)가 마무리됩니다. 하루 동안 텍스트 정제 → 전처리 파이프라인 → 임베딩 → 샘플링 → LLM API 연동 → 프롬프트 엔지니어링 기초까지 왔어요. (9~16차시 범위로 10문항 객관식 평가가 있습니다.) 다음 시간에는 오늘의 기초 위에 프롬프트 고급 기술을 얹습니다. 구체적으로는 ① 퓨샷(Few-shot) 프롬프팅 — 답변 예시 몇 개를 미리 보여줘 AI가 형식과 기준을 더 정확히 따르게 하는 법, ② 다양한 분석 작업 — 감성·버그를 넘어 키워드 추출, 요약 등으로 분석기를 넓히는 법, ③ 프롬프트 최적화 — 같은 작업을 더 적은 비용으로 더 안정적으로 끌어내는 법을 배워, 본격적인 리뷰 분석 자동화로 이어집니다.

전체📚 강의 목록