# ========================================================= # 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()