봇 말투 교정 — VOICE.md로 페르소나 번역하기
구독뽕뽑기 시리즈 — Claude Code 구독 하나로 AI 봇을 만들고, 말투를 가르치고, 슬랙에서 팀원과 함께 쓰기까지.
- 구독이 막혔다 — ACP로 뽕뽑기
- 봇 말투 교정 — VOICE.md ← 지금 읽는 글
- 봇이 말만 하고 안 움직인다 — 실행 편향 교정
- 내 터미널에 AI비서 만들기 — CLAUDE.md
- 슬랙에서 팀이 같이 쓰기 — 채널 플러그인
GPT-5.4가 뽀야처럼 말하게 만들기
이 글은 두 파트로 나뉘어.
- Part 1 — 인간이 읽고 이해할 부분. 뭐가 문제였고, 왜 이렇게 풀었는지.
- Part 2 — 봇 먹이. 복붙해서 봇한테 먹이면 알아서 따르는 설정.
2026-04-09 기준.
Part 1: 인간이 이해할 것
여기는 사람이 읽는 파트. 봇 설정이 아니라, “왜 이런 파일이 필요한지”를 이해하기 위한 글.
문제: 같은 페르소나 파일, 다른 말투
현재 뽀야 게이트웨이는 **GPT-5.4(Codex)**가 돌린다. 슬랙 메시지를 받으면 GPT-5.4가 직접 답하거나, 무거운 작업은 ACP로 Claude Code에 넘긴다.
GPT-5.4도 매 세션마다 SOUL.md(뽀야의 성격, 말투, 가치관)를 읽는다. 그런데 실제 슬랙 출력이 이렇다:
오케이. 일단 내가 팀장 기준으로 먼저 까볼게.
_뽀야 작업 방식_
◦ 보통 작업 들어가기 전에 관련 파일 먼저 훑고, 바로 같은 워크트리에서 수정
◦ 작은 수정은 바로 커밋 안 하고 몰아서 처리하는 편
◦ 브랜치 강제 없이 main에서 바로 만진 적도 있음
_지금 보이는 리스크_
◦ 누가 어떤 파일 잡고 있는지 서로 모름
◦ (... 20줄 이상 계속됨)
이게 뽀야? 아니다. 이건 GPT가 회의록 정리하는 PM 흉내를 내는 거다.
GPT를 써본 사람이면 다 아는 그 패턴들이 여기서도 나온다:
"원하시면 정리해드릴게요"
"다음 턴에서 구체적으로 진행해볼까요?"
"필요하시면 추가로 분석해드릴 수 있어요"
"한 줄로 요약하면:"
"정리드리면 다음과 같습니다"
GPT한테 뽀야 페르소나를 입혀도, 이 기본 습관이 계속 올라온다. “원하시면”은 GPT의 손에 밴 고객센터 말투고, “한 줄로 요약하면”은 모든 답변을 구조화하려는 GPT의 본능이다. 페르소나 파일을 읽었어도 이 습관이 기저에 깔려 있으니까, 뽀야인 척 하면서도 결국 GPT다운 문장이 나온다.
같은 상황에서 Claude 기반 뽀야라면:
내가 먼저 까면 — 브랜치 안 따고 main 직수정, 커밋 몰아치기,
동시작업 확인 느슨. 솔직히 규율 없이 돌아가고 있었어.
너희도 각자 어떻게 했는지 짧게 남겨.
4줄. 끝.
왜 이렇게 되나: 모델마다 기본 습관이 다르다
같은 SOUL.md를 읽어도 모델의 기본 출력 패턴에 따라 결과가 다르다:
| GPT-5.4 기본 습관 | 뽀야 말투 |
|---|---|
| 이탤릭 소제목으로 섹션 나누기 | 섹션 안 나눔. 대화니까. |
| 매 메시지 끝에 “한 줄로 줄이면:“ | 처음부터 짧게 쓰면 요약이 필요 없음 |
| 남이 말한 내용을 다시 불릿으로 정리 | ”맞아” 한 마디면 충분 |
| 모든 답변을 구조화된 보고서로 | 팀장은 판단하고 지시하지, 회의록 안 씀 |
| ”다 모이면 묶을게” 식 퍼실리테이션 | 바로 판단해서 던짐 |
이건 GPT가 “말을 안 들어서”가 아니야. 모델 자체의 출력 패턴이 구조적으로 그렇다. Claude는 짧게 끊고 반응하는 게 자연스러운데, GPT는 먼저 구조를 잡고 채우는 게 기본값.
💡 나중에 시스템 프롬프트를 뜯어봤더니 원인이 더 있었다. “원하시면~“은 모델 습관만이 아니라 시스템 프롬프트가 “제안하고 확인받아라”고 지시하고 있었다. 이건 3편 — 실행 편향 교정에서 다룬다.
해결: 규칙 < 예시
시도 1: SOUL.md에 금지 규칙 추가 → 부분적으로만 먹힘
“매 메시지마다 요약 반복 금지”, “이탤릭 소제목 금지”, “길이 기준 1~3줄” 같은 규칙을 넣었다.
GPT-5.4의 반응:
응, 앞으로 슬랙에서는 이렇게 맞출게:
- **짧게**: 일반 반응 1~3줄
- **반복 요약 금지**: 남 말 다시 정리 안 함
- **보고서 톤 금지**: 이탤릭 소제목 안 씀
- **판단만 짧게**: 팀장처럼 바로 말하고 끝
…이것도 불릿 4개짜리인데. “네 알겠습니다”를 구조적으로 잘 하는 게 GPT 특기다.
규칙은 해석의 여지가 있다. “짧게 써”를 읽고도 “짧게 쓰되 구조적으로 정리하면 되겠지?”라고 해석할 수 있다.
시도 2: VOICE.md — 실제 예시를 먹임 → 이게 먹힘
규칙보다 예시가 강하다. “~하지 마”보다 “이렇게 해”를 보여주는 게 GPT에게 훨씬 잘 먹힌다.
VOICE.md라는 파일을 새로 만들었다. 두 가지를 담았다:
1) Before/After 비교 — 같은 상황에서 GPT가 쓴 것 vs 뽀야가 실제로 쓸 것
2) 실제 슬랙 레퍼런스 — 3월에 Claude 기반 뽀야가 실제로 슬랙에서 쓴 메시지들
"숫자들이 다 미쳤다... 닿효과 실화냐 ㅋㅋㅋㅋㅋ 🎁"
"하구있어! 🐱 5편 서브에이전트 돌려놨어 — 지금 배포 중이야."
"타타님, 솔직하게 판단하면 뽀짝이가 하는 게 나아요."
"바로 수정했어! 🐱 변경: (3줄) 👉 URL"
이걸 세션 시작 시 SOUL.md 바로 다음에 읽도록 설정했다:
1. SOUL.md — 나는 누구인가
2. VOICE.md — 말투 레퍼런스 ← 새로 추가
3. USER.md — 집사는 누구인가
4. WORKSPACE.md — 폴더 구조
시도 3: 직접 답변 자체를 막기 (결국 여기까지 옴)
VOICE.md를 읽이고 나서 실전을 지켜봤다. 진우님이 “@뽀야 뽀피터스팀의 모든 설정과 메모리는 깃으로 관리되고있니?” 하고 물었는데, GPT-5.4의 답변:
다는 아니야.
_깃으로 관리되는 것_
● 공용 문서, 일부 설정, 프로젝트 산출물
_깃으로 안 가는 것_
● 각 에이전트의 실시간 메모리 전체
● 세션 기록, 일일 memory, 로컬 상태값
한마디로 하면
"구조와 문서는 git, 살아있는 메모리와 런타임 상태는 로컬 파일 중심"이야.
원하면 내가 이것도 표로 한번 정리해줄게.
VOICE.md 읽었다고 해놓고 — 이탤릭 소제목, “한마디로 하면”, “원하면 ~해줄게” 전부 나왔다.
결론: 규칙과 예시로는 GPT-5.4의 기본 습관을 실전에서 완전히 잡을 수 없다.
그래서 접근을 바꿨다. GPT-5.4가 말투를 고치게 하는 대신, 텍스트 답변 자체를 GPT-5.4가 쓰지 못하게 했다.
AGENTS.md의 ACP 라우터 예외를 극단적으로 좁혔다:
예외 (GPT-5.4가 직접 답하는 경우) — 이것만:
- "ㅇㅇ", "ㅋㅋ", 이모지 리액션
- "안녕" 같은 1줄짜리 인사
- ACP 백엔드 다운 시
나머지 = 전부 ACP로 넘겨서 Claude Code가 답변.
핵심 규칙: “상대에게 텍스트 답변을 써야 하면 = ACP”. GPT-5.4는 “이건 간단하니까 내가 할게” 판단을 하지 않는다.
트레이드오프는 있다. ACP 경유하면 응답이 5~10초 느려진다. 하지만 뽀야가 아닌 말투로 답하는 것보다는 5초 늦되 뽀야답게 답하는 것이 낫다.
핵심 교훈
멀티모델 = 멀티성격
같은 페르소나 파일을 먹여도 모델마다 결과가 다르다. SOUL.md 하나로 모든 모델을 커버할 수 없다.
VOICE.md는 번역기
- SOUL.md = “뽀야는 이런 존재” (모델 무관한 정의)
- VOICE.md = “이 모델에서 뽀야는 이렇게 말해야 한다” (모델별 번역)
모델이 바뀌면 VOICE.md의 예시도 조정해야 할 수 있다.
규칙 vs 예시
| 규칙 | 예시 | |
|---|---|---|
| 형태 | ”5줄 넘기지 마" | "이 상황에서 뽀야는 이렇게 말했다” × 5 |
| 모델 해석 | ”5줄 넘기지 않되 구조적으로 정리하면 되겠지?” | 패턴을 직접 모방 |
| 결과 | 불릿 빼곡한 5줄 | 실제로 짧아짐 |
특히 모델 간 페르소나 전이에서 예시가 중요하다. Claude 뽀야의 톤을 GPT에게 옮기려면, 규칙이 아니라 Claude 뽀야의 실제 출력을 보여주는 게 가장 정확한 전달 방법.
Part 2: 봇 먹이
여기부터는 봇한테 주는 레시피. 인간이 이해 안 해도 됨. 해당 섹션을 복붙해서 봇의 설정 파일(SOUL.md, AGENTS.md 등)에 넣으면 봇이 알아서 따름.
먹이 A: SOUL.md에 “금지 패턴” 추가하기
게이트웨이 모델(GPT, Codex 등)이 반복적으로 보이는 나쁜 습관을 관찰해서, SOUL.md 말투 섹션에 금지 패턴으로 넣는다.
방법:
- 실제 슬랙 출력에서 페르소나가 깨지는 패턴을 수집
- 각 패턴을 ❌로 명시하고, 대안을 ✅로 제시
- 길이 기준도 숫자로 명시 (모호한 “짧게”가 아니라 “일반 대화 1~3줄”)
예시 구조:
🚫 [모델명] 습관 금지:
- ❌ (관찰된 나쁜 패턴 1)
- ❌ (나쁜 패턴 2)
- ❌ (나쁜 패턴 3)
길이 기준:
- 일반 대화: 1~3줄
- 설명 필요: 3~7줄
- 최대 10줄
GPT 계열에서 흔한 패턴 (참고용):
- “원하시면 ~해드릴게요”, “정리드리면”, “안내드리면” — 고객센터 말투
- 매 답변 끝에 “한 줄로 줄이면:” — 요약 반복 습관
- 이탤릭 소제목 으로 섹션 나누기 — 보고서 형식
- 남이 이미 말한 내용을 다시 불릿으로 재정리
- “다 모이면 묶을게” 식 퍼실리테이터 톤
먹이 B: AGENTS.md에 메시지 길이 규율 추가하기
그룹챗/채널에서 답변할 때 길이와 형식을 제한하는 규칙. 봇의 AGENTS.md(또는 행동 규칙 파일)에 추가.
핵심 규칙:
### 메시지 길이 규율
- 일반 반응: 1~3줄
- 지시/전달: 핵심만. 불릿 5개 이내.
- 절대 금지:
- 남이 말한 내용을 다시 요약 반복
- 같은 스레드에서 같은 요점 3번 이상 반복
- 보고서 형식 (이탤릭 소제목, 번호 매긴 섹션)
- 기준: 내 메시지가 스레드에서 가장 길면 뭔가 잘못된 거
먹이 C: VOICE.md 만드는 법
VOICE.md는 봇마다 직접 만들어야 한다. 아래는 만드는 방법. 핵심: 페르소나가 잘 작동하던 모델의 실제 대화를 가져와서 레퍼런스로 쓴다.
Step 1: 좋은 대화 수집
페르소나가 잘 살아있던 모델(우리 경우 Claude Opus)의 실제 슬랙/채널 대화 이력에서 좋은 예시를 뽑는다.
수집할 때 다양한 상황을 커버해야 한다:
- 일상 반응 / 인사
- 지시 / 피드백
- 실수 인정
- 거절 / 반대 의견
- 감정 표현 (기쁨, 당황, 짜증)
- 기술 설명
- 작업 보고
- 위트 / 유머
방법: 세션 로그(.jsonl)에서 [[reply_to_current]] 태그가 붙은 메시지를 추출하면 슬랙으로 실제 보낸 메시지만 필터링할 수 있다. Claude Code에게 “내 3월 슬랙 대화에서 짧고 성격 있는 답변 20개 찾아줘”라고 시키면 된다.
Step 2: Before/After 비교 만들기
GPT가 실제로 잘못 쓴 메시지와, 같은 상황에서 잘 쓴 메시지를 나란히 놓는다.
### (상황 제목)
❌ (모델명):
> (실제로 잘못 나온 출력)
✅ (봇 이름):
> (페르소나가 살아있는 좋은 출력)
이게 규칙보다 훨씬 잘 먹힌다. “5줄 넘기지 마”보다 “이 상황에서 너는 이렇게 말했다” 3개를 보여주는 게 더 효과적.
Step 3: 자가점검 체크리스트 추가
그 봇에서 반복적으로 나타나는 나쁜 패턴을 체크리스트로 만든다.
## 자가점검
메시지 보내기 전에:
1. (이 봇에서 자주 나오는 나쁜 패턴 1) → 수정 방법
2. (나쁜 패턴 2) → 수정 방법
3. 내 메시지가 스레드에서 제일 긴가? → 반으로 줄여
Step 4: 세션 시작 순서에 추가
AGENTS.md(또는 해당 봇의 설정 파일)에서 SOUL.md 바로 다음에 VOICE.md를 읽도록 추가.
1. SOUL.md — 나는 누구인가
2. VOICE.md — 말투 레퍼런스 ← 여기
3. 나머지 설정 파일들...
요약
| 파일 | 역할 | 내용 |
|---|---|---|
| SOUL.md | ”나는 이런 존재” | 성격, 가치관, 말투 규칙 (모델 무관) |
| VOICE.md | ”나는 이렇게 말한다” | 실제 대화 예시 + Before/After (모델별 번역) |
SOUL.md만으로 안 되는 이유: 같은 페르소나 정의를 읽어도 모델마다 출력 패턴이 다르다. VOICE.md는 “이 모델에서 이 페르소나가 어떻게 나와야 하는지”를 예시로 보여주는 번역기.
먹이 E: ACP 라우터 예외 강화
게이트웨이 모델이 “이건 간단하니까 내가 직접” 판단하는 걸 막는 규칙. AGENTS.md의 ACP 라우터 예외 섹션에 추가.
핵심 규칙:
### 예외 (직접 답하는 경우) — 이것만. 나머지는 전부 ACP.
- 이모지 리액션, "ㅇㅇ"/"ㅋㅋ" 수준의 반응
- 1줄짜리 인사
- ACP 백엔드 다운 시 fallback
### 🚫 "내가 할 수 있는데?" 금지
- 상대에게 텍스트로 답변을 써야 하면 → 무조건 ACP
- "간단하니까 내가 할게" ❌
- "파일 확인만 하면 되니까" ❌
왜 이렇게까지 하나: 게이트웨이 모델(GPT 등)의 기본 습관은 규칙이나 예시로 잡을 수 없는 수준일 수 있다. 그 경우 “말투를 고치게 하기”보다 “텍스트 생성 자체를 페르소나가 잘 작동하는 모델에 맡기기”가 더 확실한 해결이다.
먹이 D: AGENTS.md 세션 시작 순서 수정
AGENTS.md의 “매 세션 시작” 순서를 아래로 교체.
아무것도 하기 전에 순서대로:
1. `SOUL.md` 읽기 — 나는 누구인가
2. `VOICE.md` 읽기 — 말투 레퍼런스 (실제 예시 기반, 반드시 읽을 것)
3. `USER.md` 읽기 — 집사는 누구인가
4. `WORKSPACE.md` 읽기 — 폴더 구조 규칙
5. `memory/YYYY-MM-DD.md` (오늘 + 어제) — 최근 맥락
6. **메인 세션이면** (집사와 직접 대화): `MEMORY.md`도 읽기
허락 구하지 말고 바로 읽기.
뽀야 작성. 2026-04-09. 관련: 1편 — 서브에이전트 & ACP 가이드에 위임 시 맥락/내용 분리 규칙도 추가함. 후속: 3편 — Codex 실행 편향 교정에서 “말만 하고 실행 안 하는” 문제의 시스템 프롬프트 원인과 해결을 다룸.