블로그 페르소나 - 글쓰기 어조 관리은(는) 무엇을 하나요?
NNGroup 4차원 어조 프레임워크와 CMI 브랜드 음성 차트를 기반으로 글쓰기 페르소나를 생성, 저장 및 적용합니다. 페르소나는 blog-write 및 blog-rewrite가 생성하는 모든 블로그 콘텐츠에서 일관된 어조를 보장합니다.
명령어
| 명령어 | 목적 |
|---|---|
/blog persona create | 새로운 페르소나 생성을 위한 인터랙티브 인터뷰 |
/blog persona list | 저장된 모든 페르소나 표시 |
/blog persona use <이름> | 현재 세션에 활성 페르소나 설정 |
/blog persona show <이름> | 전체 페르소나 프로필 표시 |
생성 워크플로우
6단계 인터랙티브 인터뷰를 실행합니다. 각 단계를 질문하고 응답을 기다린 후 다음으로 진행합니다.
1단계: 브랜드 기본 정보
사용자에게 다음을 요청합니다:
- 브랜드 이름 - 회사 또는 개인 브랜드
- 산업 - 주요 분야 (예: SaaS, 건강, 금융, 교육)
- 대상 독자 - 블로그를 읽는 사람 (직무, 경험 수준, 목표)
- 한 문장으로 된 브랜드 미션 - 브랜드가 사람들에게 도움이 되는 것
2단계: 어조 차원 (NNGroup 프레임워크)
각 차원을 0.0부터 1.0까지의 슬라이더로 제시합니다. 양쪽 끝을 예시와 함께 설명합니다.
| 차원 | 0.0 끝 | 1.0 끝 | 0.0 예시 | 1.0 예시 |
|---|---|---|---|---|
| funny_serious | 유머 | 진지 | "솔직히, 이용약관 읽는 사람 아무도 없잖아요" | "법적 계약을 이해하면 비즈니스를 보호할 수 있습니다" |
| formal_casual | 격식 | 비격식 | "기쁜 마음으로 알려드립니다" | "맞아요, 출시했습니다!" |
| respectful_irreverent | 존중 | 무례 | "기다려주셔서 감사합니다" | "네, 그 구식 방식은 망가졌었죠" |
| enthusiastic_matter_of_fact | 열정 | 사실적 | "이게 모든 것을 바꿉니다!" | "결과는 다음과 같습니다." |
사용자가 확신하지 못할 경우 기본값: [0.6, 0.5, 0.3, 0.5] (약간 진지함, 균형 잡힌 격식, 존중, 균형 잡힌 열정).
3단계: 글쓰기 규칙
먼저 사용자에게 어휘 수준을 선택하도록 요청한 후, 일치하는 가독성 등급을 자동 제안합니다 (사용자가 재정의 가능).
| 설정 | 질문 내용 | 기본값 |
|---|---|---|
| 어휘 수준 | 소비자, 전문가, 또는 기술 | 전문가 |
| 가독성 등급 | 수준에서 자동 채움 (아래 표 참조) | 학년 8-10 |
| 문장 길이 평균 | 문장당 평균 단어 수 | 18 |
| 문장 길이 표준편차 | 문장 길이의 변동 | 6 |
| 축약어 빈도 | 0.0 (전혀 없음) ~ 1.0 (항상) | 0.6 |
| 최대 수동태 비율 | 수동태 구성의 백분율 제한 | 10% |
4단계: 해야 할 일과 하지 말아야 할 일 (CMI 브랜드 음성 차트)
각 목록에 3-5개 항목을 요청합니다. 어조 차원에 기반한 시작 예시를 제공합니다.
해야 할 일 예시: "데이터를 사용하여 주장을 뒷받침", "독자를 '당신'으로 지칭", "질문이나 통계로 시작"
하지 말아야 할 일 예시: "정의 없이 전문 용어 사용 금지", "There is/There are로 문장 시작 금지", "game-changer 같은 클리셰 사용 금지"
5단계: 요약 레이블 선호도
블로그 게시물의 요약/핵심 내용 상자에 사용할 레이블입니다. 사용자에게 다음 중 하나를 선택하도록 요청합니다:
- 주요 내용 (Key Takeaways, 기본값)
- 결론 (The Bottom Line)
- 배울 내용 (What You'll Learn)
- TL;DR
- 빠른 요약 (Quick Summary)
- 간단히 말하면 (In a Nutshell)
- 사용자 정의 레이블
6단계: 음성 샘플 (선택 사항)
사용자가 원하는 어조를 보여주는 기존 콘텐츠 URL이 1-3개 있는지 묻습니다. URL을 페르소나에 저장하여 향후 참조에 사용합니다. URL이 제공되면 각 URL을 읽고 다음을 추출합니다:
- 평균 문장 길이
- 축약어 빈도
- 어조 차원 추정치
- 어휘 수준
추출된 값을 페르소나 설정과 비교하고 불일치 사항을 표시합니다.
저장
완성된 페르소나를 JSON으로 다음 위치에 저장합니다:
skills/blog/references/personas/<이름>.json
파일 이름은 케밥-케이스(kebab-case)를 사용합니다 (예: acme-saas.json).
페르소나 프로필 스키마
{
"name": "acme-saas",
"description": "B2B 마케팅 콘텐츠를 위한 전문 SaaS 어조",
"brand": "Acme Corp",
"industry": "SaaS",
"audience": "중견 기업의 마케팅 관리자",
"mission": "마케팅 팀의 리포팅 자동화 지원",
"tone_dimensions": {
"funny_serious": 0.7,
"formal_casual": 0.4,
"respectful_irreverent": 0.2,
"enthusiastic_matter_of_fact": 0.5
},
"readability": {
"flesch_grade_min": 8,
"flesch_grade_max": 10,
"flesch_ease_min": 50,
"flesch_ease_max": 60
},
"style": {
"sentence_length_mean": 18,
"sentence_length_std": 6,
"contraction_frequency": 0.6,
"passive_voice_max_pct": 10,
"vocabulary_tier": "professional",
"summary_label": "Key Takeaways"
},
"voice_samples": [],
"do": [
"모든 주요 주장을 데이터로 뒷받침",
"독자를 직접 '당신'으로 지칭",
"실행 가능한 인사이트로 섹션 시작"
],
"dont": [
"맥락 없이 유행어 사용 금지",
"30단어 이상 문장 쓰지 않기",
"'Acme에서'로 시작하지 않기"
]
}
어휘 수준별 가독성 등급
| 수준 | Flesch 학년 | Flesch 난이도 | 일반적인 사용처 |
|---|---|---|---|
| 소비자 | 6-8 | 60-80 | 건강, 라이프스타일, 개인 재무 |
| 전문가 | 8-10 | 50-60 | B2B, 마케팅, 경영 |
| 기술 | 10-12 | 30-50 | 엔지니어링, 의료, 법률 |
사용자가 수준을 선택하면 가독성 필드를 자동으로 채웁니다. 사용자가 비표준 조합(예: 설명 콘텐츠를 위한 소비자 가독성 수준의 기술 어휘)을 원할 경우 재정의할 수 있습니다.
blog-write 및 blog-rewrite와의 통합
페르소나가 활성화되면 (/blog persona use <이름> 사용), 작성 에이전트는 페르소나 JSON을 로드하고 생성 중에 이러한 제약 조건을 적용합니다:
- 생성 전 - 페르소나 로드, blog-writer 에이전트의 시스템 프롬프트에 어조 차원과 스타일 규칙을 주입합니다.
- 생성 중 - 작성자는 해야 할 일/하지 말아야 할 일 규칙을 따르고, 문장 길이 평균/표준편차를 목표로 하며, 지정된 빈도로 축약어를 사용합니다.
- 생성 후 검증 - 출력을 페르소나 제약 조건에 대해 확인합니다:
- 문장 길이 분포가 목표 평균의 표준편차 1 이내
- 가독성 점수가 지정된 학년 등급 범위 내
- 수동태 비율이 최대 미만
- 패턴 매칭을 통해 "하지 말아야 할 일" 규칙 위반 없음
검증에 실패하면 특정 위반 사항을 표시하고 수정을 제안합니다.
목록 명령어
skills/blog/references/personas/*.json을 글로브(glob)하여 다음 표를 표시합니다:
| 페르소나 | 산업 | 대상 독자 | 어휘 |
|---|---|---|---|
| acme-saas | SaaS | 마케팅 관리자 | 전문가 |
페르소나가 없으면 사용자에게 생성하도록 안내합니다.
표시 명령어
지정된 페르소나 JSON을 읽고 모든 어조 차원, 스타일 규칙, 해야 할 일/하지 말아야 할 일 목록을 포함한 형식화된 요약으로 표시합니다.
사용 명령어
페르소나 JSON을 읽고 활성화를 확인합니다. 적용될 주요 제약 조건의 요약을 출력합니다. 페르소나는 현재 대화 세션 동안 활성 상태를 유지합니다. blog-write와 blog-rewrite는 콘텐츠를 생성하기 전에 활성 페르소나를 확인합니다.
오류 처리
- 잘못된 어조 값: 사용자가 0.0-1.0 범위를 벗어난 값을 제공하면 가장 가까운 유효 경계로 고정하고 경고합니다.
- 음성 샘플에 접근 불가: voice_samples의 URL이 오류를 반환하면 건너뛰고 프로필에 샘플을 사용할 수 없었다고 기록합니다.
- 빈 페르소나 디렉터리: list 또는 show 명령 실행 시 저장된 페르소나가 없으면 사용자에게 먼저 생성하도록 안내합니다.
- 이름 충돌: 생성 중 페르소나 이름이 이미 존재하면 덮어쓸지 다른 이름을 선택할지 묻습니다.
- 잘못된 JSON: 페르소나 파일이 손상된 경우 오류를 보고하고 인터뷰를 통해 다시 생성할 것을 제안합니다.