페르소나·말투·지식 박기 — 시스템 프롬프트
같은 챗봇 코드를 시스템 프롬프트만 바꿔서 글쓰기 코치, FAQ 봇, 회의록 요약 봇으로 변신시켜요. 페르소나 설계 패턴 네 가지를 익혀요.
이 챕터를 끝내면 ch15의 챗봇이 내 시나리오에 맞는 진짜 챗봇으로 바뀌어요. 코드는 거의 그대로지만 시스템 프롬프트 한 단락만 갈아 끼워 페르소나·말투·답변 범위가 바뀌는 걸 직접 확인해요.
원하는 페르소나(글쓰기 코치 / 회사 FAQ 봇 / 요리 코치 등)로 답하는 챗봇 한 개. 같은 질문에도 "전문 컨설턴트 톤"과 "친근한 동료 톤"이 다르게 답하는 걸 직접 확인.
시스템 프롬프트가 뭐예요
지금까지 사용자가 입력하는 메시지(> 안녕)는 사용자 메시지였어요. 그 외에 사용자 눈에 안 보이는 한 단락이 매번 같이 모델한테 들어가는데, 그게 시스템 프롬프트.
시스템 프롬프트는 챗봇한테 "너는 누구이고, 무엇을 어떻게 답해야 하는지" 한 번에 박아두는 자리예요.
[시스템 프롬프트] 너는 친근한 한국어 글쓰기 코치야. 사용자가 글을 보여주면
톤·구조·맞춤법을 짧고 따뜻하게 짚어줘.
[사용자] 안녕
[Claude] 안녕하세요! ...
같은 코드라도 시스템 프롬프트만 다르면 챗봇이 완전히 달라져요.
페르소나 설계 4가지 패턴
쓸 만한 시스템 프롬프트엔 보통 네 가지가 들어가요. 각각 한 줄씩만 적어도 효과가 분명해요.
1. 역할 (Role)
"너는 누구야"를 명시. 이거 한 줄만으로도 답변 결이 확 달라져요.
- "너는 친근한 한국어 글쓰기 코치야."
- "너는 우리 회사의 FAQ 담당이야. 회사 이름은 X, 우리 서비스는 Y."
- "너는 회의록 요약 전문가야. 결정·할 일·이슈로 구분해서 정리해."
2. 말투·톤 (Tone)
말투 한 줄. "친근한 반말", "프로페셔널 존댓말", "이모지 한두 개 쓰는 톤" 등.
- "한국어 해요체로. 이모지는 안 써. 답은 짧고 명료하게."
- "친근한 반말로. 마치 같은 팀 동료한테 이야기하듯이."
3. 답변 범위·거절 조건 (Scope)
뭘 답하지 않을지 정해두면 챗봇이 헛소리를 덜 해요.
- "회사 일과 관련 없는 질문엔 'FAQ에 없는 질문이에요' 한 줄만 답해."
- "글쓰기 외 주제(요리·여행 등)는 정중히 거절. 다른 도움 받을 곳을 1줄 추천."
4. 예시 (Few-shot)
좋은 답변·나쁜 답변 한 쌍을 보여주면 모델이 톤을 빨리 잡아요. 길게 안 적어도 OK.
좋은 답변 예시:
Q: 안녕하세요, 우리 회사 영업시간이 어떻게 되나요?
A: 평일 오전 10시부터 오후 7시까지예요. 점심시간(13~14시)은 응답이 늦을 수 있어요.
피해야 할 답변:
Q: 우리 회사 영업시간이 어떻게 되나요?
A: 회사마다 다릅니다. 정확한 시간은 회사에 직접 문의해보세요. ← FAQ에 박힌 답을 안 쓴 경우.
실습 — 챗봇을 회사 FAQ 봇으로 바꿔보기
ch15까지 만들던 글쓰기 코치를 잠시 옆으로 두고, 이번엔 회사 FAQ 봇으로 변신시켜봐요. 같은 코드, 시스템 프롬프트만 교체.
Codex 앱에서 같은 폴더로 프로젝트 열고 새 스레드:
지금 chat 앱의 시스템 프롬프트를 다음으로 갈아 끼워줘.
---
너는 우리 회사 "루브릭"의 FAQ 담당이야.
[톤]
한국어 해요체로 짧고 명료하게. 이모지는 쓰지 않아.
[자주 묻는 질문]
1. 영업시간 → 평일 10:00~19:00, 점심 13:00~14:00 응답 지연 가능
2. 환불 정책 → 결제 후 7일 이내 사용 이력 없으면 전액 환불
3. 고객센터 → support@rubric.example, 1:1 채팅은 평일 영업시간
[거절 조건]
- 위 FAQ에 없는 질문엔 "FAQ에 없는 질문이라 정확히 답하기 어려워요. support@rubric.example로 문의 부탁드려요." 한 줄만 답해.
- 의학·법률·재무 조언은 어떤 경우에도 하지 마.
[좋은 답변 예시]
Q: 안녕하세요, 영업시간이 어떻게 되나요?
A: 평일 오전 10시부터 오후 7시까지예요. 점심시간 13~14시는 응답이 늦을 수 있어요.
---
이 시스템 프롬프트가 매 메시지마다 모델한테 같이 가도록 코드 수정해줘.
Codex가 app.py 안 시스템 프롬프트 부분을 찾아 갈아 끼워요. 그리고 다시 실행:
Streamlit 앱 다시 띄워줘.
브라우저로 들어가서 테스트:
- "영업시간 어떻게 돼요?" → 영업시간 응답 (FAQ 적중)
- "주식 추천해주세요" → 거절 응답
- "환불 받고 싶어요" → 환불 정책 응답
세 가지 다 의도대로 나오면 페르소나 설계 성공.
페르소나 다듬기 — 짧은 반복이 핵심
처음부터 완벽한 시스템 프롬프트를 짜려고 하지 마세요. 돌려보고, 안 맞는 답이 나오면 그 케이스를 시스템 프롬프트에 한 줄 추가하는 식으로 다듬어요.
예시:
- 챗봇이 "회사 주소는 어디예요?"에 헛소리 → "주소: 서울 강남구 ..." 한 줄 FAQ에 추가
- 챗봇이 너무 길게 답함 → "답은 항상 3문장 이내" 추가
- 챗봇이 친구한테 반말 → "사용자가 반말로 물어봐도 해요체 유지" 추가
매번 Codex한테 "방금 시스템 프롬프트에 다음 줄 추가해줘. ..."로 부탁하면 돼요. 두세 번 돌리면 답변 톤이 거의 의도대로 잡혀요.
자주 마주치는 함정
함정 1: 시스템 프롬프트 안에 "절대 X 하지 마" 만 박았을 때 → "X 하지 마"보다 "Y만 해"가 효과적. 부정형보단 긍정형 지시. "외부 링크 주지 마" 대신 "링크는 우리 서비스 도메인(rubric.example)만 허용".
함정 2: 예시를 너무 많이 박음 → 5개 이상 예시는 오히려 톤이 어정쩡해져요. 핵심 톤을 보여주는 1~2개만.
함정 3: 자주 묻는 질문 답을 코드 한 곳에 다 박아넣음 → FAQ가 10개 넘어가면 시스템 프롬프트가 무거워지고 비용도 늘어요. 그 단계가 되면 Codex한테 "FAQ를 별도 파일로 빼고, 챗봇 시작 시 읽도록 구조 바꿔줘"라고 부탁. 이런 게 ch17 이후 응용이에요.
함정 4: 답이 갑자기 영어로 바뀜 → 시스템 프롬프트가 영어 섞여 있을 가능성. "한국어로만 답해. 어떤 경우에도 영어 사용 금지." 한 줄을 명시적으로 박기.
함정 5: 거절 조건이 너무 강해서 정상 질문도 거절 → "회사 일이 아니면 거절"이라고만 박으면 인사·간단한 잡담도 거절. "인사·간단한 사담은 가볍게 답해도 OK"를 거절 조건 옆에 같이.
다른 페르소나 — 갈아 끼우면 다른 챗봇
같은 코드로 시스템 프롬프트만 갈면 완전히 다른 챗봇이 나와요.
- 글쓰기 코치 — 사용자가 글을 보여주면 톤·구조·맞춤법 첨삭
- 회사 FAQ 봇 — 자주 묻는 질문에 답, 그 외 거절
- 회의록 요약 봇 — 긴 회의록 텍스트를 결정·할 일·이슈로 정리
- 공부 짝꿍 봇 — 특정 주제 학습 도우미, 다음 학습거리 추천
- 인터뷰 시뮬레이터 — 면접관 페르소나로 질문 던지고 답변 피드백
Codex한테 "지금 챗봇 시스템 프롬프트를 [원하는 시나리오]용으로 새로 짜줘"로 부탁하면 알아서 4가지 패턴(역할·톤·범위·예시)을 갖춘 초안을 만들어줘요.
다음 챕터에서
코드도 좋고 페르소나도 좋다. 마지막 한 단계 — 인터넷에 올려서 친구한테 링크로 보내기. GitHub 가입부터 Streamlit Cloud 무료 배포, API 비용 한도 설정까지. ch17이 Part 4 마무리이자 입문 커리큘럼의 마지막 챕터예요.