diff --git "a/app.py" "b/app.py" new file mode 100644--- /dev/null +++ "b/app.py" @@ -0,0 +1,2098 @@ +# ========================================================= +# DSCR 프롬프트 코칭 시스템 (Complete Learning Edition) +# 허깅페이스 배포용 app.py +# ========================================================= + +import gradio as gr +import re +from typing import List + +# ========================================================= +# 2. 확장된 데이터 구조 (모든 누락 항목 추가) +# ========================================================= + +ALL_TECHS = [ + "Persona Prompting","Few-shot Prompting","Self-consistency Prompting","Output Formatting", + "Chain-of-Thought (CoT)","Constrained Prompting","RAG Prompting","Step-back Prompting","Role Prompting", +] + +# 확장된 기술 설명 +TECH_DETAILED = { + "Persona Prompting": { + "desc": "대상 역할/세그먼트의 언어·KPI·관심사와 메시지를 정렬해 반응률·공감도를 높이는 기술", + "purpose": "누구에게 말하는지 분명히 해 가치가 '그들의 언어'로 전달되게 함", + "when_to_use": "타겟 오디언스가 명확하고, 그들만의 고유한 관심사나 업무 용어가 있을 때", + "mechanics": [ + "역할/권한/관심 KPI 명시 (예: Sales Leader = 파이프라인·승률·리드타임)", + "톤/금칙어/선호 표현 정의 (직설·간결·숫자/ROI 중심, 모호어 금지)", + "페르소나별 문장 매핑 (문제→가치→증거→CTA 흐름)" + ], + "real_example": """ +**Before (일반적)**: "저희 솔루션을 소개하고 싶습니다" +**After (CEO 페르소나)**: "이번 분기 운영비 15% 절감으로 EBITDA 개선에 기여할 방안을 제안드립니다" +**After (개발자 페르소나)**: "API 응답시간 40% 단축과 에러율 0.1% 달성한 아키텍처를 공유드립니다" + """, + "tips": "페르소나 조사 시 LinkedIn, 업계 리포트, 고객 인터뷰를 활용해 실제 사용 언어를 파악하세요", + "avoid": "가정에 의존한 페르소나 설정, 과도한 일반화, 업계 트렌드 무시" + }, + "Few-shot Prompting": { + "desc": "소수의 고성과 예시를 제공해 톤·구조·리듬을 모사하는 기술", + "purpose": "검증된 패턴 복제로 일관성 확보 및 품질 편차 최소화", + "when_to_use": "특정 스타일이나 형식을 정확히 따라야 할 때, 브랜드 톤 일관성이 중요할 때", + "mechanics": [ + "고성과 샘플 2~3개를 헤드라인/오프닝/근거/CTA 패턴으로 제공", + "구조적 요소별 예시 (제목 스타일, 문장 길이, 어조 등)", + "'이 톤을 모사해 3개 변형' 같은 다변량 후보 생성" + ], + "real_example": """ +**제공 예시**: +[예시 1] "Re: Q3 매출 18% 증가 달성 방법 - 15분 논의 가능할까요?" +[예시 2] "참고: 유사 업계 ROI 240% 사례 - 간단한 질문 있습니다" + +**AI 생성 결과**: +"Re: 연말 목표 달성률 95% 전략 - 10분 상담 요청드립니다" + """, + "tips": "업계 최고 성과 콘텐츠를 수집하고, A/B 테스트 승리 버전을 예시로 활용하세요", + "avoid": "예시가 너무 많아 혼란 야기, 맥락이 다른 예시 혼용, 오래된 예시 사용" + }, + "Self-consistency Prompting": { + "desc": "여러 후보안 생성 후 자체 채점으로 최적안을 선택하는 기술", + "purpose": "A/B 테스트를 내장하여 품질 향상 및 최적 선택지 도출", + "when_to_use": "중요한 커뮤니케이션에서 최고 품질이 필요할 때, 객관적 평가가 어려울 때", + "mechanics": [ + "제목 5개·바디 3개·CTA 3개 등 다변량 생성", + "체크리스트 기반 채점 (개인화/명료성/가치/스팸 회피/CTA 강도)", + "점수 매기기 → Top 1~2안 선택" + ], + "real_example": """ +**생성된 제목 후보들**: +1. "매출 증대를 위한 새로운 기회" (점수: 6/10) +2. "이번 달 파이프라인 25% 확대 방법" (점수: 9/10) ✓ +3. "혁신적인 비즈니스 솔루션 제안" (점수: 4/10) + +**채점 기준**: 구체성(3점) + 긴급성(2점) + 가치 명확성(3점) + 클릭 유도(2점) + """, + "tips": "명확한 채점 기준표를 만들고, 타겟 오디언스 관점에서 평가하세요", + "avoid": "주관적 채점 기준, 너무 많은 후보안으로 인한 혼란, 일관성 없는 평가" + }, + "Output Formatting": { + "desc": "산출물의 형식/섹션/필드를 고정하여 속도·가독성·재사용성을 확보하는 기술", + "purpose": "승인 루프 단축, 표준화를 통한 효율성 극대화", + "when_to_use": "반복적인 문서 작업, 팀 협업, 승인 프로세스가 복잡할 때", + "mechanics": [ + "유형별 템플릿 강제 (이메일/카피/보고서/PRD/API 문서)", + "필수·선택 필드 명시 및 길이 제��", + "JSON 스키마나 마크다운 구조 활용" + ], + "real_example": """ +**이메일 포맷**: +- 제목: [긴급도][카테고리] 핵심 메시지 (30자 이내) +- 오프닝: 상대방 성과/관심사 언급 (1문장) +- 가치제안: 구체적 혜택 (2-3문장) +- 증거: 데이터/사례 (1-2개) +- CTA: 명확한 다음 단계 (1문장) +- PS: 추가 가치/긴급성 (선택) + """, + "tips": "조직의 기존 템플릿을 분석하고, 가장 성과 좋은 형식을 표준화하세요", + "avoid": "과도한 제약으로 창의성 저해, 맥락을 무시한 획일적 적용" + }, + "Chain-of-Thought (CoT)": { + "desc": "목표→지표→대안→선택→실행의 단계적 추론으로 논리 비약을 최소화하는 기술", + "purpose": "분석/전략 문서의 논리 일관성 확보 및 의사결정 품질 향상", + "when_to_use": "복잡한 문제 분석, 전략 수립, 논리적 설득이 필요한 상황", + "mechanics": [ + "각 단계별 가정/근거/대안/리스크 체크 질문 부여", + "연역적/귀납적 추론 구조 명시", + "중간 결론과 최종 결론의 연결고리 확인" + ], + "real_example": """ +**단계별 추론 예시**: +1. **현황**: 고객 이탈률 15% (업계 평균 12%) +2. **원인 분석**: 온보딩 기간 평균 4주 (경쟁사 2주) +3. **가설**: 온보딩 기간 단축 → 이탈률 감소 +4. **검증**: A/B 테스트로 2주 온보딩 그룹의 이탈률 8% 확인 +5. **결론**: 온보딩 프로세스 개선으로 이탈률 50% 감소 가능 + """, + "tips": "각 단계에서 '왜?'라는 질문을 3번 이상 던지고, 반대 의견도 고려하세요", + "avoid": "논리적 비약, 확인 편향, 단순한 인과관계 가정" + }, + "Constrained Prompting": { + "desc": "길이·금칙어·필수필드·JSON 스키마 등 명확한 제약 조건을 설정하는 기술", + "purpose": "브랜드/법무/심의 리스크 최소화 및 일관성 보장", + "when_to_use": "규제 산업, 브랜드 가이드라인 준수, 대외 커뮤니케이션", + "mechanics": [ + "제목 ≤ 30자, 본문 ≤ 200단어 등 명확한 길이 제한", + "사용 금지 단어 리스트 제공", + "필수 포함 요소 체크리스트" + ], + "real_example": """ +**제약 조건 예시**: +- 길이: 제목 25자 이내, 본문 150단어 이내 +- 금지어: "보장", "확실한", "무조건", "최고의" +- 필수 포함: 회사명, 연락처, 법적 고지사항 +- 톤: 전문적이되 친근함, 과장 금지 + +**결과물 검증**: ✓ 길이 준수 ✓ 금지어 없음 ✓ 필수 요소 포함 + """, + "tips": "업계 규제 사항을 미리 조사하고, 과거 이슈 사례를 참고하여 제약 조건을 설정하세요", + "avoid": "과도한 제약으로 메시지 효과 저해, 불분명한 가이드라인" + }, + "RAG Prompting": { + "desc": "외부 보고서/DB/문서의 근거를 주입하여 최신성·신뢰성을 확보하는 기술", + "purpose": "추정/환각 방지, 출처 기반 서술로 신뢰도 향상", + "when_to_use": "최신 데이터가 중요한 상황, 정확성이 핵심인 보고서, 근거 기반 설득", + "mechanics": [ + "'문서에 없는 내용은 추정 금지, 출처 명시' 지시", + "인용/각주/링크 표기 의무화", + "여러 소스 간 일치성 검증" + ], + "real_example": """ +**참고 자료 주입**: +"다음 자료를 바탕으로 분석하세요: +- Gartner MQ 2024 (시장 현황) +- 회사 2024 Q3 실적 (내부 데이터) +- McKinsey Global Survey 2024 (트렌드) + +**결과물**: 모든 주장에 출처 표기 +"시장 성장률 23% (Gartner, 2024)" +"당사 점유율 15% 증가 (내부 실적, Q3)" + """, + "tips": "신뢰할 수 있는 1차 자료를 우선하고, 정보의 발행 날짜를 확인하세요", + "avoid": "출처 불분명한 정보 활용, 편향된 자료만 선택, 맥락 무시한 데이터 인용" + }, + "Step-back Prompting": { + "desc": "상위 목적/원칙에서 출발하여 의미 중심으로 재해석하는 기술", + "purpose": "'왜 중요한가'에 먼저 답해 경영 시사점 강화", + "when_to_use": "전략적 의사결정, 근본적 문제 해결, 조직 차원의 변화 관리", + "mechanics": [ + "상위 목표 → 핵심 원칙 → 현재 선택의 정합성 검증", + "5 Whys 기법으로 근본 원인 탐구", + "비즈니스 임팩트와 전략적 의미 연결" + ], + "real_example": """ +**Step-back 사고 과정**: +표면적 문제: "마케팅 비용이 너무 높다" +↓ +Step back: "왜 마케팅을 하는가?" → 고객 획득 +↓ +더 깊이: "왜 고객 획득이 중요한가?" → 성장 전략 +↓ +핵심 질문: "지속 ��능한 성장 방법은?" → 고객 생애가치 최적화 + """, + "tips": "문제의 증상이 아닌 근본 원인에 집중하고, 장기적 관점에서 접근하세요", + "avoid": "표면적 해결책에만 매몰, 현실성 없는 이상론, 과도한 추상화" + }, + "Role Prompting": { + "desc": "'당신은 PM/전략가/UX 라이터...'처럼 특정 관점을 고정하여 목적 적합성을 높이는 기술", + "purpose": "직무별 언어/판단 기준/우선순위 일치", + "when_to_use": "전문 분야별 결과물, 특정 직무의 관점이 필요한 상황", + "mechanics": [ + "역할별 KPI·권한·리스크 관점 명시", + "해당 직무의 전문 용어와 프레임워크 활용", + "역할별 의사결정 기준과 제약사항 반영" + ], + "real_example": """ +**PM 관점**: "사용자 스토리 형태로 요구사항을 정리하고, 우선순위는 비즈니스 가치와 개발 복잡도를 고려하여 설정하세요" + +**CFO 관점**: "ROI, EBITDA 영향, 현금흐름 관점에서 분석하고, 재무 리스크를 수치로 정량화하세요" + +**UX 디자이너 관점**: "사용자 여정과 접점별 페인포인트를 식별하고, 사용성 테스트 기준을 제시하세요" + """, + "tips": "각 역할의 실제 업무 방식과 고민을 깊이 이해하고, 해당 직무의 전문가와 검증하세요", + "avoid": "표면적 역할 이해, 직무별 차이 무시, 고정관념에 의존한 역할 설정" + } +} + +# 완전한 Pain Points 설명 +PAIN_DETAILED = { + "반응률 저조": { + "definition": "이메일 개봉률, 클릭률, 응답률이 업계 평균이나 목표치보다 현저히 낮은 상황", + "symptoms": [ + "이메일 개봉률 15% 미만 (B2B 평균 21%)", + "클릭률 2% 미만 (업계 평균 3-4%)", + "콜드 아웃리치 응답률 1% 미만", + "소셜미디어 참여도 지속적 하락" + ], + "root_causes": [ + "타겟 오디언스 불일치", + "제목/헤드라인의 매력도 부족", + "가치 제안의 모호함", + "타이밍과 채널 전략 오류" + ], + "business_impact": "고객 획득 비용 증가, 매출 목표 달성 어려움, 마케팅 ROI 하락", + "real_examples": [ + "SaaS 회사: 기능 중심 메시지 → ROI 중심으로 변경 후 응답률 3배 증가", + "컨설팅 펌: 일반적 제안 → 업계별 맞춤 사례로 개봉률 40% 개선" + ], + "measurement": "Google Analytics, 이메일 마케팅 툴, CRM 데이터로 추적" + }, + "메시지 불일치": { + "definition": "채널, 팀, 시점별로 브랜드 메시지나 톤이 일관되지 않아 브랜드 신뢰도가 저하되는 상황", + "symptoms": [ + "채널별 다른 톤앤매너 (이메일은 격식, SNS는 캐주얼)", + "팀별 상이한 가치 제안 설명", + "시기별 메시지 변화로 혼란 야기", + "브랜드 가이드라인 무시" + ], + "root_causes": [ + "명확한 브랜드 가이드라인 부재", + "팀 간 소통 부족", + "콘텐츠 검토 프로세스 미비", + "외부 에이전시와의 조율 부족" + ], + "business_impact": "브랜드 인지도 혼란, 고객 신뢰도 하락, 마케팅 효율성 저하", + "real_examples": [ + "스타트업: 창업자와 마케팅팀의 다른 메시지로 고객 혼란 → 통합 메시지 하우스 구축", + "글로벌 기업: 지역별 다른 포지셔닝 → 글로벌 브랜드 가이드라인 수립" + ], + "measurement": "브랜드 추적 조사, 소셜 미디어 멘션 분석, 고객 피드백 분석" + }, + "작성 시간 과다": { + "definition": "콘텐츠나 문서 작성에 과도한 시간이 소요되어 다른 업무에 지장을 주는 상황", + "symptoms": [ + "이메일 하나 작성에 30분 이상 소요", + "보고서 작성으로 인한 야근 빈번", + "콘텐츠 승인 과정에서 무한 수정", + "창의적 아이디어 부족으로 고민 시간 증가" + ], + "root_causes": [ + "템플릿이나 가이드라인 부재", + "명확한 목표 설정 부족", + "완벽주의 성향", + "피드백 루프의 비효율성" + ], + "business_impact": "생산성 저하, 기회비용 증가, 직원 스트레스 증가, 프로젝트 지연", + "real_examples": [ + "마케팅팀: 이메일 템플릿 도입으로 작성 시간 70% 단축", + "세일즈팀: 영업 제안서 자동화로 하루 3시간 절약" + ], + "measurement": "작업 시간 추적, 생산성 지표, 직원 만족도 조사" + }, + "A/B 테스트 부담": { + "definition": "A/B 테스트 설계, 실행, 분석에 과도한 리소스가 투입되어 부담이 되는 상황", + "symptoms": [ + "테스트 설계에 일주일 이상 소요", + "통계적 유의성 확보를 위한 긴 테스트 기간", + "결과 분석의 복잡성", + "테스트 버전 관리의 어려움" + ], + "root_causes": [ + "테스트 도구 부족 또는 복잡성", + "통계 지식 부족", + "명확한 가설 설정 실패", + "표본 크기 부족" + ], + "business_impact": "의사결정 지연, 테스트 비용 증가, 기회비용 발생", + "real_examples": [ + "이커머스: 자동화 도구 도입으로 테스트 설정 시간 80% 단축", + "SaaS: 간단한 A/B 테스트로 전환율 25% 개선" + ], + "measurement": "테스트 완료율, 평균 테스트 기간, 테스트 ROI" + }, + "경쟁사 정보 부족": { + "definition": "경쟁사의 전략, 제품, 가격 등에 대한 정보 부족으로 전략 수립에 어려움을 겪는 상황", + "symptoms": [ + "경쟁사 가격 정책 파악 불가", + "경쟁사 신제품 출시 후 뒤늦은 대응", + "시장 포지셔닝 전략 부재", + "고객 이탈 원인 분석 부족" + ], + "root_causes": [ + "체계적인 모니터링 체계 부재", + "정보 수집 리소스 부족", + "경쟁 분석 전문성 부족", + "정보 공유 시스템 미비" + ], + "business_impact": "시장 기회 상실, 경쟁력 약화, 고객 이탈 증가", + "real_examples": [ + "핀테크: 경쟁사 모니터링 도구 도입으로 신속한 시장 대응", + "리테일: 가격 비교 시스템으로 동적 가격 전략 수립" + ], + "measurement": "시장 점유율, 경쟁사 대비 성과 지표, 고객 만족도 비교" + }, + "고객 요구 불명확": { + "definition": "고객의 실제 니즈와 기대사항을 정확히 파악하지 못해 제품/서비스 개선 방향을 설정하기 어려운 상황", + "symptoms": [ + "고객 이탈 원인 불명", + "신기능 출시 후 사용률 저조", + "고객 지원 문의 증가", + "고객 만족도 점수 정체" + ], + "root_causes": [ + "체계적인 고객 조사 부재", + "고객 세분화 부족", + "피드백 수집 채널 한계", + "데이터 분석 역량 부족" + ], + "business_impact": "제품 개발 방향성 오류, 고객 이탈 증가, R&D 투자 효율성 저하", + "real_examples": [ + "B2B SaaS: 고객 인터뷰를 통해 핵심 기능 우선순위 재정립", + "이커머스: 사용자 행동 분석으로 개인화 추천 시스템 개선" + ], + "measurement": "고객 만족도, Net Promoter Score, 고객 생애가치" + }, + "출처/기간 누락": { + "definition": "리서치나 분석 문서에서 데이터 출처와 수집 기간이 명확하지 않아 신뢰성이 떨어지는 상황", + "symptoms": [ + "보고서에 '최근 조사에 따르면'과 같은 모호한 표현", + "데이터 출처 미표기로 신뢰성 의심", + "과거 데이터와 최신 데이터 혼재", + "정보의 유효기간 불분명" + ], + "root_causes": [ + "체계적인 자료 관리 부재", + "출처 표기 가이드라인 미비", + "시간에 따른 데이터 변화 간과", + "검증되지 않은 2차 자료 의존" + ], + "business_impact": "의사결정 오류, 신뢰도 하락, 법적 리스크 증가", + "real_examples": [ + "컨설팅 회사: 출처 표기 표준화로 클라이언트 신뢰도 30% 향상", + "투자 회사: 데이터 검증 프로세스 도입으로 투자 의사결정 정확도 개선" + ], + "measurement": "자료 검증률, 고객 신뢰도 조사, 의사결정 정확도" + }, + "리서치 작성 부담": { + "definition": "시장 조사나 분석 보고서 작성에 과도한 시간과 노력이 투입되는 상황", + "symptoms": [ + "단일 보고서 작성에 2주 이상 소요", + "데이터 수집과 분석의 중복 작업", + "형식 통일과 품질 관리의 어려움", + "리서치 결과의 재활용성 부족" + ], + "root_causes": [ + "효율적인 리서치 프로세스 부재", + "분석 툴과 템플릿 미비", + "팀 내 역할 분담 불명확", + "과거 자료 재활용 시스템 부족" + ], + "business_impact": "리서치 비용 증가, 의사결정 지연, 기회비용 발생", + "real_examples": [ + "전략 컨설팅: 리서치 템플릿 표준화로 작성 시간 50% 단축", + "스타트업: 자동화된 시장 분석 도구 도입으로 주간 리포트 체계 구축" + ], + "measurement": "리서치 완료 시간, 비용 대비 효과, 재활용률" + }, + "요구사항 언어화 난항": { + "definition": "제품 개발에 필요한 요구사항을 명확하고 구체적인 언어로 표현하기 어려운 상황", + "symptoms": [ + "모호하고 추상적인 요구사항 문서", + "개발팀과 기획팀 간 이해 격차", + "요구사항 변경으로 인한 잦은 재작업", + "검수 기준의 불명확성" + ], + "root_causes": [ + "도메인 지식과 기술 이해 부족", + "체계적인 요구사항 정의 방법론 부재", + "이해관계자 간 소통 부족", + "사용자 관점의 검증 프로세스 미비" + ], + "business_impact": "개발 지연, 예산 초과, 최종 제품 품질 저하", + "real_examples": [ + "핀테크: 사용자 스토리 방식 도입으로 요구사항 명확성 80% 개선", + "이커머스: 프로토타입 기반 요구사항 검증으로 개발 재작업 60% 감소" + ], + "measurement": "요구사항 변경률, 개발 완료율, 사용자 만족도" + }, + "UX 카피 불일치": { + "definition": "사용자 인터페이스 내 텍스트가 일관되지 않아 사용자 경험이 혼란스러운 상황", + "symptoms": [ + "같은 기능에 대한 서로 다른 용어 사용", + "페이지별 톤앤매너 차이", + "에러 메시지의 일관성 부족", + "브랜드 보이스와 UX 카피 불일치" + ], + "root_causes": [ + "UX 라이팅 가이드라인 부재", + "디자이너와 카피라이터 간 협업 부족", + "용어집(Glossary) 미정립", + "다국어 번역에서의 일관성 관리 미흡" + ], + "business_impact": "사용자 혼란 증가, 이탈률 상승, 브랜드 신뢰도 하락", + "real_examples": [ + "SaaS 플랫폼: UX 라이팅 시스템 구축으로 사용자 완료율 25% 향상", + "모바일 앱: 일관된 용어 체계 도입으로 고객 지원 문의 40% 감소" + ], + "measurement": "사용자 완료율, 이탈률, 고객 지원 문의 빈도" + }, + "의사결정 기준 불명확": { + "definition": "제품이나 기능 개발 시 우선순위나 방향성 결정 기준이 애매하여 효율적인 의사결정이 어려운 상황", + "symptoms": [ + "기능 우선순위 설정의 주관성", + "이해관계자별 상이한 판단 기준", + "데이터 기반 의사결정 체계 부재", + "의사결정 지연과 반복적 논의" + ], + "root_causes": [ + "명확한 제품 전략과 목표 부재", + "정량적 평가 지표 미설정", + "의사결정 프로세스 표준화 부족", + "역할과 권한의 모호함" + ], + "business_impact": "개발 효율성 저하, 기회비용 증가, 팀 내 갈등", + "real_examples": [ + "스타트업: RICE 프레임워크 도입으로 의사결정 시간 70% 단축", + "대기업: OKR 기반 우선순위 설정으로 제품 개발 효율성 향상" + ], + "measurement": "의사결정 소요 시간, 기능 개발 완료율, 팀 만족도" + } +} + +# 완전한 Output 설명 +OUTPUT_DETAILED = { + "콜드메일": { + "definition": "이전 접점이 없는 잠재 고객에게 비즈니스 목적으로 발송하는 첫 연락 이메일", + "purpose": "신규 고객 발굴, 비즈니스 관계 구축, 세일즈 파이프라인 확장", + "key_components": [ + "매력적인 제목줄 (개봉률 결정)", + "개인화된 오프닝 (연결점 구축)", + "명확한 가치 제안 (관심 유발)", + "구체적인 CTA (다음 단계 유도)" + ], + "success_metrics": [ + "개봉률: 20-30% (B2B 기준)", + "응답률: 5-10%", + "미팅 전환율: 1-3%", + "스팸 신고율: 1% 미만" + ], + "best_practices": [ + "발송 전 타겟 리서치 필수", + "3-5개 이메일 시퀀스 설계", + "A/B 테스트로 지속 최적화", + "법적 규제 (GDPR, CAN-SPAM) 준수" + ], + "common_mistakes": [ + "과도한 자기소개", + "모호한 가치 제안", + "너무 긴 내용", + "일방적인 판매 메시지" + ], + "real_examples": """ +**IT 컨설팅 → CFO**: +제목: Re: Q4 IT 예산 20% 절감 사례 - 15분 논의 가능할까요? + +안녕하세요 김CFO님, + +최근 [회사명]의 디지털 전환 투자 소식을 봤습니다. + +저희는 유사 규모 제조업체 3곳의 IT 운영비를 평균 23% 절감하며 +동시에 시스템 안정성을 99.9%로 향상시킨 경험이 있습니다. + +다음 주 화요일 오전 11시, 15분간 간단한 사례 공유가 가능할까요? + +[구체적 ROI 계산서 첨부] + """ + }, + "광고 카피": { + "definition": "유료 광고 매체를 통해 타겟 오디언스의 관심을 끌고 행동을 유도하는 짧고 강력한 메시지", + "purpose": "브랜드 인지도 제고, 트래픽 유도, 전환율 증대, 매출 증가", + "key_components": [ + "임팩트 있는 헤드라인 (주목 끌기)", + "감정적 연결고리 (공감대 형성)", + "명확한 혜택 (가치 전달)", + "강력한 CTA (행동 유도)" + ], + "platform_specific": { + "Google 검색광고": "키워드 연관성, 문자 수 제한 고려", + "Facebook/Instagram": "비주얼과 조화, 소셜 맥락 활용", + "LinkedIn": "전문적 톤, B2B 가치 제안 중심", + "YouTube": "스토리텔링, 감정적 어필" + }, + "success_metrics": [ + "CTR (클릭률): 2-5%", + "전환율: 1-3%", + "CPA (획득 비용): 목표 LTV 대비 1:3 이상", + "ROAS (광고 수익률): 4:1 이상" + ], + "real_examples": """ +**B2B SaaS - LinkedIn 광고**: +헤드라인: "엑셀로 2시간 걸리던 보고서, 이제 5분이면 끝" +바디: 300+ 기업이 선택한 자동 대시보드 +CTA: "무료 데모 신청하기" + +**이커머스 - Facebook 광고**: +헤드라인: "10만원으로 침실 완전 변신" +바디: 24시간 한정 특가 + 무료배송 +CTA: "지금 쇼핑하기" + """ + }, + "시장조사 보고서": { + "definition": "특정 시장의 규모, 성장률, 트렌드, 경쟁 구도 등을 체계적으로 분석한 문서", + "purpose": "전략적 의사결정 지원, 투자 유치, 신사업 기회 발굴, 리스크 평가", + "key_sections": [ + "Executive Summary (핵심 요약)", + "시장 정의 및 세분화", + "시장 규모 및 성장률 분석", + "경쟁 구도 및 주요 플레이어", + "트렌드 및 성장 동력", + "기회와 위험 요인", + "결론 및 권고사항" + ], + "methodology": [ + "Primary Research (설문, 인터뷰, FGD)", + "Secondary Research (공개 자료, 보고서)", + "데이터 분석 및 모델링", + "전문가 검증" + ], + "credibility_factors": [ + "데이터 출처의 신뢰성", + "분석 방법론의 타당성", + "객관적 시각 유지", + "한계점 명시" + ], + "real_examples": """ +**핀테크 페이먼트 시장 보고서**: + +Executive Summary: +- 국내 모바일 결제 시장 규모 85조원 (2024년) +- 연평균 성장률 15.3% (2020-2024) +- 주요 성장 동력: 비대면 결제 증가, 간편결제 확산 + +Key Findings: +- 20-30대가 전체 거래량의 67% 차지 +- O2O 서비스 연계 결제 급성장 (전년 대비 45% 증가) +- 보안 기술 발전이 시장 확장의 핵심 요인 + """ + }, + "PRD": { + "definition": "Product Requirements Document - 제품 개발의 목표, 기능, 요구사항을 상세히 정의한 문서", + "purpose": "개발팀 가이드, 이해관계자 정렬, 프로젝트 범위 정의, 성공 기준 수립", + "essential_sections": [ + "문제 정의 (Problem Statement)", + "목표 및 성공 지표 (Goals & Success Metrics)", + "사용자 스토리 (User Stories)", + "기능 요구사항 (Functional Requirements)", + "비기능 요구사항 (Non-functional Requirements)", + "제약사항 및 가정 (Constraints & Assumptions)", + "우선순위 (Prioritization)", + "타임라인 (Timeline)" + ], + "stakeholder_alignment": [ + "Engineering: 기술적 실현 가능성", + "Design: 사용자 경험 일관성", + "Business: 비즈니스 가치 연결", + "QA: 테스트 가능성" + ], + "success_criteria": [ + "명확성: 모호함 없는 요구사항", + "완전성: 누락된 요구사항 없음", + "실현가능성: 기술적 제약 고려", + "측정가능성: 정량적 성공 지표" + ], + "real_examples": """ +**모바일 앱 알림 기능 PRD**: + +Problem Statement: +사용자의 70%가 중요한 업데이트를 놓치고 있으며, 이로 인해 +사용자 참여도가 업계 평균 대비 30% 낮음 + +Success Metrics: +- 알림 열람률: 현재 15% → 목표 35% +- 7일 리텐션: 현재 45% → 목표 60% +- 사용자 만족도: 현재 3.2/5 → 목표 4.0/5 + +User Stories: +- 사용자로서, 내가 관심 있는 카테고리의 알림만 받고 싶다 +- 사용자로서, 알림을 받을 시간대를 설정하고 싶다 + """ + }, + "보도자료": { + "definition": "언론매체를 통해 기업의 뉴스나 정보를 공식적으로 발표하는 문서", + "purpose": "미디어 노출 확보, 브랜드 인지도 제고, 공식적 입장 전달, 위기 대응", + "key_components": [ + "뉴스가치 있는 헤드라인", + "5W1H 기반 리드 문단", + "배경 정보와 맥락", + "인용문 (경영진, 전문가)", + "회사 소개 (Boilerplate)", + "연락처 정보" + ], + "success_metrics": [ + "언론 보도율: 발송 대비 10-20%", + "주요 매체 픽업률", + "온라인 언급량 증가", + "웹사이트 트래픽 증가" + ], + "best_practices": [ + "기자 관점에서 뉴스가치 검토", + "간결하고 명확한 문체", + "사실 기반 정보 제공", + "적절한 발송 타이밍" + ], + "real_examples": """ +**스타트업 투자 유치 보도자료**: + +[헤드라인] ○○테크, 시리즈A 100억원 투자 유치… AI 헬스케어 사업 확장 + +[리드] 인공지능 기반 헬스케어 솔루션 전문기업 ○○테크(대표 김○○)가 +시리즈A 라운드에서 100억원 규모의 투자를 유치했다고 15일 발표했다. + +[본문] 이번 투자는 ○○○캐피털이 주도하고 ○○○벤처스, ○○○인베스트먼트가 +참여했다. 조달된 자금은 AI 진단 솔루션 고도화와 해외 진출에 사용될 예정이다. + """ + }, + "랜딩페이지 섹션": { + "definition": "특정 마케팅 캠페인의 목적에 맞춰 방문자를 전환시키기 위한 웹페이지의 구성 요소", + "purpose": "방문자 전환율 극대화, 명확한 행동 유도, 캠페인 ROI 향상", + "key_components": [ + "강력한 헤드라인과 서브헤드라인", + "명확한 가치 제안 (Value Proposition)", + "사회적 증명 (고객 후기, 로고)", + "혜택 중심의 기능 설명", + "강력한 CTA 버튼", + "신뢰 요소 (보안, 인증마크)" + ], + "conversion_optimization": [ + "단일 목표에 집중", + "산만한 요소 제거", + "모바일 최적화", + "로딩 속도 최적화", + "A/B 테스트 지속 실행" + ], + "success_metrics": [ + "전환율: 2-5% (업종별 차이)", + "이탈률: 70% 이하", + "페이지 체류시간: 2분 이상", + "CTA 클릭률: 5-15%" + ], + "real_examples": """ +**SaaS 무료체험 랜딩페이지**: + +[Hero Section] +헤드라인: "엑셀 대신 3분만에 완성하는 매출 대시보드" +서브헤드: "1,000+ 기업이 선택한 No-code 분석 툴" +CTA: "14일 무료로 시작하기" + +[Social Proof] +"매출 분석 시간이 80% 단축됐어요" - ○○기업 마케팅팀장 +삼성, LG, 현대 등 고객사 로고 + +[Features] +✓ 드래그&드랍으로 5분만에 대시보드 완성 +✓ 실시간 데이터 자동 업데이트 +✓ 20+ 채널 연동 지원 + """ + }, + "경쟁사 분석": { + "definition": "시장 내 주요 경쟁사의 전략, 제품, 성과를 체계적으로 분석한 보고서", + "purpose": "경쟁 우위 요소 식별, 시장 포지셔닝 전략 수립, 벤치마킹 기회 발굴", + "key_sections": [ + "경쟁사 개요 및 포지셔닝", + "제품/서비스 비교 분석", + "가격 정책 및 수익 모델", + "마케팅 전략 및 채널", + "강점과 약점 (SWOT)", + "시장 점유율 및 성과 지표", + "향후 전략 예측", + "우리의 대응 방안" + ], + "analysis_framework": [ + "직접 경쟁사 vs 간접 경쟁사", + "제품 기능 비교 매트릭스", + "가격-성능 포지셔닝 맵", + "고객 리뷰 감성 분석" + ], + "data_sources": [ + "공개 재무 정보", + "제품 웹사이트 및 앱", + "고객 리뷰 및 평점", + "소셜미디어 활동", + "채용 공고 분석", + "언론 보도 자료" + ], + "real_examples": """ +**클라우드 스토리지 경쟁 분석**: + +[Executive Summary] +Dropbox, Google Drive, OneDrive 3강 구도에서 +보안과 협업 기능이 차별화 포인트로 부상 + +[제품 비교] +- 저장 용량: Dropbox(2GB) < Google Drive(15GB) < OneDrive(5GB) +- 협업 기능: OneDrive > Google Drive > Dropbox +- 보안: Dropbox > OneDrive > Google Drive + +[가격 전략] +Dropbox: 프리미엄 전략 (월 $12) +Google: 통합 서비스 전략 (월 $6) +Microsoft: 번들링 전략 (Office 365 포함) + """ + }, + "페르소나": { + "definition": "실제 고객 데이터를 바탕으로 만든 가상의 대표 고객 프로필", + "purpose": "고객 중심 제품 개발, 마케팅 메시지 개인화, 팀 내 고객 이해 통일", + "key_components": [ + "인구통계학적 정보", + "행동 패턴 및 선호도", + "목표와 동기 (Goals & Motivations)", + "고충과 해결 과제 (Pain Points)", + "정보 습득 채널", + "구매 의사결정 프로세스", + "선호하는 커뮤니케이션 스타일" + ], + "creation_process": [ + "고객 인터뷰 및 설문 조사", + "사용자 행동 데이터 분석", + "고객 지원팀 인사이트 수집", + "세그멘테이션 및 클러스터링", + "페르소나 검증 및 업데이트" + ], + "validation_methods": [ + "실제 고객과의 검증 인터뷰", + "A/B 테스트를 통한 효과 측정", + "마케팅 캠페인 성과 분석", + "제품 사용 패턴 추적" + ], + "real_examples": """ +**SaaS 마케팅 툴 페르소나**: + +[Sarah, 마케팅 매니저, 32세] + +Demographics: +- 직급: 마케팅 매니저 (경력 5년) +- 회사: B2B SaaS (직원 50-200명) +- 연봉: 5,500만원 +- 거주지: 서울 강남 + +Goals: +- 마케팅 ROI 개선 (주요 KPI) +- 리드 품질 향상 +- 팀 생산성 증대 + +Pain Points: +- 분산된 마케팅 데이터 통합의 어려움 +- 실시간 성과 모니터링 불가 +- 보고서 작성에 소요되는 시간 + +Preferred Channels: +- LinkedIn (업계 트렌드) +- 이메일 뉴스레터 +- 웨비나 및 온라인 세미나 + """ + }, + "VOC 요약": { + "definition": "고객의 소리(Voice of Customer)를 수집하고 분석하여 핵심 인사이트를 요약한 보고서", + "purpose": "고객 만족도 개선, 제품 개발 방향 설정, 서비스 품질 향상", + "key_sections": [ + "조사 개요 및 방법론", + "주요 발견사항 (Key Findings)", + "고객 만족도 현황", + "주요 불만사항 및 개선 요청", + "긍정적 피드백 및 만족 요인", + "고객 세그먼트별 차이점", + "개선 우선순위 및 액션 플랜" + ], + "data_collection_methods": [ + "고객 만족도 설문조사", + "심층 인터뷰 (FGI)", + "고객 지원팀 티켓 분석", + "온라인 리뷰 및 소셜 미디어", + "사용자 행동 데이터" + ], + "analysis_techniques": [ + "텍스트 마이닝 및 감성 분석", + "테마별 키워드 클러스터링", + "만족도-중요도 매트릭스", + "고객 여정별 터치포인트 분석" + ], + "real_examples": """ +**이커머스 VOC 분석 요약**: + +[주요 발견사항] +- 전체 고객 만족도: 7.2/10 (목표 8.0) +- NPS(Net Promoter Score): +15 (업계 평균 +8) + +[Top 3 불만사항] +1. 배송 지연 (37% 언급) +2. 반품/교환 절차 복잡 (24%) +3. 고객센터 응답 지연 (19%) + +[Top 3 만족요인] +1. 상품 품질 (42% 언급) +2. 가격 경쟁력 (31%) +3. 웹사이트 사용 편의성 (28%) + +[즉시 개선 필요 영역] +우선순위 1: 배송 프로세스 개선 (만족도 영향 최대) +우선순위 2: 고객센터 응답시간 단축 + """ + }, + "유스케이스": { + "definition": "사용자가 시스템을 통해 달성하고자 하는 목표와 그 과정을 구체적으로 기술한 문서", + "purpose": "요구사항 명확화, 개발 가이드 제공, 테스트 시나리오 기반 제공", + "key_components": [ + "액터 (Actor) - 시스템 사용자", + "전제조건 (Preconditions)", + "주요 시나리오 (Main Flow)", + "대안 시나리오 (Alternative Flows)", + "예외 상황 (Exception Flows)", + "후조건 (Postconditions)", + "비즈니스 규칙" + ], + "writing_guidelines": [ + "사용자 관점에서 작성", + "구체적이고 측정 가능한 결과", + "기술적 세부사항보다 비즈니스 가치 중심", + "예외 상황까지 포괄적 커버" + ], + "validation_criteria": [ + "실제 사용자 시나리오와 일치", + "개발팀이 구현 가능", + "테스트 케이스 도출 가능", + "비즈니스 목표 달성에 기여" + ], + "real_examples": """ +**온라인 쇼핑몰 주문 유스케이스**: + +[UC-001: 상품 주문하기] + +Actor: 로그인한 고객 + +Preconditions: +- 고객이 회원 가입 및 로그인 완료 +- 장바구니에 1개 이상 상품 존재 + +Main Flow: +1. 고객이 장���구니 페이지에서 "주문하기" 클릭 +2. 시스템이 배송지 정보 입력 페이지 표시 +3. 고객이 배송지 정보 입력 및 확인 +4. 시스템이 결제 방법 선택 페이지 표시 +5. 고객이 결제 방법 선택 및 결제 정보 입력 +6. 시스템이 주문 정보 확인 페이지 표시 +7. 고객이 최종 주문 확인 +8. 시스템이 결제 처리 및 주문 완료 안내 + +Exception Flow: +- 3a. 배송 불가 지역인 경우 + 3a1. 시스템이 배송 불가 메시지 표시 + 3a2. UC 종료 + """ + }, + "UX 카피": { + "definition": "사용자 인터페이스에서 사용자 경험을 향상시키기 위한 모든 텍스트 요소", + "purpose": "사용자 이해도 증진, 행동 유도, 브랜드 톤 전달, 에러 상황 안내", + "key_components": [ + "내비게이션 및 메뉴 라벨", + "버튼 텍스트 및 CTA", + "안내 메시지 및 도움말", + "에러 및 성공 메시지", + "폼 라벨 및 플레이스홀더", + "툴팁 및 설명문" + ], + "writing_principles": [ + "명확성: 간단하고 이해하기 쉬운 언어", + "일관성: 동일한 기능에는 동일한 용어", + "도움이 되는 톤: 친근하되 전문적", + "실행 가능성: 사용자가 다음에 할 일 명확히 제시" + ], + "testing_methods": [ + "사용자 테스트 및 A/B 테스트", + "완료율 및 이탈률 분석", + "고객 지원팀 문의 빈도 추적", + "사용자 피드백 정성 분석" + ], + "real_examples": """ +**모바일 뱅킹 앱 UX 카피**: + +[Before - 애매한 표현] +- 버튼: "처리" +- 에러: "오류가 발생했습니다" +- 안내: "정보를 확인해주세요" + +[After - 명확한 UX 카피] +- 버튼: "이체하기" +- 에러: "비밀번호가 일치하지 않습니다. 다시 입력해주세요" +- 안내: "계좌번호 14자리를 정확히 입력해주세요" + +[톤앤매너 일관성] +- 성공: "이체가 완료되었습니다" +- 진행: "이체 중입니다. 잠시만 기다려주세요" +- 안내: "이체 한도는 일일 500만원입니다" + """ + }, + "릴리스 노트": { + "definition": "제품의 새로운 버전 출시 시 변경사항과 개선사항을 사용자에게 알리는 문서", + "purpose": "사용자 교육, 신기능 홍보, 투명한 커뮤니케이션, 사용자 만족도 향상", + "key_components": [ + "버전 정보 및 출시일", + "주요 신기능 소개", + "기존 기능 개선사항", + "버그 수정 내역", + "알려진 이슈 및 제한사항", + "업그레이드 가이드", + "지원 및 문의 정보" + ], + "writing_style": [ + "사용자 친화적 언어 사용", + "기술적 용어보다 혜택 중심 설명", + "시각적 요소 (스크린샷, GIF) 활용", + "감사 표현 및 긍정적 톤" + ], + "distribution_channels": [ + "앱 스토어 업데이트 설명", + "이메일 뉴스레터", + "인앱 알림 및 팝업", + "웹사이트 및 블로그", + "소셜 미디어" + ], + "real_examples": """ +**프로젝트 관리 툴 릴리스 노트 v2.4**: + +🎉 새로운 기능 +• **팀 대시보드**: 팀 전체 진행률을 한눈에 확인하세요 +• **자동 알림**: 마감일 3일 전 자동으로 알림을 받으세요 +• **템플릿 갤러리**: 업종별 프로젝트 템플릿 20개 추가 + +🔧 개선사항 +• 파일 업로드 속도 50% 향상 +• 모바일 앱 UI 개선으로 터치 반응성 증대 +• 검색 기능 정확도 개선 + +🐛 버그 수정 +• 댓글 알림이 오지 않던 문제 해결 +• 엑셀 파일 다운로드 오류 수정 + +💝 피드백을 보내주신 500+ 사용자분들께 감사드립니다! + """ + } +} + +# 완전한 User 설명 +USER_DETAILED = { + "세일즈": { + "definition": "제품이나 서비스를 잠재 고객에게 판매하는 역할을 담당하는 직무", + "primary_goals": [ + "매출 목표 달성", + "신규 고객 확보", + "기존 고객 관계 유지", + "파이프라인 관리" + ], + "key_metrics": [ + "매출 달성률 (%)", + "신규 고객 수", + "평균 딜 사이즈", + "세일즈 사이클", + "전환율 (Lead → Opportunity → Close)" + ], + "daily_challenges": [ + "리드 발굴 및 검증", + "고객 관계 구축", + "제안서 작성", + "협상 및 클로징", + "CRM 업데이트" + ], + "communication_style": [ + "결과 중심적 언어", + "숫자와 데이터 선호", + "신속한 의사결정 요구", + "구체적인 혜택 강조" + ], + "content_needs": [ + "고객 사례 연구", + "ROI 계산기", + "경쟁사 비교 자료", + "가격 정책 가이드", + "이메일 템플릿" + ], + "personas": { + "BDR (Business Development Rep)": "신규 리드 발굴 및 초기 접촉 전담", + "AE (Account Executive)": "기회 발굴부터 계약 체결까지 전체 세일즈 프로세스 담당", + "AM (Account Manager)": "기존 고객 관리 및 업셀/크로스셀 담당", + "Sales Leader": "팀 관리 및 전략 수립, 목표 설정" + } + }, + "마케팅팀": { + "definition": "브랜드 인지도 제고, 리드 생성, 고객 유치를 위한 마케팅 활동을 기획하고 실행하는 직무", + "primary_goals": [ + "브랜드 인지도 향상", + "양질의 리드 생성", + "고객 획득 비용 최적화", + "마케팅 ROI 극대화" + ], + "key_metrics": [ + "리드 생성 수 및 품질", + "CAC (Customer Acquisition Cost)", + "LTV (Customer Lifetime Value)", + "마케팅 ROI/ROAS", + "브랜드 인지도 지표" + ], + "specialized_roles": { + "퍼포먼스 마케팅": "유료 광고 운영 및 최적화, 데이터 기반 의사결정", + "콘텐츠 마케팅": "블로그, 영상, 소셜미디어 콘텐츠 기획 및 제작", + "브랜드 마케팅": "브랜드 아이덴티티 구축 및 일관성 유지", + "그로스 마케팅": "실험적 접근으로 빠른 성장 동력 발굴" + }, + "communication_preferences": [ + "창의적이고 트렌디한 표현", + "시각적 요소 중요시", + "스토리텔링 선호", + "감정적 연결 추구" + ], + "tool_ecosystem": [ + "Google Analytics, Adobe Analytics", + "Facebook Ads Manager, Google Ads", + "HubSpot, Marketo (마케팅 자동화)", + "Canva, Figma (디자인 툴)" + ] + }, + "PM": { + "definition": "제품의 전략, 기획, 개발, 출시까지 전체 라이프사이클을 관리하는 역할", + "core_responsibilities": [ + "제품 전략 수립", + "시장 및 고객 요구사항 분석", + "제품 로드맵 작성", + "크로스팩셔널 팀 조율", + "제품 성과 모니터링" + ], + "key_skills": [ + "데이터 분석 및 해석", + "사용자 중심 사고", + "기술적 이해도", + "비즈니스 센스", + "커뮤니케이션 및 리더십" + ], + "decision_framework": [ + "Impact vs Effort 매트릭스", + "RICE 스코어링 (Reach, Impact, Confidence, Effort)", + "OKR (Objectives and Key Results)", + "데이터 기반 의사결정" + ], + "stakeholder_management": [ + "Engineering: 기술적 실현가능성 논의", + "Design: 사용자 경험 최적화", + "Sales: 시장 요구사항 및 피드백", + "Leadership: 전략 정렬 및 리소스 확보" + ], + "career_levels": { + "Jr PM": "1-3년 경력, 특정 기능 담당, 멘토링 필요", + "Sr PM": "3-7년 경력, 독립적 제품 영역 담당", + "Group PM": "7+ 경력, 여러 제품/팀 총괄, 전략 수립" + } + }, + "전략팀": { + "definition": "기업의 장기적 방향성 설정, 신사업 기회 발굴, 경영진 의사결정 지원을 담당하는 직무", + "primary_functions": [ + "시장 분석 및 경쟁 인텔리전스", + "신사업 기회 평가", + "M&A 및 파트너십 검토", + "경영 전략 수립", + "성과 모니터링 및 분석" + ], + "analytical_frameworks": [ + "Porter's Five Forces", + "SWOT Analysis", + "BCG Matrix", + "McKinsey 7S Model", + "Blue Ocean Strategy" + ], + "deliverables": [ + "시장 분석 보고서", + "경쟁사 벤치마킹", + "비즈니스 케이스", + "전략 프레젠테이션", + "실행 계획서" + ], + "communication_style": [ + "논리적이고 구조화된 사고", + "데이터와 사실 기반", + "전략적 함의 중시", + "장기적 관점" + ], + "career_paths": { + "Corp Strategy": "기업 전체 차원의 전략 수립", + "Biz Ops": "운영 효율성 및 프로세스 개선 중심" + } + }, + "PR팀": { + "definition": "기업의 대외 이미지 관리와 언론 관계, 커뮤니케이션 전략�� 담당하는 직무", + "primary_goals": [ + "브랜드 이미지 관리 및 향상", + "미디어 관계 구축 및 유지", + "위기 상황 대응 및 관리", + "기업 메시지 일관성 확보" + ], + "key_metrics": [ + "언론 보도량 및 톤", + "브랜드 멘션 증가율", + "미디어 도달율 (Reach)", + "위기 대응 시간", + "브랜드 인지도 지표" + ], + "core_activities": [ + "보도자료 작성 및 배포", + "기자 관계 관리", + "이벤트 및 기자간담회 기획", + "위기 커뮤니케이션 대응", + "내부 커뮤니케이션 지원" + ], + "communication_style": [ + "정확하고 신뢰할 수 있는 정보 전달", + "브랜드 메시지 일관성 유지", + "타이밍과 맥락 고려", + "투명하고 진정성 있는 소통" + ], + "specialized_roles": { + "코퍼레이트 PR": "기업 전체 이미지 및 경영진 커뮤니케이션", + "프로덕트 PR": "제품/서비스 관련 홍보 및 런칭 지원" + } + }, + "창업자": { + "definition": "새로운 비즈니스를 시작하고 이끌어가는 기업의 설립자 및 최고 의사결정자", + "primary_goals": [ + "비전 구현 및 회사 성장", + "자금 조달 및 투자 유치", + "핵심 인재 확보", + "제품-시장 궁합(PMF) 달성", + "지속 가능한 비즈니스 모델 구축" + ], + "key_challenges": [ + "제한된 리소스 내 우선순위 결정", + "불확실성 하에서의 빠른 의사결정", + "다양한 이해관계자 관리", + "개인적 스트레스 및 고독감 관리" + ], + "communication_needs": [ + "투자자를 위한 피칭 자료", + "직원들을 위한 비전 전달", + "고객을 위한 가치 제안", + "파트너를 위한 협력 제안" + ], + "decision_criteria": [ + "장기적 비전과의 정렬성", + "빠른 실행 가능성", + "리소스 효율성", + "시장 임팩트 잠재력" + ], + "stage_characteristics": { + "Seed": "아이디어 검증, 초기 제품 개발, 팀 구성", + "Series A+": "성장 가속화, 조직 확장, 시장 점유율 확대", + "부트스트랩": "자체 자금으로 성장, 수익성 중심 운영" + } + }, + "기획팀": { + "definition": "조직의 중장기 계획 수립과 프로젝트 기획, 성과 관리를 담당하는 직무", + "primary_functions": [ + "사업 계획 수립 및 관리", + "프로젝트 기획 및 추진", + "성과 지표 설정 및 모니터링", + "조직 운영 효율성 개선", + "신사업 기회 발굴" + ], + "key_skills": [ + "체계적 사고 및 분석 능력", + "프로젝트 관리 역량", + "데이터 분석 및 인사이트 도출", + "이해관계자 조율", + "문서화 및 커뮤니케이션" + ], + "deliverables": [ + "사업 계획서", + "프로젝트 기획서", + "성과 보고서", + "시장 분석 자료", + "정책 제안서" + ], + "communication_style": [ + "논리적이고 체계적인 구성", + "데이터 기반 근거 제시", + "명확한 목표 및 일정 명시", + "리스크와 대안 함께 제시" + ] + }, + "컨설턴트": { + "definition": "기업의 문제 해결과 성과 개선을 위해 전문적 조언과 솔루션을 제공하는 전문가", + "primary_goals": [ + "고객 문제의 정확한 진단", + "효과적인 솔루션 설계", + "변화 관리 및 실행 지원", + "측정 가능한 성과 창출" + ], + "expertise_areas": [ + "전략 컨설팅 (Strategy)", + "운영 컨설팅 (Operations)", + "조직/HR 컨설팅", + "IT/디지털 컨설팅", + "재무 컨설팅" + ], + "methodology": [ + "문제 정의 및 현황 분석", + "가설 설정 및 검증", + "솔루션 설계 및 제안", + "실행 계획 수립", + "성과 측정 및 개선" + ], + "communication_characteristics": [ + "구조화된 논리 전개", + "프레임워크 기반 분석", + "액션 중심의 제안", + "경영진 언어로 소통" + ], + "key_deliverables": [ + "현황 진단 보고서", + "문제 분석 및 원인 규명", + "솔루션 제안서", + "실행 로드맵", + "성과 측정 대시보드" + ] + }, + "IR/투자준비팀": { + "definition": "투자자 관계 관리와 자금 조달, 기업 가치 제고를 담당하는 전문 조직", + "primary_functions": [ + "투자자 관계 관리 (Investor Relations)", + "자금 조달 전략 수립 및 실행", + "기업 가치 평가 및 제고", + "재무 정보 공시 및 커뮤니케이션", + "시장 동향 분석 및 보고" + ], + "key_stakeholders": [ + "기관 투자자 (VC, PE 등)", + "개인 투자자", + "애널리스트 및 신용평가사", + "경영진 및 이사회", + "규제 기관" + ], + "core_materials": [ + "투자 제안서 (IR Deck)", + "사업 계획서", + "재무 모델링", + "기업 개요서", + "실적 발표 자료" + ], + "communication_focus": [ + "재무적 성과와 전망", + "비즈니스 모델의 지속가능성", + "경쟁 우위 및 차별화 요소", + "리스크 요인 및 대응 방안", + "ESG 경영 성과" + ], + "success_metrics": [ + "투자 유치 성공률", + "기업 가치 상승률", + "투자자 만족도", + "시장 인지도", + "자금 조달 비용" + ] + }, + "UX 디자이너": { + "definition": "사용자 경험을 연구하고 설계하여 사용하기 쉽고 만족스러운 제품을 만드는 전문가", + "primary_goals": [ + "사용자 중심의 경험 설계", + "사용성 및 접근성 향상", + "비즈니스 목표와 사용자 니즈 균형", + "데이터 기반 디자인 의사결정" + ], + "key_processes": [ + "사용자 리서치 및 인사이트 도출", + "사용자 여정 맵핑", + "와이어프레임 및 프로토타입 제작", + "사용성 테스트 및 검증", + "디자인 시스템 구축 및 관리" + ], + "core_deliverables": [ + "사용자 리서치 보고서", + "페르소나 및 사용자 여정", + "와이어프레임 및 플로우차트", + "인터랙티브 프로토타입", + "디자인 가이드라인" + ], + "collaboration_focus": [ + "PM과의 요구사항 정의", + "개발팀과의 구현 가능성 검토", + "마케팅팀과의 사용자 이해 공유", + "경영진과의 비즈니스 임팩트 논의" + ], + "specialized_roles": { + "UX Writer": "사용자 인터페이스 텍스트 및 마이크로카피 전문", + "Product Designer": "제품 전반의 사용자 경험 설계 담당" + } + }, + "개발팀": { + "definition": "소프트웨어 제품의 설계, 개발, 테스트, 배포를 담당하는 기술 전문가 그룹", + "primary_goals": [ + "안정적이고 확장 가능한 시스템 구축", + "사용자 요구사항의 기술적 구현", + "코드 품질 및 보안 유지", + "개발 효율성 및 배포 속도 향상" + ], + "key_responsibilities": [ + "기능 요구사항 분석 및 설계", + "코드 작성 및 리뷰", + "테스트 코드 작성 및 품질 보증", + "배포 및 운영 모니터링", + "기술 부채 관리" + ], + "communication_needs": [ + "기술 명세서 및 API 문서", + "아키텍처 설계 문서", + "코드 리뷰 가이드라인", + "배포 및 운영 매뉴얼", + "장애 대응 보고서" + ], + "decision_criteria": [ + "기술적 실현 가능성", + "성능 및 확장성", + "보안 및 안정성", + "개발 및 유지보수 비용", + "팀 역량 및 학습 곡선" + ], + "specialized_roles": { + "FE (Frontend)": "사용자 인터페이스 개발 전담", + "BE (Backend)": "서버 및 데이터 처리 로직 개발", + "ML (Machine Learning)": "AI/ML 모델 개발 및 데이터 분석", + "Infra": "인프라 구축 및 DevOps 담당" + } + }, + "QA": { + "definition": "소프트웨어 제품의 품질을 보장하기 위해 테스트를 설계하고 실행하는 품질 관리 전문가", + "primary_goals": [ + "결함 조기 발견 및 예방", + "사용자 관점의 품질 검증", + "릴리즈 품질 기준 확보", + "테스트 프로세스 개선" + ], + "key_activities": [ + "테스트 계획 수립 및 케이스 작성", + "수동/자�� 테스트 실행", + "결함 발견 및 재현", + "품질 지표 모니터링", + "테스트 자동화 구축" + ], + "testing_types": [ + "기능 테스트 (Functional Testing)", + "성능 테스트 (Performance Testing)", + "보안 테스트 (Security Testing)", + "사용성 테스트 (Usability Testing)", + "회귀 테스트 (Regression Testing)" + ], + "communication_focus": [ + "명확하고 재현 가능한 결함 보고", + "테스트 결과의 정량적 제시", + "리스크 기반 우선순위 제안", + "품질 개선을 위한 제안사항" + ], + "career_levels": { + "QA 엔지니어": "테스트 실행 및 결함 발견 중심", + "QA 리드": "테스트 전략 수립 및 팀 관리" + } + } +} + +# ========================================================= +# 3. 로직 함수들 +# ========================================================= + +def uniq(xs: List[str]) -> List[str]: + if not xs: return [] + s=set(); out=[] + for x in xs: + if x not in s: + s.add(x); out.append(x) + return out + +AUTO_RULES_PAIN = { + "반응률": ["Persona Prompting", "Few-shot Prompting", "Self-consistency Prompting"], + "불일치": ["Output Formatting", "Constrained Prompting"], + "작성": ["Output Formatting", "Few-shot Prompting"], + "경쟁": ["RAG Prompting", "Chain-of-Thought (CoT)"], + "요구": ["Persona Prompting", "Step-back Prompting"], +} +AUTO_RULES_OUTPUT = { + "이메일": ["Persona Prompting", "Output Formatting", "Few-shot Prompting", "Self-consistency Prompting"], + "카피": ["Few-shot Prompting", "Self-consistency Prompting", "Output Formatting"], + "보고서": ["RAG Prompting", "Chain-of-Thought (CoT)", "Output Formatting"], + "PRD": ["Role Prompting", "Constrained Prompting", "Chain-of-Thought (CoT)"], +} +AUTO_RULES_USER = { + "세일즈": ["Persona Prompting", "Few-shot Prompting", "Self-consistency Prompting"], + "마케팅": ["Few-shot Prompting", "Self-consistency Prompting"], + "전략": ["Chain-of-Thought (CoT)", "Step-back Prompting", "RAG Prompting"], + "PM": ["Role Prompting", "Constrained Prompting"], + "데이터": ["RAG Prompting", "Constrained Prompting"], +} + +def auto_recommend(domain_key, pains, outs, users): + rec=[] + if not domain_key: return [], "" + + if domain_key=="1 외부 커뮤니케이션": + rec+=["Persona Prompting","Few-shot Prompting","Self-consistency Prompting","Output Formatting"] + if domain_key=="2 시장·고객 리서치": + rec+=["RAG Prompting","Chain-of-Thought (CoT)","Output Formatting","Step-back Prompting"] + if domain_key=="3 제품·UX 문서": + rec+=["Role Prompting","Constrained Prompting","Chain-of-Thought (CoT)","Output Formatting"] + + for p in pains or []: + for k,ts in AUTO_RULES_PAIN.items(): + if k in p: rec+=ts + for o in outs or []: + for k,ts in AUTO_RULES_OUTPUT.items(): + if k in o: rec+=ts + for u in users or []: + for k,ts in AUTO_RULES_USER.items(): + if k in u: rec+=ts + + rec.append("Output Formatting") + + unique_rec = uniq(rec) + + rationale_md = "### 🔮 자동 추천 기술 및 핵심 근거\n\n" + if not unique_rec: + rationale_md += "선택된 항목에 대한 자동 추천 기술이 없습니다. 직접 기술을 선택해주세요." + else: + for tech in unique_rec: + g = TECH_DETAILED.get(tech, {}) + desc = g.get("desc", "설명 없음") + rationale_md += f"- **{tech}**: {desc}\n" + + return gr.update(value=unique_rec, choices=uniq(ALL_TECHS + unique_rec)), rationale_md + +def reason_from_pain(tech: str, pains: List[str], pain_subs: List[str]) -> List[str]: + R=[] + jp=" ".join(pains or []) + " " + " ".join(pain_subs or []) + if "반응률" in jp: + if tech=="Persona Prompting": R.append("반응률 저조 → 세그먼트 맞춤 어휘/어조로 **체감 가치** 상승") + if tech=="Few-shot Prompting": R.append("반응률 저조 → 고성과 예시 패턴 복제") + if tech=="Self-consistency Prompting": R.append("반응률 저조 → 다변량 후보 생성→자체 채점으로 **Top-1**") + if "불일치" in jp or "톤/보이스" in jp or "포맷" in jp: + if tech=="Output Formatting": R.append("메시지 불일치 → 형식/섹션 고정으로 정합성↑") + if tech=="Constrained Prompting": R.append("메시지 불일치 → 금칙/길이/필수필드 강제") + if "작성 시간" in jp or "예시 부족" in jp: + if tech in {"Few-shot Prompting","Output Formatting"}: R.append("작성시간 과다/예시 부족 → 템플릿 + 예시 기반으로 속도↑") + if "경쟁사 정보" in jp: + if tech=="RAG Prompting": R.append("경쟁사 정보 부족 → 외부 데이터 근거 주입(최신성/신뢰��)") + if tech=="Chain-of-Thought (CoT)": R.append("경쟁사 분석 구조화(CoT)로 인사이트 명료화") + if "요구 불명확" in jp: + if tech in {"Persona Prompting","Step-back Prompting"}: R.append("고객 요구 불명확 → 상위 목적/JTBD 정렬") + return R + +def reason_from_output(tech: str, outs: List[str], out_subs: List[str]) -> List[str]: + R=[] + jo=" ".join(outs or []) + " " + " ".join(out_subs or []) + if "메일" in jo or "카피" in jo or "랜딩" in jo: + if tech=="Output Formatting": R.append("카피/메일 계열 → **헤드라인/서브/바디/CTA** 고정이 성과 좌우") + if tech=="Self-consistency Prompting": R.append("메시지 후보 다변량 생성→최적안 선택 필요") + if tech=="Few-shot Prompting": R.append("채널별 톤/길이 차이를 예시로 빠르게 적응") + if "보고서" in jo or "분석" in jo: + if tech=="RAG Prompting": R.append("보고서/분석 → 수치·출처 최신성 보장") + if tech=="Chain-of-Thought (CoT)": R.append("보고서/분석 → 단계적 구조(CoT)로 논리 강화") + if "PRD" in jo or "API" in jo: + if tech in {"Constrained Prompting","Role Prompting"}: R.append("PRD/API → JSON/필드 강제 + 직무 관점 고정 필요") + return R + +def reason_from_user(tech: str, users: List[str], user_subs: List[str]) -> List[str]: + R=[] + ju=" ".join(users or []) + " " + " ".join(user_subs or []) + if "세일즈" in ju: + if tech=="Persona Prompting": R.append("Sales는 파이프라인/승률 언어 선호 → 페르소나 톤 적용") + if tech=="Few-shot Prompting": R.append("영업 레퍼런스 사례 모사가 설득력↑") + if "전략" in ju: + if tech in {"Chain-of-Thought (CoT)","Step-back Prompting","RAG Prompting"}: + R.append("전략조직은 근거/논리/시사점 중시 → CoT+RAG+Step-back 적합") + if "PM" in ju or "UX" in ju: + if tech in {"Role Prompting","Constrained Prompting"}: + R.append("PM/UX는 필드/AC/톤 표준 필요 → 역할 고정 + 제약 강제") + return R + +# ========================================================= +# 4. 상세 정보 표시 함수들 +# ========================================================= + +def show_pain_details(selected_pains): + if not selected_pains: + return "Pain Point를 선택하면 상세 설명이 여기에 표시됩니다." + details_html = "
" + for pain in selected_pains: + if pain in PAIN_DETAILED: + detail = PAIN_DETAILED[pain] + details_html += f""" +
+

📍 {pain}

+

정의: {detail['definition']}

+

주요 증상:

+ +

근본 원인:

+ +

비즈니스 임팩트: {detail['business_impact']}

+
+ 실제 사례: +
    {"".join([f'
  • {example}
  • ' for example in detail['real_examples']])}
+
+

측정 방법: {detail['measurement']}

+
+ """ + details_html += "
" + return details_html + +def show_output_details(selected_outputs): + if not selected_outputs: + return "Output을 선택하면 상세 설명이 여기에 표시됩니다." + details_html = "
" + for output in selected_outputs: + if output in OUTPUT_DETAILED: + detail = OUTPUT_DETAILED[output] + details_html += f""" +
+

📄 {output}

+

정의: {detail['definition']}

+

목적: {detail['purpose']}

+

핵심 구성요소:

+ + """ + if 'success_metrics' in detail: + details_html += f""" +

성공 지표:

+ + """ + if 'real_examples' in detail: + details_html += f""" +
+ 실제 예시: +
{detail['real_examples']}
+
+ """ + details_html += "
" + details_html += "
" + return details_html + +def show_user_details(selected_users): + if not selected_users: + return "User를 선택하면 상세 설명이 여기에 표시됩니다." + details_html = "
" + for user in selected_users: + if user in USER_DETAILED: + detail = USER_DETAILED[user] + details_html += f""" +
+

👤 {user}

+

정의: {detail['definition']}

+

주요 목표:

+ +

핵심 지표:

+ + """ + if 'communication_style' in detail: + details_html += f""" +

커뮤니케이션 스타일:

+ + """ + if 'personas' in detail: + details_html += f""" +

세부 역할:

+ + """ + if 'specialized_roles' in detail: + details_html += f""" +

전문 분야:

+ + """ + details_html += "
" + details_html += "
" + return details_html + +def show_tech_details(selected_techs): + if not selected_techs: + return "프롬프팅 기술을 선택하면 상세 설명이 여기에 표시됩니다." + details_html = "
" + for tech in selected_techs: + if tech in TECH_DETAILED: + detail = TECH_DETAILED[tech] + details_html += f""" +
+

🛠️ {tech}

+

📖 정의: {detail['desc']}

+

🎯 목적: {detail['purpose']}

+

⏰ 언제 사용: {detail['when_to_use']}

+

🔧 작동 원리:

+ +
+ 💡 실무 예시: +
{detail['real_example']}
+
+

✅ 활용 팁: {detail['tips']}

+

⚠️ 주의사항: {detail['avoid']}

+
+ """ + details_html += "
" + return details_html + +# ========================================================= +# 5. 카탈로그 및 템플릿 +# ========================================================= + +CATALOG = { + "1 외부 커뮤니케이션": { + "subdomains": ["이메일(콜드/웜)", "광고/랜딩", "PR/보도자료", "SNS/영상"], + "pains": ["반응률 저조", "메시지 불일치", "작성 시간 과다", "A/B 테스트 부담"], + "outputs": ["콜드메일", "광고 카피", "보도자료", "랜딩페이지 섹션"], + "users": ["세일즈", "마케팅팀", "PR팀", "창업자"] + }, + "2 시장·고객 리서치": { + "subdomains": ["시장보고서", "경쟁분석", "VOC 분석", "페르소나"], + "pains": ["경쟁사 정보 부족", "고객 요구 불명확", "출처/기간 누락", "리서치 작성 부담"], + "outputs": ["시장조사 보고서", "경쟁사 분석", "페르소나", "VOC 요약"], + "users": ["전략팀", "기획팀", "컨설턴트", "IR/투자준비팀"] + }, + "3 제품·UX 문서": { + "subdomains": ["PRD/요구사항", "유스케이스", "UX 마이크로카피", "릴리스 노트"], + "pains": ["요구사항 언어화 난항", "UX 카피 불일치", "의사결정 기준 불명확"], + "outputs": ["PRD", "유스케이스", "UX 카피", "릴리스 노트"], + "users": ["PM", "UX 디자이너", "개발팀", "QA"] + }, +} + +PAIN_SUB = { + "반응률 저조": ["제목/프리헤더", "타게팅", "CTA 약함", "신뢰 근거 부족"], + "메시지 불일치": ["톤/보이스", "포맷/길이", "채널/페이싱"], + "작성 시간 과다": ["템플릿 부재", "예시 부족", "승인 루프 지연"], + "A/B 테스트 부담": ["설계 복잡성", "결과 분석", "리소스 부족"], + "경쟁사 정보 부족": ["자료 수집", "정합성 검증", "최신성"], + "고객 요구 불명확": ["세그먼트 정의", "JTBD 모호", "페인/게인"], + "출처/기간 누락": ["데이터 검증", "신뢰성 확보", "유효기간"], + "리서치 작성 부담": ["효율성", "표준화", "재활용"], + "요구사항 언어화 난항": ["추상성", "기술 격차", "검증 프로세스"], + "UX 카피 불일치": ["용어 통일", "톤앤매너", "브랜드 보이스"], + "의사결정 기준 불명확": ["평가 지표", "우선순위", "프로세스"], +} + +OUTPUT_SUB = { + "콜드메일": ["신규 인바운드", "콜드 아웃바운드", "후속/리마인드", "이탈 재참여"], + "광고 카피": ["웹 배너", "검색광고", "SNS 카드", "앱 푸시"], + "보도자료": ["제품 출시", "투자 유치", "인사 발령", "업계 동향"], + "랜딩페이지 섹션": ["Hero", "Feature", "Testimonial", "CTA"], + "시장조사 보고서": ["탑다운(탐색)", "바텀업 추정", "혼합 접근", "리서치 브리프"], + "경쟁사 분석": ["기능 비교표", "가격/패키지", "포지셔닝 맵", "SWOT"], + "페르소나": ["B2B 구매자", "B2C 소비자", "내부 사용자", "파트너"], + "VOC 요약": ["만족도 조사", "불만 분석", "개선 요청", "트렌드 분석"], + "PRD": ["문제정의", "목표/지표", "범위/비범위", "수용기준(AC)", "리스크"], + "유스케이스": ["주요 시나리오", "대안 플로우", "예외 상황", "비즈니스 규칙"], + "UX 카피": ["버튼/CTA", "에러 메시지", "안내문", "폼 라벨"], + "릴리스 노트": ["신기능", "개선사항", "버그수정", "알려진 이슈"], +} + +USER_SUB = { + "세일즈": ["BDR", "AE", "AM", "Sales Leader"], + "마케팅팀": ["퍼포먼스", "콘텐츠", "브랜드", "그로스"], + "PR팀": ["코퍼레이트", "프로덕트 PR"], + "창업자": ["Seed", "Series A+", "부트스트랩"], + "전략팀": ["Corp Strategy", "Biz Ops"], + "기획팀": ["사업기획", "정책기획", "운영기획"], + "컨설턴트": ["전략", "운영", "조직/HR", "IT/디지털"], + "IR/투자준비팀": ["기관투자", "개인투자", "공시/IR"], + "PM": ["Jr PM", "Sr PM", "Group PM"], + "UX 디자이너": ["UX Writer", "Product Designer"], + "개발팀": ["FE", "BE", "ML", "Infra"], + "QA": ["QA 엔지니어", "QA 리드"] +} + +TEMPLATE = """ +# 최종 목표 (Mission Statement) +{mission} + +# 산출물 정의 (Output Definition) +- **산출물 종류**: {out} +- **핵심 성공 지표(KPI)**: {kpi} +- **성공 기준**: + 1) **형식**: [{format_hint}] 구조를 100% 준수해야 함. + 2) **가치**: 최종 독자인 [{audience}]에게 첫 3줄 안에 핵심 가치가 전달되어야 함. + 3) **품질**: 스팸성, 과장, 모호한 표현이 없어야 함. + +# 가드레일 (Guardrails) +- **톤앤매너**: {tone} +- **금지 표현**: {ng} + +# 적용된 프롬프팅 전략 및 근거 (Prompting Strategies & Rationale) +{tech_blocks} + +{rag_section} + +# 구체적인 작성 작업 (Task) +1. 위에 제시된 **모든 정의, 가드레일, 전략, 컨텍스트를 종합적으로 반영**하여 [{out}]의 초안을 작성하라. +2. [{format_hint}] 형식에 맞춰 섹션별로 내용을 구성하라. +3. 핵심적인 메시지, 제목, CTA에 대해서는 2~3개의 대안을 함께 제시하라. +4. 최종 결과물 마지막에, 아래 **자가 검수 체크리스트**를 포함하고 스스로 점검하라. +--- +**[자가 검수 체크리스트]** +- [ ] 미션 스테이트먼트의 목표를 달성하는가? +- [ ] 최종 독자({audience})의 언어와 관심사에 부합하는가? +- [ ] 지정된 톤앤매너({tone})를 일관되게 유지하는가? +- [ ] 금지 표현({ng})을 사용하지 않았는가? +- [ ] 선택된 프롬프팅 기술들의 의도가 실제로 반영되었는가? +""" + +def compose_final_prompt( + mission, domain_key, pains, pain_subs, outs, out_subs, users, user_subs, + techs, my_rationale, + kpi_text, tone_text, ng_text, format_override, fewshot_text, rag_text +): + if not all([mission.strip(), domain_key, techs]): + return "⚠️ [Phase 1]의 미션 선언문과 [Phase 2]의 기술 선택을 먼저 완료해주세요." + + format_hint = format_override.strip() or ("섹션별 제목/본문" if not outs else "자동 추정 필요") + audience = ", ".join(user_subs or users or ["정의되지 않은 사용자"]) + kpi = kpi_text.strip() or "정확성, 명료성, 설득력" + tone = tone_text.strip() or "전문적이고 객관적이며 간결함" + ng = ng_text.strip() or "과장, 추측, 근거 없는 주장" + + tech_blocks = [] + if my_rationale.strip(): + tech_blocks.append(f"## 내 전략과 근거\n{my_rationale.strip()}\n") + + for t in techs: + reasons = uniq( + reason_from_pain(t, pains, pain_subs) + + reason_from_output(t, outs, out_subs) + + reason_from_user(t, users, user_subs) + ) + head = f"- **{t}**: {TECH_DETAILED.get(t,{}).get('desc','')}" + tail = "" + if reasons: + tail = "\n - **선정 근거**: " + " / ".join(reasons[:3]) + tech_blocks.append(head + tail) + + if fewshot_text.strip(): + tech_blocks.append(f"- **Few-shot 예시 (모방할 패턴)**:\n```\n{fewshot_text.strip()}\n```") + + rag_section = "" + if rag_text.strip(): + rag_section = f"# 참고 자료 및 컨텍스트\n{rag_text.strip()}\n" + + return TEMPLATE.format( + mission=mission, + out=", ".join(outs or ["정의되지 않음"]), + kpi=kpi, + format_hint=format_hint, + audience=audience, + tone=tone, + ng=ng, + tech_blocks="\n".join(tech_blocks), + rag_section=rag_section + ).strip() + +# ========================================================= +# 6. Gradio UI +# ========================================================= + +css = """ +.gradio-container { + font-family: 'IBM Plex Sans KR', sans-serif; + max-width: 1400px; +} +.gr-button { + color: white; + border: none; + border-radius: 8px; +} +.gr-button-primary { + background: linear-gradient(to right, #4A90E2, #50E3C2); +} +.phase-header { + background: linear-gradient(90deg, #667eea 0%, #764ba2 100%); + color: white; + padding: 15px; + border-radius: 10px; + margin: 10px 0; + text-align: center; + font-weight: bold; +} +.detail-panel { + background-color: #f8f9fa; + border-radius: 8px; + padding: 15px; + margin-top: 10px; +} +""" + +with gr.Blocks(theme=gr.themes.Soft(), css=css, title="DSCR Prompt Coach - Complete Learning Edition") as demo: + + gr.Markdown(""" + # 🧠 DSCR 프롬프트 코칭 시스템 (Complete Learning Edition) + ## 프롬프트 엔지니어링의 4단계를 따라가며 체계적인 프롬프트를 완성하세요 + **Define → Select → Compose → Refine** + + 💡 **모든 Pain Points, Outputs, Users에 대한 완전한 상세 설명이 포함되어 있습니다.** + """) + + # 상태 변수들 + domain_key = gr.State() + pains = gr.State([]) + pain_subs = gr.State([]) + outs = gr.State([]) + out_subs = gr.State([]) + users = gr.State([]) + user_subs = gr.State([]) + techs = gr.State([]) + + with gr.Tabs() as tabs: + # Phase 1: 문제 정의 (Define) + with gr.TabItem("🚀 Phase 1: 문제 정의 (Define)", id=0): + gr.HTML("
성공적인 프롬프트의 시작은 '풀어야 할 문제'를 명확히 아는 것입니다
") + + with gr.Row(): + with gr.Column(scale=2): + with gr.Row(): + with gr.Column(): + gr.Markdown("### 1. Domain (어떤 영역의 문제인가?)") + domain_dd = gr.Dropdown( + label="도메인 선택", + choices=list(CATALOG.keys()), + info="해결하려는 문제가 속한 주요 영역을 선택하세요" + ) + domain_note = gr.Textbox( + label="도메인 특성 메모", + placeholder="예: 북미 SaaS B2B 시장 진출 초기 단계", + info="도메인의 특별한 상황이나 맥락을 기록하세요" + ) + with gr.Column(): + gr.Markdown("### 2. Pain (누구의 어떤 고통을 해결하는가?)") + pains_dd = gr.Dropdown( + label="Pain Points(복수 선택)", + multiselect=True, + interactive=False, + info="해결하려는 주요 문제점들을 선택하세요" + ) + pains_sub_dd = gr.Dropdown( + label="Pain 세부사항(복수 선택)", + multiselect=True, + interactive=False, + info="선택한 문제의 구체적인 양상들" + ) + with gr.Row(): + with gr.Column(): + gr.Markdown("### 3. Output (어떤 결과물이 필요한가?)") + outs_dd = gr.Dropdown( + label="산출물 유형(복수 선택)", + multiselect=True, + interactive=False, + info="최종적으로 만들어야 할 결과물들" + ) + outs_sub_dd = gr.Dropdown( + label="산출물 세부(복수 선택)", + multiselect=True, + interactive=False, + info="결과물의 구체적인 형태나 변형" + ) + with gr.Column(): + gr.Markdown("### 4. User (누가 이 결과물을 사용하는가?)") + users_dd = gr.Dropdown( + label="최종 사용자(복수 선택)", + multiselect=True, + interactive=False, + info="결과물을 실제로 사용할 사람들" + ) + users_sub_dd = gr.Dropdown( + label="사용자 세부 역할(복수 선택)", + multiselect=True, + interactive=False, + info="사용자들의 구체적인 직급이나 역할" + ) + + with gr.Column(scale=1): + gr.Markdown("### 📚 완전한 학습 패널") + with gr.Accordion("💡 Pain Points 상세 설명", open=False): + pain_details = gr.HTML("Pain Point를 선택하면 완전한 상세 설명이 여기에 표시됩니다.") + with gr.Accordion("📄 Output 상세 설명", open=False): + output_details = gr.HTML("Output을 선택하면 완전한 상세 설명이 여기에 표시됩니다.") + with gr.Accordion("👤 User 상세 설명", open=False): + user_details = gr.HTML("User를 선택하면 완전한 상세 설명이 여기에 표시됩니다.") + + gr.Markdown("---") + gr.Markdown("### 🎯 나의 미션 선언문 (Mission Statement)") + mission_statement_txt = gr.Textbox( + label="미션 선언문", + placeholder="위 항목들을 선택하면 자동으로 초안이 생성됩니다. 자유롭게 수정하여 목표를 명확히 하세요.", + lines=3, + info="이 프롬프트로 달성하고자 하는 최종 목표를 명확히 서술하세요" + ) + + def update_mission_statement(d, p, o, u): + if not all([d, p, o, u]): return "" + d_str = f"[{d.split(' ')[1] if ' ' in d else d}]" + p_str = f"[{', '.join(p) if p else '정의되지 않은 문제'}]" + o_str = f"[{', '.join(o) if o else '정의되지 않은 결과물'}]" + u_str = f"[{', '.join(u) if u else '정의되지 않은 사용자'}]" + return f"나는 {u_str}를 위해, {p_str} 문제를 해결하고자, {d_str} 맥락에서 {o_str}을(를) 작성한다." + + def on_domain_change(dkey): + if not dkey: return [dkey, gr.update(), gr.update(), gr.update(), gr.update(), gr.update(), gr.update()] + cfg = CATALOG.get(dkey, {}) + return [ + dkey, + gr.update(choices=cfg.get("pains", []), value=[], interactive=True), + gr.update(choices=[], value=[], interactive=False), + gr.update(choices=cfg.get("outputs", []), value=[], interactive=True), + gr.update(choices=[], value=[], interactive=False), + gr.update(choices=cfg.get("users", []), value=[], interactive=True), + gr.update(choices=[], value=[], interactive=False) + ] + + def on_list_change(selected_list, sub_map): + if not selected_list: return gr.update(choices=[], value=[], interactive=False) + choices = uniq([item for s in selected_list for item in sub_map.get(s, [])]) + return gr.update(choices=choices, value=[], interactive=True) + + domain_dd.change( + on_domain_change, + inputs=[domain_dd], + outputs=[domain_key, pains_dd, pains_sub_dd, outs_dd, outs_sub_dd, users_dd, users_sub_dd] + ) + pains_dd.change(lambda x: on_list_change(x, PAIN_SUB), inputs=[pains_dd], outputs=[pains_sub_dd]) + outs_dd.change(lambda x: on_list_change(x, OUTPUT_SUB), inputs=[outs_dd], outputs=[outs_sub_dd]) + users_dd.change(lambda x: on_list_change(x, USER_SUB), inputs=[users_dd], outputs=[users_sub_dd]) + pains_dd.change(show_pain_details, inputs=[pains_dd], outputs=[pain_details]) + outs_dd.change(show_output_details, inputs=[outs_dd], outputs=[output_details]) + users_dd.change(show_user_details, inputs=[users_dd], outputs=[user_details]) + for comp in [domain_dd, pains_dd, outs_dd, users_dd]: + comp.change( + update_mission_statement, + inputs=[domain_dd, pains_dd, outs_dd, users_dd], + outputs=[mission_statement_txt] + ) + pains_dd.change(lambda x: x, pains_dd, pains) + pains_sub_dd.change(lambda x: x, pains_sub_dd, pain_subs) + outs_dd.change(lambda x: x, outs_dd, outs) + outs_sub_dd.change(lambda x: x, outs_sub_dd, out_subs) + users_dd.change(lambda x: x, users_dd, users) + users_sub_dd.change(lambda x: x, users_sub_dd, user_subs) + + # Phase 2: 기술 선정 (Select) + with gr.TabItem("💡 Phase 2: 기술 선정 (Select)", id=1): + gr.HTML("
문제 해결에 가장 적합한 프롬프팅 기술 조합을 논리적 근거를 바탕으로 선택합니다
") + with gr.Row(): + with gr.Column(scale=2): + with gr.Row(): + with gr.Column(scale=1): + gr.Markdown("### 1. 자동 추천 받기") + gr.Markdown("Phase 1에서 정의한 내용을 바탕으로 효과적인 기술 조합을 추천받으세요.") + auto_recommend_btn = gr.Button("🔮 Mixed Prompts 자동 추천", variant="primary") + techs_dd = gr.Dropdown( + label="프롬프팅 기술(복수 선택/수정 가능)", + choices=ALL_TECHS, + multiselect=True, + interactive=True, + info="자동 추천된 기술을 검토하고 필요시 수정하세요" + ) + with gr.Column(scale=1): + gr.Markdown("### 2. 자동 추천 근거 검토") + auto_rationale_md = gr.Markdown("자동 추천 버튼을 누르면, 각 기술이 왜 추천되었는지 핵심적인 이유가 여기에 표시됩니다.") + + with gr.Column(scale=1): + gr.Markdown("### 🛠️ 완전한 기술 학습 패널") + with gr.Accordion("📖 선택된 기술 상세 설명", open=True): + tech_details = gr.HTML("프롬프팅 기술을 선택하면 완전한 상세 설명이 여기에 표시됩니다.") + + gr.Markdown("---") + gr.Markdown("### 🤔 나의 최종 선택과 근거 (My Rationale)") + gr.Markdown("**자동 추천과 설명을 비판적으로 검토한 후, 최종적으로 사용할 기술과 그 이유를 직접 정리해보세요.** 이것이 당신의 '전략'이 됩니다.") + my_rationale_txt = gr.Textbox( + label="나의 전략적 판단 기록", + lines=5, + placeholder="예시) RAG는 최신성 확보를 위해, CoT는 CEO가 중시하는 논리 구조 강화를 위해 최종 선택함. Persona Prompting은 범용 보고서이므로 불필요하다고 판단하여 제외함.", + info="선택한 기술들에 대한 당신만의 전략적 판단을 기록하세요" + ) + auto_recommend_btn.click( + auto_recommend, + inputs=[domain_key, pains, outs, users], + outputs=[techs_dd, auto_rationale_md] + ) + techs_dd.change(show_tech_details, inputs=[techs_dd], outputs=[tech_details]) + techs_dd.change(lambda x: x, techs_dd, techs) + + # Phase 3: 프롬프트 구성 (Compose) + with gr.TabItem("✍️ Phase 3: 프롬프트 구성 (Compose)", id=2): + gr.HTML("
선택한 전략을 바탕으로 프롬프트의 구체적인 내용과 가드레일을 설정합니다
") + with gr.Row(): + with gr.Column(): + gr.Markdown("### 1. 상세 가드레일 설정") + kpi_text = gr.Textbox(label="핵심 성공 지표(KPI)", placeholder="예: 인사이트 정확성, 경영진 의사결정 지원") + tone_text = gr.Textbox(label="톤앤매너", placeholder="예: 객관·간결·데이터 중심") + ng_text = gr.Textbox(label="금지어/NG 표현", placeholder="예: 과장, 출처 미표기, 추정 수치 단정화") + format_override = gr.Textbox(label="산출물 형식(Format)", placeholder="예: 요약/현황/경쟁/인사이트/권고/한계") + with gr.Column(): + gr.Markdown("### 2. 품질 레퍼런스 주입") + fewshot_text = gr.Textbox(label="Few-shot 예시 (모방할 패턴)", lines=4, placeholder="AI가 모방했으면 하는 글의 좋은 예시를 2~3개 자유롭게 입력하세요.") + rag_text = gr.Textbox(label="참고자료 (컨텍스트 주입용)", lines=4, placeholder="참고할 데이터, 보고서 내용, 또는 배경 정보를 입력하세요.") + + gr.Markdown("---") + gen_btn = gr.Button("🚀 최종 융합 프롬프트 생성!", variant="primary", size="lg") + final_prompt_txt = gr.Textbox( + label="완성된 융합 프롬프트", + lines=25, + show_copy_button=True, + interactive=False, + info="생성된 프롬프트를 복사하여 ChatGPT, Claude 등에서 사용하세요" + ) + gr.Markdown("### 4. 자가 검수 체크리스트") + gr.Markdown("프롬프트를 사용하기 전, 나의 의도가 모두 잘 반영되었는지 마지막으로 점검하세요.") + self_inspection_chk = gr.CheckboxGroup( + label="Self-Inspection Checklist", + choices=[ + "Phase 1의 '미션 선언문'이 프롬프트 목적에 잘 반영되었는가?", + "Phase 2에서 선택한 기술들의 핵심 의도가 프롬프트에 녹아있는가?", + "독자(User)가 이해하기 어려운 전문 용어나 모호한 지시는 없는가?", + "제공한 Few-shot 예시나 참고 데이터가 충분하고 적절한가?" + ] + ) + gen_btn.click( + compose_final_prompt, + inputs=[ + mission_statement_txt, domain_key, pains, pain_subs, outs, out_subs, users, user_subs, + techs, my_rationale_txt, + kpi_text, tone_text, ng_text, format_override, fewshot_text, rag_text + ], + outputs=[final_prompt_txt] + ) + + # Phase 4: 실행 및 개선 (Refine) + with gr.TabItem("🔄 Phase 4: 실행 및 개선 (Refine)", id=3): + gr.HTML("
프롬프트 엔지니어링은 '반복'을 통해 완성됩니다
") + gr.Markdown("생성된 프롬프트를 실제 LLM에 실행해보고, 결과물을 비판적으로 분석하여 개선점을 찾아보세요.") + with gr.Row(): + with gr.Column(): + gr.Markdown("### 1. LLM 결과물 분석") + llm_output_txt = gr.Textbox(label="LLM 결과물 원문", lines=15, placeholder="LLM(ChatGPT, Claude 등)에서 나온 결과물을 그대로 복사하여 붙여넣으세요.") + with gr.Column(): + gr.Markdown("### 2. 결과물 평가 및 개선") + eval_radio = gr.Radio(label="결과물 만족도 평가", choices=["매우 만족", "만족", "개선 필요", "매우 불만족"], value="개선 필요") + analysis_txt = gr.Textbox(label="원인 분석 및 개선 방향", lines=8, placeholder="""결과물이 만족스럽지 않다면, 그 근본 원인은 어디에 있다고 생각하나요?\n\n- 문제 정의 오류? (Phase 1)\n- 기술 선택 미스? (Phase 2)\n- Few-shot 예시 부족? (Phase 3)\n- 지시가 모호했나?""", visible=True) + gr.Markdown("### 3. AI 개선 제안") + improve_btn = gr.Button("🔍 개선점 분석 및 제안 받기", variant="secondary") + improvement_suggestions = gr.Textbox(label="AI 개선 제안", lines=8, interactive=False) + + def analyze_and_improve(llm_output, satisfaction, user_analysis): + if not llm_output.strip(): + return "분석할 LLM 결과물을 먼저 입력해주세요." + suggestions = f"""## 🔍 결과물 분석 리포트 + +**만족도**: {satisfaction} +**사용자 분석**: {user_analysis or '분석 내용 없음'} + +### 개선 제안사항: +1. **프롬프트 구조 개선**: 더 명확한 단계별 지시사항 추가, 성공 기준의 구체화 필요 +2. **컨텍스트 보강**: Few-shot 예시의 품질 향상, 도메인 특화 정보 보완 +3. **제약사항 명확화**: 금지어/NG 표현 구체화, 형식 요구사항 세분화 + +### 다음 반복 액션 아이템: +- [ ] Phase 1에서 미션 스테이트먼트 재검토 +- [ ] Phase 2에서 기술 조합 재선택 +- [ ] Phase 3에서 Few-shot 예시 개선 +- [ ] 새로운 프롬프트로 재실행 및 비교 + +### 권장사항: +프롬프트 엔지니어링은 반복적 개선 과정입니다. 위 제안사항을 바탕으로 이전 Phase들로 돌아가 수정한 후 다시 테스트해보세요.""" + return suggestions + + improve_btn.click( + analyze_and_improve, + inputs=[llm_output_txt, eval_radio, analysis_txt], + outputs=[improvement_suggestions] + ) + def toggle_analysis_visibility(evaluation): + return gr.update(visible=(evaluation in ["개선 필요", "매우 불만족"])) + eval_radio.change(toggle_analysis_visibility, inputs=[eval_radio], outputs=[analysis_txt]) + + gr.Markdown("---") + gr.Markdown("### 💡 완전한 학습 가이드\n...") # (하단 푸터 내용 생략) + + +if __name__ == "__main__": + demo.launch() \ No newline at end of file