diff --git a/AX 강의 - 1/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라.pptx b/AX 강의 - 1/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라.pptx new file mode 100644 index 0000000..1b99e16 Binary files /dev/null and b/AX 강의 - 1/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라.pptx differ diff --git a/AX 강의 - 1/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라/PROMPT_AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라.txt b/AX 강의 - 1/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라/PROMPT_AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라.txt new file mode 100644 index 0000000..23bba0e --- /dev/null +++ b/AX 강의 - 1/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라/PROMPT_AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라.txt @@ -0,0 +1,29 @@ +너는 기업 AX 전환 교육용 PPT를 설계하는 교육 콘텐츠 디자이너다. + +주제(폴더명/PPT 제목): AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라 +구분: 리더십 +요청(시드 프롬프트): +"리더를 위한 AI 의사결정 전략" 주제야. 리더가 AI를 성과 관리에 어떻게 활용할지, 팀원들의 AI 활용도를 높이기 위한 코칭법은 무엇인지 다뤄줘. 권위 있으면서도 혁신적인 리더의 모습을 투영해줘. + +목표: +- 리더십부터 실무자까지 "왜 이 주제를 이해해야 하는지"를 먼저 설득한다. +- 30분 교육으로 진행 가능하도록 구성한다. +- 최소 20장 이상(권장 22장) 슬라이드가 나오도록 한다. +- 예시(상황/결과/체크리스트/사례)가 풍부해야 한다. +- 발표자가 그대로 읽어도 자연스럽도록 슬라이드 흐름(도입→핵심→사례→리스크→정리)을 만든다. +- 발표 중 **참여형 활동 없이 진행한다.** (참여자에게 '직접 해보라'는 지시 금지) +- 프롬프트/템플릿은 "참고 예시"로만 제시하고, 단계별 따라하기 구성은 만들지 않는다. + +출력 형식(반드시 준수): +- 최종 출력은 JSON 한 덩어리만 출력한다. (설명/문장/코드블록 금지) +- JSON은 아래 스키마를 만족해야 한다: slides.schema.json +- slides[0]은 반드시 type="cover"로 둔다. (표지는 meta.title/meta.subtitle/meta.badge로 자동 생성됨) +- 슬라이드 타입은 다음만 사용한다: + - cover, agenda, section, bullets, two_column, process, table + +작성 규칙: +- bullets는 4~7개 내로, 한 줄은 60자 내로. +- 별도의 prompt(코드블록) 슬라이드를 만들지 않는다. (참여형 활동 유도로 오해될 수 있음) +- table 슬라이드는 열 3~4개, 행 3~6개 정도로 간결하게. +- 보안/윤리/환각 등 리스크가 있는 주제는 "Do & Don't" 또는 "리스크/완화"를 반드시 포함한다. +- 마지막은 요약 + 다음 행동(오늘부터 1개 실행)으로 끝낸다. diff --git a/AX 강의 - 1/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라/make_ppt.py b/AX 강의 - 1/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라/make_ppt.py new file mode 100644 index 0000000..6ae124f --- /dev/null +++ b/AX 강의 - 1/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라/make_ppt.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +import subprocess +import sys +from pathlib import Path + + +def main() -> None: + base = Path(__file__).resolve().parent + common = base.parent / "_common" / "make_ppt.py" + spec = base / "slides.json" + out = base / f"{base.name}.pptx" + subprocess.check_call([sys.executable, str(common), "--spec", str(spec), "--out", str(out)]) + + +if __name__ == "__main__": + main() diff --git a/AX 강의 - 1/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라/slides.example.json b/AX 강의 - 1/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라/slides.example.json new file mode 100644 index 0000000..44a390a --- /dev/null +++ b/AX 강의 - 1/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라/slides.example.json @@ -0,0 +1,112 @@ +{ + "meta": { + "title": "예시 - 강의형(참여형 활동 없음)", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "예시 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝: 오늘은 참여형 활동 없이, 사례/체크리스트 중심으로 진행합니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 흐름을 10초로 안내하고 바로 본론으로 들어갑니다." + }, + { + "type": "section", + "title": "1. 왜 필요한가", + "subtitle": "리더십부터 실무자까지", + "notes": "리더 관점(성과/리스크)과 실무 관점(시간/품질)을 연결해 설명합니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "시간 절감(반복 업무)", + "품질 표준화(템플릿)", + "리스크 감소(검증/승인)", + "온보딩 가속", + "의사결정 리드타임 단축" + ], + "notes": "조직 사례가 있다면 1개만 붙여 설득력을 높입니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "핵심 개념은 3~6개로 제한하고, 각각 1문장으로 정의합니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "오해 vs 현실", + "left_title": "오해", + "left_bullets": ["AI는 만능", "한 번 도입하면 끝"], + "right_title": "현실", + "right_bullets": ["사람 검증이 필수", "운영/거버넌스가 성패를 좌우"], + "notes": "오해를 정리한 뒤, 현실 기준을 '팀 표준'으로 제시합니다." + }, + { + "type": "process", + "chapter": "Part 3", + "title": "적용 루틴(강의형 가이드)", + "steps": [ + "목표/대상/제약 정의", + "입력 데이터 정리", + "출력 형식 지정", + "검증/리스크 체크", + "공유/표준화", + "지표로 개선" + ], + "notes": "참여자에게 '지금 해보라'가 아니라, 기준과 사례를 설명합니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "Before / After (예시)", + "columns": ["업무", "기존", "개선", "절감"], + "rows": [ + ["회의록", "40분", "12분", "28분"], + ["메일", "20분", "5분", "15분"], + ["보고 1p", "60분+", "20분", "40분"] + ], + "notes": "표는 정의/기간을 같이 확인하며 읽습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화", + "left_title": "리스크", + "left_bullets": ["환각/오류", "보안/기밀", "품질 편차", "운영 장애"], + "right_title": "완화", + "right_bullets": ["원문 대조", "입력 금지/가명화", "승인/리뷰", "로그/모니터링"], + "notes": "리스크는 '기술'이 아니라 '프로세스'로 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "요약 & 다음 행동", + "bullets": [ + "목적·맥락·형식 + 검증", + "작게 시작해 표준화", + "지표로 개선", + "오늘 행동: 템플릿 1개를 팀 표준으로 정하기" + ], + "notes": "마무리는 '오늘부터 무엇을 할지' 한 문장으로 정리합니다." + } + ] +} diff --git a/AX 강의 - 1/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라/slides.json b/AX 강의 - 1/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라/slides.json new file mode 100644 index 0000000..a887a82 --- /dev/null +++ b/AX 강의 - 1/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라/slides.json @@ -0,0 +1,311 @@ +{ + "meta": { + "title": "AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "리더십 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝(10초): 오늘 주제는 'AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라'입니다.\n운영 안내(10초): 오늘은 참여형 활동 없이, 사례와 체크리스트 중심으로 정리합니다.\n목표(10초): 왜 중요한지 → 핵심 원칙 → 사례 해설 → 리스크/대응 → 다음 행동까지 30분에 끝냅니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 구성(20초): 5파트로 진행합니다.\n- 1) 왜 필요한가\n- 2) 핵심 개념/원칙\n- 3) 사례로 이해하는 적용 가이드\n- 4) 리스크/체크리스트\n- 5) 요약 & 다음 행동\n안내(10초): 참여형 활동 없이, 바로 가져가 쓸 수 있는 요약/체크리스트 중심입니다." + }, + { + "type": "section", + "title": "1. 왜 이 주제를 이해해야 하나", + "subtitle": "리더십부터 실무자까지", + "notes": "전환(10초): 이제 '1. 왜 이 주제를 이해해야 하나' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "리더십 관점: 왜 중요한가", + "bullets": [ + "AI는 도구가 아니라 ‘의사결정 시스템’의 일부", + "성과 관리는 데이터 정의/KPI가 핵심", + "팀 AI 활용도를 올리려면 코칭/표준이 필요", + "리스크(보안/품질)를 통제해야 확장", + "리더의 질문/프레임이 조직을 바꾼다" + ], + "notes": "핵심(10초): '리더십 관점: 왜 중요한가' 슬라이드입니다.\n포인트(20초): AI는 도구가 아니라 ‘의사결정 시스템’의 일부 / 성과 관리는 데이터 정의/KPI가 핵심\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "실무자 관점: 무엇이 달라지나", + "bullets": [ + "리더의 기준이 명확하면 실행이 쉬움", + "데이터 기반 의사결정은 불필요한 재작업↓", + "AI는 실행(초안/분석/정리)을 가속", + "코칭을 받으면 활용 격차가 줄어듦", + "성과가 투명해지면 성장 경로가 보임" + ], + "notes": "핵심(10초): '실무자 관점: 무엇이 달라지나' 슬라이드입니다.\n포인트(20초): 리더의 기준이 명확하면 실행이 쉬움 / 데이터 기반 의사결정은 불필요한 재작업↓\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "two_column", + "chapter": "Part 1", + "title": "흔한 오해 vs 현실", + "left_title": "오해", + "left_bullets": [ + "AI 도입은 IT의 일이다", + "리더는 결과만 보면 된다", + "KPI는 나중에 잡아도 된다", + "팀원에게 알아서 쓰라 하면 된다" + ], + "right_title": "현실", + "right_bullets": [ + "리더가 목표/지표/리스크를 설계", + "과정(검증/승인)이 품질을 만든다", + "KPI 없이는 확장할 수 없다", + "코칭/템플릿이 활용도를 만든다" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "의사결정 속도↑(정보 요약/대안 비교)", + "성과 관리의 일관성↑", + "팀 생산성 표준화", + "리스크 감소(검증/승인)", + "학습 문화 정착" + ], + "notes": "핵심(10초): '기대 효과(정량/정성)' 슬라이드입니다.\n포인트(20초): 의사결정 속도↑(정보 요약/대안 비교) / 성과 관리의 일관성↑\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "전환(10초): 이제 '2. 핵심 개념과 원칙' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "핵심 개념 6가지", + "bullets": [ + "KPI/지표 정의", + "의사결정 질문 프레임", + "Human-in-the-loop", + "성과 리뷰(주간/월간)", + "코칭(템플릿/리뷰)", + "거버넌스(보안/규정)" + ], + "notes": "핵심(10초): '핵심 개념 6가지' 슬라이드입니다.\n포인트(20초): KPI/지표 정의 / 의사결정 질문 프레임\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "process", + "chapter": "Part 2", + "title": "실행 프레임워크(권장 루틴)", + "steps": [ + "목표/지표 정의", + "데이터 수집/정의 통일", + "AI로 요약/분석(대안 생성)", + "검증/리스크 리뷰", + "결정/실행 계획 작성", + "성과 리뷰/개선" + ], + "notes": "핵심(10초): '실행 프레임워크(권장 루틴)'는 실행 흐름(루틴)을 제시합니다.\n요약(20초): 목표/지표 정의 → 데이터 수집/정의 통일 → AI로 요약/분석(대안 생성) …\n팁(10초): 이 순서를 팀 템플릿으로 고정하면 재작업이 크게 줄어듭니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "좋은 예 vs 나쁜 예 (짧은 비교)", + "left_title": "좋은 예", + "left_bullets": [ + "지표 정의가 명확", + "대안/리스크를 함께 본다", + "코칭(템플릿)으로 표준화", + "리뷰로 지속 개선" + ], + "right_title": "나쁜 예", + "right_bullets": [ + "감으로 결정", + "결론만 보고 근거 없음", + "AI 결과를 무비판 수용", + "팀마다 제각각 도구 사용" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "자주 하는 실수", + "bullets": [ + "KPI를 너무 많이 설정", + "정의/단위가 다른 데이터 혼용", + "검증 없이 실행", + "코칭 없이 방치", + "리스크 발생 후 대응" + ], + "notes": "핵심(10초): '자주 하는 실수' 슬라이드입니다.\n포인트(20초): KPI를 너무 많이 설정 / 정의/단위가 다른 데이터 혼용\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "3. 사례로 이해하는 적용 가이드", + "subtitle": "참여형 활동 없이도 이해되는 예시 중심", + "notes": "전환(10초): 이제 '3. 사례로 이해하는 적용 가이드' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 1) 리더의 의사결정 질문 템플릿", + "bullets": [ + "요청의 역할/관점: 경영진 보좌관이", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"의사결정 주제: [주제] / 목표: [목표]\"", + "포인트: 옵션 3개 강제", + "포인트: 추가 데이터/검증 포함", + "포인트: 담당/기한까지" + ], + "notes": "핵심(10초): '사례 1) 리더의 의사결정 질문 템플릿' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 경영진 보좌관이 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 2) 팀 AI 활용 코칭 플랜", + "bullets": [ + "요청의 역할/관점: 리더 코치", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"팀 구성: [구성] / 업무: [업무]\"", + "포인트: 템플릿 5개로 시작", + "포인트: 리뷰/공유가 핵심", + "포인트: 지표는 간단히" + ], + "notes": "핵심(10초): '사례 2) 팀 AI 활용 코칭 플랜' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 리더 코치 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "성과 관리 지표(예시)", + "columns": [ + "영역", + "지표", + "측정 방법" + ], + "rows": [ + [ + "생산성", + "절감시간(분)", + "전/후 기록" + ], + [ + "품질", + "재작업 횟수", + "리뷰 로그" + ], + [ + "활용", + "템플릿 사용률", + "라이브러리 조회" + ], + [ + "리스크", + "보안 위반 0건", + "점검" + ] + ], + "notes": "읽는 법(15초): 표는 영역, 지표, 측정 방법 기준으로 비교합니다.\n포인트(15초): 수치/정의/기간을 같이 확인해 오해를 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "결과 품질 검증 체크", + "bullets": [ + "사실/수치/고유명사는 원문 대조", + "누락된 가정이 없는지 질문", + "대안 2개 이상 비교 요청", + "리스크/반론을 함께 요청" + ], + "notes": "핵심(10초): '결과 품질 검증 체크' 슬라이드입니다.\n포인트(20초): 사실/수치/고유명사는 원문 대조 / 누락된 가정이 없는지 질문\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "4. 리스크 & 체크리스트", + "subtitle": "안전하게, 팀 단위로 굴리기", + "notes": "전환(10초): 이제 '4. 리스크 & 체크리스트' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화 전략", + "left_title": "리스크", + "left_bullets": [ + "지표 정의 오류", + "AI 과신으로 오판", + "팀 내 격차 확대", + "보안/규정 위반" + ], + "right_title": "완화", + "right_bullets": [ + "지표 정의서/단위 통일", + "검증/승인 프로세스", + "코칭/템플릿 표준화", + "가이드라인/점검" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "체크리스트(현업 적용용)", + "bullets": [ + "목표/KPI가 명확한가", + "데이터 정의가 통일됐나", + "옵션/리스크를 같이 봤나", + "코칭/공유 운영이 있나", + "보안 체크가 내재화됐나" + ], + "notes": "핵심(10초): '체크리스트(현업 적용용)' 슬라이드입니다.\n포인트(20초): 목표/KPI가 명확한가 / 데이터 정의가 통일됐나\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "팀 적용(롤아웃) 방법", + "bullets": [ + "리더가 질문 템플릿을 먼저 사용", + "주간 성과 리뷰에 AI 활용 포함", + "템플릿 라이브러리 구축", + "확장 시 거버넌스 강화" + ], + "notes": "핵심(10초): '팀 적용(롤아웃) 방법' 슬라이드입니다.\n포인트(20초): 리더가 질문 템플릿을 먼저 사용 / 주간 성과 리뷰에 AI 활용 포함\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "5. 요약 & 다음 행동", + "subtitle": "오늘부터 1개만 실행", + "notes": "전환(10초): 이제 '5. 요약 & 다음 행동' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "핵심 요약", + "bullets": [ + "리더십은 목표/지표/리스크를 설계하는 것", + "AI는 의사결정과 실행을 가속한다", + "코칭/템플릿/리뷰로 활용도를 만든다", + "오늘 행동: 의사결정 메모 템플릿 1개 도입" + ], + "notes": "핵심(10초): '핵심 요약' 슬라이드입니다.\n포인트(20초): 리더십은 목표/지표/리스크를 설계하는 것 / AI는 의사결정과 실행을 가속한다\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + } + ] +} diff --git a/AX 강의 - 1/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라/slides.schema.json b/AX 강의 - 1/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라/slides.schema.json new file mode 100644 index 0000000..11cd0ff --- /dev/null +++ b/AX 강의 - 1/AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라/slides.schema.json @@ -0,0 +1,218 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX Curriculum Slides Spec", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "badge": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "tone": { "type": "string" }, + "footer_left": { "type": "string" } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 20, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { + "type": "string", + "enum": ["cover", "agenda", "section", "bullets", "two_column", "process", "prompt", "table"] + }, + "chapter": { "type": "string" }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "items": { "type": "array", "items": { "type": "string" } }, + "bullets": { "type": "array", "items": { "type": "string" } }, + "left_title": { "type": "string" }, + "left_bullets": { "type": "array", "items": { "type": "string" } }, + "right_title": { "type": "string" }, + "right_bullets": { "type": "array", "items": { "type": "string" } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "prompt": { "type": "string" }, + "tips": { "type": "array", "items": { "type": "string" } }, + "columns": { "type": "array", "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": true +} + +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AX Deck Slides JSON Schema", + "type": "object", + "additionalProperties": false, + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "additionalProperties": false, + "required": ["title", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "author": { "type": "string" }, + "date": { "type": "string" }, + "language": { "type": "string", "default": "ko-KR" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "version": { "type": "string" } + } + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { "$ref": "#/definitions/slide" } + } + }, + "definitions": { + "bulletItem": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "additionalProperties": false, + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "children": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + } + ] + }, + "column": { + "type": "object", + "additionalProperties": false, + "required": ["heading", "bullets"], + "properties": { + "heading": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + }, + "slide": { + "type": "object", + "additionalProperties": false, + "required": ["type", "title"], + "properties": { + "type": { + "type": "string", + "enum": [ + "title", + "section", + "agenda", + "bullets", + "two_column_bullets", + "quote", + "table", + "exercise", + "closing", + "blank" + ] + }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + }, + "items": { "type": "array", "items": { "type": "string" } }, + "left": { "$ref": "#/definitions/column" }, + "right": { "$ref": "#/definitions/column" }, + "quote": { "type": "string" }, + "attribution": { "type": "string" }, + "headers": { "type": "array", "minItems": 1, "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "timebox_minutes": { "type": "integer", "minimum": 1 }, + "notes": { "type": "string" } + }, + "allOf": [ + { "if": { "properties": { "type": { "const": "agenda" } } }, "then": { "required": ["items"] } }, + { "if": { "properties": { "type": { "const": "bullets" } } }, "then": { "required": ["bullets"] } }, + { + "if": { "properties": { "type": { "const": "two_column_bullets" } } }, + "then": { "required": ["left", "right"] } + }, + { "if": { "properties": { "type": { "const": "quote" } } }, "then": { "required": ["quote"] } }, + { "if": { "properties": { "type": { "const": "table" } } }, "then": { "required": ["headers", "rows"] } }, + { "if": { "properties": { "type": { "const": "exercise" } } }, "then": { "required": ["steps"] } } + ] + } + } +} +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX 교육용 slides.json 스키마", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 5, "maximum": 180 }, + "audience": { "type": "string" }, + "language": { "type": "string", "enum": ["ko"] }, + "version": { "type": "integer", "minimum": 1 } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { "type": "string", "enum": ["title", "section", "content", "two_content"] }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "level": { "type": "integer", "minimum": 0, "maximum": 5 } + }, + "additionalProperties": false + } + ] + } + }, + "left_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "right_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "notes": { "type": "string" } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": false +} diff --git a/AX 강의 - 1/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기.pptx b/AX 강의 - 1/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기.pptx new file mode 100644 index 0000000..327ac5c Binary files /dev/null and b/AX 강의 - 1/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기.pptx differ diff --git a/AX 강의 - 1/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기/PROMPT_AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기.txt b/AX 강의 - 1/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기/PROMPT_AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기.txt new file mode 100644 index 0000000..31b2a2d --- /dev/null +++ b/AX 강의 - 1/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기/PROMPT_AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기.txt @@ -0,0 +1,29 @@ +너는 기업 AX 전환 교육용 PPT를 설계하는 교육 콘텐츠 디자이너다. + +주제(폴더명/PPT 제목): AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기 +구분: 자기계발 +요청(시드 프롬프트): +"임직원 자기계발: AI 시대의 필수 역량"을 주제로 해줘. 사라지는 기술과 새로 요구되는 기술(Soft Skills)을 비교하고, 회사가 지원하는 교육 로드맵을 보여줘. 동기부여를 자극하는 도전적인 톤으로 구성해줘. + +목표: +- 리더십부터 실무자까지 "왜 이 주제를 이해해야 하는지"를 먼저 설득한다. +- 30분 교육으로 진행 가능하도록 구성한다. +- 최소 20장 이상(권장 22장) 슬라이드가 나오도록 한다. +- 예시(상황/결과/체크리스트/사례)가 풍부해야 한다. +- 발표자가 그대로 읽어도 자연스럽도록 슬라이드 흐름(도입→핵심→사례→리스크→정리)을 만든다. +- 발표 중 **참여형 활동 없이 진행한다.** (참여자에게 '직접 해보라'는 지시 금지) +- 프롬프트/템플릿은 "참고 예시"로만 제시하고, 단계별 따라하기 구성은 만들지 않는다. + +출력 형식(반드시 준수): +- 최종 출력은 JSON 한 덩어리만 출력한다. (설명/문장/코드블록 금지) +- JSON은 아래 스키마를 만족해야 한다: slides.schema.json +- slides[0]은 반드시 type="cover"로 둔다. (표지는 meta.title/meta.subtitle/meta.badge로 자동 생성됨) +- 슬라이드 타입은 다음만 사용한다: + - cover, agenda, section, bullets, two_column, process, table + +작성 규칙: +- bullets는 4~7개 내로, 한 줄은 60자 내로. +- 별도의 prompt(코드블록) 슬라이드를 만들지 않는다. (참여형 활동 유도로 오해될 수 있음) +- table 슬라이드는 열 3~4개, 행 3~6개 정도로 간결하게. +- 보안/윤리/환각 등 리스크가 있는 주제는 "Do & Don't" 또는 "리스크/완화"를 반드시 포함한다. +- 마지막은 요약 + 다음 행동(오늘부터 1개 실행)으로 끝낸다. diff --git a/AX 강의 - 1/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기/make_ppt.py b/AX 강의 - 1/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기/make_ppt.py new file mode 100644 index 0000000..6ae124f --- /dev/null +++ b/AX 강의 - 1/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기/make_ppt.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +import subprocess +import sys +from pathlib import Path + + +def main() -> None: + base = Path(__file__).resolve().parent + common = base.parent / "_common" / "make_ppt.py" + spec = base / "slides.json" + out = base / f"{base.name}.pptx" + subprocess.check_call([sys.executable, str(common), "--spec", str(spec), "--out", str(out)]) + + +if __name__ == "__main__": + main() diff --git a/AX 강의 - 1/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기/slides.example.json b/AX 강의 - 1/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기/slides.example.json new file mode 100644 index 0000000..44a390a --- /dev/null +++ b/AX 강의 - 1/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기/slides.example.json @@ -0,0 +1,112 @@ +{ + "meta": { + "title": "예시 - 강의형(참여형 활동 없음)", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "예시 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝: 오늘은 참여형 활동 없이, 사례/체크리스트 중심으로 진행합니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 흐름을 10초로 안내하고 바로 본론으로 들어갑니다." + }, + { + "type": "section", + "title": "1. 왜 필요한가", + "subtitle": "리더십부터 실무자까지", + "notes": "리더 관점(성과/리스크)과 실무 관점(시간/품질)을 연결해 설명합니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "시간 절감(반복 업무)", + "품질 표준화(템플릿)", + "리스크 감소(검증/승인)", + "온보딩 가속", + "의사결정 리드타임 단축" + ], + "notes": "조직 사례가 있다면 1개만 붙여 설득력을 높입니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "핵심 개념은 3~6개로 제한하고, 각각 1문장으로 정의합니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "오해 vs 현실", + "left_title": "오해", + "left_bullets": ["AI는 만능", "한 번 도입하면 끝"], + "right_title": "현실", + "right_bullets": ["사람 검증이 필수", "운영/거버넌스가 성패를 좌우"], + "notes": "오해를 정리한 뒤, 현실 기준을 '팀 표준'으로 제시합니다." + }, + { + "type": "process", + "chapter": "Part 3", + "title": "적용 루틴(강의형 가이드)", + "steps": [ + "목표/대상/제약 정의", + "입력 데이터 정리", + "출력 형식 지정", + "검증/리스크 체크", + "공유/표준화", + "지표로 개선" + ], + "notes": "참여자에게 '지금 해보라'가 아니라, 기준과 사례를 설명합니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "Before / After (예시)", + "columns": ["업무", "기존", "개선", "절감"], + "rows": [ + ["회의록", "40분", "12분", "28분"], + ["메일", "20분", "5분", "15분"], + ["보고 1p", "60분+", "20분", "40분"] + ], + "notes": "표는 정의/기간을 같이 확인하며 읽습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화", + "left_title": "리스크", + "left_bullets": ["환각/오류", "보안/기밀", "품질 편차", "운영 장애"], + "right_title": "완화", + "right_bullets": ["원문 대조", "입력 금지/가명화", "승인/리뷰", "로그/모니터링"], + "notes": "리스크는 '기술'이 아니라 '프로세스'로 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "요약 & 다음 행동", + "bullets": [ + "목적·맥락·형식 + 검증", + "작게 시작해 표준화", + "지표로 개선", + "오늘 행동: 템플릿 1개를 팀 표준으로 정하기" + ], + "notes": "마무리는 '오늘부터 무엇을 할지' 한 문장으로 정리합니다." + } + ] +} diff --git a/AX 강의 - 1/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기/slides.json b/AX 강의 - 1/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기/slides.json new file mode 100644 index 0000000..ae6bc75 --- /dev/null +++ b/AX 강의 - 1/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기/slides.json @@ -0,0 +1,306 @@ +{ + "meta": { + "title": "AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "자기계발 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝(10초): 오늘 주제는 'AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기'입니다.\n운영 안내(10초): 오늘은 참여형 활동 없이, 사례와 체크리스트 중심으로 정리합니다.\n목표(10초): 왜 중요한지 → 핵심 원칙 → 사례 해설 → 리스크/대응 → 다음 행동까지 30분에 끝냅니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 구성(20초): 5파트로 진행합니다.\n- 1) 왜 필요한가\n- 2) 핵심 개념/원칙\n- 3) 사례로 이해하는 적용 가이드\n- 4) 리스크/체크리스트\n- 5) 요약 & 다음 행동\n안내(10초): 참여형 활동 없이, 바로 가져가 쓸 수 있는 요약/체크리스트 중심입니다." + }, + { + "type": "section", + "title": "1. 왜 이 주제를 이해해야 하나", + "subtitle": "리더십부터 실무자까지", + "notes": "전환(10초): 이제 '1. 왜 이 주제를 이해해야 하나' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "리더십 관점: 왜 중요한가", + "bullets": [ + "역량 변화는 인력 전략(채용/교육/평가)으로 연결", + "AI 활용 격차는 조직 리스크(성과 편차)", + "직무 재설계가 필요(업무 구조 변화)", + "교육 로드맵이 있어야 불안이 줄어듦", + "성과/성장 지표를 함께 설계해야 함" + ], + "notes": "핵심(10초): '리더십 관점: 왜 중요한가' 슬라이드입니다.\n포인트(20초): 역량 변화는 인력 전략(채용/교육/평가)으로 연결 / AI 활용 격차는 조직 리스크(성과 편차)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "실무자 관점: 무엇이 달라지나", + "bullets": [ + "AI가 바꾸는 건 ‘직무’보다 ‘업무’ 단위", + "새 역량은 지금부터 쌓을수록 유리", + "AI는 나의 생산성을 올리는 레버리지", + "소프트 스킬(문제정의/소통)이 더 중요", + "학습 루틴을 만들면 커리어 불안이 줄어듦" + ], + "notes": "핵심(10초): '실무자 관점: 무엇이 달라지나' 슬라이드입니다.\n포인트(20초): AI가 바꾸는 건 ‘직무’보다 ‘업무’ 단위 / 새 역량은 지금부터 쌓을수록 유리\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "two_column", + "chapter": "Part 1", + "title": "흔한 오해 vs 현실", + "left_title": "오해", + "left_bullets": [ + "AI 때문에 내 커리어는 끝이다", + "기술만 배우면 된다", + "도구를 하나만 익히면 된다", + "학습은 시간이 있을 때 한다" + ], + "right_title": "현실", + "right_bullets": [ + "업무 재구성으로 역할이 진화", + "문제정의/검증/의사결정이 핵심", + "도구는 바뀌고 원칙은 남는다", + "매주 작은 학습이 장기 경쟁력" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "업무 속도↑로 ‘고부가가치’에 시간 투자", + "학습 속도↑(자료/요약/초안)", + "커리어 이동성↑(스킬 포트폴리오)", + "성과 가시화(KPI) 쉬움", + "불안↓ 자신감↑" + ], + "notes": "핵심(10초): '기대 효과(정량/정성)' 슬라이드입니다.\n포인트(20초): 업무 속도↑로 ‘고부가가치’에 시간 투자 / 학습 속도↑(자료/요약/초안)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "전환(10초): 이제 '2. 핵심 개념과 원칙' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "핵심 개념 6가지", + "bullets": [ + "T자형 역량: 도메인 깊이 + AI 활용", + "문제정의/목표설정", + "프롬프트/워크플로우 설계", + "검증/리스크 관리", + "협업/커뮤니케이션", + "학습 루틴(포트폴리오)" + ], + "notes": "핵심(10초): '핵심 개념 6가지' 슬라이드입니다.\n포인트(20초): T자형 역량: 도메인 깊이 + AI 활용 / 문제정의/목표설정\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "process", + "chapter": "Part 2", + "title": "실행 프레임워크(권장 루틴)", + "steps": [ + "내 업무를 ‘대체/증폭/신규’로 분류", + "증폭 영역 1개 선택", + "템플릿/체크리스트 구축", + "결과를 포트폴리오로 기록", + "피드백 받아 개선", + "3개월 단위 목표 재설정" + ], + "notes": "핵심(10초): '실행 프레임워크(권장 루틴)'는 실행 흐름(루틴)을 제시합니다.\n요약(20초): 내 업무를 ‘대체/증폭/신규’로 분류 → 증폭 영역 1개 선택 → 템플릿/체크리스트 구축 …\n팁(10초): 이 순서를 팀 템플릿으로 고정하면 재작업이 크게 줄어듭니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "좋은 예 vs 나쁜 예 (짧은 비교)", + "left_title": "좋은 예", + "left_bullets": [ + "도메인 문제를 AI로 증폭", + "검증/책임을 내가 갖는다", + "학습을 루틴화", + "성과를 기록한다" + ], + "right_title": "나쁜 예", + "right_bullets": [ + "도구만 따라하기", + "검증 없이 복붙", + "학습을 ‘나중에’로 미룸", + "성과 기록 없음" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "자주 하는 실수", + "bullets": [ + "기술만 보고 도메인 이해를 소홀", + "학습 목표가 모호", + "성과/결과물을 남기지 않음", + "보안/규정 무시", + "혼자만 쓰고 공유 안 함" + ], + "notes": "핵심(10초): '자주 하는 실수' 슬라이드입니다.\n포인트(20초): 기술만 보고 도메인 이해를 소홀 / 학습 목표가 모호\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "3. 사례로 이해하는 적용 가이드", + "subtitle": "참여형 활동 없이도 이해되는 예시 중심", + "notes": "전환(10초): 이제 '3. 사례로 이해하는 적용 가이드' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 1) 내 직무 ‘업무 재구성’ 지도", + "bullets": [ + "요청의 역할/관점: 커리어 코치", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"내 직무는 [직무]이고, 주요 업무는 아래 6개야. / - (업무 리스트)\"", + "포인트: 업무를 6개로 쪼개기", + "포인트: 증폭 2개만 선택", + "포인트: 4주 계획은 작게" + ], + "notes": "핵심(10초): '사례 1) 내 직무 ‘업무 재구성’ 지도' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 커리어 코치 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 2) 역량 로드맵(회사 교육 연계) 만들기", + "bullets": [ + "요청의 역할/관점: 사내 교육 설계자", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"대상: [직군/연차] / AI 시대 핵심 역량을 6개로 정리하고,\"", + "포인트: 적용은 ‘산출물’로", + "포인트: 지표는 측정 가능하게", + "포인트: 직군/연차를 구체화" + ], + "notes": "핵심(10초): '사례 2) 역량 로드맵(회사 교육 연계) 만들기' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 사내 교육 설계자 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "역량 변화(예시)", + "columns": [ + "약해지는 역량", + "강해지는 역량", + "예시" + ], + "rows": [ + [ + "반복 문서 작성", + "문제 정의", + "요구사항 구조화" + ], + [ + "단순 번역/요약", + "검증/리스크", + "팩트체크" + ], + [ + "정해진 절차 수행", + "워크플로우 설계", + "자동화" + ] + ], + "notes": "읽는 법(15초): 표는 약해지는 역량, 강해지는 역량, 예시 기준으로 비교합니다.\n포인트(15초): 수치/정의/기간을 같이 확인해 오해를 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "결과 품질 검증 체크", + "bullets": [ + "사실/수치/고유명사는 원문 대조", + "누락된 가정이 없는지 질문", + "대안 2개 이상 비교 요청", + "리스크/반론을 함께 요청" + ], + "notes": "핵심(10초): '결과 품질 검증 체크' 슬라이드입니다.\n포인트(20초): 사실/수치/고유명사는 원문 대조 / 누락된 가정이 없는지 질문\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "4. 리스크 & 체크리스트", + "subtitle": "안전하게, 팀 단위로 굴리기", + "notes": "전환(10초): 이제 '4. 리스크 & 체크리스트' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화 전략", + "left_title": "리스크", + "left_bullets": [ + "불안/저항으로 학습 중단", + "도구 변화에 피로", + "성과 가시화 실패", + "보안 리스크" + ], + "right_title": "완화", + "right_bullets": [ + "작은 목표/성공 경험 설계", + "원칙 중심 학습", + "포트폴리오로 성과 기록", + "보안 체크리스트 내재화" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "체크리스트(현업 적용용)", + "bullets": [ + "업무를 대체/증폭으로 분류했나", + "증폭 2개 목표가 있는가", + "4주 적용 계획이 있는가", + "성과 지표가 있는가", + "산출물(포트폴리오)을 남겼나" + ], + "notes": "핵심(10초): '체크리스트(현업 적용용)' 슬라이드입니다.\n포인트(20초): 업무를 대체/증폭으로 분류했나 / 증폭 2개 목표가 있는가\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "팀 적용(롤아웃) 방법", + "bullets": [ + "팀별 학습 스프린트 운영", + "산출물 데모/공유", + "멘토/리뷰 체계", + "교육 로드맵 공개" + ], + "notes": "핵심(10초): '팀 적용(롤아웃) 방법' 슬라이드입니다.\n포인트(20초): 팀별 학습 스프린트 운영 / 산출물 데모/공유\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "5. 요약 & 다음 행동", + "subtitle": "오늘부터 1개만 실행", + "notes": "전환(10초): 이제 '5. 요약 & 다음 행동' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "핵심 요약", + "bullets": [ + "AI 시대 핵심은 도구가 아니라 역량", + "증폭 영역을 선택하고 루틴으로 학습", + "성과는 포트폴리오로 남긴다", + "오늘 행동: 내 업무 6개를 대체/증폭으로 분류" + ], + "notes": "핵심(10초): '핵심 요약' 슬라이드입니다.\n포인트(20초): AI 시대 핵심은 도구가 아니라 역량 / 증폭 영역을 선택하고 루틴으로 학습\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + } + ] +} diff --git a/AX 강의 - 1/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기/slides.schema.json b/AX 강의 - 1/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기/slides.schema.json new file mode 100644 index 0000000..11cd0ff --- /dev/null +++ b/AX 강의 - 1/AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기/slides.schema.json @@ -0,0 +1,218 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX Curriculum Slides Spec", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "badge": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "tone": { "type": "string" }, + "footer_left": { "type": "string" } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 20, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { + "type": "string", + "enum": ["cover", "agenda", "section", "bullets", "two_column", "process", "prompt", "table"] + }, + "chapter": { "type": "string" }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "items": { "type": "array", "items": { "type": "string" } }, + "bullets": { "type": "array", "items": { "type": "string" } }, + "left_title": { "type": "string" }, + "left_bullets": { "type": "array", "items": { "type": "string" } }, + "right_title": { "type": "string" }, + "right_bullets": { "type": "array", "items": { "type": "string" } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "prompt": { "type": "string" }, + "tips": { "type": "array", "items": { "type": "string" } }, + "columns": { "type": "array", "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": true +} + +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AX Deck Slides JSON Schema", + "type": "object", + "additionalProperties": false, + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "additionalProperties": false, + "required": ["title", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "author": { "type": "string" }, + "date": { "type": "string" }, + "language": { "type": "string", "default": "ko-KR" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "version": { "type": "string" } + } + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { "$ref": "#/definitions/slide" } + } + }, + "definitions": { + "bulletItem": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "additionalProperties": false, + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "children": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + } + ] + }, + "column": { + "type": "object", + "additionalProperties": false, + "required": ["heading", "bullets"], + "properties": { + "heading": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + }, + "slide": { + "type": "object", + "additionalProperties": false, + "required": ["type", "title"], + "properties": { + "type": { + "type": "string", + "enum": [ + "title", + "section", + "agenda", + "bullets", + "two_column_bullets", + "quote", + "table", + "exercise", + "closing", + "blank" + ] + }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + }, + "items": { "type": "array", "items": { "type": "string" } }, + "left": { "$ref": "#/definitions/column" }, + "right": { "$ref": "#/definitions/column" }, + "quote": { "type": "string" }, + "attribution": { "type": "string" }, + "headers": { "type": "array", "minItems": 1, "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "timebox_minutes": { "type": "integer", "minimum": 1 }, + "notes": { "type": "string" } + }, + "allOf": [ + { "if": { "properties": { "type": { "const": "agenda" } } }, "then": { "required": ["items"] } }, + { "if": { "properties": { "type": { "const": "bullets" } } }, "then": { "required": ["bullets"] } }, + { + "if": { "properties": { "type": { "const": "two_column_bullets" } } }, + "then": { "required": ["left", "right"] } + }, + { "if": { "properties": { "type": { "const": "quote" } } }, "then": { "required": ["quote"] } }, + { "if": { "properties": { "type": { "const": "table" } } }, "then": { "required": ["headers", "rows"] } }, + { "if": { "properties": { "type": { "const": "exercise" } } }, "then": { "required": ["steps"] } } + ] + } + } +} +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX 교육용 slides.json 스키마", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 5, "maximum": 180 }, + "audience": { "type": "string" }, + "language": { "type": "string", "enum": ["ko"] }, + "version": { "type": "integer", "minimum": 1 } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { "type": "string", "enum": ["title", "section", "content", "two_content"] }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "level": { "type": "integer", "minimum": 0, "maximum": 5 } + }, + "additionalProperties": false + } + ] + } + }, + "left_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "right_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "notes": { "type": "string" } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": false +} diff --git a/AX 강의 - 1/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다.pptx b/AX 강의 - 1/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다.pptx new file mode 100644 index 0000000..48a1d94 Binary files /dev/null and b/AX 강의 - 1/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다.pptx differ diff --git a/AX 강의 - 1/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다/PROMPT_AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다.txt b/AX 강의 - 1/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다/PROMPT_AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다.txt new file mode 100644 index 0000000..c9127e1 --- /dev/null +++ b/AX 강의 - 1/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다/PROMPT_AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다.txt @@ -0,0 +1,29 @@ +너는 기업 AX 전환 교육용 PPT를 설계하는 교육 콘텐츠 디자이너다. + +주제(폴더명/PPT 제목): AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다 +구분: 마인드셋 +요청(시드 프롬프트): +"AI와 인간의 협업 마인드셋"을 주제로 PPT 개요를 짜줘. AI가 일자리를 대체한다는 공포를 해소하고, '인간의 창의성 + AI의 속도'가 결합된 미래 업무 모습을 시각화해줘. 신뢰감 있고 희망찬 톤으로 작성해줘. + +목표: +- 리더십부터 실무자까지 "왜 이 주제를 이해해야 하는지"를 먼저 설득한다. +- 30분 교육으로 진행 가능하도록 구성한다. +- 최소 20장 이상(권장 22장) 슬라이드가 나오도록 한다. +- 예시(상황/결과/체크리스트/사례)가 풍부해야 한다. +- 발표자가 그대로 읽어도 자연스럽도록 슬라이드 흐름(도입→핵심→사례→리스크→정리)을 만든다. +- 발표 중 **참여형 활동 없이 진행한다.** (참여자에게 '직접 해보라'는 지시 금지) +- 프롬프트/템플릿은 "참고 예시"로만 제시하고, 단계별 따라하기 구성은 만들지 않는다. + +출력 형식(반드시 준수): +- 최종 출력은 JSON 한 덩어리만 출력한다. (설명/문장/코드블록 금지) +- JSON은 아래 스키마를 만족해야 한다: slides.schema.json +- slides[0]은 반드시 type="cover"로 둔다. (표지는 meta.title/meta.subtitle/meta.badge로 자동 생성됨) +- 슬라이드 타입은 다음만 사용한다: + - cover, agenda, section, bullets, two_column, process, table + +작성 규칙: +- bullets는 4~7개 내로, 한 줄은 60자 내로. +- 별도의 prompt(코드블록) 슬라이드를 만들지 않는다. (참여형 활동 유도로 오해될 수 있음) +- table 슬라이드는 열 3~4개, 행 3~6개 정도로 간결하게. +- 보안/윤리/환각 등 리스크가 있는 주제는 "Do & Don't" 또는 "리스크/완화"를 반드시 포함한다. +- 마지막은 요약 + 다음 행동(오늘부터 1개 실행)으로 끝낸다. diff --git a/AX 강의 - 1/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다/make_ppt.py b/AX 강의 - 1/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다/make_ppt.py new file mode 100644 index 0000000..6ae124f --- /dev/null +++ b/AX 강의 - 1/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다/make_ppt.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +import subprocess +import sys +from pathlib import Path + + +def main() -> None: + base = Path(__file__).resolve().parent + common = base.parent / "_common" / "make_ppt.py" + spec = base / "slides.json" + out = base / f"{base.name}.pptx" + subprocess.check_call([sys.executable, str(common), "--spec", str(spec), "--out", str(out)]) + + +if __name__ == "__main__": + main() diff --git a/AX 강의 - 1/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다/slides.example.json b/AX 강의 - 1/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다/slides.example.json new file mode 100644 index 0000000..44a390a --- /dev/null +++ b/AX 강의 - 1/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다/slides.example.json @@ -0,0 +1,112 @@ +{ + "meta": { + "title": "예시 - 강의형(참여형 활동 없음)", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "예시 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝: 오늘은 참여형 활동 없이, 사례/체크리스트 중심으로 진행합니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 흐름을 10초로 안내하고 바로 본론으로 들어갑니다." + }, + { + "type": "section", + "title": "1. 왜 필요한가", + "subtitle": "리더십부터 실무자까지", + "notes": "리더 관점(성과/리스크)과 실무 관점(시간/품질)을 연결해 설명합니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "시간 절감(반복 업무)", + "품질 표준화(템플릿)", + "리스크 감소(검증/승인)", + "온보딩 가속", + "의사결정 리드타임 단축" + ], + "notes": "조직 사례가 있다면 1개만 붙여 설득력을 높입니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "핵심 개념은 3~6개로 제한하고, 각각 1문장으로 정의합니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "오해 vs 현실", + "left_title": "오해", + "left_bullets": ["AI는 만능", "한 번 도입하면 끝"], + "right_title": "현실", + "right_bullets": ["사람 검증이 필수", "운영/거버넌스가 성패를 좌우"], + "notes": "오해를 정리한 뒤, 현실 기준을 '팀 표준'으로 제시합니다." + }, + { + "type": "process", + "chapter": "Part 3", + "title": "적용 루틴(강의형 가이드)", + "steps": [ + "목표/대상/제약 정의", + "입력 데이터 정리", + "출력 형식 지정", + "검증/리스크 체크", + "공유/표준화", + "지표로 개선" + ], + "notes": "참여자에게 '지금 해보라'가 아니라, 기준과 사례를 설명합니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "Before / After (예시)", + "columns": ["업무", "기존", "개선", "절감"], + "rows": [ + ["회의록", "40분", "12분", "28분"], + ["메일", "20분", "5분", "15분"], + ["보고 1p", "60분+", "20분", "40분"] + ], + "notes": "표는 정의/기간을 같이 확인하며 읽습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화", + "left_title": "리스크", + "left_bullets": ["환각/오류", "보안/기밀", "품질 편차", "운영 장애"], + "right_title": "완화", + "right_bullets": ["원문 대조", "입력 금지/가명화", "승인/리뷰", "로그/모니터링"], + "notes": "리스크는 '기술'이 아니라 '프로세스'로 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "요약 & 다음 행동", + "bullets": [ + "목적·맥락·형식 + 검증", + "작게 시작해 표준화", + "지표로 개선", + "오늘 행동: 템플릿 1개를 팀 표준으로 정하기" + ], + "notes": "마무리는 '오늘부터 무엇을 할지' 한 문장으로 정리합니다." + } + ] +} diff --git a/AX 강의 - 1/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다/slides.json b/AX 강의 - 1/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다/slides.json new file mode 100644 index 0000000..0bd155c --- /dev/null +++ b/AX 강의 - 1/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다/slides.json @@ -0,0 +1,310 @@ +{ + "meta": { + "title": "AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "마인드셋 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝(10초): 오늘 주제는 'AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다'입니다.\n운영 안내(10초): 오늘은 참여형 활동 없이, 사례와 체크리스트 중심으로 정리합니다.\n목표(10초): 왜 중요한지 → 핵심 원칙 → 사례 해설 → 리스크/대응 → 다음 행동까지 30분에 끝냅니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 구성(20초): 5파트로 진행합니다.\n- 1) 왜 필요한가\n- 2) 핵심 개념/원칙\n- 3) 사례로 이해하는 적용 가이드\n- 4) 리스크/체크리스트\n- 5) 요약 & 다음 행동\n안내(10초): 참여형 활동 없이, 바로 가져가 쓸 수 있는 요약/체크리스트 중심입니다." + }, + { + "type": "section", + "title": "1. 왜 이 주제를 이해해야 하나", + "subtitle": "리더십부터 실무자까지", + "notes": "전환(10초): 이제 '1. 왜 이 주제를 이해해야 하나' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "리더십 관점: 왜 중요한가", + "bullets": [ + "AI 도입은 비용이 아니라 생산성 투자: KPI로 설계해야 함", + "‘AI 활용 격차’가 성과 격차로 전이됨(조직 리스크)", + "업무 프로세스 재설계 없이 툴만 깔면 실패 확률↑", + "현장 저항/두려움은 변화관리의 핵심 변수", + "작은 성공(Small Win)을 조직적으로 확산해야 함" + ], + "notes": "핵심(10초): '리더십 관점: 왜 중요한가' 슬라이드입니다.\n포인트(20초): AI 도입은 비용이 아니라 생산성 투자: KPI로 설계해야 함 / ‘AI 활용 격차’가 성과 격차로 전이됨(조직 리스크)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "실무자 관점: 무엇이 달라지나", + "bullets": [ + "AI는 반복 작업을 줄이고 ‘판단/소통’에 시간을 돌려줌", + "내 업무를 잘 설명할수록 AI가 더 잘 도와줌", + "초안→검토 루틴이 생기면 품질이 안정적으로 개선", + "‘나만의 템플릿’이 곧 개인 경쟁력이 됨", + "일/학습 속도가 빨라져 성장 체감이 생김" + ], + "notes": "핵심(10초): '실무자 관점: 무엇이 달라지나' 슬라이드입니다.\n포인트(20초): AI는 반복 작업을 줄이고 ‘판단/소통’에 시간을 돌려줌 / 내 업무를 잘 설명할수록 AI가 더 잘 도와줌\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "two_column", + "chapter": "Part 1", + "title": "흔한 오해 vs 현실", + "left_title": "오해", + "left_bullets": [ + "AI가 들어오면 내 일은 사라진다", + "AI는 정답을 준다", + "AI는 내가 알아서 잘 쓸 수 있다", + "AI는 전문가만 쓰는 도구다" + ], + "right_title": "현실", + "right_bullets": [ + "업무는 ‘대체’보다 ‘재배치’: 반복↓ 판단/협업↑", + "AI는 ‘초안’에 강하고 검증은 사람 몫", + "좋은 입력(목적/맥락/형식)이 성과를 결정", + "초보도 ‘템플릿’으로 빠르게 숙련 가능" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "반복 문서(메일/요약/보고) 시간 30~70% 단축", + "회의 후속 액션 누락 감소(체크리스트화)", + "아이디어 발산 속도↑ → 의사결정 리드타임↓", + "교육/온보딩 콘텐츠 제작 속도↑", + "개인 단위로 ‘일하는 방식’이 표준화됨" + ], + "notes": "핵심(10초): '기대 효과(정량/정성)' 슬라이드입니다.\n포인트(20초): 반복 문서(메일/요약/보고) 시간 30~70% 단축 / 회의 후속 액션 누락 감소(체크리스트화)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "전환(10초): 이제 '2. 핵심 개념과 원칙' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "핵심 개념 6가지", + "bullets": [ + "AI는 ‘확률 기반’ 언어 생성기: 그럴듯한 오류 가능", + "입력 품질 = 출력 품질(맥락/제약/형식)", + "AI는 초안 작성자, 사람은 검토자/의사결정자", + "작게 시작해 반복 개선(Iterative)", + "템플릿화(재사용)로 ROI를 만든다", + "검증/보안은 습관으로 내재화" + ], + "notes": "핵심(10초): '핵심 개념 6가지' 슬라이드입니다.\n포인트(20초): AI는 ‘확률 기반’ 언어 생성기: 그럴듯한 오류 가능 / 입력 품질 = 출력 품질(맥락/제약/형식)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "process", + "chapter": "Part 2", + "title": "실행 프레임워크(권장 루틴)", + "steps": [ + "업무 1개를 고른다(반복/시간소모)", + "목적·대상·제약을 3줄로 정리", + "형식(표/목차/분량/톤)을 지정", + "초안 생성→내가 검토·수정", + "좋은 결과는 템플릿으로 저장/공유", + "주 1회 개선(예시 추가/실수 제거)" + ], + "notes": "핵심(10초): '실행 프레임워크(권장 루틴)'는 실행 흐름(루틴)을 제시합니다.\n요약(20초): 업무 1개를 고른다(반복/시간소모) → 목적·대상·제약을 3줄로 정리 → 형식(표/목차/분량/톤)을 지정 …\n팁(10초): 이 순서를 팀 템플릿으로 고정하면 재작업이 크게 줄어듭니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "좋은 예 vs 나쁜 예 (짧은 비교)", + "left_title": "좋은 예", + "left_bullets": [ + "목적/대상/형식이 명시된 요청", + "‘결론 먼저 + 근거’ 구조", + "예시 1개 제공(스타일 고정)", + "검증 질문(반론/리스크) 포함" + ], + "right_title": "나쁜 예", + "right_bullets": [ + "‘보고서 써줘’ 같은 모호한 지시", + "데이터/기간/대상을 누락", + "형식 지정 없이 장문 생성", + "검증 없이 그대로 복붙" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "자주 하는 실수", + "bullets": [ + "AI 답을 정답으로 취급(검증 생략)", + "업무 목적 대신 ‘기능’만 요구", + "회사/고객 민감정보를 그대로 입력", + "결과물 책임 소재를 AI에 전가", + "템플릿을 안 남겨 매번 처음부터 다시 함" + ], + "notes": "핵심(10초): '자주 하는 실수' 슬라이드입니다.\n포인트(20초): AI 답을 정답으로 취급(검증 생략) / 업무 목적 대신 ‘기능’만 요구\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "3. 사례로 이해하는 적용 가이드", + "subtitle": "참여형 활동 없이도 이해되는 예시 중심", + "notes": "전환(10초): 이제 '3. 사례로 이해하는 적용 가이드' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 1) 내 업무 1개를 ‘AI 협업’으로 재설계", + "bullets": [ + "요청의 역할/관점: 나의 업무 코치", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"내 업무는 [업무명]이고, 목표는 [목표]야. / 현재 문제는 [시간이 오래 걸리는 이유/병목]이야\"", + "포인트: 업무를 ‘단계’로 쪼개기", + "포인트: 절감시간은 분 단위로 가정해보기", + "포인트: 입력 체크리스트를 바로 템플릿화" + ], + "notes": "핵심(10초): '사례 1) 내 업무 1개를 ‘AI 협업’으로 재설계' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 나의 업무 코치 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 2) ‘검증 질문’ 붙여서 품질 올리기", + "bullets": [ + "요청의 역할/관점: 꼼꼼한 리뷰어", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"아래 AI 초안을 검토해줘. / - 사실/수치/고유명사 오류 가능성이 있는 부분 표시\"", + "포인트: ‘누락 질문’이 품질을 올린다", + "포인트: 반론/리스크를 먼저 받으면 안전", + "포인트: 리라이팅은 1회만, 과도한 편집 방지" + ], + "notes": "핵심(10초): '사례 2) ‘검증 질문’ 붙여서 품질 올리기' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 꼼꼼한 리뷰어 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "시간을 버는 대표 업무(예시)", + "columns": [ + "업무", + "기존 소요", + "AI 협업", + "핵심 조건" + ], + "rows": [ + [ + "메일 초안", + "15~25분", + "3~7분", + "대상/목적/톤" + ], + [ + "회의록 요약", + "30~45분", + "8~15분", + "결정/액션 추출" + ], + [ + "보고서 1p 요약", + "60분+", + "15~25분", + "결론 먼저/표" + ] + ], + "notes": "읽는 법(15초): 표는 업무, 기존 소요, AI 협업, 핵심 조건 기준으로 비교합니다.\n포인트(15초): 수치/정의/기간을 같이 확인해 오해를 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "결과 품질 검증 체크", + "bullets": [ + "사실/수치/고유명사는 원문 대조", + "누락된 가정이 없는지 질문", + "대안 2개 이상 비교 요청", + "리스크/반론을 함께 요청" + ], + "notes": "핵심(10초): '결과 품질 검증 체크' 슬라이드입니다.\n포인트(20초): 사실/수치/고유명사는 원문 대조 / 누락된 가정이 없는지 질문\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "4. 리스크 & 체크리스트", + "subtitle": "안전하게, 팀 단위로 굴리기", + "notes": "전환(10초): 이제 '4. 리스크 & 체크리스트' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화 전략", + "left_title": "리스크", + "left_bullets": [ + "성과 압박으로 ‘무작정 도입’", + "검증 없이 복붙(품질 리스크)", + "개인별 방식 난립(표준 부재)", + "AI 과신/의존" + ], + "right_title": "완화", + "right_bullets": [ + "작은 성공을 KPI로 설계", + "검증 체크리스트를 기본 탑재", + "템플릿/예시로 표준화", + "사람 책임/승인 프로세스 명확화" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "체크리스트(현업 적용용)", + "bullets": [ + "목적/대상/제약이 3줄로 정리됐나", + "입력 데이터는 충분한가", + "출력 형식(표/목차/분량/톤)을 줬나", + "검증 질문(반론/리스크)을 붙였나", + "좋은 결과를 템플릿으로 저장했나" + ], + "notes": "핵심(10초): '체크리스트(현업 적용용)' 슬라이드입니다.\n포인트(20초): 목적/대상/제약이 3줄로 정리됐나 / 입력 데이터는 충분한가\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "팀 적용(롤아웃) 방법", + "bullets": [ + "팀 공통 템플릿 5개부터 시작", + "주 1회 ‘좋은 프롬프트 공유’ 10분", + "성과는 시간절감/품질지표로 기록", + "실패 사례도 같이 공유(학습)" + ], + "notes": "핵심(10초): '팀 적용(롤아웃) 방법' 슬라이드입니다.\n포인트(20초): 팀 공통 템플릿 5개부터 시작 / 주 1회 ‘좋은 프롬프트 공유’ 10분\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "5. 요약 & 다음 행동", + "subtitle": "오늘부터 1개만 실행", + "notes": "전환(10초): 이제 '5. 요약 & 다음 행동' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "핵심 요약", + "bullets": [ + "AI는 대체자가 아니라 증폭기(Amplifier)", + "핵심은 목적·맥락·형식 + 검증", + "작게 시작해 템플릿으로 확장", + "오늘 행동: 내 업무 1개를 단계로 쪼개고 템플릿 1개 만들기" + ], + "notes": "핵심(10초): '핵심 요약' 슬라이드입니다.\n포인트(20초): AI는 대체자가 아니라 증폭기(Amplifier) / 핵심은 목적·맥락·형식 + 검증\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + } + ] +} diff --git a/AX 강의 - 1/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다/slides.schema.json b/AX 강의 - 1/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다/slides.schema.json new file mode 100644 index 0000000..11cd0ff --- /dev/null +++ b/AX 강의 - 1/AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다/slides.schema.json @@ -0,0 +1,218 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX Curriculum Slides Spec", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "badge": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "tone": { "type": "string" }, + "footer_left": { "type": "string" } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 20, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { + "type": "string", + "enum": ["cover", "agenda", "section", "bullets", "two_column", "process", "prompt", "table"] + }, + "chapter": { "type": "string" }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "items": { "type": "array", "items": { "type": "string" } }, + "bullets": { "type": "array", "items": { "type": "string" } }, + "left_title": { "type": "string" }, + "left_bullets": { "type": "array", "items": { "type": "string" } }, + "right_title": { "type": "string" }, + "right_bullets": { "type": "array", "items": { "type": "string" } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "prompt": { "type": "string" }, + "tips": { "type": "array", "items": { "type": "string" } }, + "columns": { "type": "array", "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": true +} + +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AX Deck Slides JSON Schema", + "type": "object", + "additionalProperties": false, + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "additionalProperties": false, + "required": ["title", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "author": { "type": "string" }, + "date": { "type": "string" }, + "language": { "type": "string", "default": "ko-KR" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "version": { "type": "string" } + } + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { "$ref": "#/definitions/slide" } + } + }, + "definitions": { + "bulletItem": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "additionalProperties": false, + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "children": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + } + ] + }, + "column": { + "type": "object", + "additionalProperties": false, + "required": ["heading", "bullets"], + "properties": { + "heading": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + }, + "slide": { + "type": "object", + "additionalProperties": false, + "required": ["type", "title"], + "properties": { + "type": { + "type": "string", + "enum": [ + "title", + "section", + "agenda", + "bullets", + "two_column_bullets", + "quote", + "table", + "exercise", + "closing", + "blank" + ] + }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + }, + "items": { "type": "array", "items": { "type": "string" } }, + "left": { "$ref": "#/definitions/column" }, + "right": { "$ref": "#/definitions/column" }, + "quote": { "type": "string" }, + "attribution": { "type": "string" }, + "headers": { "type": "array", "minItems": 1, "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "timebox_minutes": { "type": "integer", "minimum": 1 }, + "notes": { "type": "string" } + }, + "allOf": [ + { "if": { "properties": { "type": { "const": "agenda" } } }, "then": { "required": ["items"] } }, + { "if": { "properties": { "type": { "const": "bullets" } } }, "then": { "required": ["bullets"] } }, + { + "if": { "properties": { "type": { "const": "two_column_bullets" } } }, + "then": { "required": ["left", "right"] } + }, + { "if": { "properties": { "type": { "const": "quote" } } }, "then": { "required": ["quote"] } }, + { "if": { "properties": { "type": { "const": "table" } } }, "then": { "required": ["headers", "rows"] } }, + { "if": { "properties": { "type": { "const": "exercise" } } }, "then": { "required": ["steps"] } } + ] + } + } +} +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX 교육용 slides.json 스키마", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 5, "maximum": 180 }, + "audience": { "type": "string" }, + "language": { "type": "string", "enum": ["ko"] }, + "version": { "type": "integer", "minimum": 1 } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { "type": "string", "enum": ["title", "section", "content", "two_content"] }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "level": { "type": "integer", "minimum": 0, "maximum": 5 } + }, + "additionalProperties": false + } + ] + } + }, + "left_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "right_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "notes": { "type": "string" } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": false +} diff --git a/AX 강의 - 1/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술.pptx b/AX 강의 - 1/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술.pptx new file mode 100644 index 0000000..ca2eeb5 Binary files /dev/null and b/AX 강의 - 1/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술.pptx differ diff --git a/AX 강의 - 1/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술/PROMPT_AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술.txt b/AX 강의 - 1/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술/PROMPT_AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술.txt new file mode 100644 index 0000000..68fce95 --- /dev/null +++ b/AX 강의 - 1/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술/PROMPT_AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술.txt @@ -0,0 +1,29 @@ +너는 기업 AX 전환 교육용 PPT를 설계하는 교육 콘텐츠 디자이너다. + +주제(폴더명/PPT 제목): AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술 +구분: 기술 이해 +요청(시드 프롬프트): +"AI 환각(Hallucination) 대응 및 팩트체크" 자료를 만들어줘. AI 답변의 오류 유형, 교차 검증 방법, 최종 의사결정자로서 인간의 역할을 강조해줘. 분석적이고 객관적인 느낌의 톤앤매너를 유지해줘. + +목표: +- 리더십부터 실무자까지 "왜 이 주제를 이해해야 하는지"를 먼저 설득한다. +- 30분 교육으로 진행 가능하도록 구성한다. +- 최소 20장 이상(권장 22장) 슬라이드가 나오도록 한다. +- 예시(상황/결과/체크리스트/사례)가 풍부해야 한다. +- 발표자가 그대로 읽어도 자연스럽도록 슬라이드 흐름(도입→핵심→사례→리스크→정리)을 만든다. +- 발표 중 **참여형 활동 없이 진행한다.** (참여자에게 '직접 해보라'는 지시 금지) +- 프롬프트/템플릿은 "참고 예시"로만 제시하고, 단계별 따라하기 구성은 만들지 않는다. + +출력 형식(반드시 준수): +- 최종 출력은 JSON 한 덩어리만 출력한다. (설명/문장/코드블록 금지) +- JSON은 아래 스키마를 만족해야 한다: slides.schema.json +- slides[0]은 반드시 type="cover"로 둔다. (표지는 meta.title/meta.subtitle/meta.badge로 자동 생성됨) +- 슬라이드 타입은 다음만 사용한다: + - cover, agenda, section, bullets, two_column, process, table + +작성 규칙: +- bullets는 4~7개 내로, 한 줄은 60자 내로. +- 별도의 prompt(코드블록) 슬라이드를 만들지 않는다. (참여형 활동 유도로 오해될 수 있음) +- table 슬라이드는 열 3~4개, 행 3~6개 정도로 간결하게. +- 보안/윤리/환각 등 리스크가 있는 주제는 "Do & Don't" 또는 "리스크/완화"를 반드시 포함한다. +- 마지막은 요약 + 다음 행동(오늘부터 1개 실행)으로 끝낸다. diff --git a/AX 강의 - 1/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술/make_ppt.py b/AX 강의 - 1/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술/make_ppt.py new file mode 100644 index 0000000..6ae124f --- /dev/null +++ b/AX 강의 - 1/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술/make_ppt.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +import subprocess +import sys +from pathlib import Path + + +def main() -> None: + base = Path(__file__).resolve().parent + common = base.parent / "_common" / "make_ppt.py" + spec = base / "slides.json" + out = base / f"{base.name}.pptx" + subprocess.check_call([sys.executable, str(common), "--spec", str(spec), "--out", str(out)]) + + +if __name__ == "__main__": + main() diff --git a/AX 강의 - 1/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술/slides.example.json b/AX 강의 - 1/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술/slides.example.json new file mode 100644 index 0000000..44a390a --- /dev/null +++ b/AX 강의 - 1/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술/slides.example.json @@ -0,0 +1,112 @@ +{ + "meta": { + "title": "예시 - 강의형(참여형 활동 없음)", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "예시 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝: 오늘은 참여형 활동 없이, 사례/체크리스트 중심으로 진행합니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 흐름을 10초로 안내하고 바로 본론으로 들어갑니다." + }, + { + "type": "section", + "title": "1. 왜 필요한가", + "subtitle": "리더십부터 실무자까지", + "notes": "리더 관점(성과/리스크)과 실무 관점(시간/품질)을 연결해 설명합니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "시간 절감(반복 업무)", + "품질 표준화(템플릿)", + "리스크 감소(검증/승인)", + "온보딩 가속", + "의사결정 리드타임 단축" + ], + "notes": "조직 사례가 있다면 1개만 붙여 설득력을 높입니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "핵심 개념은 3~6개로 제한하고, 각각 1문장으로 정의합니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "오해 vs 현실", + "left_title": "오해", + "left_bullets": ["AI는 만능", "한 번 도입하면 끝"], + "right_title": "현실", + "right_bullets": ["사람 검증이 필수", "운영/거버넌스가 성패를 좌우"], + "notes": "오해를 정리한 뒤, 현실 기준을 '팀 표준'으로 제시합니다." + }, + { + "type": "process", + "chapter": "Part 3", + "title": "적용 루틴(강의형 가이드)", + "steps": [ + "목표/대상/제약 정의", + "입력 데이터 정리", + "출력 형식 지정", + "검증/리스크 체크", + "공유/표준화", + "지표로 개선" + ], + "notes": "참여자에게 '지금 해보라'가 아니라, 기준과 사례를 설명합니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "Before / After (예시)", + "columns": ["업무", "기존", "개선", "절감"], + "rows": [ + ["회의록", "40분", "12분", "28분"], + ["메일", "20분", "5분", "15분"], + ["보고 1p", "60분+", "20분", "40분"] + ], + "notes": "표는 정의/기간을 같이 확인하며 읽습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화", + "left_title": "리스크", + "left_bullets": ["환각/오류", "보안/기밀", "품질 편차", "운영 장애"], + "right_title": "완화", + "right_bullets": ["원문 대조", "입력 금지/가명화", "승인/리뷰", "로그/모니터링"], + "notes": "리스크는 '기술'이 아니라 '프로세스'로 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "요약 & 다음 행동", + "bullets": [ + "목적·맥락·형식 + 검증", + "작게 시작해 표준화", + "지표로 개선", + "오늘 행동: 템플릿 1개를 팀 표준으로 정하기" + ], + "notes": "마무리는 '오늘부터 무엇을 할지' 한 문장으로 정리합니다." + } + ] +} diff --git a/AX 강의 - 1/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술/slides.json b/AX 강의 - 1/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술/slides.json new file mode 100644 index 0000000..8dfc44c --- /dev/null +++ b/AX 강의 - 1/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술/slides.json @@ -0,0 +1,306 @@ +{ + "meta": { + "title": "AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "기술 이해 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝(10초): 오늘 주제는 'AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술'입니다.\n운영 안내(10초): 오늘은 참여형 활동 없이, 사례와 체크리스트 중심으로 정리합니다.\n목표(10초): 왜 중요한지 → 핵심 원칙 → 사례 해설 → 리스크/대응 → 다음 행동까지 30분에 끝냅니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 구성(20초): 5파트로 진행합니다.\n- 1) 왜 필요한가\n- 2) 핵심 개념/원칙\n- 3) 사례로 이해하는 적용 가이드\n- 4) 리스크/체크리스트\n- 5) 요약 & 다음 행동\n안내(10초): 참여형 활동 없이, 바로 가져가 쓸 수 있는 요약/체크리스트 중심입니다." + }, + { + "type": "section", + "title": "1. 왜 이 주제를 이해해야 하나", + "subtitle": "리더십부터 실무자까지", + "notes": "전환(10초): 이제 '1. 왜 이 주제를 이해해야 하나' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "리더십 관점: 왜 중요한가", + "bullets": [ + "환각은 품질/규정/법적 리스크로 직결", + "검증 프로세스가 없으면 도입이 위험", + "의사결정은 근거 기반이어야 함", + "업무별 ‘검증 난이도’가 다르다", + "책임 소재(승인/검토)를 명확히 해야 함" + ], + "notes": "핵심(10초): '리더십 관점: 왜 중요한가' 슬라이드입니다.\n포인트(20초): 환각은 품질/규정/법적 리스크로 직결 / 검증 프로세스가 없으면 도입이 위험\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "실무자 관점: 무엇이 달라지나", + "bullets": [ + "AI가 그럴듯하게 틀릴 수 있음을 알아야 안전", + "팩트체크 습관이 있으면 활용 범위가 넓어짐", + "검증 질문 템플릿만 있어도 품질이 크게 향상", + "업무 문서 품질이 올라가 신뢰가 생김", + "실수를 줄이면 스트레스가 줄어듦" + ], + "notes": "핵심(10초): '실무자 관점: 무엇이 달라지나' 슬라이드입니다.\n포인트(20초): AI가 그럴듯하게 틀릴 수 있음을 알아야 안전 / 팩트체크 습관이 있으면 활용 범위가 넓어짐\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "two_column", + "chapter": "Part 1", + "title": "흔한 오해 vs 현실", + "left_title": "오해", + "left_bullets": [ + "AI는 최신 정보를 항상 안다", + "출처를 말하면 무조건 맞다", + "자신감 있는 답은 맞다", + "수치/법률도 믿어도 된다" + ], + "right_title": "현실", + "right_bullets": [ + "모델/도구에 따라 최신성은 제한", + "가짜 출처(환각)도 생성 가능", + "자신감은 정확도와 무관", + "중요 정보는 반드시 원문 대조" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "오류로 인한 재작업/사고 감소", + "의사결정 근거의 품질 개선", + "검증 루틴으로 조직 신뢰↑", + "AI 활용 범위 확장(안전장치)", + "개인 역량(비판적 사고) 강화" + ], + "notes": "핵심(10초): '기대 효과(정량/정성)' 슬라이드입니다.\n포인트(20초): 오류로 인한 재작업/사고 감소 / 의사결정 근거의 품질 개선\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "전환(10초): 이제 '2. 핵심 개념과 원칙' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "핵심 개념 6가지", + "bullets": [ + "환각 유형: 허위 사실/가짜 출처/수치 오류", + "위험 영역: 법률/규정/수치/고유명사", + "교차검증: 원문 대조 + 2개 출처", + "가정/전제 확인", + "반론/리스크 요청", + "최종 책임은 사람" + ], + "notes": "핵심(10초): '핵심 개념 6가지' 슬라이드입니다.\n포인트(20초): 환각 유형: 허위 사실/가짜 출처/수치 오류 / 위험 영역: 법률/규정/수치/고유명사\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "process", + "chapter": "Part 2", + "title": "실행 프레임워크(권장 루틴)", + "steps": [ + "중요도 분류(결정 영향도)", + "출처 요청(링크/문서)", + "원문 대조(수치/이름)", + "대안/반론 요청", + "검증 결과 기록", + "승인/공유" + ], + "notes": "핵심(10초): '실행 프레임워크(권장 루틴)'는 실행 흐름(루틴)을 제시합니다.\n요약(20초): 중요도 분류(결정 영향도) → 출처 요청(링크/문서) → 원문 대조(수치/이름) …\n팁(10초): 이 순서를 팀 템플릿으로 고정하면 재작업이 크게 줄어듭니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "좋은 예 vs 나쁜 예 (짧은 비교)", + "left_title": "좋은 예", + "left_bullets": [ + "출처/근거를 요구", + "가정/전제를 명시", + "반론/리스크 포함", + "검증 체크리스트 적용" + ], + "right_title": "나쁜 예", + "right_bullets": [ + "결론만 달라고 함", + "수치/법률을 그대로 복붙", + "출처 없이 인용", + "단일 답변에 의존" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "자주 하는 실수", + "bullets": [ + "검증을 ‘나중에’로 미룸", + "출처 링크만 보고 내용 미확인", + "상관/인과 혼동", + "정의/단위를 누락", + "승인 없이 외부 배포" + ], + "notes": "핵심(10초): '자주 하는 실수' 슬라이드입니다.\n포인트(20초): 검증을 ‘나중에’로 미룸 / 출처 링크만 보고 내용 미확인\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "3. 사례로 이해하는 적용 가이드", + "subtitle": "참여형 활동 없이도 이해되는 예시 중심", + "notes": "전환(10초): 이제 '3. 사례로 이해하는 적용 가이드' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 1) 답변 검증(팩트체크) 프롬프트", + "bullets": [ + "요청의 역할/관점: 팩트체커", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"아래 AI 답변을 검증해줘. / - 사실 주장/수치/고유명사를 항목별로 분리\"", + "포인트: 항목 분리부터", + "포인트: 확신도 표시", + "포인트: 공식 출처를 우선" + ], + "notes": "핵심(10초): '사례 1) 답변 검증(팩트체크) 프롬프트' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 팩트체커 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 2) 반론/리스크 먼저 받기", + "bullets": [ + "요청의 역할/관점: 회의에서 반대편 역할(Devil's Advocate)이", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"내 주장: [주장] / 근거: [근거]\"", + "포인트: 반론을 먼저 받으면 안전", + "포인트: 검증 데이터까지 요청", + "포인트: 완화 방안까지" + ], + "notes": "핵심(10초): '사례 2) 반론/리스크 먼저 받기' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 회의에서 반대편 역할(Devil's Advocate)이 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "환각 유형과 대응(요약)", + "columns": [ + "오류 유형", + "징후", + "대응" + ], + "rows": [ + [ + "가짜 출처", + "URL/논문이 존재하지 않음", + "원문 검색/대조" + ], + [ + "수치 오류", + "단위/기간 불명확", + "정의/단위 확인" + ], + [ + "규정/법률 오류", + "개정 전 정보", + "공식 문서 확인" + ] + ], + "notes": "읽는 법(15초): 표는 오류 유형, 징후, 대응 기준으로 비교합니다.\n포인트(15초): 수치/정의/기간을 같이 확인해 오해를 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "결과 품질 검증 체크", + "bullets": [ + "사실/수치/고유명사는 원문 대조", + "누락된 가정이 없는지 질문", + "대안 2개 이상 비교 요청", + "리스크/반론을 함께 요청" + ], + "notes": "핵심(10초): '결과 품질 검증 체크' 슬라이드입니다.\n포인트(20초): 사실/수치/고유명사는 원문 대조 / 누락된 가정이 없는지 질문\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "4. 리스크 & 체크리스트", + "subtitle": "안전하게, 팀 단위로 굴리기", + "notes": "전환(10초): 이제 '4. 리스크 & 체크리스트' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화 전략", + "left_title": "리스크", + "left_bullets": [ + "의사결정 오류", + "법적/규정 위반", + "대외 신뢰 하락", + "재작업 증가" + ], + "right_title": "완화", + "right_bullets": [ + "중요도 기반 검증", + "출처/원문 대조", + "2개 이상 교차검증", + "승인/리뷰 프로세스" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "체크리스트(현업 적용용)", + "bullets": [ + "이 답이 의사결정에 영향 주나", + "출처/원문이 확인됐나", + "수치의 정의/단위/기간이 명확한가", + "반론/리스크를 검토했나", + "공유/배포 전에 리뷰했나" + ], + "notes": "핵심(10초): '체크리스트(현업 적용용)' 슬라이드입니다.\n포인트(20초): 이 답이 의사결정에 영향 주나 / 출처/원문이 확인됐나\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "팀 적용(롤아웃) 방법", + "bullets": [ + "팀 공통 팩트체크 템플릿", + "중요 문서는 리뷰 필수", + "사례 공유(실수 포함)", + "승인 단계에 체크리스트 포함" + ], + "notes": "핵심(10초): '팀 적용(롤아웃) 방법' 슬라이드입니다.\n포인트(20초): 팀 공통 팩트체크 템플릿 / 중요 문서는 리뷰 필수\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "5. 요약 & 다음 행동", + "subtitle": "오늘부터 1개만 실행", + "notes": "전환(10초): 이제 '5. 요약 & 다음 행동' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "핵심 요약", + "bullets": [ + "AI는 그럴듯하게 틀릴 수 있다", + "핵심은 출처/원문 대조 + 교차검증", + "반론/리스크 질문이 안전장치", + "오늘 행동: 내 문서 1개에 팩트체크 프롬프트 적용" + ], + "notes": "핵심(10초): '핵심 요약' 슬라이드입니다.\n포인트(20초): AI는 그럴듯하게 틀릴 수 있다 / 핵심은 출처/원문 대조 + 교차검증\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + } + ] +} diff --git a/AX 강의 - 1/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술/slides.schema.json b/AX 강의 - 1/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술/slides.schema.json new file mode 100644 index 0000000..11cd0ff --- /dev/null +++ b/AX 강의 - 1/AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술/slides.schema.json @@ -0,0 +1,218 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX Curriculum Slides Spec", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "badge": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "tone": { "type": "string" }, + "footer_left": { "type": "string" } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 20, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { + "type": "string", + "enum": ["cover", "agenda", "section", "bullets", "two_column", "process", "prompt", "table"] + }, + "chapter": { "type": "string" }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "items": { "type": "array", "items": { "type": "string" } }, + "bullets": { "type": "array", "items": { "type": "string" } }, + "left_title": { "type": "string" }, + "left_bullets": { "type": "array", "items": { "type": "string" } }, + "right_title": { "type": "string" }, + "right_bullets": { "type": "array", "items": { "type": "string" } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "prompt": { "type": "string" }, + "tips": { "type": "array", "items": { "type": "string" } }, + "columns": { "type": "array", "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": true +} + +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AX Deck Slides JSON Schema", + "type": "object", + "additionalProperties": false, + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "additionalProperties": false, + "required": ["title", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "author": { "type": "string" }, + "date": { "type": "string" }, + "language": { "type": "string", "default": "ko-KR" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "version": { "type": "string" } + } + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { "$ref": "#/definitions/slide" } + } + }, + "definitions": { + "bulletItem": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "additionalProperties": false, + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "children": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + } + ] + }, + "column": { + "type": "object", + "additionalProperties": false, + "required": ["heading", "bullets"], + "properties": { + "heading": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + }, + "slide": { + "type": "object", + "additionalProperties": false, + "required": ["type", "title"], + "properties": { + "type": { + "type": "string", + "enum": [ + "title", + "section", + "agenda", + "bullets", + "two_column_bullets", + "quote", + "table", + "exercise", + "closing", + "blank" + ] + }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + }, + "items": { "type": "array", "items": { "type": "string" } }, + "left": { "$ref": "#/definitions/column" }, + "right": { "$ref": "#/definitions/column" }, + "quote": { "type": "string" }, + "attribution": { "type": "string" }, + "headers": { "type": "array", "minItems": 1, "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "timebox_minutes": { "type": "integer", "minimum": 1 }, + "notes": { "type": "string" } + }, + "allOf": [ + { "if": { "properties": { "type": { "const": "agenda" } } }, "then": { "required": ["items"] } }, + { "if": { "properties": { "type": { "const": "bullets" } } }, "then": { "required": ["bullets"] } }, + { + "if": { "properties": { "type": { "const": "two_column_bullets" } } }, + "then": { "required": ["left", "right"] } + }, + { "if": { "properties": { "type": { "const": "quote" } } }, "then": { "required": ["quote"] } }, + { "if": { "properties": { "type": { "const": "table" } } }, "then": { "required": ["headers", "rows"] } }, + { "if": { "properties": { "type": { "const": "exercise" } } }, "then": { "required": ["steps"] } } + ] + } + } +} +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX 교육용 slides.json 스키마", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 5, "maximum": 180 }, + "audience": { "type": "string" }, + "language": { "type": "string", "enum": ["ko"] }, + "version": { "type": "integer", "minimum": 1 } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { "type": "string", "enum": ["title", "section", "content", "two_content"] }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "level": { "type": "integer", "minimum": 0, "maximum": 5 } + }, + "additionalProperties": false + } + ] + } + }, + "left_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "right_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "notes": { "type": "string" } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": false +} diff --git a/AX 강의 - 1/PROMPT.txt b/AX 강의 - 1/PROMPT.txt new file mode 100644 index 0000000..58bbb50 --- /dev/null +++ b/AX 강의 - 1/PROMPT.txt @@ -0,0 +1,42 @@ +각 교육 커리큘럼에 대해서 목차 설계 및 슬라이드 작성을 위해서 필요한 프롬프트를 작성해줘. + +# AX 전환 교육 커리큘럼 리스트 +|구분 | 주제 (PPT 제목 예시) | 주요 내용 및 기대 효과| +| --- | --- | --- | +|마인드셋 | 1. "AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다" | AI 협업 마인드셋 정립 및 AX 변화에 대한 막연한 두려움 해소| +|윤리/보안 | 2. "회사의 비밀을 지키며 AI와 대화하는 법" | 기업 보안 가이드라인, 저작권 이슈 및 안전한 데이터 입력 방법| +|업무 효율 | 3. "칼퇴를 부르는 AI 비서: 루틴 업무 1시간 단축하기" | 이메일 작성, 회의록 요약, 일정 관리 등 공통 반복 업무 자동화| +|문제 해결 | 4. "질문이 경쟁력이다: AI를 브레인스토밍 파트너로 쓰는 법" | 논리적 사고를 돕는 질문 기법 및 아이디어 확장 프로세스| +|협업/공유 | 5. "우리 팀만의 AI 지식 창고 만들기" | 사내 구축된 AI 챗봇이나 프롬프트 공유 게시판 활용법 교육| +|데이터 활용 | 6. "엑셀 함수 몰라도 괜찮아: 말로 하는 데이터 분석" | 자연어 기반 데이터 시각화 및 인사이트 도출 (Code Interpreter 등)| +|트렌드 | 7. "글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까?" | 타사들의 AX 성공 사례 벤치마킹 및 시사점 공유| +|자기계발 | 8. "AI 시대의 커리어 생존 전략: AI와 공존하는 전문가 되기" | 변화하는 직무 역량(Upskilling)에 대한 동기부여 세션| +|조직문화 | 9. "실패해도 괜찮은 AI 실험실: 작은 성공(Small Win) 만들기" | 현업에서 작은 AI 프로젝트를 시도하고 공유하는 문화 조성| +|기술 이해 | 10. "AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술" | AI 답변의 검증 방법 및 비판적 사고(Critical Thinking) 배양| +|실행력 | 11. "오늘 바로 적용하는 AI 업무 자동화: 노코드 워크플로우 설계(강의형)" | No-code 툴(Zapier 등)을 활용한 업무 흐름 자동화 설계 원리 이해 및 운영 관점 습득| +|리더십 | 12. "AI 시대의 리더십: 데이터로 결정하고 AI로 실행하라" | 의사결정권자를 위한 AI 전략 및 성과 관리 지표 이해| + +## 사용 프롬프트 +1 AI는 내 자리를 뺏지 않는다 "AI와 인간의 협업 마인드셋"을 주제로 PPT 개요를 짜줘. AI가 일자리를 대체한다는 공포를 해소하고, '인간의 창의성 + AI의 속도'가 결합된 미래 업무 모습을 시각화해줘. 신뢰감 있고 희망찬 톤으로 작성해줘. +2 회사의 비밀을 지키는 법 "기업용 AI 보안 및 가이드라인" 발표 자료를 만들어줘. 내부 데이터 유출 사례, 안전한 프롬프트 작성 규칙, 우리 회사만의 보안 수칙(Do's & Don'ts)을 포함해줘. 경각심을 주되 명확한 행동 지침을 강조해줘. +3 칼퇴를 부르는 AI 비서 "직장인 공통 업무 자동화(이메일, 요약, 일정)"를 주제로 슬라이드를 구성해줘. 비포&애프터 비교표를 넣어서 AI 활용 시 절약되는 시간을 수치로 보여줘. 실용적이고 에너제틱한 느낌의 레이아웃으로 제안해줘. +4 질문이 경쟁력이다 "AI 성능을 200% 끌어올리는 질문의 기술(Prompting)"에 대해 설명해줘. 단순 명령과 구체적 명령의 차이, 논리적 사고를 돕는 프롬프트 프레임워크를 단계별로 구성해줘. 교육적인 전문성이 느껴지는 톤으로 작성해줘. +5 우리 팀 AI 지식 창고 "사내 AI 자산 공유 및 협업 문화"에 대한 발표 자료야. 팀원들이 발견한 좋은 프롬프트를 공유하는 방법과 사내 챗봇 활용법을 포함해줘. '함께 성장하는 조직'을 강조하는 따뜻하고 협력적인 톤으로 만들어줘. +6 말로 하는 데이터 분석 "비전공자를 위한 AI 데이터 분석"을 주제로 해줘. 복잡한 코딩 없이 자연어로 그래프를 그리고 인사이트를 뽑아내는 과정을 시연하듯 구성해줘. '누구나 할 수 있다'는 자신감을 주는 쉬운 용어로 작성해줘. +7 글로벌 1등 기업 사례 "글로벌 AX 선도 기업의 성공 사례 벤치마킹" 자료를 만들어줘. 구글, 마이크로소프트, 테슬라 등 주요 기업들이 AI를 비즈니스 프로세스에 어떻게 녹였는지 분석하고 우리 회사에 주는 시사점을 정리해줘. +8 AI 시대 커리어 생존 전략 "임직원 자기계발: AI 시대의 필수 역량"을 주제로 해줘. 사라지는 기술과 새로 요구되는 기술(Soft Skills)을 비교하고, 회사가 지원하는 교육 로드맵을 보여줘. 동기부여를 자극하는 도전적인 톤으로 구성해줘. +9 실패해도 괜찮은 AI 실험실 "사내 AI 실험(Small Win) 장려 캠페인" 발표용이야. 완벽한 결과보다는 시도 자체에 가치를 두는 문화, 작은 성공 사례를 전파하는 프로세스를 담아줘. 혁신적이고 자유로운 분위기의 디자인 컨셉을 제안해줘. +10 AI의 거짓말 잡아내기 "AI 환각(Hallucination) 대응 및 팩트체크" 자료를 만들어줘. AI 답변의 오류 유형, 교차 검증 방법, 최종 의사결정자로서 인간의 역할을 강조해줘. 분석적이고 객관적인 느낌의 톤앤매너를 유지해줘. +11 업무 흐름 자동화(No-code) "노코드 툴을 활용한 워크플로우 자동화 설계(강의형)" 슬라이드를 구성해줘. 서로 다른 앱(메일-슬랙-엑셀)을 AI로 연결하는 구조도를 포함하고, 운영 관점(예외 처리, 승인 단계, 로그/모니터링)을 자세히 설명해줘. 직관적이고 기술적인 신뢰감이 가는 디자인으로 제안해줘. +12 AI 리더십 가이드 "리더를 위한 AI 의사결정 전략" 주제야. 리더가 AI를 성과 관리에 어떻게 활용할지, 팀원들의 AI 활용도를 높이기 위한 코칭법은 무엇인지 다뤄줘. 권위 있으면서도 혁신적인 리더의 모습을 투영해줘. + +# 진행 방법 +* 각 주제 별로 폴더를 만들어줘. (폴더이름은 한글 과제명으로 할 것) +* 먼저 성공적인 AX(AI Transformation) 전환을 위해 리더십부터 실무자까지 왜 이 주제를 이해하세요. +* 주제에 맞는 목차를 상세하고 세분화해서 설계하세요. +* 내용은 설명하고 이해하기 쉽도록 목차가 설계하세요. +* 각 커리큘럼 별 최소 20페이지 아상 슬라이드가 만들어 지도록 슬라이드 제목을 목차에 맞추어 생성하세요. +* 교육시간은 30분정도로 진행될 수 있도록 내용 구성해야 합니다. +* 목차에 대해서 설명과 이해가 쉽도록 예시가 많은 내용으로 작성하세요. +* 각 폴더 내 과제명.pptx 파워포인트를 작성할 수 있도록 하세요. + diff --git a/AX 강의 - 1/_common/make_ppt.py b/AX 강의 - 1/_common/make_ppt.py new file mode 100644 index 0000000..6ec6412 --- /dev/null +++ b/AX 강의 - 1/_common/make_ppt.py @@ -0,0 +1,1082 @@ +from __future__ import annotations + +import argparse +import json +import re +import subprocess +import sys +from dataclasses import dataclass +from pathlib import Path +from typing import Any, Sequence + +from pptx import Presentation +from pptx.dml.color import RGBColor +from pptx.enum.shapes import MSO_AUTO_SHAPE_TYPE +from pptx.enum.text import PP_ALIGN +from pptx.util import Inches, Pt + + +@dataclass(frozen=True) +class Theme: + navy: RGBColor + navy_2: RGBColor + bg: RGBColor + white: RGBColor + text: RGBColor + muted: RGBColor + line: RGBColor + accent_yellow: RGBColor + accent_blue: RGBColor + accent_red: RGBColor + accent_green: RGBColor + accent_purple: RGBColor + accent_orange: RGBColor + accent_cyan: RGBColor + + font: str + font_bold: str + font_mono: str + + +T = Theme( + navy=RGBColor(0x10, 0x1D, 0x2E), + navy_2=RGBColor(0x14, 0x2A, 0x45), + bg=RGBColor(0xF6, 0xF7, 0xFB), + white=RGBColor(0xFF, 0xFF, 0xFF), + text=RGBColor(0x1F, 0x29, 0x37), + muted=RGBColor(0x6B, 0x72, 0x80), + line=RGBColor(0xE5, 0xE7, 0xEB), + accent_yellow=RGBColor(0xF0, 0xB4, 0x3B), + accent_blue=RGBColor(0x3B, 0x82, 0xF6), + accent_red=RGBColor(0xEF, 0x44, 0x44), + accent_green=RGBColor(0x22, 0xC5, 0x5E), + accent_purple=RGBColor(0xA8, 0x55, 0xF7), + accent_orange=RGBColor(0xF9, 0x73, 0x16), + accent_cyan=RGBColor(0x06, 0xB6, 0xD4), + font="Apple SD Gothic Neo", + font_bold="Apple SD Gothic Neo", + font_mono="Menlo", +) + + +SLIDE_W = Inches(13.333) +SLIDE_H = Inches(7.5) + + +def _rgb(hex6: str) -> RGBColor: + h = hex6.lstrip("#") + return RGBColor(int(h[0:2], 16), int(h[2:4], 16), int(h[4:6], 16)) + + +def set_slide_bg(slide, color: RGBColor) -> None: + fill = slide.background.fill + fill.solid() + fill.fore_color.rgb = color + + +def add_rect(slide, x, y, w, h, *, fill: RGBColor | None, line: RGBColor | None, radius: bool = False): + shape_type = MSO_AUTO_SHAPE_TYPE.ROUNDED_RECTANGLE if radius else MSO_AUTO_SHAPE_TYPE.RECTANGLE + shp = slide.shapes.add_shape(shape_type, x, y, w, h) + if fill is None: + shp.fill.background() + else: + shp.fill.solid() + shp.fill.fore_color.rgb = fill + if line is None: + shp.line.fill.background() + else: + shp.line.color.rgb = line + shp.line.width = Pt(1) + return shp + + +def add_shadow_card(slide, x, y, w, h, *, fill: RGBColor, line: RGBColor | None, radius: bool = True): + # Faux shadow (editable) by layering two shapes. + shadow = add_rect(slide, x + Inches(0.06), y + Inches(0.06), w, h, fill=_rgb("#E5E7EB"), line=None, radius=radius) + shadow.fill.transparency = 0.35 + card = add_rect(slide, x, y, w, h, fill=fill, line=line, radius=radius) + return card + + +def add_icon_circle(slide, x, y, d, icon: str, *, fill: RGBColor, fg: RGBColor): + circ = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.OVAL, x, y, d, d) + circ.fill.solid() + circ.fill.fore_color.rgb = fill + circ.line.fill.background() + tf = circ.text_frame + tf.clear() + p = tf.paragraphs[0] + p.alignment = PP_ALIGN.CENTER + run = p.add_run() + run.text = icon + run.font.name = T.font_bold + run.font.size = Pt(20) + run.font.bold = True + run.font.color.rgb = fg + return circ + + +@dataclass(frozen=True) +class DeckStyle: + accent: RGBColor + accent_2: RGBColor + badge_bg: RGBColor + code_bg: RGBColor + code_fg: RGBColor + + +def style_from_meta(meta: dict[str, Any]) -> DeckStyle: + badge = str(meta.get("badge") or "") + # Track colors + if "윤리" in badge or "보안" in badge: + accent = T.accent_red + accent2 = _rgb("#FDECEC") + elif "업무 효율" in badge: + accent = T.accent_yellow + accent2 = _rgb("#FFF7ED") + elif "문제 해결" in badge: + accent = T.accent_blue + accent2 = _rgb("#EFF6FF") + elif "협업" in badge or "공유" in badge: + accent = T.accent_green + accent2 = _rgb("#ECFDF5") + elif "데이터" in badge: + accent = T.accent_purple + accent2 = _rgb("#F5F3FF") + elif "트렌드" in badge: + accent = T.accent_orange + accent2 = _rgb("#FFF7ED") + elif "리더십" in badge: + accent = T.accent_cyan + accent2 = _rgb("#ECFEFF") + else: + accent = T.accent_yellow + accent2 = _rgb("#FFF7ED") + + return DeckStyle( + accent=accent, + accent_2=accent2, + badge_bg=_rgb("#24364D"), + code_bg=_rgb("#0B1220"), + code_fg=_rgb("#E5E7EB"), + ) + + +def _strip_prefix(s: str) -> str: + t = s.strip() + t = re.sub(r"^\s*\d+\)\s*", "", t) + t = re.sub(r"^\s*\d+\.\s*", "", t) + return t.strip() + + +def _parse_minutes(text: str) -> float | None: + """ + Parse rough time strings into minutes. + Supports: "20분", "60분+", "15~25분", "1시간", "1.5시간", "1시간 30분". + Returns None if not parseable. + """ + s = str(text).strip().replace(" ", "") + if not s: + return None + + # Hours + minutes + hm = re.fullmatch(r"(?:(\d+(?:\.\d+)?)시간)?(?:(\d+(?:\.\d+)?)분)?\+?", s) + if hm and (hm.group(1) or hm.group(2)): + h = float(hm.group(1)) if hm.group(1) else 0.0 + m = float(hm.group(2)) if hm.group(2) else 0.0 + return h * 60.0 + m + + # Range in minutes: 15~25분 / 15-25분 + mrange = re.fullmatch(r"(\d+(?:\.\d+)?)[~-](\d+(?:\.\d+)?)분\+?", s) + if mrange: + a = float(mrange.group(1)) + b = float(mrange.group(2)) + return (a + b) / 2.0 + + # Simple minutes with plus + m1 = re.fullmatch(r"(\d+(?:\.\d+)?)분\+?", s) + if m1: + return float(m1.group(1)) + + return None + + +def _parse_percent(text: str) -> float | None: + """ + Parse rough percent strings into 0~100 float. + Supports: "30%", "30~70%", "30-70%", "0.3" (treated as 30% if <= 1.0). + """ + s = str(text).strip().replace(" ", "") + if not s: + return None + s = s.rstrip("+") + if s.endswith("%"): + s0 = s[:-1] + mrange = re.fullmatch(r"(\d+(?:\.\d+)?)[~-](\d+(?:\.\d+)?)", s0) + if mrange: + a = float(mrange.group(1)) + b = float(mrange.group(2)) + return max(0.0, min(100.0, (a + b) / 2.0)) + m1 = re.fullmatch(r"(\d+(?:\.\d+)?)", s0) + if m1: + return max(0.0, min(100.0, float(m1.group(1)))) + return None + + # bare number + m = re.fullmatch(r"\d+(?:\.\d+)?", s) + if not m: + return None + v = float(s) + if 0.0 <= v <= 1.0: + v *= 100.0 + if 0.0 <= v <= 100.0: + return v + return None + + +@dataclass(frozen=True) +class SlideMood: + label: str + icon: str + color: RGBColor + bg: RGBColor + + +def mood_from_title(title: str, *, style: DeckStyle) -> SlideMood: + t = str(title or "").strip() + tl = t.lower() + # Korean + English heuristics + if any(k in t for k in ["리스크", "위험", "주의", "환각", "보안"]) or any(k in tl for k in ["risk", "warning", "security"]): + return SlideMood(label="RISK", icon="!", color=T.accent_red, bg=_rgb("#FDECEC")) + if any(k in t for k in ["체크리스트", "점검", "do", "don't", "dont"]) or any(k in tl for k in ["checklist", "do &", "don't", "dont"]): + return SlideMood(label="CHECK", icon="✓", color=T.accent_green, bg=_rgb("#ECFDF5")) + if any(k in t for k in ["요약", "정리", "핵심"]) or any(k in tl for k in ["summary", "key"]): + return SlideMood(label="SUMMARY", icon="≡", color=style.accent, bg=style.accent_2) + if any(k in t for k in ["기대 효과", "효과", "성과", "절감", "개선"]) or any(k in tl for k in ["impact", "benefit", "kpi", "saving"]): + return SlideMood(label="IMPACT", icon="+", color=style.accent, bg=style.accent_2) + if any(k in t for k in ["사례", "적용", "예시", "데모"]) or any(k in tl for k in ["case", "example", "demo"]): + return SlideMood(label="CASE", icon="◆", color=style.accent, bg=style.accent_2) + if any(k in t for k in ["프레임워크", "루틴", "프로세스", "단계"]) or any(k in tl for k in ["framework", "process", "steps"]): + return SlideMood(label="FRAME", icon="→", color=style.accent, bg=style.accent_2) + return SlideMood(label="INFO", icon="i", color=style.accent, bg=style.accent_2) + + +def extract_kpis(lines: Sequence[str]) -> list[tuple[str, str]]: + """ + Extract up to 3 KPI-like tokens from bullet lines. + Returns list of (value, label). + """ + out: list[tuple[str, str]] = [] + seen: set[str] = set() + + def add(value: str, label: str) -> None: + v = value.strip() + if not v or v in seen: + return + seen.add(v) + out.append((v, label.strip()[:18] or "KPI")) + + for s in lines: + text = str(s) + # percent + m = re.search(r"(\d+(?:\.\d+)?\s*(?:~|-)\s*\d+(?:\.\d+)?\s*%|\d+(?:\.\d+)?\s*%)", text) + if m: + label = "비율" + if "단축" in text or "절감" in text or "감소" in text: + label = "단축/절감" + add(m.group(1).replace(" ", ""), label) + # minutes / hours + m2 = re.search(r"(\d+(?:\.\d+)?\s*(?:~|-)\s*\d+(?:\.\d+)?\s*분\+?|\d+(?:\.\d+)?\s*분\+?|\d+(?:\.\d+)?\s*시간(?:\s*\d+(?:\.\d+)?\s*분)?)", text) + if m2: + label = "시간" + if "절감" in text or "단축" in text: + label = "절감" + add(m2.group(1).replace(" ", ""), label) + # weeks + m3 = re.search(r"(\d+)\s*주", text) + if m3: + add(f"{m3.group(1)}주", "기간") + # counts + m4 = re.search(r"(\d+)\s*개", text) + if m4: + add(f"{m4.group(1)}개", "항목") + if len(out) >= 3: + break + return out[:3] + + +def add_kpi_cards(slide, *, kpis: Sequence[tuple[str, str]], style: DeckStyle) -> None: + if not kpis: + return + n = min(3, len(kpis)) + w = Inches(3.85) + gap = Inches(0.25) + x0 = Inches(0.7) + y0 = Inches(6.0) + for i in range(n): + value, label = kpis[i] + xx = x0 + (w + gap) * i + add_shadow_card(slide, xx, y0, w, Inches(0.95), fill=T.white, line=_rgb("#E5E7EB")) + add_rect(slide, xx, y0, Inches(0.08), Inches(0.95), fill=style.accent, line=None, radius=False) + add_textbox(slide, xx + Inches(0.22), y0 + Inches(0.18), w - Inches(0.35), Inches(0.45), value, size=22, bold=True, color=T.text) + add_textbox(slide, xx + Inches(0.22), y0 + Inches(0.62), w - Inches(0.35), Inches(0.25), label, size=11, bold=True, color=T.muted) + + +def add_textbox( + slide, + x, + y, + w, + h, + text: str, + *, + size: int, + bold: bool = False, + color: RGBColor | None = None, + align: int = PP_ALIGN.LEFT, + line_spacing: float | None = None, +): + tb = slide.shapes.add_textbox(x, y, w, h) + tf = tb.text_frame + tf.clear() + tf.word_wrap = True + p = tf.paragraphs[0] + p.alignment = align + run = p.add_run() + run.text = text + f = run.font + f.name = T.font_bold if bold else T.font + f.size = Pt(size) + f.bold = bold + f.color.rgb = color or T.text + if line_spacing is not None: + p.line_spacing = line_spacing + return tb + + +def add_textbox_mono(slide, x, y, w, h, text: str, *, size: int, color: RGBColor): + tb = slide.shapes.add_textbox(x, y, w, h) + tf = tb.text_frame + tf.clear() + tf.word_wrap = True + # Keep line breaks as paragraphs for better rendering. + lines = text.splitlines() if text else [""] + for i, line in enumerate(lines): + p = tf.paragraphs[0] if i == 0 else tf.add_paragraph() + p.text = line + p.font.name = T.font_mono + p.font.size = Pt(size) + p.font.color.rgb = color + p.line_spacing = 1.12 + p.space_after = Pt(0) + return tb + + +def add_bullets( + slide, + x, + y, + w, + h, + bullets: Sequence[str], + *, + size: int = 18, + color: RGBColor | None = None, + line_spacing: float = 1.15, +): + tb = slide.shapes.add_textbox(x, y, w, h) + tf = tb.text_frame + tf.clear() + tf.word_wrap = True + for i, b in enumerate(bullets): + p = tf.paragraphs[0] if i == 0 else tf.add_paragraph() + p.text = b + p.level = 0 + p.font.name = T.font + p.font.size = Pt(size) + p.font.color.rgb = color or T.text + p.line_spacing = line_spacing + p.space_after = Pt(6) + p.bullet = True + return tb + + +def add_pill(slide, x, y, w, h, text: str, *, fill: RGBColor, fg: RGBColor): + pill = add_rect(slide, x, y, w, h, fill=fill, line=None, radius=True) + tf = pill.text_frame + tf.clear() + p = tf.paragraphs[0] + p.alignment = PP_ALIGN.CENTER + run = p.add_run() + run.text = text + run.font.name = T.font + run.font.size = Pt(12) + run.font.color.rgb = fg + return pill + + +def add_footer(slide, slide_no: int, *, dark: bool, footer_left: str | None = None) -> None: + y = SLIDE_H - Inches(0.35) + add_rect(slide, Inches(0), y, SLIDE_W, Inches(0.35), fill=(T.navy if dark else T.bg), line=None, radius=False) + fg = _rgb("#D1D5DB") if dark else T.muted + if footer_left: + add_textbox( + slide, + Inches(0.5), + y + Inches(0.06), + Inches(9.5), + Inches(0.25), + footer_left, + size=11, + bold=False, + color=fg, + align=PP_ALIGN.LEFT, + ) + add_textbox( + slide, + SLIDE_W - Inches(2.0), + y + Inches(0.06), + Inches(1.5), + Inches(0.25), + f"{slide_no:02d}", + size=11, + bold=False, + color=fg, + align=PP_ALIGN.RIGHT, + ) + + +def set_notes(slide, notes: str | None) -> None: + if notes is None: + return + text = str(notes).strip() + if not text: + return + ns = slide.notes_slide + tf = ns.notes_text_frame + tf.clear() + tf.text = text + + +def _header(slide, title: str, *, chapter: str | None = None, style: DeckStyle) -> None: + # Top bar + accent strip (more "PPT-like") + add_rect(slide, Inches(0), Inches(0), SLIDE_W, Inches(0.95), fill=T.white, line=None, radius=False) + add_rect(slide, Inches(0), Inches(0), SLIDE_W, Inches(0.06), fill=style.accent, line=None, radius=False) + add_textbox(slide, Inches(0.7), Inches(0.22), Inches(10.0), Inches(0.55), title, size=28, bold=True, color=T.text) + if chapter: + add_pill(slide, Inches(11.2), Inches(0.26), Inches(1.8), Inches(0.38), chapter, fill=_rgb("#EEF2F7"), fg=T.muted) + add_rect(slide, Inches(0.7), Inches(0.93), Inches(11.93), Inches(0.04), fill=T.line, line=None, radius=False) + + +def slide_cover(prs: Presentation, *, title: str, subtitle: str | None, badge: str | None, footer_left: str | None, style: DeckStyle): + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.navy) + # Subtle pattern bubbles + for (x, y, d, a) in [(11.0, 0.6, 1.4, 0.12), (10.1, 1.7, 2.2, 0.08), (11.7, 2.8, 1.7, 0.07)]: + c = s.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.OVAL, Inches(x), Inches(y), Inches(d), Inches(d)) + c.fill.solid() + c.fill.fore_color.rgb = style.accent + c.fill.transparency = 1 - a + c.line.fill.background() + # Corner star (spark) + star = s.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.STAR_5_POINT, Inches(0.55), Inches(0.65), Inches(0.65), Inches(0.65)) + star.fill.solid() + star.fill.fore_color.rgb = style.accent + star.line.fill.background() + star.fill.transparency = 0.08 + if badge: + add_pill(s, Inches(4.2), Inches(0.45), Inches(4.9), Inches(0.45), badge, fill=style.badge_bg, fg=_rgb("#E5E7EB")) + # Icon badge + add_icon_circle(s, Inches(6.2), Inches(1.35), Inches(0.9), "★", fill=style.accent, fg=T.navy) + add_textbox( + s, + Inches(1.0), + Inches(2.15), + Inches(11.33), + Inches(1.5), + title, + size=48 if len(title) <= 18 else 38, + bold=True, + color=T.white, + align=PP_ALIGN.CENTER, + line_spacing=1.05, + ) + if subtitle: + add_textbox(s, Inches(1.3), Inches(4.0), Inches(10.8), Inches(0.5), subtitle, size=18, bold=True, color=_rgb("#E5E7EB"), align=PP_ALIGN.CENTER) + add_rect(s, Inches(4.9), Inches(4.55), Inches(3.5), Inches(0.08), fill=style.accent, line=None) + add_footer(s, 1, dark=True, footer_left=footer_left) + return s + + +def slide_section(prs: Presentation, slide_no: int, *, title: str, subtitle: str | None, footer_left: str | None, style: DeckStyle): + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.navy_2) + # Big part number if exists + m = re.match(r"^\s*(\d+)\.\s*(.*)$", title) + num = m.group(1) if m else None + rest = m.group(2) if m else title + if num: + add_textbox(s, Inches(0.9), Inches(1.6), Inches(1.6), Inches(1.2), num, size=84, bold=True, color=style.accent) + add_textbox(s, Inches(2.25), Inches(2.15), Inches(10.2), Inches(1.0), rest, size=44 if len(rest) <= 18 else 34, bold=True, color=T.white, line_spacing=1.05) + else: + add_textbox(s, Inches(0.9), Inches(2.15), Inches(11.6), Inches(1.0), rest, size=44 if len(rest) <= 18 else 34, bold=True, color=T.white, line_spacing=1.05) + if subtitle: + add_textbox(s, Inches(2.25) if num else Inches(0.9), Inches(3.25), Inches(11.0), Inches(0.6), subtitle, size=18, bold=True, color=_rgb("#D1D5DB")) + add_rect(s, Inches(0.9), Inches(4.25), Inches(4.2), Inches(0.08), fill=style.accent, line=None) + # Accent corner + add_rect(s, Inches(11.4), Inches(6.0), Inches(2.0), Inches(1.5), fill=style.accent, line=None, radius=True).fill.transparency = 0.15 + add_footer(s, slide_no, dark=True, footer_left=footer_left) + return s + + +def slide_agenda(prs: Presentation, slide_no: int, *, title: str, items: Sequence[str], footer_left: str | None, style: DeckStyle): + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + _header(s, title, style=style) + + # Stepper layout (horizontal) + card = add_shadow_card(s, Inches(0.7), Inches(1.55), Inches(11.93), Inches(4.9), fill=T.white, line=T.line) + _ = card + steps = [_strip_prefix(str(x)) for x in items][:6] + n = max(1, len(steps)) + left = Inches(1.1) + top = Inches(2.25) + usable_w = Inches(11.2) + gap = usable_w / n + for i, txt in enumerate(steps): + cx = left + gap * i + gap / 2 - Inches(0.35) + add_icon_circle(s, cx, top, Inches(0.7), f"{i+1}", fill=style.accent, fg=T.navy) + add_textbox(s, cx - Inches(0.6), top + Inches(0.85), Inches(2.0), Inches(0.55), txt, size=14, bold=True, color=T.text, align=PP_ALIGN.CENTER, line_spacing=1.05) + if i < n - 1: + # connector + add_rect(s, cx + Inches(0.7), top + Inches(0.33), gap - Inches(0.7), Inches(0.05), fill=_rgb("#CBD5E1"), line=None, radius=True) + + add_rect(s, Inches(1.1), Inches(5.8), Inches(11.2), Inches(0.7), fill=style.accent_2, line=None, radius=True) + add_textbox(s, Inches(1.35), Inches(5.93), Inches(10.7), Inches(0.45), "TIP: 각 파트는 5~7분 내로, 사례는 2개만 깊게 보면 충분합니다.", size=15, bold=True, color=T.text) + add_footer(s, slide_no, dark=False, footer_left=footer_left) + return s + + +def slide_bullets(prs: Presentation, slide_no: int, *, title: str, bullets: Sequence[str], chapter: str | None, footer_left: str | None, style: DeckStyle): + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + _header(s, title, chapter=chapter, style=style) + + # Left icon rail + bullet cards (more visual) + add_rect(s, Inches(0), Inches(0.95), Inches(0.22), SLIDE_H - Inches(0.95), fill=style.accent, line=None, radius=False) + add_icon_circle(s, Inches(0.35), Inches(1.55), Inches(0.8), "✓", fill=style.accent, fg=T.navy) + # Decorative blob + blob = s.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.OVAL, Inches(11.6), Inches(6.0), Inches(1.6), Inches(1.6)) + blob.fill.solid() + blob.fill.fore_color.rgb = style.accent + blob.fill.transparency = 0.88 + blob.line.fill.background() + + # Mood badge (top-right) + mood = mood_from_title(title, style=style) + add_pill(s, Inches(10.65), Inches(1.12), Inches(2.55), Inches(0.38), f"{mood.icon} {mood.label}", fill=mood.bg, fg=T.text) + + items = list(bullets) + n = len(items) + if n <= 5: + card = add_shadow_card(s, Inches(1.2), Inches(1.55), Inches(12.1), Inches(4.25), fill=T.white, line=T.line) + _ = card + y0 = Inches(1.95) + for i, txt in enumerate(items): + yy = y0 + Inches(0.78) * i + add_icon_circle(s, Inches(1.45), yy, Inches(0.38), f"{i+1}", fill=style.accent_2, fg=T.text) + add_textbox(s, Inches(1.9), yy - Inches(0.02), Inches(11.1), Inches(0.5), txt, size=18, bold=True, color=T.text, line_spacing=1.1) + add_rect(s, Inches(1.45), yy + Inches(0.55), Inches(11.6), Inches(0.02), fill=_rgb("#E5E7EB"), line=None, radius=False) + else: + # 2-column grid of mini cards + add_shadow_card(s, Inches(1.2), Inches(1.55), Inches(12.1), Inches(4.25), fill=T.white, line=T.line) + col_w = Inches(5.8) + row_h = Inches(1.1) + left_x = Inches(1.45) + right_x = Inches(7.35) + top_y = Inches(1.9) + for i, txt in enumerate(items[:8]): + xx = left_x if i % 2 == 0 else right_x + yy = top_y + row_h * (i // 2) + add_shadow_card(s, xx, yy, col_w, Inches(0.92), fill=_rgb("#F9FAFB"), line=_rgb("#E5E7EB")) + add_rect(s, xx, yy, Inches(0.08), Inches(0.92), fill=style.accent, line=None, radius=False) + add_textbox(s, xx + Inches(0.25), yy + Inches(0.18), col_w - Inches(0.35), Inches(0.6), txt, size=15, bold=True, color=T.text, line_spacing=1.08) + + # KPI cards (auto extracted from bullets) + add_kpi_cards(s, kpis=extract_kpis(items), style=style) + add_footer(s, slide_no, dark=False, footer_left=footer_left) + return s + + +def slide_two_column( + prs: Presentation, + slide_no: int, + *, + title: str, + left_title: str, + left_bullets: Sequence[str], + right_title: str, + right_bullets: Sequence[str], + chapter: str | None, + footer_left: str | None, + style: DeckStyle, +): + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + _header(s, title, chapter=chapter, style=style) + + lx = Inches(0.7) + rx = Inches(6.75) + y = Inches(1.55) + w = Inches(5.88) + h = Inches(5.0) + add_shadow_card(s, lx, y, w, h, fill=_rgb("#F8FAFC"), line=_rgb("#E5E7EB")) + add_shadow_card(s, rx, y, w, h, fill=_rgb("#F8FAFC"), line=_rgb("#E5E7EB")) + + # Colored headers + icons (auto semantics) + add_rect(s, lx, y, w, Inches(0.9), fill=_rgb("#EFF6FF"), line=None, radius=True) + add_rect(s, rx, y, w, Inches(0.9), fill=_rgb("#ECFDF5"), line=None, radius=True) + add_rect(s, lx, y, w, Inches(0.08), fill=T.accent_blue, line=None, radius=False) + add_rect(s, rx, y, w, Inches(0.08), fill=T.accent_green, line=None, radius=False) + left_icon = "!" + right_icon = "✓" + lt = left_title.lower() + rt = right_title.lower() + if "오해" in left_title or "bad" in lt or "don" in lt or "리스크" in left_title: + left_icon = "!" + if "현실" in right_title or "good" in rt or "do" in rt or "완화" in right_title: + right_icon = "✓" + if "before" in lt or "기존" in left_title: + left_icon = "◼" + if "after" in rt or "ai" in rt or "협업" in right_title: + right_icon = "▲" + add_icon_circle(s, lx + Inches(0.35), y + Inches(0.22), Inches(0.45), left_icon, fill=_rgb("#DBEAFE"), fg=_rgb("#1D4ED8")) + add_icon_circle(s, rx + Inches(0.35), y + Inches(0.22), Inches(0.45), right_icon, fill=_rgb("#D1FAE5"), fg=_rgb("#065F46")) + add_textbox(s, lx + Inches(0.9), y + Inches(0.18), w - Inches(1.2), Inches(0.55), left_title, size=18, bold=True, color=T.text) + add_textbox(s, rx + Inches(0.9), y + Inches(0.18), w - Inches(1.2), Inches(0.55), right_title, size=18, bold=True, color=T.text) + + add_bullets(s, lx + Inches(0.35), y + Inches(1.05), w - Inches(0.7), h - Inches(1.25), list(left_bullets), size=15, color=T.text, line_spacing=1.18) + add_bullets(s, rx + Inches(0.35), y + Inches(1.05), w - Inches(0.7), h - Inches(1.25), list(right_bullets), size=15, color=T.text, line_spacing=1.18) + + # VS badge + add_icon_circle(s, Inches(6.05), Inches(3.65), Inches(0.75), "VS", fill=_rgb("#111827"), fg=_rgb("#E5E7EB")) + add_footer(s, slide_no, dark=False, footer_left=footer_left) + return s + + +def slide_process(prs: Presentation, slide_no: int, *, title: str, steps: Sequence[str], chapter: str | None, footer_left: str | None, style: DeckStyle): + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + _header(s, title, chapter=chapter, style=style) + + add_shadow_card(s, Inches(0.7), Inches(1.55), Inches(11.93), Inches(4.9), fill=T.white, line=T.line) + + st = list(steps) + n = len(st) + # Timeline (horizontal) when possible + if n <= 6: + left = Inches(1.1) + y = Inches(3.05) + usable_w = Inches(11.2) + gap = usable_w / n + add_rect(s, left, y + Inches(0.35), usable_w, Inches(0.06), fill=_rgb("#CBD5E1"), line=None, radius=True) + for i, txt in enumerate(st): + cx = left + gap * i + gap / 2 - Inches(0.32) + add_icon_circle(s, cx, y, Inches(0.64), f"{i+1}", fill=style.accent, fg=T.navy) + add_shadow_card(s, cx - Inches(0.55), y - Inches(1.25), Inches(2.1), Inches(0.95), fill=_rgb("#F8FAFC"), line=_rgb("#E5E7EB")) + add_textbox(s, cx - Inches(0.45), y - Inches(1.1), Inches(1.9), Inches(0.75), txt, size=13, bold=True, color=T.text, align=PP_ALIGN.CENTER, line_spacing=1.05) + else: + # Grid fallback + cols = 3 + card_w = Inches(3.75) + card_h = Inches(1.1) + x0 = Inches(1.05) + y0 = Inches(1.95) + gx = Inches(0.35) + gy = Inches(0.25) + for i, txt in enumerate(st[:9]): + r = i // cols + c = i % cols + xx = x0 + (card_w + gx) * c + yy = y0 + (card_h + gy) * r + add_shadow_card(s, xx, yy, card_w, card_h, fill=_rgb("#F8FAFC"), line=_rgb("#E5E7EB")) + add_icon_circle(s, xx + Inches(0.22), yy + Inches(0.28), Inches(0.5), f"{i+1}", fill=style.accent_2, fg=T.text) + add_textbox(s, xx + Inches(0.85), yy + Inches(0.25), card_w - Inches(1.05), Inches(0.7), txt, size=14, bold=True, color=T.text, line_spacing=1.05) + + add_footer(s, slide_no, dark=False, footer_left=footer_left) + return s + + +def slide_prompt( + prs: Presentation, + slide_no: int, + *, + title: str, + prompt: str, + tips: Sequence[str] | None, + chapter: str | None, + footer_left: str | None, + style: DeckStyle, +): + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + _header(s, title, chapter=chapter, style=style) + + # Code block style prompt card + add_shadow_card(s, Inches(0.7), Inches(1.55), Inches(11.93), Inches(3.2), fill=style.code_bg, line=None, radius=True) + add_pill(s, Inches(0.95), Inches(1.72), Inches(2.2), Inches(0.38), "Copy & Paste", fill=style.accent, fg=T.navy) + add_icon_circle(s, Inches(11.85), Inches(1.67), Inches(0.55), "AI", fill=style.accent, fg=T.navy) + add_textbox_mono(s, Inches(0.95), Inches(2.15), Inches(11.33), Inches(2.35), prompt, size=14, color=style.code_fg) + + if tips: + # Tip cards (3) + add_textbox(s, Inches(0.7), Inches(4.95), Inches(6.0), Inches(0.35), "핵심 포인트", size=16, bold=True, color=T.text) + tip_list = list(tips)[:3] + tw = Inches(3.85) + ty = Inches(5.3) + for i, tip in enumerate(tip_list): + tx = Inches(0.7) + (tw + Inches(0.25)) * i + add_shadow_card(s, tx, ty, tw, Inches(1.15), fill=T.white, line=_rgb("#E5E7EB")) + add_icon_circle(s, tx + Inches(0.25), ty + Inches(0.28), Inches(0.55), "i", fill=style.accent_2, fg=T.text) + add_textbox(s, tx + Inches(0.95), ty + Inches(0.22), tw - Inches(1.15), Inches(0.9), tip, size=14, bold=True, color=T.text, line_spacing=1.08) + + add_footer(s, slide_no, dark=False, footer_left=footer_left) + return s + + +def slide_table( + prs: Presentation, + slide_no: int, + *, + title: str, + columns: Sequence[str], + rows: Sequence[Sequence[str]], + chapter: str | None, + footer_left: str | None, + style: DeckStyle, +): + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + _header(s, title, chapter=chapter, style=style) + + x = Inches(0.7) + y = Inches(1.55) + w = Inches(11.93) + h = Inches(4.9) + add_shadow_card(s, x, y, w, h, fill=T.white, line=T.line) + add_rect(s, x, y, w, Inches(0.08), fill=style.accent, line=None, radius=False) + add_icon_circle(s, x + Inches(0.2), y + Inches(0.18), Inches(0.55), "▦", fill=style.accent_2, fg=T.text) + + n_rows = 1 + len(rows) + n_cols = max(1, len(columns)) + # Leave a strip at bottom for mini chart. + table_h = h - Inches(1.45) + tbl = s.shapes.add_table(n_rows, n_cols, x + Inches(0.35), y + Inches(0.35), w - Inches(0.7), table_h).table + + col_names = [str(c) for c in columns] + col_names_l = [c.lower() for c in col_names] + savings_idx = next((j for j, c in enumerate(col_names_l) if ("절감" in c or "감소" in c or "saving" in c)), None) + before_idx = next((j for j, c in enumerate(col_names_l) if ("기존" in c or "before" in c or "as-is" in c or "현재" in c)), None) + after_idx = next((j for j, c in enumerate(col_names_l) if ("ai" in c or "after" in c or "to-be" in c or "협업" in c or "개선" in c)), None) + + for j, col in enumerate(columns): + cell = tbl.cell(0, j) + cell.text = col + for p in cell.text_frame.paragraphs: + for run in p.runs: + run.font.name = T.font_bold + run.font.bold = True + run.font.size = Pt(14) + run.font.color.rgb = T.white + p.alignment = PP_ALIGN.CENTER + cell.fill.solid() + if savings_idx is not None and j == savings_idx: + cell.fill.fore_color.rgb = _rgb("#166534") # deep green header for savings + else: + cell.fill.fore_color.rgb = T.navy_2 + + for i, r in enumerate(rows, start=1): + for j in range(n_cols): + cell = tbl.cell(i, j) + cell.text = (r[j] if j < len(r) else "") + for p in cell.text_frame.paragraphs: + for run in p.runs: + run.font.name = T.font + run.font.size = Pt(12) + run.font.color.rgb = T.text + p.alignment = PP_ALIGN.LEFT if j != 0 else PP_ALIGN.CENTER + cell.fill.solid() + base = _rgb("#F9FAFB") if i % 2 == 0 else T.white + if savings_idx is not None and j == savings_idx: + # subtle green tint for savings column + base = _rgb("#ECFDF5") if i % 2 == 0 else _rgb("#F0FDF4") + cell.fill.fore_color.rgb = base + + # --- Mini chart strip (paired bars / savings emphasis / percent) --- + def minutes_ok(col_idx: int) -> int: + ok = 0 + for rr in rows: + if col_idx < len(rr) and _parse_minutes(rr[col_idx]) is not None: + ok += 1 + return ok + + def percent_ok(col_idx: int) -> int: + ok = 0 + for rr in rows: + if col_idx < len(rr) and _parse_percent(rr[col_idx]) is not None: + ok += 1 + return ok + + minute_cols = [(minutes_ok(j), j) for j in range(1, n_cols)] + minute_cols.sort(reverse=True) + percent_cols = [(percent_ok(j), j) for j in range(1, n_cols)] + percent_cols.sort(reverse=True) + + # choose mode + mode: str | None = None + if before_idx is not None and after_idx is not None and minutes_ok(before_idx) >= 2 and minutes_ok(after_idx) >= 2: + mode = "paired_time" + a_idx = before_idx + b_idx = after_idx + elif percent_cols and percent_cols[0][0] >= 2: + mode = "percent" + p_idx = percent_cols[0][1] + elif minute_cols and minute_cols[0][0] >= 2: + mode = "single_time" + a_idx = minute_cols[0][1] + b_idx = minute_cols[1][1] if len(minute_cols) > 1 and minute_cols[1][0] >= 2 else None + else: + mode = None + + if mode: + chart_y = y + Inches(0.35) + table_h + Inches(0.18) + chart_h = Inches(0.86) + add_rect(s, x, chart_y, w, chart_h, fill=style.accent_2, line=None, radius=True) + add_textbox(s, x + Inches(0.35), chart_y + Inches(0.12), Inches(2.0), Inches(0.25), "Mini Chart", size=12, bold=True, color=T.text) + + label_x = x + Inches(0.35) + label_w = Inches(5.6) + bar_x = x + Inches(6.15) + bar_w = Inches(6.1) + + if mode == "percent": + # Legend + add_rect(s, x + Inches(2.45), chart_y + Inches(0.18), Inches(0.22), Inches(0.14), fill=style.accent, line=None, radius=True) + add_textbox(s, x + Inches(2.72), chart_y + Inches(0.11), Inches(3.4), Inches(0.3), str(columns[p_idx])[:18], size=11, bold=True, color=T.muted) + max_rows = min(4, len(rows)) + for i in range(max_rows): + rr = rows[i] + label = (rr[0] if rr else f"Row {i+1}")[:24] + v = _parse_percent(rr[p_idx]) if p_idx < len(rr) else None + if v is None: + continue + yy = chart_y + Inches(0.38) + Inches(0.18) * i + add_textbox(s, label_x, yy - Inches(0.06), label_w, Inches(0.2), label, size=11, bold=True, color=T.text) + bw = bar_w * (v / 100.0) + add_rect(s, bar_x, yy, bw, Inches(0.12), fill=style.accent, line=None, radius=True) + add_textbox(s, bar_x + bw + Inches(0.08), yy - Inches(0.06), Inches(1.0), Inches(0.2), f"{v:.0f}%", size=10, bold=True, color=T.muted) + + elif mode == "paired_time": + before_name = str(columns[a_idx]) + after_name = str(columns[b_idx]) + # Legend: before/after + savings + c_before = _rgb("#94A3B8") + c_after = style.accent + c_save = T.accent_green + lx = x + Inches(2.45) + for k, (cc, name) in enumerate([(c_before, before_name), (c_after, after_name), (c_save, "절감")]): + add_rect(s, lx + Inches(1.45) * k, chart_y + Inches(0.18), Inches(0.22), Inches(0.14), fill=cc, line=None, radius=True) + add_textbox(s, lx + Inches(1.45) * k + Inches(0.28), chart_y + Inches(0.11), Inches(1.2), Inches(0.3), name[:10], size=11, bold=True, color=T.muted) + + max_rows = min(3, len(rows)) + max_v = 0.0 + parsed: list[tuple[str, float | None, float | None, float | None]] = [] + for i in range(max_rows): + rr = rows[i] + label = (rr[0] if rr else f"Row {i+1}")[:24] + va = _parse_minutes(rr[a_idx]) if a_idx < len(rr) else None + vb = _parse_minutes(rr[b_idx]) if b_idx < len(rr) else None + vs = _parse_minutes(rr[savings_idx]) if (savings_idx is not None and savings_idx < len(rr)) else (va - vb if (va is not None and vb is not None) else None) + parsed.append((label, va, vb, vs)) + for vv in (va, vb): + if vv is not None: + max_v = max(max_v, vv) + if max_v <= 0: + max_v = 1.0 + + for i, (label, va, vb, vs) in enumerate(parsed): + yy = chart_y + Inches(0.36) + Inches(0.26) * i + add_textbox(s, label_x, yy - Inches(0.04), label_w, Inches(0.2), label, size=11, bold=True, color=T.text) + # stacked bars + if va is not None: + add_rect(s, bar_x, yy, bar_w * (va / max_v), Inches(0.10), fill=c_before, line=None, radius=True) + if vb is not None: + add_rect(s, bar_x, yy + Inches(0.12), bar_w * (vb / max_v), Inches(0.10), fill=c_after, line=None, radius=True) + if vs is not None and vs > 0: + add_pill(s, bar_x + bar_w + Inches(0.08), yy - Inches(0.03), Inches(1.05), Inches(0.22), f"-{vs:.0f}분", fill=_rgb("#DCFCE7"), fg=_rgb("#166534")) + + else: # single_time + # pick up to two cols and highlight savings if present + chosen = [a_idx] + ([b_idx] if b_idx is not None else []) + colors = [style.accent, _rgb("#94A3B8")] + lx = x + Inches(2.45) + for k, j in enumerate(chosen[:2]): + add_rect(s, lx + Inches(1.45) * k, chart_y + Inches(0.18), Inches(0.22), Inches(0.14), fill=colors[k], line=None, radius=True) + add_textbox(s, lx + Inches(1.45) * k + Inches(0.28), chart_y + Inches(0.11), Inches(1.2), Inches(0.3), str(columns[j])[:10], size=11, bold=True, color=T.muted) + + max_rows = min(4, len(rows)) + max_v = 0.0 + for i in range(max_rows): + rr = rows[i] + for j in chosen[:2]: + v = _parse_minutes(rr[j]) if j < len(rr) else None + if v is not None: + max_v = max(max_v, v) + if max_v <= 0: + max_v = 1.0 + + for i in range(max_rows): + rr = rows[i] + label = (rr[0] if rr else f"Row {i+1}")[:24] + yy = chart_y + Inches(0.38) + Inches(0.18) * i + add_textbox(s, label_x, yy - Inches(0.06), label_w, Inches(0.2), label, size=11, bold=True, color=T.text) + for k, j in enumerate(chosen[:2]): + v = _parse_minutes(rr[j]) if j < len(rr) else None + if v is None: + continue + bw = bar_w * (v / max_v) + yk = yy + Inches(0.14) * k + add_rect(s, bar_x, yk, bw, Inches(0.12), fill=colors[k], line=None, radius=True) + add_textbox(s, bar_x + bw + Inches(0.08), yk - Inches(0.06), Inches(1.0), Inches(0.2), str(rr[j])[:8], size=10, bold=True, color=T.muted) + + add_footer(s, slide_no, dark=False, footer_left=footer_left) + return s + + +def _require(cond: bool, msg: str) -> None: + if not cond: + raise ValueError(msg) + + +def _as_list(x: Any) -> list[Any]: + if x is None: + return [] + if isinstance(x, list): + return x + raise TypeError(f"expected list, got {type(x).__name__}") + + +def build_ppt(spec: dict[str, Any]) -> Presentation: + meta = spec.get("meta") or {} + title = str(meta.get("title") or "Untitled") + subtitle = meta.get("subtitle") + footer_left = meta.get("footer_left") + badge = meta.get("badge") + style = style_from_meta(meta) + + slides = _as_list(spec.get("slides")) + _require(len(slides) >= 20, f"slides must be >= 20 (got {len(slides)})") + + prs = Presentation() + prs.slide_width = SLIDE_W + prs.slide_height = SLIDE_H + + first = slides[0] + _require(first.get("type") == "cover", "first slide must be type=cover") + s0 = slide_cover(prs, title=title, subtitle=str(subtitle) if subtitle else None, badge=str(badge) if badge else None, footer_left=str(footer_left) if footer_left else None, style=style) + set_notes(s0, first.get("notes")) + + slide_no = 2 + for item in slides[1:]: + t = item.get("type") + chapter = item.get("chapter") + if t == "agenda": + s = slide_agenda(prs, slide_no, title=str(item.get("title") or "Agenda"), items=[str(x) for x in _as_list(item.get("items"))], footer_left=str(footer_left) if footer_left else None, style=style) + elif t == "section": + s = slide_section(prs, slide_no, title=str(item.get("title") or ""), subtitle=str(item.get("subtitle")) if item.get("subtitle") else None, footer_left=str(footer_left) if footer_left else None, style=style) + elif t == "bullets": + s = slide_bullets(prs, slide_no, title=str(item.get("title") or ""), bullets=[str(x) for x in _as_list(item.get("bullets"))], chapter=str(chapter) if chapter else None, footer_left=str(footer_left) if footer_left else None, style=style) + elif t == "two_column": + s = slide_two_column( + prs, + slide_no, + title=str(item.get("title") or ""), + left_title=str(item.get("left_title") or "Left"), + left_bullets=[str(x) for x in _as_list(item.get("left_bullets"))], + right_title=str(item.get("right_title") or "Right"), + right_bullets=[str(x) for x in _as_list(item.get("right_bullets"))], + chapter=str(chapter) if chapter else None, + footer_left=str(footer_left) if footer_left else None, + style=style, + ) + elif t == "process": + s = slide_process(prs, slide_no, title=str(item.get("title") or ""), steps=[str(x) for x in _as_list(item.get("steps"))], chapter=str(chapter) if chapter else None, footer_left=str(footer_left) if footer_left else None, style=style) + elif t == "prompt": + s = slide_prompt( + prs, + slide_no, + title=str(item.get("title") or ""), + prompt=str(item.get("prompt") or ""), + tips=[str(x) for x in _as_list(item.get("tips"))] if item.get("tips") is not None else None, + chapter=str(chapter) if chapter else None, + footer_left=str(footer_left) if footer_left else None, + style=style, + ) + elif t == "table": + s = slide_table( + prs, + slide_no, + title=str(item.get("title") or ""), + columns=[str(x) for x in _as_list(item.get("columns"))], + rows=[[str(c) for c in _as_list(r)] for r in _as_list(item.get("rows"))], + chapter=str(chapter) if chapter else None, + footer_left=str(footer_left) if footer_left else None, + style=style, + ) + else: + raise ValueError(f"unknown slide type: {t!r}") + set_notes(s, item.get("notes")) + slide_no += 1 + + return prs + + +def load_spec(path: Path) -> dict[str, Any]: + data = json.loads(path.read_text(encoding="utf-8")) + if not isinstance(data, dict): + raise TypeError("spec must be a JSON object") + return data + + +def maybe_install_deps() -> None: + try: + import pptx # noqa: F401 + except Exception: + subprocess.check_call([sys.executable, "-m", "pip", "install", "python-pptx"]) + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--spec", required=True, help="slides.json path") + ap.add_argument("--out", required=False, help="output .pptx path (default: /.pptx)") + ap.add_argument("--install-deps", action="store_true", help="pip install python-pptx if missing") + args = ap.parse_args() + + if args.install_deps: + maybe_install_deps() + + spec_path = Path(args.spec).resolve() + spec = load_spec(spec_path) + meta = spec.get("meta") or {} + title = str(meta.get("title") or spec_path.parent.name) + out = Path(args.out).resolve() if args.out else (spec_path.parent / f"{title}.pptx").resolve() + out.parent.mkdir(parents=True, exist_ok=True) + + prs = build_ppt(spec) + prs.save(str(out)) + print(f"wrote {out} ({out.stat().st_size:,} bytes)") + + +if __name__ == "__main__": + main() + diff --git a/AX 강의 - 1/_common/slides.example.json b/AX 강의 - 1/_common/slides.example.json new file mode 100644 index 0000000..9518887 --- /dev/null +++ b/AX 강의 - 1/_common/slides.example.json @@ -0,0 +1,113 @@ +{ + "meta": { + "title": "예시 - 강의형(참여형 활동 없음)", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "예시 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝: 오늘은 참여형 활동 없이, 사례/체크리스트 중심으로 진행합니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 흐름을 10초로 안내하고 바로 본론으로 들어갑니다." + }, + { + "type": "section", + "title": "1. 왜 필요한가", + "subtitle": "리더십부터 실무자까지", + "notes": "리더 관점(성과/리스크)과 실무 관점(시간/품질)을 연결해 설명합니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "시간 절감(반복 업무)", + "품질 표준화(템플릿)", + "리스크 감소(검증/승인)", + "온보딩 가속", + "의사결정 리드타임 단축" + ], + "notes": "조직 사례가 있다면 1개만 붙여 설득력을 높입니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "핵심 개념은 3~6개로 제한하고, 각각 1문장으로 정의합니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "오해 vs 현실", + "left_title": "오해", + "left_bullets": ["AI는 만능", "한 번 도입하면 끝"], + "right_title": "현실", + "right_bullets": ["사람 검증이 필수", "운영/거버넌스가 성패를 좌우"], + "notes": "오해를 정리한 뒤, 현실 기준을 '팀 표준'으로 제시합니다." + }, + { + "type": "process", + "chapter": "Part 3", + "title": "적용 루틴(강의형 가이드)", + "steps": [ + "목표/대상/제약 정의", + "입력 데이터 정리", + "출력 형식 지정", + "검증/리스크 체크", + "공유/표준화", + "지표로 개선" + ], + "notes": "참여자에게 '지금 해보라'가 아니라, 기준과 사례를 설명합니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "Before / After (예시)", + "columns": ["업무", "기존", "개선", "절감"], + "rows": [ + ["회의록", "40분", "12분", "28분"], + ["메일", "20분", "5분", "15분"], + ["보고 1p", "60분+", "20분", "40분"] + ], + "notes": "표는 정의/기간을 같이 확인하며 읽습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화", + "left_title": "리스크", + "left_bullets": ["환각/오류", "보안/기밀", "품질 편차", "운영 장애"], + "right_title": "완화", + "right_bullets": ["원문 대조", "입력 금지/가명화", "승인/리뷰", "로그/모니터링"], + "notes": "리스크는 '기술'이 아니라 '프로세스'로 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "요약 & 다음 행동", + "bullets": [ + "목적·맥락·형식 + 검증", + "작게 시작해 표준화", + "지표로 개선", + "오늘 행동: 템플릿 1개를 팀 표준으로 정하기" + ], + "notes": "마무리는 '오늘부터 무엇을 할지' 한 문장으로 정리합니다." + } + ] +} + diff --git a/AX 강의 - 1/_common/slides.schema.json b/AX 강의 - 1/_common/slides.schema.json new file mode 100644 index 0000000..e42b38d --- /dev/null +++ b/AX 강의 - 1/_common/slides.schema.json @@ -0,0 +1,219 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX Curriculum Slides Spec", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "badge": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "tone": { "type": "string" }, + "footer_left": { "type": "string" } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 20, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { + "type": "string", + "enum": ["cover", "agenda", "section", "bullets", "two_column", "process", "prompt", "table"] + }, + "chapter": { "type": "string" }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "items": { "type": "array", "items": { "type": "string" } }, + "bullets": { "type": "array", "items": { "type": "string" } }, + "left_title": { "type": "string" }, + "left_bullets": { "type": "array", "items": { "type": "string" } }, + "right_title": { "type": "string" }, + "right_bullets": { "type": "array", "items": { "type": "string" } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "prompt": { "type": "string" }, + "tips": { "type": "array", "items": { "type": "string" } }, + "columns": { "type": "array", "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": true +} + +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AX Deck Slides JSON Schema", + "type": "object", + "additionalProperties": false, + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "additionalProperties": false, + "required": ["title", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "author": { "type": "string" }, + "date": { "type": "string" }, + "language": { "type": "string", "default": "ko-KR" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "version": { "type": "string" } + } + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { "$ref": "#/definitions/slide" } + } + }, + "definitions": { + "bulletItem": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "additionalProperties": false, + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "children": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + } + ] + }, + "column": { + "type": "object", + "additionalProperties": false, + "required": ["heading", "bullets"], + "properties": { + "heading": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + }, + "slide": { + "type": "object", + "additionalProperties": false, + "required": ["type", "title"], + "properties": { + "type": { + "type": "string", + "enum": [ + "title", + "section", + "agenda", + "bullets", + "two_column_bullets", + "quote", + "table", + "exercise", + "closing", + "blank" + ] + }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + }, + "items": { "type": "array", "items": { "type": "string" } }, + "left": { "$ref": "#/definitions/column" }, + "right": { "$ref": "#/definitions/column" }, + "quote": { "type": "string" }, + "attribution": { "type": "string" }, + "headers": { "type": "array", "minItems": 1, "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "timebox_minutes": { "type": "integer", "minimum": 1 }, + "notes": { "type": "string" } + }, + "allOf": [ + { "if": { "properties": { "type": { "const": "agenda" } } }, "then": { "required": ["items"] } }, + { "if": { "properties": { "type": { "const": "bullets" } } }, "then": { "required": ["bullets"] } }, + { + "if": { "properties": { "type": { "const": "two_column_bullets" } } }, + "then": { "required": ["left", "right"] } + }, + { "if": { "properties": { "type": { "const": "quote" } } }, "then": { "required": ["quote"] } }, + { "if": { "properties": { "type": { "const": "table" } } }, "then": { "required": ["headers", "rows"] } }, + { "if": { "properties": { "type": { "const": "exercise" } } }, "then": { "required": ["steps"] } } + ] + } + } +} +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX 교육용 slides.json 스키마", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 5, "maximum": 180 }, + "audience": { "type": "string" }, + "language": { "type": "string", "enum": ["ko"] }, + "version": { "type": "integer", "minimum": 1 } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { "type": "string", "enum": ["title", "section", "content", "two_content"] }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "level": { "type": "integer", "minimum": 0, "maximum": 5 } + }, + "additionalProperties": false + } + ] + } + }, + "left_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "right_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "notes": { "type": "string" } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": false +} + diff --git a/AX 강의 - 1/generate_all.py b/AX 강의 - 1/generate_all.py new file mode 100644 index 0000000..5f25d8d --- /dev/null +++ b/AX 강의 - 1/generate_all.py @@ -0,0 +1,683 @@ +from __future__ import annotations + +import json +import re +from dataclasses import dataclass +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parent +COMMON = ROOT / "_common" + + +def dump_json(path: Path, obj: Any) -> None: + path.write_text(json.dumps(obj, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") + + +def dump_text(path: Path, text: str) -> None: + path.write_text(text.rstrip() + "\n", encoding="utf-8") + + +def prompt_text(*, title: str, category: str, seed_prompt: str) -> str: + return f"""너는 기업 AX 전환 교육용 PPT를 설계하는 교육 콘텐츠 디자이너다. + +주제(폴더명/PPT 제목): {title} +구분: {category} +요청(시드 프롬프트): +{seed_prompt} + +목표: +- 리더십부터 실무자까지 "왜 이 주제를 이해해야 하는지"를 먼저 설득한다. +- 30분 교육으로 진행 가능하도록 구성한다. +- 최소 20장 이상(권장 22장) 슬라이드가 나오도록 한다. +- 예시(상황/결과/체크리스트/사례)가 풍부해야 한다. +- 발표자가 그대로 읽어도 자연스럽도록 슬라이드 흐름(도입→핵심→사례→리스크→정리)을 만든다. +- 발표 중 **참여형 활동 없이 진행한다.** (참여자에게 '직접 해보라'는 지시 금지) +- 프롬프트/템플릿은 "참고 예시"로만 제시하고, 단계별 따라하기 구성은 만들지 않는다. + +출력 형식(반드시 준수): +- 최종 출력은 JSON 한 덩어리만 출력한다. (설명/문장/코드블록 금지) +- JSON은 아래 스키마를 만족해야 한다: slides.schema.json +- slides[0]은 반드시 type="cover"로 둔다. (표지는 meta.title/meta.subtitle/meta.badge로 자동 생성됨) +- 슬라이드 타입은 다음만 사용한다: + - cover, agenda, section, bullets, two_column, process, table + +작성 규칙: +- bullets는 4~7개 내로, 한 줄은 60자 내로. +- 별도의 prompt(코드블록) 슬라이드를 만들지 않는다. (참여형 활동 유도로 오해될 수 있음) +- table 슬라이드는 열 3~4개, 행 3~6개 정도로 간결하게. +- 보안/윤리/환각 등 리스크가 있는 주제는 "Do & Don't" 또는 "리스크/완화"를 반드시 포함한다. +- 마지막은 요약 + 다음 행동(오늘부터 1개 실행)으로 끝낸다. +""" + + +def wrapper_make_ppt_py() -> str: + return """from __future__ import annotations + +import subprocess +import sys +from pathlib import Path + + +def main() -> None: + base = Path(__file__).resolve().parent + common = base.parent / "_common" / "make_ppt.py" + spec = base / "slides.json" + out = base / f"{base.name}.pptx" + subprocess.check_call([sys.executable, str(common), "--spec", str(spec), "--out", str(out)]) + + +if __name__ == "__main__": + main() +""" + + +@dataclass(frozen=True) +class Topic: + category: str + title: str + ppt_title: str | None + seed_prompt: str + leader_why: list[str] + worker_why: list[str] + myth: list[str] + reality: list[str] + effects: list[str] + concepts: list[str] + framework_steps: list[str] + good: list[str] + bad: list[str] + mistakes: list[str] + prompt1_title: str + prompt1: str + prompt1_tips: list[str] + prompt2_title: str + prompt2: str + prompt2_tips: list[str] + table_title: str + table_columns: list[str] + table_rows: list[list[str]] + risks: list[str] + mitigations: list[str] + checklist: list[str] + rollout: list[str] + summary: list[str] + + +def _title_without_practice_prefix(title: str) -> str: + t = title.strip() + t = re.sub(r"^\s*실습\s*\d+\)\s*", "", t) + t = re.sub(r"^\s*실습\s*\d+\.\s*", "", t) + return t.strip() + + +def _case_bullets(*, prompt: str, tips: list[str], max_tips: int = 3) -> list[str]: + """ + Convert a 'prompt template' into non-practice, lecture-friendly bullets: + - what to specify, why it matters, and a short example snippet (not an instruction to run). + """ + lines = [ln.strip() for ln in str(prompt).splitlines() if ln.strip()] + role = lines[0] if lines else "" + ex = " / ".join(lines[1:3]) if len(lines) >= 3 else (lines[1] if len(lines) >= 2 else "") + out = [] + if role: + out.append(f"요청의 역할/관점: {role.replace('너는 ', '').replace('야.', '').replace('야', '')[:40]}") + out.append("핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)") + out.append("출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨") + if ex: + out.append(f"짧은 예시 문장(참고): \"{ex[:55]}\"") + for t in tips[:max_tips]: + out.append(f"포인트: {t}") + # ensure 5~7 bullets + return out[:7] + + +def _sanitize_text(s: str) -> str: + # Phrase-level first + s = s.replace("실습 없이", "참여형 활동 없이") + s = s.replace("실습 유도로", "참여형 활동 유도로") + s = s.replace("실습 위주의", "강의형 중심의") + # Word-level + s = s.replace("워크숍", "강의") + s = s.replace("실습", "적용") + return s + + +def _sanitize_obj(obj: Any) -> Any: + if obj is None: + return None + if isinstance(obj, str): + return _sanitize_text(obj) + if isinstance(obj, list): + return [_sanitize_obj(x) for x in obj] + if isinstance(obj, dict): + return {k: _sanitize_obj(v) for k, v in obj.items()} + return obj + + +def _notes_for(slide: dict[str, Any], meta: dict[str, Any]) -> str: + title = str(meta.get("title") or "") + st = str(slide.get("type") or "") + slide_title = str(slide.get("title") or "") + if st == "cover": + return ( + f"오프닝(10초): 오늘 주제는 '{title}'입니다.\n" + "운영 안내(10초): 오늘은 참여형 활동 없이, 사례와 체크리스트 중심으로 정리합니다.\n" + "목표(10초): 왜 중요한지 → 핵심 원칙 → 사례 해설 → 리스크/대응 → 다음 행동까지 30분에 끝냅니다." + ) + if st == "agenda": + return ( + "전체 구성(20초): 5파트로 진행합니다.\n" + "- 1) 왜 필요한가\n- 2) 핵심 개념/원칙\n- 3) 사례로 이해하는 적용 가이드\n- 4) 리스크/체크리스트\n- 5) 요약 & 다음 행동\n" + "안내(10초): 참여형 활동 없이, 바로 가져가 쓸 수 있는 요약/체크리스트 중심입니다." + ) + if st == "section": + return f"전환(10초): 이제 '{slide_title}' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + if st == "bullets": + bullets = slide.get("bullets") or [] + top = " / ".join([str(x) for x in bullets[:2]]) if isinstance(bullets, list) else "" + return f"핵심(10초): '{slide_title}' 슬라이드입니다.\n포인트(20초): {top}\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + if st == "two_column": + return f"의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + if st == "process": + steps = slide.get("steps") or [] + top = " → ".join([str(x) for x in steps[:3]]) if isinstance(steps, list) else "" + return f"핵심(10초): '{slide_title}'는 실행 흐름(루틴)을 제시합니다.\n요약(20초): {top} …\n팁(10초): 이 순서를 팀 템플릿으로 고정하면 재작업이 크게 줄어듭니다." + if st == "table": + cols = slide.get("columns") or [] + return f"읽는 법(15초): 표는 {', '.join([str(c) for c in cols[:4]])} 기준으로 비교합니다.\n포인트(15초): 수치/정의/기간을 같이 확인해 오해를 줄입니다." + return "" + + +def spec_for(t: Topic) -> dict[str, Any]: + display_title = t.ppt_title or t.title + meta = { + "title": display_title, + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": f"{t.category} 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02", + } + + slides: list[dict[str, Any]] = [ + {"type": "cover"}, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": ["1) 왜 필요한가", "2) 핵심 개념/원칙", "3) 사례로 이해하는 적용 가이드", "4) 리스크/체크리스트", "5) 요약 & 다음 행동"], + }, + {"type": "section", "title": "1. 왜 이 주제를 이해해야 하나", "subtitle": "리더십부터 실무자까지"}, + {"type": "bullets", "chapter": "Part 1", "title": "리더십 관점: 왜 중요한가", "bullets": t.leader_why}, + {"type": "bullets", "chapter": "Part 1", "title": "실무자 관점: 무엇이 달라지나", "bullets": t.worker_why}, + { + "type": "two_column", + "chapter": "Part 1", + "title": "흔한 오해 vs 현실", + "left_title": "오해", + "left_bullets": t.myth, + "right_title": "현실", + "right_bullets": t.reality, + }, + {"type": "bullets", "chapter": "Part 1", "title": "기대 효과(정량/정성)", "bullets": t.effects}, + {"type": "section", "title": "2. 핵심 개념과 원칙", "subtitle": "이것만 지키면 실패 확률이 줄어든다"}, + {"type": "bullets", "chapter": "Part 2", "title": "핵심 개념 6가지", "bullets": t.concepts}, + {"type": "process", "chapter": "Part 2", "title": "실행 프레임워크(권장 루틴)", "steps": t.framework_steps}, + { + "type": "two_column", + "chapter": "Part 2", + "title": "좋은 예 vs 나쁜 예 (짧은 비교)", + "left_title": "좋은 예", + "left_bullets": t.good, + "right_title": "나쁜 예", + "right_bullets": t.bad, + }, + {"type": "bullets", "chapter": "Part 2", "title": "자주 하는 실수", "bullets": t.mistakes}, + {"type": "section", "title": "3. 사례로 이해하는 적용 가이드", "subtitle": "참여형 활동 없이도 이해되는 예시 중심"}, + { + "type": "bullets", + "chapter": "Part 3", + "title": f"사례 1) {_title_without_practice_prefix(t.prompt1_title)}", + "bullets": _case_bullets(prompt=t.prompt1, tips=t.prompt1_tips), + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": f"사례 2) {_title_without_practice_prefix(t.prompt2_title)}", + "bullets": _case_bullets(prompt=t.prompt2, tips=t.prompt2_tips), + }, + ] + + if t.table_columns and t.table_rows: + slides.append( + { + "type": "table", + "chapter": "Part 3", + "title": t.table_title, + "columns": t.table_columns, + "rows": t.table_rows, + } + ) + else: + slides.append( + { + "type": "bullets", + "chapter": "Part 3", + "title": "적용 가이드(발표자 설명용)", + "bullets": ["핵심은 목적·대상·제약·형식 4요소", "예시 1개를 함께 보여주면 팀 표준이 빨리 잡힘", "중요 수치/규정/고유명사는 반드시 원문 대조", "결론을 ‘가설’로 두고 근거를 요구"], + } + ) + + slides += [ + {"type": "bullets", "chapter": "Part 3", "title": "결과 품질 검증 체크", "bullets": ["사실/수치/고유명사는 원문 대조", "누락된 가정이 없는지 질문", "대안 2개 이상 비교 요청", "리스크/반론을 함께 요청"]}, + {"type": "section", "title": "4. 리스크 & 체크리스트", "subtitle": "안전하게, 팀 단위로 굴리기"}, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화 전략", + "left_title": "리스크", + "left_bullets": t.risks, + "right_title": "완화", + "right_bullets": t.mitigations, + }, + {"type": "bullets", "chapter": "Part 4", "title": "체크리스트(현업 적용용)", "bullets": t.checklist}, + {"type": "bullets", "chapter": "Part 4", "title": "팀 적용(롤아웃) 방법", "bullets": t.rollout}, + {"type": "section", "title": "5. 요약 & 다음 행동", "subtitle": "오늘부터 1개만 실행"}, + {"type": "bullets", "chapter": "Part 5", "title": "핵심 요약", "bullets": t.summary}, + ] + + # Attach speaker notes (no practice language) + for s in slides: + s["notes"] = _notes_for(s, meta) + + out = {"meta": meta, "slides": slides} + return _sanitize_obj(out) + + +def topics() -> list[Topic]: + return [ + Topic( + category="마인드셋", + title="AI는 내 자리를 뺏지 않는다, 내 시간을 벌어준다", + ppt_title=None, + seed_prompt='"AI와 인간의 협업 마인드셋"을 주제로 PPT 개요를 짜줘. AI가 일자리를 대체한다는 공포를 해소하고, \'인간의 창의성 + AI의 속도\'가 결합된 미래 업무 모습을 시각화해줘. 신뢰감 있고 희망찬 톤으로 작성해줘.', + leader_why=["AI 도입은 비용이 아니라 생산성 투자: KPI로 설계해야 함", "‘AI 활용 격차’가 성과 격차로 전이됨(조직 리스크)", "업무 프로세스 재설계 없이 툴만 깔면 실패 확률↑", "현장 저항/두려움은 변화관리의 핵심 변수", "작은 성공(Small Win)을 조직적으로 확산해야 함"], + worker_why=["AI는 반복 작업을 줄이고 ‘판단/소통’에 시간을 돌려줌", "내 업무를 잘 설명할수록 AI가 더 잘 도와줌", "초안→검토 루틴이 생기면 품질이 안정적으로 개선", "‘나만의 템플릿’이 곧 개인 경쟁력이 됨", "일/학습 속도가 빨라져 성장 체감이 생김"], + myth=["AI가 들어오면 내 일은 사라진다", "AI는 정답을 준다", "AI는 내가 알아서 잘 쓸 수 있다", "AI는 전문가만 쓰는 도구다"], + reality=["업무는 ‘대체’보다 ‘재배치’: 반복↓ 판단/협업↑", "AI는 ‘초안’에 강하고 검증은 사람 몫", "좋은 입력(목적/맥락/형식)이 성과를 결정", "초보도 ‘템플릿’으로 빠르게 숙련 가능"], + effects=["반복 문서(메일/요약/보고) 시간 30~70% 단축", "회의 후속 액션 누락 감소(체크리스트화)", "아이디어 발산 속도↑ → 의사결정 리드타임↓", "교육/온보딩 콘텐츠 제작 속도↑", "개인 단위로 ‘일하는 방식’이 표준화됨"], + concepts=["AI는 ‘확률 기반’ 언어 생성기: 그럴듯한 오류 가능", "입력 품질 = 출력 품질(맥락/제약/형식)", "AI는 초안 작성자, 사람은 검토자/의사결정자", "작게 시작해 반복 개선(Iterative)", "템플릿화(재사용)로 ROI를 만든다", "검증/보안은 습관으로 내재화"], + framework_steps=["업무 1개를 고른다(반복/시간소모)", "목적·대상·제약을 3줄로 정리", "형식(표/목차/분량/톤)을 지정", "초안 생성→내가 검토·수정", "좋은 결과는 템플릿으로 저장/공유", "주 1회 개선(예시 추가/실수 제거)"], + good=["목적/대상/형식이 명시된 요청", "‘결론 먼저 + 근거’ 구조", "예시 1개 제공(스타일 고정)", "검증 질문(반론/리스크) 포함"], + bad=["‘보고서 써줘’ 같은 모호한 지시", "데이터/기간/대상을 누락", "형식 지정 없이 장문 생성", "검증 없이 그대로 복붙"], + mistakes=["AI 답을 정답으로 취급(검증 생략)", "업무 목적 대신 ‘기능’만 요구", "회사/고객 민감정보를 그대로 입력", "결과물 책임 소재를 AI에 전가", "템플릿을 안 남겨 매번 처음부터 다시 함"], + prompt1_title="실습 1) 내 업무 1개를 ‘AI 협업’으로 재설계", + prompt1="너는 나의 업무 코치야.\n내 업무는 [업무명]이고, 목표는 [목표]야.\n현재 문제는 [시간이 오래 걸리는 이유/병목]이야.\nAI로 줄일 수 있는 단계 3개를 제안하고,\n각 단계별로 내가 입력해야 할 정보(체크리스트)를 만들어줘.\n출력: 표(열: 단계, AI가 할 일, 내가 할 일, 입력 체크리스트, 예상 절감시간)", + prompt1_tips=["업무를 ‘단계’로 쪼개기", "절감시간은 분 단위로 가정해보기", "입력 체크리스트를 바로 템플릿화"], + prompt2_title="실습 2) ‘검증 질문’ 붙여서 품질 올리기", + prompt2="너는 꼼꼼한 리뷰어야.\n아래 AI 초안을 검토해줘.\n- 사실/수치/고유명사 오류 가능성이 있는 부분 표시\n- 누락된 전제/가정 5개 질문\n- 반론/리스크 3개 제시\n- 더 명확한 버전으로 1회 리라이팅\n[초안]\n(여기에 초안을 붙여넣기)", + prompt2_tips=["‘누락 질문’이 품질을 올린다", "반론/리스크를 먼저 받으면 안전", "리라이팅은 1회만, 과도한 편집 방지"], + table_title="시간을 버는 대표 업무(예시)", + table_columns=["업무", "기존 소요", "AI 협업", "핵심 조건"], + table_rows=[["메일 초안", "15~25분", "3~7분", "대상/목적/톤"], ["회의록 요약", "30~45분", "8~15분", "결정/액션 추출"], ["보고서 1p 요약", "60분+", "15~25분", "결론 먼저/표"]], + risks=["성과 압박으로 ‘무작정 도입’", "검증 없이 복붙(품질 리스크)", "개인별 방식 난립(표준 부재)", "AI 과신/의존"], + mitigations=["작은 성공을 KPI로 설계", "검증 체크리스트를 기본 탑재", "템플릿/예시로 표준화", "사람 책임/승인 프로세스 명확화"], + checklist=["목적/대상/제약이 3줄로 정리됐나", "입력 데이터는 충분한가", "출력 형식(표/목차/분량/톤)을 줬나", "검증 질문(반론/리스크)을 붙였나", "좋은 결과를 템플릿으로 저장했나"], + rollout=["팀 공통 템플릿 5개부터 시작", "주 1회 ‘좋은 프롬프트 공유’ 10분", "성과는 시간절감/품질지표로 기록", "실패 사례도 같이 공유(학습)"], + summary=["AI는 대체자가 아니라 증폭기(Amplifier)", "핵심은 목적·맥락·형식 + 검증", "작게 시작해 템플릿으로 확장", "오늘 행동: 내 업무 1개를 단계로 쪼개고 템플릿 1개 만들기"], + ), + Topic( + category="윤리/보안", + title="회사의 비밀을 지키며 AI와 대화하는 법", + ppt_title=None, + seed_prompt='"기업용 AI 보안 및 가이드라인" 발표 자료를 만들어줘. 내부 데이터 유출 사례, 안전한 프롬프트 작성 규칙, 우리 회사만의 보안 수칙(Do\'s & Don\'ts)을 포함해줘. 경각심을 주되 명확한 행동 지침을 강조해줘.', + leader_why=["AI 활용은 ‘통제’가 없으면 보안 사고로 직결", "정책/도구/권한/감사(로그) 체계를 리더가 결정", "사고 1건의 비용은 도입 효익을 초과할 수 있음", "규정 준수(PII/저작권/계약) 책임은 조직에 있음", "현업이 이해하는 ‘행동 지침’이 있어야 실행됨"], + worker_why=["나도 모르게 기밀/개인정보를 넣기 쉬움", "보안 규칙은 복잡해 보여도 핵심은 단순(입력 금지)", "대안(가명화/요약/사내툴)만 알면 안전하게 쓸 수 있음", "안전한 프롬프트는 결과 품질도 더 좋아짐", "한 번의 실수가 개인/조직 리스크로 확대"], + myth=["‘내가 쓴 건 괜찮겠지’", "AI에 넣어도 어차피 저장 안 할 것", "민감정보만 빼면 원문을 넣어도 된다", "출처 없이 써도 문제 없다"], + reality=["실수는 항상 발생: 시스템으로 막아야 함", "도구/정책에 따라 저장/학습 여부가 다름", "원문 자체가 민감일 수 있음(계약/특허/환자)", "저작권/라이선스/규정은 ‘사람 책임’"], + effects=["데이터 유출 위험↓(입력 규칙 표준화)", "검증 가능한 활용만 남아 품질↑", "사고 대응 시간↓(로그/절차 명확)", "팀원 불안↓(허용/금지 기준 명확)", "AI 활용이 지속가능한 문화로 정착"], + concepts=["‘입력=외부 전송’으로 가정하고 설계", "PII/기밀/영업비밀/환자정보는 입력 금지", "가명화/요약/마스킹이 기본 대안", "출처/라이선스 확인(저작권)", "사내 승인된 도구 우선(계정/로그)", "결과물 검증·책임은 사용자/조직"], + framework_steps=["데이터 분류(공개/내부/기밀/PII)", "허용 도구 확인(사내/외부)", "입력 전 마스킹/요약", "출력 검증(사실/출처/저작권)", "저장/공유 기준 적용", "사고 시 보고 절차 실행"], + good=["가명화된 데이터로 질문", "규정/제약을 먼저 선언", "출처/근거를 요청", "최종 활용 전 ‘검증 체크’ 포함"], + bad=["고객/환자 원문 붙여넣기", "계약서/특허 원문 전체 입력", "사내 매출/단가/전략 수치 입력", "출처 없이 이미지/문구 그대로 사용"], + mistakes=["‘민감정보’ 정의를 협소하게 이해", "마스킹 없이 원문 그대로 입력", "도구별 정책(저장/학습) 미확인", "AI 생성물의 저작권/표절 리스크 무시", "결과물을 사내 공유 채널에 무단 게시"], + prompt1_title="실습 1) ‘안전하게 요약’ 프롬프트", + prompt1="너는 보안에 민감한 문서 요약 전문가야.\n아래 텍스트는 민감정보가 포함될 수 있으니,\n1) 민감정보로 추정되는 부분을 [REDACTED]로 표시하고\n2) 핵심 요지만 7줄로 요약해줘.\n3) 추가로 필요한 정보가 있으면 질문 3개를 해줘.\n[텍스트]\n(여기에 요약 대상 일부만 붙여넣기)", + prompt1_tips=["원문 전체가 아니라 ‘필요 최소’만", "REDACTED 표기 습관화", "추가 질문으로 누락 방지"], + prompt2_title="실습 2) Do & Don't 체크 생성", + prompt2="너는 기업용 AI 활용 가이드라인 작성자야.\n우리 팀 업무는 [업무영역]이고 다루는 데이터는 [데이터종류]야.\n이 팀에 적용할 AI 활용 Do 7개, Don't 7개를 만들어줘.\n각 항목마다 이유(1줄)와 예시(1줄)를 붙여줘.\n출력: 표(열: 구분, 규칙, 이유, 예시)", + prompt2_tips=["업무영역/데이터를 구체화", "규칙은 행동 단위로 쓰기", "예시는 실제 문장으로"], + table_title="입력 금지 vs 안전한 대안(예시)", + table_columns=["금지 입력", "왜 위험?", "대안"], + table_rows=[["개인식별정보(이름/연락처/주민번호)", "PII 유출", "가명화(ID치환) + 범위화"], ["계약서/특허 원문", "영업비밀/법적 리스크", "핵심 조항만 요약 + 비식별"], ["내부 매출/단가/전략", "경쟁/시장 리스크", "지표를 구간화 + 공개정보만"]], + risks=["기밀/PII 입력으로 인한 유출", "저작권/표절 이슈", "규정 위반(내부통제)", "환각으로 인한 오판"], + mitigations=["데이터 분류/입력 금지 리스트", "가명화/요약 템플릿 제공", "출처 표기/검증 프로세스", "승인된 도구만 사용 + 로그"], + checklist=["내가 넣는 데이터가 PII/기밀인가", "사내 승인 도구/계정인가", "원문 대신 요약/마스킹 했나", "출처/라이선스 확인했나", "결과물을 공유해도 되는가"], + rollout=["팀별 ‘금지 입력’ 사례집 만들기", "프롬프트 템플릿에 보안 문구 기본 삽입", "월 1회 사례 공유(사고/미스 포함)", "보안 담당과 채널 고정(질문/승인)"], + summary=["입력은 곧 외부 전송이라고 가정", "금지 리스트 + 대안(가명화/요약)만 지켜도 80% 해결", "출처/저작권/환각은 반드시 검증", "오늘 행동: 내 업무 ‘금지 입력 5개’와 대안 5개 정리"], + ), + Topic( + category="업무 효율", + title="칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기", + ppt_title=None, + seed_prompt='"직장인 공통 업무 자동화(이메일, 요약, 일정)"를 주제로 슬라이드를 구성해줘. 비포&애프터 비교표를 넣어서 AI 활용 시 절약되는 시간을 수치로 보여줘. 실용적이고 에너제틱한 느낌의 레이아웃으로 제안해줘.', + leader_why=["개인 효율이 팀 생산성으로 이어지는 ‘확장 효과’", "반복 업무 표준화는 품질/리스크를 동시에 낮춤", "‘시간 절감’은 가장 빠르게 측정 가능한 KPI", "업무 인수인계/온보딩 속도 개선", "자동화는 프로세스 개선의 출발점"], + worker_why=["메일/요약/일정이 하루 시간을 갉아먹는 주범", "AI는 초안/정리/체크리스트에 특히 강함", "내 업무 스타일을 템플릿으로 만들면 반복이 줄어듦", "실수(누락/오타/톤) 감소로 스트레스↓", "매일 10분 절감이 1달이면 큰 차이를 만듦"], + myth=["자동화는 개발자만 한다", "AI 쓰면 오히려 시간이 더 든다", "메일은 사람이 직접 써야 한다", "회의록은 정리할 수밖에 없다"], + reality=["No-code/템플릿으로 누구나 가능", "초안→검토 루틴이면 오히려 빨라짐", "톤/대상/형식 지정하면 안정적으로 작성", "결정/액션만 뽑으면 ‘짧게’ 끝남"], + effects=["하루 10~20분 절감 → 월 3~6시간 확보", "회의 후속 액션 누락 감소", "메일 품질(명확성/톤) 표준화", "일정 충돌/우선순위 정리로 야근 감소", "반복 작업 스트레스↓"], + concepts=["반복 업무를 ‘템플릿’으로 바꾸기", "입력: 맥락(대상/목적/제약) 주기", "출력: 형식(표/체크리스트/메일 구조) 주기", "검증: 누락/반론/다음 액션 확인", "축적: 잘 된 결과를 라이브러리화", "자동화: 앱 연결(메일-슬랙-시트)"], + framework_steps=["업무 3개(메일/요약/일정)를 선정", "각 업무의 ‘좋은 예’ 1개 수집", "AI에 초안 생성(형식 지정)", "검토 체크리스트로 빠르게 수정", "템플릿 저장(제목/용도/변수)", "주 1회 성과 기록(분 단위)"], + good=["메일: 대상/목적/톤/요청사항이 명확", "요약: 결론+액션 아이템 중심", "일정: 우선순위/제약(가능시간) 포함", "체크리스트: 누락 질문 포함"], + bad=["‘메일 써줘’만 요청", "회의 원문 그대로 장문 요약", "일정 제약 없이 ‘잡아줘’", "검증 없이 바로 전송"], + mistakes=["형식 없이 장문 생성", "변수(대상/날짜/숫자) 관리 안 함", "검토 없이 외부 발송", "템플릿을 저장하지 않음", "자동화를 먼저 하고 목적을 놓침"], + prompt1_title="실습 1) 3분 만에 ‘메일 초안’ 만들기", + prompt1="너는 비즈니스 이메일 작성 전문가야.\n수신자는 [직급/관계], 목적은 [목적]이야.\n배경: [상황 2~3줄]\n요청사항: [항목 3개]\n톤: 정중하지만 간결\n출력: 제목/인사/핵심요청(3줄)/세부내용/마감일/감사 인사 순서로 작성", + prompt1_tips=["수신자 관계를 꼭 명시", "요청사항은 번호로", "마감일/다음 행동을 명확히"], + prompt2_title="실습 2) 회의록을 ‘결정+액션’으로 압축", + prompt2="너는 회의록 정리 비서야.\n아래 회의 메모를 읽고 다음 형식으로 정리해줘.\n1) 결론/결정사항(최대 5개)\n2) 액션 아이템(담당/기한 포함)\n3) 쟁점/리스크(최대 3개)\n4) 다음 회의 아젠다 제안(3개)\n[메모]\n(여기에 메모를 붙여넣기)", + prompt2_tips=["액션은 ‘담당/기한’이 핵심", "리스크를 같이 뽑으면 누락↓", "다음 아젠다로 회의 품질↑"], + table_title="Before / After (시간 절감 예시)", + table_columns=["업무", "기존", "AI 협업", "절감"], + table_rows=[["메일 초안", "20분", "5분", "15분"], ["회의록 요약", "40분", "12분", "28분"], ["일정 조율", "15분", "5분", "10분"], ["보고서 1p 요약", "60분", "20분", "40분"]], + risks=["품질 미검증 상태로 외부 전송", "민감정보 포함 가능", "톤/표현 오류로 오해 발생", "자동화 실패(중복/오작동)"], + mitigations=["발송 전 체크리스트(수신자/톤/숫자)", "가명화/요약 후 입력", "표준 템플릿 사용", "자동화는 작은 범위부터 단계적"], + checklist=["메일 목적/요청/기한이 명확한가", "수치/날짜/이름을 원문 대조했나", "민감정보가 포함되지 않았나", "액션 아이템 담당/기한이 있는가", "템플릿으로 저장했나"], + rollout=["팀 공통 템플릿(메일/회의록) 배포", "주간 ‘절감시간’ 공유", "좋은 결과는 예시로 축적", "오해/실수 사례도 같이 공유"], + summary=["루틴 업무는 AI가 가장 잘 도와주는 영역", "핵심은 ‘형식 지정 + 검증’", "절감시간을 측정하면 확산이 빨라진다", "오늘 행동: 메일/회의록 템플릿 1개씩 저장"], + ), + Topic( + category="문제 해결", + title="질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법", + ppt_title=None, + seed_prompt='"AI 성능을 200% 끌어올리는 질문의 기술(Prompting)"에 대해 설명해줘. 단순 명령과 구체적 명령의 차이, 논리적 사고를 돕는 프롬프트 프레임워크를 단계별로 구성해줘. 교육적인 전문성이 느껴지는 톤으로 작성해줘.', + leader_why=["문제 정의가 흔들리면 AI도 흔들림(결정 품질 저하)", "질문 프레임은 조직의 사고 체계를 표준화", "빠른 실험(가설-검증)으로 전략 속도↑", "회의 생산성이 ‘질문 품질’에 의해 결정", "리스크/반론까지 포함한 질문이 안전한 의사결정으로 연결"], + worker_why=["AI는 ‘무엇을’보다 ‘왜/어떻게’를 잘 물을 때 강해짐", "좋은 질문은 작업 재작업을 줄여줌", "프레임워크만 있으면 누구나 품질을 올릴 수 있음", "아이디어 발산이 막힐 때 강력한 파트너", "문서/기획 능력도 함께 상승"], + myth=["AI는 센스 있게 알아서 해준다", "질문은 길수록 좋다", "정답을 한 번에 받아야 한다", "브레인스토밍은 사람끼리만 한다"], + reality=["AI는 맥락이 없으면 ‘평균 답’", "핵심 조건을 구조화하면 짧아도 강함", "초안→추가 질문→정제 루프가 정답", "AI는 발산·정리·비판 역할에 강함"], + effects=["아이디어 발산 속도↑(대안 10개/5분)", "문제 정의 명확화로 실행 리스크↓", "회의 아젠다/의사결정 질문이 정교해짐", "기획서/제안서 품질 표준화", "개인 논리/표현력 향상"], + concepts=["Role: 역할 부여", "Goal: 목적/성공 기준", "Context: 배경/제약", "Format: 출력 형식", "Critique: 반론/리스크", "Iterate: 후속 질문으로 정제"], + framework_steps=["문제 한 줄 정의(무엇을/왜)", "성공 기준 3개 설정", "맥락(현황/제약/대상) 추가", "출력 형식(표/목차/단계) 지정", "반론/리스크 요청", "2회 반복 정제(추가 질문)"], + good=["‘목적+성공기준’이 있는 질문", "대안 3개 이상을 강제", "반론/리스크 포함", "출력 형식(표/프레임) 지정"], + bad=["‘아이디어 내줘’만 요청", "제약 없이 무한 발산", "결론만 달라고 함(근거 없음)", "반론/리스크를 배제"], + mistakes=["문제 정의 없이 해결책부터 요청", "대상/상황을 숨김(‘알아서’ 기대)", "한 번에 완벽을 기대", "출력 형식을 주지 않아 재작업", "비판(리스크) 질문을 생략"], + prompt1_title="실습 1) 5W1H로 문제 정의하기", + prompt1="너는 논리적 사고 코치야.\n내가 해결하려는 문제는: [문제]\n아래 5W1H 질문을 통해 누락된 정보를 찾아줘.\n- Who/What/Why/When-Where/How 각 2개씩\n그 다음, 내가 답한 내용을 반영해서\n문제 정의(1문장) + 성공 기준 3개 + 제약 조건 5개를 정리해줘.", + prompt1_tips=["답을 채우면 프롬프트가 완성된다", "성공 기준은 측정 가능하게", "제약(예산/기간/규정)을 명시"], + prompt2_title="실습 2) 브레인스토밍을 ‘발산→수렴’으로", + prompt2="너는 브레인스토밍 파트너야.\n목표: [목표]\n제약: [기간/예산/규정]\n1) 아이디어 12개를 내고(각 1줄)\n2) 4개로 묶어 카테고리화하고\n3) 평가 기준(효과/난이도/리스크)으로 점수화해서\n4) 상위 3개를 추천해줘.\n출력: 표 + 결론 먼저", + prompt2_tips=["발산은 ‘개수 강제’", "수렴은 ‘평가기준’", "리스크까지 같이 보자"], + table_title="질문 프레임워크(요약)", + table_columns=["요소", "의미", "예시"], + table_rows=[["Role", "관점 고정", "너는 10년차 PM이야"], ["Goal", "목표/성공기준", "시간 20% 단축"], ["Format", "산출물 형태", "표(열: 옵션/장단)"], ["Critique", "반론/리스크", "리스크 3개도"]], + risks=["평균 답변으로 시간 낭비", "편향된 결론(대안 부족)", "현실 제약 미반영", "환각으로 근거 왜곡"], + mitigations=["프레임(Goal/Context/Format) 고정", "대안 3개 이상 요청", "제약 조건 명시", "근거/출처/가정 확인"], + checklist=["문제 정의 1문장 있는가", "성공 기준 3개가 있는가", "제약 조건이 포함됐나", "출력 형식을 지정했나", "반론/리스크를 요청했나"], + rollout=["팀 공통 질문 템플릿(회의용) 만들기", "회의 아젠다는 ‘질문’으로 작성", "좋은 질문/나쁜 질문 사례 공유", "결과물은 표준 포맷으로 저장"], + summary=["질문 품질이 AI 성과를 결정", "프레임워크(Goal/Context/Format/Critique)로 표준화", "발산→수렴 루프가 핵심", "오늘 행동: 내 업무 1개를 5W1H로 재질문"], + ), + Topic( + category="협업/공유", + title="우리 팀만의 AI 지식 창고 만들기", + ppt_title=None, + seed_prompt='"사내 AI 자산 공유 및 협업 문화"에 대한 발표 자료야. 팀원들이 발견한 좋은 프롬프트를 공유하는 방법과 사내 챗봇 활용법을 포함해줘. \'함께 성장하는 조직\'을 강조하는 따뜻하고 협력적인 톤으로 만들어줘.', + leader_why=["개인 역량이 아닌 ‘팀 자산’으로 전환해야 지속가능", "중복 작업(같은 프롬프트 재발명) 비용 절감", "검증된 템플릿은 품질/리스크를 동시에 관리", "사내 지식의 누적이 조직 경쟁력", "공유 문화는 변화관리의 핵심 장치"], + worker_why=["좋은 프롬프트를 공유하면 내 일이 쉬워짐", "남의 템플릿을 쓰면 빠르게 숙련 가능", "사내 챗봇/검색이 있으면 물어볼 곳이 생김", "실패 사례도 공유하면 같은 실수를 줄임", "함께 성장하는 경험이 동기부여가 됨"], + myth=["공유하면 내 경쟁력이 줄어든다", "프롬프트는 사람마다 달라서 공유가 무의미", "지식창고는 만들기만 하고 안 쓴다", "정리는 나중에 해도 된다"], + reality=["공유는 ‘표준’과 ‘시간 절감’을 만든다", "템플릿+변수로 재사용 가능", "검색 가능/업데이트 규칙이 핵심", "정리는 ‘업무 과정’에 붙여야 지속"], + effects=["템플릿 재사용으로 문서 품질 표준화", "신입/전배 온보딩 시간 단축", "보안/검증 규칙의 내재화", "아이디어/사례 축적으로 혁신 속도↑", "개인 만족도/협업 신뢰↑"], + concepts=["템플릿(목적/입력/출력/검증) 구조화", "태그/카테고리로 검색 가능하게", "예시(좋은 입력/좋은 출력) 포함", "버전 관리(업데이트 로그)", "검증 체크리스트를 함께 저장", "사내 챗봇은 Q&A + 자산 추천 허브"], + framework_steps=["팀 공통 업무 5개 선정", "각 업무 템플릿 1개씩 수집", "형식 통일(메타/변수/예시)", "검증/보안 규칙 삽입", "게시(위키/게시판) + 태그", "주 1회 ‘템플릿 개선’ 10분"], + good=["템플릿에 변수 자리 표시", "좋은 예시(입력/출력) 포함", "사용 시 주의사항/검증 포함", "태그로 검색 가능"], + bad=["본문만 덩어리로 공유", "사용 맥락(언제/누가)을 누락", "보안/검증 없이 공유", "중복 템플릿 난립"], + mistakes=["템플릿 표준 포맷이 없음", "업데이트/소유자 부재", "검색/태그 없이 저장", "공유가 ‘평가’가 되어 참여↓", "사내 챗봇과 연결하지 않음"], + prompt1_title="실습 1) 프롬프트를 ‘템플릿’으로 표준화", + prompt1="너는 프롬프트 라이브러리 편집자야.\n아래 프롬프트를 팀 공유용 템플릿으로 바꿔줘.\n- 목적(1줄)\n- 사용 상황(3줄)\n- 입력 변수 목록(표)\n- 최종 템플릿(복붙용)\n- 검증 체크리스트(5개)\n[원본 프롬프트]\n(여기에 붙여넣기)", + prompt1_tips=["변수는 [대괄호]로 표시", "검증 체크를 기본 포함", "사용 상황을 써야 재사용됨"], + prompt2_title="실습 2) 사내 챗봇용 Q&A/가이드 생성", + prompt2="너는 사내 챗봇 지식베이스 작성자야.\n주제: [주제]\n직원들이 자주 물을 질문 10개를 만들고,\n각 질문에 대해 1) 짧은 답 2) 주의사항 3) 관련 템플릿 링크(가상)\n형식으로 작성해줘.", + prompt2_tips=["질문은 실무자의 언어로", "주의사항(보안/검증)을 붙이기", "관련 템플릿을 추천하도록"], + table_title="지식 창고 카드(예시 포맷)", + table_columns=["필드", "예시"], + table_rows=[["제목", "회의록 요약(결정/액션)"], ["변수", "[메모], [참석자], [기한]"], ["출력", "표(결정/담당/기한)"], ["검증", "수치/이름 원문 대조"]], + risks=["기밀/민감정보가 공유됨", "품질 낮은 템플릿 확산", "관리 부재로 방치", "공유 문화 저항"], + mitigations=["공유 전 마스킹/가이드", "검증된 템플릿만 ‘추천’ 표시", "소유자/업데이트 주기 지정", "칭찬/학습 중심 운영"], + checklist=["템플릿에 목적/상황/변수가 있는가", "예시 입력/출력이 있는가", "검증/보안 체크가 있는가", "태그가 붙었는가", "소유자/버전이 있는가"], + rollout=["초기: 5개 템플릿으로 시작", "운영: 주간 공유 10분", "품질: 추천/검증 배지", "확장: 챗봇이 템플릿 추천"], + summary=["지식은 공유될 때 자산이 된다", "템플릿 표준화 + 검색 + 검증이 핵심", "운영(업데이트) 없으면 방치된다", "오늘 행동: 내 템플릿 1개를 표준 포맷으로 올리기"], + ), + Topic( + category="데이터 활용", + title="엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석", + ppt_title=None, + seed_prompt='"비전공자를 위한 AI 데이터 분석"을 주제로 해줘. 복잡한 코딩 없이 자연어로 그래프를 그리고 인사이트를 뽑아내는 과정을 시연하듯 구성해줘. \'누구나 할 수 있다\'는 자신감을 주는 쉬운 용어로 작성해줘.', + leader_why=["현장 데이터가 의사결정으로 이어지려면 분석 장벽을 낮춰야 함", "간단한 분석 자동화로 보고 리드타임이 줄어듦", "분석 표준(정의/단위/기간)이 중요해짐", "잘못된 해석(환각/오류)은 리스크", "데이터 기반 문화는 도구보다 습관"], + worker_why=["함수/피벗 없이도 ‘질문’으로 시작 가능", "그래프/요약/이상치 탐지가 빠르게 됨", "보고서에 넣을 문장까지 자동 초안", "데이터 정의만 잘 주면 오류가 크게 줄어듦", "작게 분석 루틴을 만들면 자신감↑"], + myth=["데이터 분석은 코딩을 해야 한다", "AI가 알아서 정확히 분석한다", "데이터가 조금만 있어도 인사이트가 나온다", "그래프는 전문가 영역이다"], + reality=["질문(목표/정의/기간)이 핵심", "AI는 오류 가능: 검증이 필요", "데이터 품질/정의가 결과를 좌우", "기본 차트는 누구나 만들 수 있다"], + effects=["리포트 초안 작성 시간 단축", "반복 지표(월간/주간) 자동화", "이상치/트렌드 조기 발견", "시각화로 커뮤니케이션 개선", "데이터 활용 자신감 상승"], + concepts=["지표 정의(분모/분자/단위)", "기간/범위 명시", "데이터 품질 체크(누락/중복)", "기본 통계(평균/중앙값/추세)", "시각화(막대/선/분포)", "해석(가설→근거→다음 행동)"], + framework_steps=["목표 질문 1개 정하기", "데이터 컬럼/정의 확인", "품질 체크(누락/중복/이상치)", "그래프 1개로 트렌드 보기", "인사이트 3개 + 가설 2개", "다음 액션(추가 데이터/실험)"], + good=["컬럼/단위/기간을 지정", "보고 목적(누가/왜) 명시", "그래프 종류를 지정", "인사이트+가설+액션까지 요청"], + bad=["‘분석해줘’만 요청", "데이터 정의 없이 수치 해석", "기간이 섞인 데이터로 비교", "검증 없이 결론 확정"], + mistakes=["컬럼 의미(정의) 누락", "단위 혼동", "결측/이상치 미처리", "상관/인과 혼동", "결론만 뽑고 다음 행동이 없음"], + prompt1_title="실습 1) 데이터 품질 체크 요청", + prompt1="너는 데이터 분석가야.\n아래 표 데이터를 보고 먼저 '품질 체크'를 해줘.\n- 누락/중복/이상치 가능성\n- 컬럼 정의가 애매한 부분 질문 5개\n- 분석 전에 필요한 전처리 제안\n출력: 체크리스트 + 질문 목록\n[데이터]\n(여기에 표/CSV 일부를 붙여넣기)", + prompt1_tips=["품질 체크가 먼저", "정의 질문을 받아서 오류를 줄이기", "전처리 제안을 기록"], + prompt2_title="실습 2) 그래프 + 인사이트 + 다음 행동", + prompt2="너는 비전공자를 돕는 분석 코치야.\n목표: [목표]\n데이터 컬럼: [컬럼명/정의/단위]\n기간: [기간]\n1) 적합한 그래프 2개를 추천하고(왜인지 1줄)\n2) 그래프를 보고 말로 설명하듯 인사이트 5개\n3) 원인 가설 3개와 검증 방법 3개\n4) 다음 행동(업무 의사결정) 3개\n형식: 번호 리스트 + 표 1개", + prompt2_tips=["‘왜 이 그래프인지’가 중요", "가설과 검증방법을 같이", "마지막은 의사결정 행동으로"], + table_title="자연어 분석 질문 예시(초보용)", + table_columns=["내가 묻는 말", "AI가 해주는 일", "주의"], + table_rows=[["이번 달이 왜 떨어졌어?", "요약+원인 후보", "인과로 확정 금지"], ["이상치가 있나?", "이상치 탐지", "원문 확인"], ["보고서 문장 써줘", "1p 요약", "수치 대조"]], + risks=["단위/정의 오류로 오해", "환각으로 근거 없는 결론", "민감 데이터 입력", "상관/인과 혼동"], + mitigations=["정의/단위/기간을 강제 입력", "가설+검증 절차 포함", "가명화/요약 후 입력", "결론은 ‘가설’로 표현"], + checklist=["지표 정의/단위/기간이 명확한가", "결측/중복/이상치 확인했나", "그래프가 목적과 맞나", "인사이트가 ‘근거’와 연결되나", "다음 행동이 있는가"], + rollout=["팀 공통 ‘지표 정의’ 템플릿 배포", "월간 리포트 질문 템플릿화", "분석 결과는 가설/근거/액션 포맷", "민감 데이터 처리 규칙 공유"], + summary=["분석은 코딩이 아니라 ‘질문+정의’", "품질 체크→그래프→인사이트→액션 루틴", "결론은 가설로 두고 검증", "오늘 행동: 내 지표 1개 정의(단위/기간) 쓰기"], + ), + Topic( + category="트렌드", + title="글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까", + ppt_title=None, + seed_prompt='"글로벌 AX 선도 기업의 성공 사례 벤치마킹" 자료를 만들어줘. 구글, 마이크로소프트, 테슬라 등 주요 기업들이 AI를 비즈니스 프로세스에 어떻게 녹였는지 분석하고 우리 회사에 주는 시사점을 정리해줘.', + leader_why=["성공 사례는 ‘무엇을 할지’보다 ‘어떻게 할지’를 알려줌", "투자/우선순위 결정을 근거 기반으로 할 수 있음", "사내 적용 시 ‘패턴’이 중요(데이터, 플랫폼, 인재)", "벤치마킹은 실행 속도를 높임", "리스크 관리(거버넌스)까지 같이 봐야 함"], + worker_why=["다른 회사 사례는 내 업무 적용 아이디어로 직결", "성공 패턴을 알면 시행착오를 줄임", "AI 활용이 ‘특별한’ 일이 아니라는 확신", "업무 프로세스 관점으로 보는 눈이 생김", "우리 조직에서도 가능한 1단계를 찾을 수 있음"], + myth=["AI는 빅테크만 할 수 있다", "좋은 모델만 쓰면 된다", "사례는 우리와 무관하다", "도입하면 자연히 성과가 난다"], + reality=["작게 시작해 확장하는 패턴이 핵심", "데이터/프로세스/사람이 같이 가야 함", "업종/규정에 맞게 변형해야 함", "성과는 KPI/거버넌스로 만든다"], + effects=["우선순위 도출(어디부터?)", "성공 패턴을 복제해 속도↑", "리스크를 사전에 인지", "현업 적용 아이디어 다수 확보", "조직 공감대 형성"], + concepts=["Use Case 중심(업무 문제)에서 시작", "데이터 파이프라인/플랫폼", "업무 내재화(워크플로우)", "Human-in-the-loop 검증", "거버넌스(보안/규정/품질)", "측정(KPI)과 확장"], + framework_steps=["업무 문제 3개 선정", "데이터/규정 체크", "파일럿(2~4주) 설계", "측정 지표 정의", "검증/승인 프로세스", "확장(템플릿/플랫폼화)"], + good=["업무 프로세스에 AI를 ‘내장’", "검증/승인 단계를 설계", "KPI로 효과를 측정", "플랫폼/재사용을 염두"], + bad=["데모만 하고 운영이 없음", "데이터/규정 없이 시작", "측정 없이 ‘좋아 보임’", "개인별 도구 난립"], + mistakes=["사례를 그대로 복사(현실 제약 무시)", "기술 중심으로 접근(문제 정의 부족)", "성과 지표 없이 확장", "거버넌스 없이 확산", "현업 참여 없이 추진"], + prompt1_title="실습 1) 사례를 내 회사에 맞게 변환", + prompt1="너는 AX 컨설턴트야.\n아래 글로벌 사례를 우리 회사(업종: [업종], 제약: [규정/보안])에 맞게 변환해줘.\n1) 적용 가능한 업무 프로세스 3개\n2) 필요한 데이터/시스템\n3) 예상 효과(KPI)\n4) 리스크/완화\n출력: 표(열: 프로세스, 데이터, KPI, 리스크, 완화)\n[사례]\n(여기에 사례 요약을 붙여넣기)", + prompt1_tips=["업종/규정을 명시", "KPI는 2~3개로", "리스크/완화를 반드시"], + prompt2_title="실습 2) 우리 조직의 ‘성공 패턴’ 체크", + prompt2="너는 실행 PM이야.\n우리 팀이 추진할 AI 과제 후보 3개를 아래 체크리스트로 평가해줘.\n- 문제 명확성\n- 데이터 확보 가능성\n- 기대 효과(정량/정성)\n- 구현 난이도\n- 리스크(보안/규정)\n- 확장성\n출력: 표 + 우선순위 결론(근거 포함)", + prompt2_tips=["후보 3개를 구체적으로", "데이터/규정 항목을 중요하게", "우선순위는 1~3위"], + table_title="벤치마킹 예시(요약)", + table_columns=["기업", "적용 프로세스", "효과(예시)"], + table_rows=[["Microsoft", "업무도구 내 Copilot", "문서/메일/회의 생산성↑"], ["Google", "검색/광고/개발 자동화", "의사결정 속도↑"], ["Tesla", "제조/운영 최적화", "품질/효율 개선"]], + risks=["사례 과신으로 무리한 도입", "데이터/규정 미스매치", "성과 측정 실패", "조직 저항"], + mitigations=["‘패턴’만 추출해 변형 적용", "규정/보안 사전 검토", "KPI/실험 설계", "현업 참여 + 변화관리"], + checklist=["우리 업무 문제로 번역했나", "데이터/시스템이 준비됐나", "KPI가 정의됐나", "검증/승인 프로세스가 있나", "확장(재사용) 계획이 있나"], + rollout=["파일럿 1개로 시작", "성과 지표 공유", "템플릿/플랫폼화로 확장", "사례 공유 세션 운영"], + summary=["성공은 기술이 아니라 ‘패턴’의 재현", "업무 문제→데이터→검증→측정→확장", "벤치마킹은 ‘복사’가 아니라 ‘번역’", "오늘 행동: 사례 1개를 우리 프로세스로 변환"], + ), + Topic( + category="자기계발", + title="AI 시대의 커리어 생존 전략 - AI와 공존하는 전문가 되기", + ppt_title=None, + seed_prompt='"임직원 자기계발: AI 시대의 필수 역량"을 주제로 해줘. 사라지는 기술과 새로 요구되는 기술(Soft Skills)을 비교하고, 회사가 지원하는 교육 로드맵을 보여줘. 동기부여를 자극하는 도전적인 톤으로 구성해줘.', + leader_why=["역량 변화는 인력 전략(채용/교육/평가)으로 연결", "AI 활용 격차는 조직 리스크(성과 편차)", "직무 재설계가 필요(업무 구조 변화)", "교육 로드맵이 있어야 불안이 줄어듦", "성과/성장 지표를 함께 설계해야 함"], + worker_why=["AI가 바꾸는 건 ‘직무’보다 ‘업무’ 단위", "새 역량은 지금부터 쌓을수록 유리", "AI는 나의 생산성을 올리는 레버리지", "소프트 스킬(문제정의/소통)이 더 중요", "학습 루틴을 만들면 커리어 불안이 줄어듦"], + myth=["AI 때문에 내 커리어는 끝이다", "기술만 배우면 된다", "도구를 하나만 익히면 된다", "학습은 시간이 있을 때 한다"], + reality=["업무 재구성으로 역할이 진화", "문제정의/검증/의사결정이 핵심", "도구는 바뀌고 원칙은 남는다", "매주 작은 학습이 장기 경쟁력"], + effects=["업무 속도↑로 ‘고부가가치’에 시간 투자", "학습 속도↑(자료/요약/초안)", "커리어 이동성↑(스킬 포트폴리오)", "성과 가시화(KPI) 쉬움", "불안↓ 자신감↑"], + concepts=["T자형 역량: 도메인 깊이 + AI 활용", "문제정의/목표설정", "프롬프트/워크플로우 설계", "검증/리스크 관리", "협업/커뮤니케이션", "학습 루틴(포트폴리오)"], + framework_steps=["내 업무를 ‘대체/증폭/신규’로 분류", "증폭 영역 1개 선택", "템플릿/체크리스트 구축", "결과를 포트폴리오로 기록", "피드백 받아 개선", "3개월 단위 목표 재설정"], + good=["도메인 문제를 AI로 증폭", "검증/책임을 내가 갖는다", "학습을 루틴화", "성과를 기록한다"], + bad=["도구만 따라하기", "검증 없이 복붙", "학습을 ‘나중에’로 미룸", "성과 기록 없음"], + mistakes=["기술만 보고 도메인 이해를 소홀", "학습 목표가 모호", "성과/결과물을 남기지 않음", "보안/규정 무시", "혼자만 쓰고 공유 안 함"], + prompt1_title="실습 1) 내 직무 ‘업무 재구성’ 지도", + prompt1="너는 커리어 코치야.\n내 직무는 [직무]이고, 주요 업무는 아래 6개야.\n- (업무 리스트)\n각 업무를 1) AI로 대체 가능 2) AI로 증폭 3) 사람이 더 중요 로 분류하고,\n증폭 영역 2개를 선정해 ‘학습 계획(4주)’을 만들어줘.\n출력: 표 + 4주 로드맵", + prompt1_tips=["업무를 6개로 쪼개기", "증폭 2개만 선택", "4주 계획은 작게"], + prompt2_title="실습 2) 역량 로드맵(회사 교육 연계) 만들기", + prompt2="너는 사내 교육 설계자야.\n대상: [직군/연차]\nAI 시대 핵심 역량을 6개로 정리하고,\n각 역량별로 1) 학습 목표 2) 실습 과제 3) 성과 지표를 제안해줘.\n출력: 표(열: 역량, 목표, 실습, 지표)", + prompt2_tips=["실습은 ‘산출물’로", "지표는 측정 가능하게", "직군/연차를 구체화"], + table_title="역량 변화(예시)", + table_columns=["약해지는 역량", "강해지는 역량", "예시"], + table_rows=[["반복 문서 작성", "문제 정의", "요구사항 구조화"], ["단순 번역/요약", "검증/리스크", "팩트체크"], ["정해진 절차 수행", "워크플로우 설계", "자동화"]], + risks=["불안/저항으로 학습 중단", "도구 변화에 피로", "성과 가시화 실패", "보안 리스크"], + mitigations=["작은 목표/성공 경험 설계", "원칙 중심 학습", "포트폴리오로 성과 기록", "보안 체크리스트 내재화"], + checklist=["업무를 대체/증폭으로 분류했나", "증폭 2개 목표가 있는가", "4주 실습 계획이 있는가", "성과 지표가 있는가", "산출물(포트폴리오)을 남겼나"], + rollout=["팀별 학습 스프린트 운영", "산출물 데모/공유", "멘토/리뷰 체계", "교육 로드맵 공개"], + summary=["AI 시대 핵심은 도구가 아니라 역량", "증폭 영역을 선택하고 루틴으로 학습", "성과는 포트폴리오로 남긴다", "오늘 행동: 내 업무 6개를 대체/증폭으로 분류"], + ), + Topic( + category="조직문화", + title="실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기", + ppt_title=None, + seed_prompt='"사내 AI 실험(Small Win) 장려 캠페인" 발표용이야. 완벽한 결과보다는 시도 자체에 가치를 두는 문화, 작은 성공 사례를 전파하는 프로세스를 담아줘. 혁신적이고 자유로운 분위기의 디자인 컨셉을 제안해줘.', + leader_why=["실험 문화 없이는 혁신이 확장되지 않음", "작은 성공은 변화관리의 증거(저항 감소)", "리스크를 통제하는 실험 프로세스가 필요", "성과를 ‘학습’으로 정의해야 지속", "사례 전파가 투자 대비 효과를 만든다"], + worker_why=["완벽을 요구하면 시도 자체가 멈춘다", "작은 실험은 내 업무를 개선하는 가장 빠른 길", "실패 사례 공유는 팀 전체의 시간 절감", "AI는 실험-피드백에 최적", "인정/보상이 있으면 참여가 늘어난다"], + myth=["실패하면 평가가 깎인다", "실험은 큰 프로젝트여야 한다", "아이디어가 완벽해야 시작", "보안 때문에 아무것도 못 한다"], + reality=["실험은 학습을 위한 장치", "2주짜리 작은 개선이 더 가치", "초안으로 시작해 반복", "가이드와 범위 설정으로 안전하게 가능"], + effects=["개선 아이디어가 실제 성과로 연결", "팀 내 학습 속도↑", "업무 표준 템플릿 축적", "도입 저항 감소", "성과 공유로 동기부여↑"], + concepts=["Small Win: 2주 이내, 영향 범위 제한", "가설-실험-측정-회고", "리스크 사전 체크(보안/규정)", "성과는 ‘시간/품질’로 측정", "사례는 템플릿으로 전환", "칭찬/공유가 운영의 핵심"], + framework_steps=["문제 1개 선정(반복/병목)", "가설 세우기(어떻게 나아질까)", "2주 실험 설계(범위/지표)", "실행(템플릿/자동화)", "측정(전/후 비교)", "공유(사례 카드)"], + good=["범위를 작게 잡는다", "전/후 지표를 정한다", "보안 체크를 먼저 한다", "산출물을 템플릿으로 남긴다"], + bad=["범위를 크게 잡는다", "측정 없이 ‘좋아 보임’", "규정/보안 미검토", "공유 없이 개인만 사용"], + mistakes=["실험 목표가 모호", "일정/범위 과대", "회고 없이 종료", "실패를 숨김", "운영/보상 구조 부재"], + prompt1_title="실습 1) 2주 Small Win 실험 설계", + prompt1="너는 혁신 실험 코치야.\n업무 문제: [문제]\n목표: [정량 목표]\n제약: 2주, 팀 2명, 외부 공유 금지\n실험 계획을 만들어줘:\n- 가설 2개\n- 해야 할 일(주차별)\n- 측정 지표(전/후)\n- 리스크/완화\n출력: 표 + 2주 플랜", + prompt1_tips=["정량 목표 1개는 필수", "리스크/완화 포함", "주차별로 쪼개기"], + prompt2_title="실습 2) 사례 전파용 ‘사례 카드’ 만들기", + prompt2="너는 사내 공유 게시판 에디터야.\n아래 실험 결과를 1장 사례 카드로 요약해줘.\n- 문제(1줄)\n- 해결(3줄)\n- 전/후 효과(숫자)\n- 템플릿/프롬프트(복붙용)\n- 다음 실험 아이디어(2개)\n[결과]\n(여기에 결과를 붙여넣기)", + prompt2_tips=["숫자(효과)를 꼭 넣기", "복붙용 템플릿 포함", "다음 실험으로 연결"], + table_title="Small Win 기준(예시)", + table_columns=["기준", "권장", "피해야 할 것"], + table_rows=[["기간", "2주 이내", "3개월 장기"], ["범위", "팀/프로세스 1개", "전사 확장"], ["지표", "시간/품질", "모호한 만족"], ["리스크", "사전 체크", "사후 대응"]], + risks=["범위 확대(스코프 크립)", "성과 미측정", "보안/규정 위반", "실패 낙인"], + mitigations=["실험 범위/기간 고정", "전/후 지표 강제", "리스크 체크리스트", "학습/칭찬 중심 운영"], + checklist=["2주 이내인가", "지표가 있는가", "범위가 1개인가", "리스크 체크했나", "사례 카드로 공유했나"], + rollout=["월 1회 데모데이", "사례 카드 템플릿 통일", "작은 보상/인정", "실패 공유도 보상"], + summary=["작게, 빠르게, 측정하고 공유", "실험은 학습을 위한 장치", "템플릿이 자산이 된다", "오늘 행동: 내 업무 1개를 2주 실험으로 정의"], + ), + Topic( + category="기술 이해", + title="AI의 거짓말(환각 현상)을 잡아내는 팩트체크 기술", + ppt_title=None, + seed_prompt='"AI 환각(Hallucination) 대응 및 팩트체크" 자료를 만들어줘. AI 답변의 오류 유형, 교차 검증 방법, 최종 의사결정자로서 인간의 역할을 강조해줘. 분석적이고 객관적인 느낌의 톤앤매너를 유지해줘.', + leader_why=["환각은 품질/규정/법적 리스크로 직결", "검증 프로세스가 없으면 도입이 위험", "의사결정은 근거 기반이어야 함", "업무별 ‘검증 난이도’가 다르다", "책임 소재(승인/검토)를 명확히 해야 함"], + worker_why=["AI가 그럴듯하게 틀릴 수 있음을 알아야 안전", "팩트체크 습관이 있으면 활용 범위가 넓어짐", "검증 질문 템플릿만 있어도 품질이 크게 향상", "업무 문서 품질이 올라가 신뢰가 생김", "실수를 줄이면 스트레스가 줄어듦"], + myth=["AI는 최신 정보를 항상 안다", "출처를 말하면 무조건 맞다", "자신감 있는 답은 맞다", "수치/법률도 믿어도 된다"], + reality=["모델/도구에 따라 최신성은 제한", "가짜 출처(환각)도 생성 가능", "자신감은 정확도와 무관", "중요 정보는 반드시 원문 대조"], + effects=["오류로 인한 재작업/사고 감소", "의사결정 근거의 품질 개선", "검증 루틴으로 조직 신뢰↑", "AI 활용 범위 확장(안전장치)", "개인 역량(비판적 사고) 강화"], + concepts=["환각 유형: 허위 사실/가짜 출처/수치 오류", "위험 영역: 법률/규정/수치/고유명사", "교차검증: 원문 대조 + 2개 출처", "가정/전제 확인", "반론/리스크 요청", "최종 책임은 사람"], + framework_steps=["중요도 분류(결정 영향도)", "출처 요청(링크/문서)", "원문 대조(수치/이름)", "대안/반론 요청", "검증 결과 기록", "승인/공유"], + good=["출처/근거를 요구", "가정/전제를 명시", "반론/리스크 포함", "검증 체크리스트 적용"], + bad=["결론만 달라고 함", "수치/법률을 그대로 복붙", "출처 없이 인용", "단일 답변에 의존"], + mistakes=["검증을 ‘나중에’로 미룸", "출처 링크만 보고 내용 미확인", "상관/인과 혼동", "정의/단위를 누락", "승인 없이 외부 배포"], + prompt1_title="실습 1) 답변 검증(팩트체크) 프롬프트", + prompt1="너는 팩트체커야.\n아래 AI 답변을 검증해줘.\n- 사실 주장/수치/고유명사를 항목별로 분리\n- 각 항목의 검증 방법 제안(원문/공식 출처)\n- 불확실한 부분은 '확신도(상/중/하)'로 표시\n- 최종 결론은 '검증 필요' 관점으로 요약\n[AI 답변]\n(여기에 답변 붙여넣기)", + prompt1_tips=["항목 분리부터", "확신도 표시", "공식 출처를 우선"], + prompt2_title="실습 2) 반론/리스크 먼저 받기", + prompt2="너는 회의에서 반대편 역할(Devil's Advocate)이야.\n내 주장: [주장]\n근거: [근거]\n1) 반론 5개\n2) 반론별 추가로 확인해야 할 데이터/문서\n3) 리스크 완화 방안\n출력: 표(열: 반론, 필요한 검증, 완화)", + prompt2_tips=["반론을 먼저 받으면 안전", "검증 데이터까지 요청", "완화 방안까지"], + table_title="환각 유형과 대응(요약)", + table_columns=["오류 유형", "징후", "대응"], + table_rows=[["가짜 출처", "URL/논문이 존재하지 않음", "원문 검색/대조"], ["수치 오류", "단위/기간 불명확", "정의/단위 확인"], ["규정/법률 오류", "개정 전 정보", "공식 문서 확인"]], + risks=["의사결정 오류", "법적/규정 위반", "대외 신뢰 하락", "재작업 증가"], + mitigations=["중요도 기반 검증", "출처/원문 대조", "2개 이상 교차검증", "승인/리뷰 프로세스"], + checklist=["이 답이 의사결정에 영향 주나", "출처/원문이 확인됐나", "수치의 정의/단위/기간이 명확한가", "반론/리스크를 검토했나", "공유/배포 전에 리뷰했나"], + rollout=["팀 공통 팩트체크 템플릿", "중요 문서는 리뷰 필수", "사례 공유(실수 포함)", "승인 단계에 체크리스트 포함"], + summary=["AI는 그럴듯하게 틀릴 수 있다", "핵심은 출처/원문 대조 + 교차검증", "반론/리스크 질문이 안전장치", "오늘 행동: 내 문서 1개에 팩트체크 프롬프트 적용"], + ), + Topic( + category="실행력", + title="오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)", + ppt_title=None, + seed_prompt='"노코드 툴을 활용한 워크플로우 자동화 설계(강의형)" 슬라이드를 구성해줘. 서로 다른 앱(메일-슬랙-엑셀)을 AI로 연결하는 구조도를 포함하고, 운영 관점(예외 처리, 승인 단계, 로그/모니터링)을 자세히 설명해줘. 직관적이고 기술적인 신뢰감이 가는 디자인으로 제안해줘.', + leader_why=["자동화는 ‘업무 표준화’와 직결", "작은 자동화가 누적되면 생산성 격차가 커짐", "통합(메일/슬랙/시트)의 설계가 중요", "권한/로그/보안 통제가 필수", "운영 관점(장애/오작동) 고려 필요"], + worker_why=["반복 전달/복붙 작업을 줄이는 가장 빠른 방법", "노코드로도 충분히 시작 가능", "자동화는 ‘작게’가 핵심", "실수(누락/지연) 감소", "내 업무를 시스템화하면 야근이 줄어듦"], + myth=["자동화는 거창하다", "개발이 없으면 못 한다", "한 번 만들면 끝이다", "자동화는 위험하다"], + reality=["1~2개 앱 연결부터 가능", "노코드+AI로 시작 가능", "운영/모니터링이 중요", "권한/로그로 안전하게 가능"], + effects=["복붙/전달 시간 절감", "업무 누락 감소(트리거/알림)", "업무 흐름 가시화", "협업 속도↑", "프로세스 표준화"], + concepts=["Trigger(시작 조건)", "Action(실행)", "Filter(조건)", "AI Step(분류/요약/추출)", "Human 승인 단계", "로그/모니터링"], + framework_steps=["업무 1개 선정(반복/규칙적)", "Trigger 정의(메일 수신 등)", "AI 단계(요약/분류/추출)", "Action 연결(슬랙/시트)", "예외 처리(조건/승인)", "모니터링/개선"], + good=["단일 흐름부터 시작", "예외/승인 단계 포함", "로그/테스트 케이스 준비", "권한 최소화"], + bad=["여러 흐름을 한 번에", "예외 없이 자동 발송", "테스트 없이 운영", "권한 과다 부여"], + mistakes=["트리거 조건이 모호", "중복 실행", "에러 시 알림 없음", "민감 데이터 노출", "운영 주체 없음"], + prompt1_title="실습 1) 자동화 시나리오 설계(업무→흐름)", + prompt1="너는 워크플로우 설계자야.\n업무: [업무]\n앱: 이메일, 슬랙, 구글시트\n목표: [목표]\n자동화 흐름을 설계해줘.\n- Trigger\n- AI 단계(요약/분류/추출)\n- Action(슬랙 메시지/시트 기록)\n- 예외 처리(조건/승인)\n출력: 단계 리스트 + 체크리스트", + prompt1_tips=["목표를 1개로", "예외/승인을 반드시", "중복 방지 조건 넣기"], + prompt2_title="실습 2) AI 단계 프롬프트(분류+추출)", + prompt2="너는 이메일 분류/추출기야.\n입력은 이메일 본문이야.\n1) 카테고리(요청/문의/공지/기타)로 분류\n2) 핵심 요약 3줄\n3) 액션 아이템(담당/기한 추정)\n4) 시트에 넣을 필드 추출(표)\n출력: JSON + 표(열: 필드, 값)", + prompt2_tips=["출력 형식을 고정", "담당/기한이 핵심", "필드 추출로 자동 기록"], + table_title="워크플로우 예시(메일→슬랙→시트)", + table_columns=["단계", "입력", "출력"], + table_rows=[["Trigger", "특정 메일 수신", "본문/제목"], ["AI Step", "본문", "요약+카테고리"], ["Action", "요약", "슬랙 알림"], ["Log", "필드", "시트 기록"]], + risks=["오작동으로 잘못된 알림/기록", "민감정보 유출", "중복 실행", "운영 부재"], + mitigations=["승인 단계/조건 필터", "가명화/필드 최소화", "중복 방지 키", "에러 알림/로그"], + checklist=["트리거가 명확한가", "예외/승인이 있는가", "민감정보를 최소화했나", "중복 방지 장치가 있나", "에러 알림이 있나"], + rollout=["팀 1개 흐름부터 파일럿", "체크리스트로 승인", "성과(절감시간) 공유", "표준 템플릿으로 확장"], + summary=["자동화는 ‘작게 시작→안전하게 확장’", "Trigger-AI-Action-Log가 기본 구조", "예외/승인/로그가 안전장치", "오늘 행동: 내 업무 1개를 Trigger/Action으로 정의"], + ), + Topic( + category="리더십", + title="AI 시대의 리더십 - 데이터로 결정하고 AI로 실행하라", + ppt_title=None, + seed_prompt='"리더를 위한 AI 의사결정 전략" 주제야. 리더가 AI를 성과 관리에 어떻게 활용할지, 팀원들의 AI 활용도를 높이기 위한 코칭법은 무엇인지 다뤄줘. 권위 있으면서도 혁신적인 리더의 모습을 투영해줘.', + leader_why=["AI는 도구가 아니라 ‘의사결정 시스템’의 일부", "성과 관리는 데이터 정의/KPI가 핵심", "팀 AI 활용도를 올리려면 코칭/표준이 필요", "리스크(보안/품질)를 통제해야 확장", "리더의 질문/프레임이 조직을 바꾼다"], + worker_why=["리더의 기준이 명확하면 실행이 쉬움", "데이터 기반 의사결정은 불필요한 재작업↓", "AI는 실행(초안/분석/정리)을 가속", "코칭을 받으면 활용 격차가 줄어듦", "성과가 투명해지면 성장 경로가 보임"], + myth=["AI 도입은 IT의 일이다", "리더는 결과만 보면 된다", "KPI는 나중에 잡아도 된다", "팀원에게 알아서 쓰라 하면 된다"], + reality=["리더가 목표/지표/리스크를 설계", "과정(검증/승인)이 품질을 만든다", "KPI 없이는 확장할 수 없다", "코칭/템플릿이 활용도를 만든다"], + effects=["의사결정 속도↑(정보 요약/대안 비교)", "성과 관리의 일관성↑", "팀 생산성 표준화", "리스크 감소(검증/승인)", "학습 문화 정착"], + concepts=["KPI/지표 정의", "의사결정 질문 프레임", "Human-in-the-loop", "성과 리뷰(주간/월간)", "코칭(템플릿/리뷰)", "거버넌스(보안/규정)"], + framework_steps=["목표/지표 정의", "데이터 수집/정의 통일", "AI로 요약/분석(대안 생성)", "검증/리스크 리뷰", "결정/실행 계획 작성", "성과 리뷰/개선"], + good=["지표 정의가 명확", "대안/리스크를 함께 본다", "코칭(템플릿)으로 표준화", "리뷰로 지속 개선"], + bad=["감으로 결정", "결론만 보고 근거 없음", "AI 결과를 무비판 수용", "팀마다 제각각 도구 사용"], + mistakes=["KPI를 너무 많이 설정", "정의/단위가 다른 데이터 혼용", "검증 없이 실행", "코칭 없이 방치", "리스크 발생 후 대응"], + prompt1_title="실습 1) 리더의 의사결정 질문 템플릿", + prompt1="너는 경영진 보좌관이야.\n의사결정 주제: [주제]\n목표: [목표]\n제약: [기간/예산/규정]\n아래 형식으로 1페이지 의사결정 메모를 만들어줘.\n- 결론(추천안) 3줄\n- 옵션 3개 비교(효과/비용/리스크)\n- 필요한 추가 데이터/검증\n- 다음 행동(담당/기한)\n출력: 표 + 요약", + prompt1_tips=["옵션 3개 강제", "추가 데이터/검증 포함", "담당/기한까지"], + prompt2_title="실습 2) 팀 AI 활용 코칭 플랜", + prompt2="너는 리더 코치야.\n팀 구성: [구성]\n업무: [업무]\n팀의 AI 활용도를 4주 안에 올리는 코칭 플랜을 만들어줘.\n- 주차별 목표\n- 템플릿 5개 선정\n- 리뷰/공유 운영 방법\n- 측정 지표(절감시간/품질)\n출력: 4주 로드맵 + 체크리스트", + prompt2_tips=["템플릿 5개로 시작", "리뷰/공유가 핵심", "지표는 간단히"], + table_title="성과 관리 지표(예시)", + table_columns=["영역", "지표", "측정 방법"], + table_rows=[["생산성", "절감시간(분)", "전/후 기록"], ["품질", "재작업 횟수", "리뷰 로그"], ["활용", "템플릿 사용률", "라이브러리 조회"], ["리스크", "보안 위반 0건", "점검"]], + risks=["지표 정의 오류", "AI 과신으로 오판", "팀 내 격차 확대", "보안/규정 위반"], + mitigations=["지표 정의서/단위 통일", "검증/승인 프로세스", "코칭/템플릿 표준화", "가이드라인/점검"], + checklist=["목표/KPI가 명확한가", "데이터 정의가 통일됐나", "옵션/리스크를 같이 봤나", "코칭/공유 운영이 있나", "보안 체크가 내재화됐나"], + rollout=["리더가 질문 템플릿을 먼저 사용", "주간 성과 리뷰에 AI 활용 포함", "템플릿 라이브러리 구축", "확장 시 거버넌스 강화"], + summary=["리더십은 목표/지표/리스크를 설계하는 것", "AI는 의사결정과 실행을 가속한다", "코칭/템플릿/리뷰로 활용도를 만든다", "오늘 행동: 의사결정 메모 템플릿 1개 도입"], + ), + ] + + +def main() -> None: + schema = (COMMON / "slides.schema.json").read_text(encoding="utf-8") + example = (COMMON / "slides.example.json").read_text(encoding="utf-8") + wrapper = wrapper_make_ppt_py() + + for t in topics(): + d = ROOT / t.title + d.mkdir(parents=True, exist_ok=True) + dump_json(d / "slides.json", spec_for(t)) + dump_text(d / f"PROMPT_{t.title}.txt", prompt_text(title=(t.ppt_title or t.title), category=t.category, seed_prompt=t.seed_prompt)) + dump_text(d / "make_ppt.py", wrapper) + dump_text(d / "slides.schema.json", schema) + dump_text(d / "slides.example.json", example) + + print("done") + + +if __name__ == "__main__": + main() + diff --git a/AX 강의 - 1/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까/PROMPT_글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까.txt b/AX 강의 - 1/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까/PROMPT_글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까.txt new file mode 100644 index 0000000..5aabb46 --- /dev/null +++ b/AX 강의 - 1/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까/PROMPT_글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까.txt @@ -0,0 +1,29 @@ +너는 기업 AX 전환 교육용 PPT를 설계하는 교육 콘텐츠 디자이너다. + +주제(폴더명/PPT 제목): 글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까 +구분: 트렌드 +요청(시드 프롬프트): +"글로벌 AX 선도 기업의 성공 사례 벤치마킹" 자료를 만들어줘. 구글, 마이크로소프트, 테슬라 등 주요 기업들이 AI를 비즈니스 프로세스에 어떻게 녹였는지 분석하고 우리 회사에 주는 시사점을 정리해줘. + +목표: +- 리더십부터 실무자까지 "왜 이 주제를 이해해야 하는지"를 먼저 설득한다. +- 30분 교육으로 진행 가능하도록 구성한다. +- 최소 20장 이상(권장 22장) 슬라이드가 나오도록 한다. +- 예시(상황/결과/체크리스트/사례)가 풍부해야 한다. +- 발표자가 그대로 읽어도 자연스럽도록 슬라이드 흐름(도입→핵심→사례→리스크→정리)을 만든다. +- 발표 중 **참여형 활동 없이 진행한다.** (참여자에게 '직접 해보라'는 지시 금지) +- 프롬프트/템플릿은 "참고 예시"로만 제시하고, 단계별 따라하기 구성은 만들지 않는다. + +출력 형식(반드시 준수): +- 최종 출력은 JSON 한 덩어리만 출력한다. (설명/문장/코드블록 금지) +- JSON은 아래 스키마를 만족해야 한다: slides.schema.json +- slides[0]은 반드시 type="cover"로 둔다. (표지는 meta.title/meta.subtitle/meta.badge로 자동 생성됨) +- 슬라이드 타입은 다음만 사용한다: + - cover, agenda, section, bullets, two_column, process, table + +작성 규칙: +- bullets는 4~7개 내로, 한 줄은 60자 내로. +- 별도의 prompt(코드블록) 슬라이드를 만들지 않는다. (참여형 활동 유도로 오해될 수 있음) +- table 슬라이드는 열 3~4개, 행 3~6개 정도로 간결하게. +- 보안/윤리/환각 등 리스크가 있는 주제는 "Do & Don't" 또는 "리스크/완화"를 반드시 포함한다. +- 마지막은 요약 + 다음 행동(오늘부터 1개 실행)으로 끝낸다. diff --git a/AX 강의 - 1/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까/make_ppt.py b/AX 강의 - 1/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까/make_ppt.py new file mode 100644 index 0000000..6ae124f --- /dev/null +++ b/AX 강의 - 1/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까/make_ppt.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +import subprocess +import sys +from pathlib import Path + + +def main() -> None: + base = Path(__file__).resolve().parent + common = base.parent / "_common" / "make_ppt.py" + spec = base / "slides.json" + out = base / f"{base.name}.pptx" + subprocess.check_call([sys.executable, str(common), "--spec", str(spec), "--out", str(out)]) + + +if __name__ == "__main__": + main() diff --git a/AX 강의 - 1/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까/slides.example.json b/AX 강의 - 1/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까/slides.example.json new file mode 100644 index 0000000..44a390a --- /dev/null +++ b/AX 강의 - 1/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까/slides.example.json @@ -0,0 +1,112 @@ +{ + "meta": { + "title": "예시 - 강의형(참여형 활동 없음)", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "예시 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝: 오늘은 참여형 활동 없이, 사례/체크리스트 중심으로 진행합니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 흐름을 10초로 안내하고 바로 본론으로 들어갑니다." + }, + { + "type": "section", + "title": "1. 왜 필요한가", + "subtitle": "리더십부터 실무자까지", + "notes": "리더 관점(성과/리스크)과 실무 관점(시간/품질)을 연결해 설명합니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "시간 절감(반복 업무)", + "품질 표준화(템플릿)", + "리스크 감소(검증/승인)", + "온보딩 가속", + "의사결정 리드타임 단축" + ], + "notes": "조직 사례가 있다면 1개만 붙여 설득력을 높입니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "핵심 개념은 3~6개로 제한하고, 각각 1문장으로 정의합니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "오해 vs 현실", + "left_title": "오해", + "left_bullets": ["AI는 만능", "한 번 도입하면 끝"], + "right_title": "현실", + "right_bullets": ["사람 검증이 필수", "운영/거버넌스가 성패를 좌우"], + "notes": "오해를 정리한 뒤, 현실 기준을 '팀 표준'으로 제시합니다." + }, + { + "type": "process", + "chapter": "Part 3", + "title": "적용 루틴(강의형 가이드)", + "steps": [ + "목표/대상/제약 정의", + "입력 데이터 정리", + "출력 형식 지정", + "검증/리스크 체크", + "공유/표준화", + "지표로 개선" + ], + "notes": "참여자에게 '지금 해보라'가 아니라, 기준과 사례를 설명합니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "Before / After (예시)", + "columns": ["업무", "기존", "개선", "절감"], + "rows": [ + ["회의록", "40분", "12분", "28분"], + ["메일", "20분", "5분", "15분"], + ["보고 1p", "60분+", "20분", "40분"] + ], + "notes": "표는 정의/기간을 같이 확인하며 읽습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화", + "left_title": "리스크", + "left_bullets": ["환각/오류", "보안/기밀", "품질 편차", "운영 장애"], + "right_title": "완화", + "right_bullets": ["원문 대조", "입력 금지/가명화", "승인/리뷰", "로그/모니터링"], + "notes": "리스크는 '기술'이 아니라 '프로세스'로 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "요약 & 다음 행동", + "bullets": [ + "목적·맥락·형식 + 검증", + "작게 시작해 표준화", + "지표로 개선", + "오늘 행동: 템플릿 1개를 팀 표준으로 정하기" + ], + "notes": "마무리는 '오늘부터 무엇을 할지' 한 문장으로 정리합니다." + } + ] +} diff --git a/AX 강의 - 1/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까/slides.json b/AX 강의 - 1/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까/slides.json new file mode 100644 index 0000000..8ebbd7b --- /dev/null +++ b/AX 강의 - 1/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까/slides.json @@ -0,0 +1,306 @@ +{ + "meta": { + "title": "글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "트렌드 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝(10초): 오늘 주제는 '글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까'입니다.\n운영 안내(10초): 오늘은 참여형 활동 없이, 사례와 체크리스트 중심으로 정리합니다.\n목표(10초): 왜 중요한지 → 핵심 원칙 → 사례 해설 → 리스크/대응 → 다음 행동까지 30분에 끝냅니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 구성(20초): 5파트로 진행합니다.\n- 1) 왜 필요한가\n- 2) 핵심 개념/원칙\n- 3) 사례로 이해하는 적용 가이드\n- 4) 리스크/체크리스트\n- 5) 요약 & 다음 행동\n안내(10초): 참여형 활동 없이, 바로 가져가 쓸 수 있는 요약/체크리스트 중심입니다." + }, + { + "type": "section", + "title": "1. 왜 이 주제를 이해해야 하나", + "subtitle": "리더십부터 실무자까지", + "notes": "전환(10초): 이제 '1. 왜 이 주제를 이해해야 하나' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "리더십 관점: 왜 중요한가", + "bullets": [ + "성공 사례는 ‘무엇을 할지’보다 ‘어떻게 할지’를 알려줌", + "투자/우선순위 결정을 근거 기반으로 할 수 있음", + "사내 적용 시 ‘패턴’이 중요(데이터, 플랫폼, 인재)", + "벤치마킹은 실행 속도를 높임", + "리스크 관리(거버넌스)까지 같이 봐야 함" + ], + "notes": "핵심(10초): '리더십 관점: 왜 중요한가' 슬라이드입니다.\n포인트(20초): 성공 사례는 ‘무엇을 할지’보다 ‘어떻게 할지’를 알려줌 / 투자/우선순위 결정을 근거 기반으로 할 수 있음\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "실무자 관점: 무엇이 달라지나", + "bullets": [ + "다른 회사 사례는 내 업무 적용 아이디어로 직결", + "성공 패턴을 알면 시행착오를 줄임", + "AI 활용이 ‘특별한’ 일이 아니라는 확신", + "업무 프로세스 관점으로 보는 눈이 생김", + "우리 조직에서도 가능한 1단계를 찾을 수 있음" + ], + "notes": "핵심(10초): '실무자 관점: 무엇이 달라지나' 슬라이드입니다.\n포인트(20초): 다른 회사 사례는 내 업무 적용 아이디어로 직결 / 성공 패턴을 알면 시행착오를 줄임\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "two_column", + "chapter": "Part 1", + "title": "흔한 오해 vs 현실", + "left_title": "오해", + "left_bullets": [ + "AI는 빅테크만 할 수 있다", + "좋은 모델만 쓰면 된다", + "사례는 우리와 무관하다", + "도입하면 자연히 성과가 난다" + ], + "right_title": "현실", + "right_bullets": [ + "작게 시작해 확장하는 패턴이 핵심", + "데이터/프로세스/사람이 같이 가야 함", + "업종/규정에 맞게 변형해야 함", + "성과는 KPI/거버넌스로 만든다" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "우선순위 도출(어디부터?)", + "성공 패턴을 복제해 속도↑", + "리스크를 사전에 인지", + "현업 적용 아이디어 다수 확보", + "조직 공감대 형성" + ], + "notes": "핵심(10초): '기대 효과(정량/정성)' 슬라이드입니다.\n포인트(20초): 우선순위 도출(어디부터?) / 성공 패턴을 복제해 속도↑\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "전환(10초): 이제 '2. 핵심 개념과 원칙' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "핵심 개념 6가지", + "bullets": [ + "Use Case 중심(업무 문제)에서 시작", + "데이터 파이프라인/플랫폼", + "업무 내재화(워크플로우)", + "Human-in-the-loop 검증", + "거버넌스(보안/규정/품질)", + "측정(KPI)과 확장" + ], + "notes": "핵심(10초): '핵심 개념 6가지' 슬라이드입니다.\n포인트(20초): Use Case 중심(업무 문제)에서 시작 / 데이터 파이프라인/플랫폼\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "process", + "chapter": "Part 2", + "title": "실행 프레임워크(권장 루틴)", + "steps": [ + "업무 문제 3개 선정", + "데이터/규정 체크", + "파일럿(2~4주) 설계", + "측정 지표 정의", + "검증/승인 프로세스", + "확장(템플릿/플랫폼화)" + ], + "notes": "핵심(10초): '실행 프레임워크(권장 루틴)'는 실행 흐름(루틴)을 제시합니다.\n요약(20초): 업무 문제 3개 선정 → 데이터/규정 체크 → 파일럿(2~4주) 설계 …\n팁(10초): 이 순서를 팀 템플릿으로 고정하면 재작업이 크게 줄어듭니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "좋은 예 vs 나쁜 예 (짧은 비교)", + "left_title": "좋은 예", + "left_bullets": [ + "업무 프로세스에 AI를 ‘내장’", + "검증/승인 단계를 설계", + "KPI로 효과를 측정", + "플랫폼/재사용을 염두" + ], + "right_title": "나쁜 예", + "right_bullets": [ + "데모만 하고 운영이 없음", + "데이터/규정 없이 시작", + "측정 없이 ‘좋아 보임’", + "개인별 도구 난립" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "자주 하는 실수", + "bullets": [ + "사례를 그대로 복사(현실 제약 무시)", + "기술 중심으로 접근(문제 정의 부족)", + "성과 지표 없이 확장", + "거버넌스 없이 확산", + "현업 참여 없이 추진" + ], + "notes": "핵심(10초): '자주 하는 실수' 슬라이드입니다.\n포인트(20초): 사례를 그대로 복사(현실 제약 무시) / 기술 중심으로 접근(문제 정의 부족)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "3. 사례로 이해하는 적용 가이드", + "subtitle": "참여형 활동 없이도 이해되는 예시 중심", + "notes": "전환(10초): 이제 '3. 사례로 이해하는 적용 가이드' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 1) 사례를 내 회사에 맞게 변환", + "bullets": [ + "요청의 역할/관점: AX 컨설턴트", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"아래 글로벌 사례를 우리 회사(업종: [업종], 제약: [규정/보안])에 맞게 변환해줘. / 1) \"", + "포인트: 업종/규정을 명시", + "포인트: KPI는 2~3개로", + "포인트: 리스크/완화를 반드시" + ], + "notes": "핵심(10초): '사례 1) 사례를 내 회사에 맞게 변환' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: AX 컨설턴트 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 2) 우리 조직의 ‘성공 패턴’ 체크", + "bullets": [ + "요청의 역할/관점: 실행 PM이", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"우리 팀이 추진할 AI 과제 후보 3개를 아래 체크리스트로 평가해줘. / - 문제 명확성\"", + "포인트: 후보 3개를 구체적으로", + "포인트: 데이터/규정 항목을 중요하게", + "포인트: 우선순위는 1~3위" + ], + "notes": "핵심(10초): '사례 2) 우리 조직의 ‘성공 패턴’ 체크' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 실행 PM이 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "벤치마킹 예시(요약)", + "columns": [ + "기업", + "적용 프로세스", + "효과(예시)" + ], + "rows": [ + [ + "Microsoft", + "업무도구 내 Copilot", + "문서/메일/회의 생산성↑" + ], + [ + "Google", + "검색/광고/개발 자동화", + "의사결정 속도↑" + ], + [ + "Tesla", + "제조/운영 최적화", + "품질/효율 개선" + ] + ], + "notes": "읽는 법(15초): 표는 기업, 적용 프로세스, 효과(예시) 기준으로 비교합니다.\n포인트(15초): 수치/정의/기간을 같이 확인해 오해를 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "결과 품질 검증 체크", + "bullets": [ + "사실/수치/고유명사는 원문 대조", + "누락된 가정이 없는지 질문", + "대안 2개 이상 비교 요청", + "리스크/반론을 함께 요청" + ], + "notes": "핵심(10초): '결과 품질 검증 체크' 슬라이드입니다.\n포인트(20초): 사실/수치/고유명사는 원문 대조 / 누락된 가정이 없는지 질문\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "4. 리스크 & 체크리스트", + "subtitle": "안전하게, 팀 단위로 굴리기", + "notes": "전환(10초): 이제 '4. 리스크 & 체크리스트' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화 전략", + "left_title": "리스크", + "left_bullets": [ + "사례 과신으로 무리한 도입", + "데이터/규정 미스매치", + "성과 측정 실패", + "조직 저항" + ], + "right_title": "완화", + "right_bullets": [ + "‘패턴’만 추출해 변형 적용", + "규정/보안 사전 검토", + "KPI/실험 설계", + "현업 참여 + 변화관리" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "체크리스트(현업 적용용)", + "bullets": [ + "우리 업무 문제로 번역했나", + "데이터/시스템이 준비됐나", + "KPI가 정의됐나", + "검증/승인 프로세스가 있나", + "확장(재사용) 계획이 있나" + ], + "notes": "핵심(10초): '체크리스트(현업 적용용)' 슬라이드입니다.\n포인트(20초): 우리 업무 문제로 번역했나 / 데이터/시스템이 준비됐나\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "팀 적용(롤아웃) 방법", + "bullets": [ + "파일럿 1개로 시작", + "성과 지표 공유", + "템플릿/플랫폼화로 확장", + "사례 공유 세션 운영" + ], + "notes": "핵심(10초): '팀 적용(롤아웃) 방법' 슬라이드입니다.\n포인트(20초): 파일럿 1개로 시작 / 성과 지표 공유\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "5. 요약 & 다음 행동", + "subtitle": "오늘부터 1개만 실행", + "notes": "전환(10초): 이제 '5. 요약 & 다음 행동' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "핵심 요약", + "bullets": [ + "성공은 기술이 아니라 ‘패턴’의 재현", + "업무 문제→데이터→검증→측정→확장", + "벤치마킹은 ‘복사’가 아니라 ‘번역’", + "오늘 행동: 사례 1개를 우리 프로세스로 변환" + ], + "notes": "핵심(10초): '핵심 요약' 슬라이드입니다.\n포인트(20초): 성공은 기술이 아니라 ‘패턴’의 재현 / 업무 문제→데이터→검증→측정→확장\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + } + ] +} diff --git a/AX 강의 - 1/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까/slides.schema.json b/AX 강의 - 1/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까/slides.schema.json new file mode 100644 index 0000000..11cd0ff --- /dev/null +++ b/AX 강의 - 1/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까/slides.schema.json @@ -0,0 +1,218 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX Curriculum Slides Spec", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "badge": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "tone": { "type": "string" }, + "footer_left": { "type": "string" } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 20, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { + "type": "string", + "enum": ["cover", "agenda", "section", "bullets", "two_column", "process", "prompt", "table"] + }, + "chapter": { "type": "string" }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "items": { "type": "array", "items": { "type": "string" } }, + "bullets": { "type": "array", "items": { "type": "string" } }, + "left_title": { "type": "string" }, + "left_bullets": { "type": "array", "items": { "type": "string" } }, + "right_title": { "type": "string" }, + "right_bullets": { "type": "array", "items": { "type": "string" } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "prompt": { "type": "string" }, + "tips": { "type": "array", "items": { "type": "string" } }, + "columns": { "type": "array", "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": true +} + +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AX Deck Slides JSON Schema", + "type": "object", + "additionalProperties": false, + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "additionalProperties": false, + "required": ["title", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "author": { "type": "string" }, + "date": { "type": "string" }, + "language": { "type": "string", "default": "ko-KR" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "version": { "type": "string" } + } + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { "$ref": "#/definitions/slide" } + } + }, + "definitions": { + "bulletItem": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "additionalProperties": false, + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "children": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + } + ] + }, + "column": { + "type": "object", + "additionalProperties": false, + "required": ["heading", "bullets"], + "properties": { + "heading": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + }, + "slide": { + "type": "object", + "additionalProperties": false, + "required": ["type", "title"], + "properties": { + "type": { + "type": "string", + "enum": [ + "title", + "section", + "agenda", + "bullets", + "two_column_bullets", + "quote", + "table", + "exercise", + "closing", + "blank" + ] + }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + }, + "items": { "type": "array", "items": { "type": "string" } }, + "left": { "$ref": "#/definitions/column" }, + "right": { "$ref": "#/definitions/column" }, + "quote": { "type": "string" }, + "attribution": { "type": "string" }, + "headers": { "type": "array", "minItems": 1, "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "timebox_minutes": { "type": "integer", "minimum": 1 }, + "notes": { "type": "string" } + }, + "allOf": [ + { "if": { "properties": { "type": { "const": "agenda" } } }, "then": { "required": ["items"] } }, + { "if": { "properties": { "type": { "const": "bullets" } } }, "then": { "required": ["bullets"] } }, + { + "if": { "properties": { "type": { "const": "two_column_bullets" } } }, + "then": { "required": ["left", "right"] } + }, + { "if": { "properties": { "type": { "const": "quote" } } }, "then": { "required": ["quote"] } }, + { "if": { "properties": { "type": { "const": "table" } } }, "then": { "required": ["headers", "rows"] } }, + { "if": { "properties": { "type": { "const": "exercise" } } }, "then": { "required": ["steps"] } } + ] + } + } +} +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX 교육용 slides.json 스키마", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 5, "maximum": 180 }, + "audience": { "type": "string" }, + "language": { "type": "string", "enum": ["ko"] }, + "version": { "type": "integer", "minimum": 1 } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { "type": "string", "enum": ["title", "section", "content", "two_content"] }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "level": { "type": "integer", "minimum": 0, "maximum": 5 } + }, + "additionalProperties": false + } + ] + } + }, + "left_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "right_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "notes": { "type": "string" } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": false +} diff --git a/AX 강의 - 1/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까.pptx b/AX 강의 - 1/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까.pptx new file mode 100644 index 0000000..0cabfe9 Binary files /dev/null and b/AX 강의 - 1/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까/글로벌 1등 기업들은 AI를 어떻게 쓰고 있을까.pptx differ diff --git a/AX 강의 - 1/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기/PROMPT_실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기.txt b/AX 강의 - 1/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기/PROMPT_실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기.txt new file mode 100644 index 0000000..6128d9b --- /dev/null +++ b/AX 강의 - 1/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기/PROMPT_실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기.txt @@ -0,0 +1,29 @@ +너는 기업 AX 전환 교육용 PPT를 설계하는 교육 콘텐츠 디자이너다. + +주제(폴더명/PPT 제목): 실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기 +구분: 조직문화 +요청(시드 프롬프트): +"사내 AI 실험(Small Win) 장려 캠페인" 발표용이야. 완벽한 결과보다는 시도 자체에 가치를 두는 문화, 작은 성공 사례를 전파하는 프로세스를 담아줘. 혁신적이고 자유로운 분위기의 디자인 컨셉을 제안해줘. + +목표: +- 리더십부터 실무자까지 "왜 이 주제를 이해해야 하는지"를 먼저 설득한다. +- 30분 교육으로 진행 가능하도록 구성한다. +- 최소 20장 이상(권장 22장) 슬라이드가 나오도록 한다. +- 예시(상황/결과/체크리스트/사례)가 풍부해야 한다. +- 발표자가 그대로 읽어도 자연스럽도록 슬라이드 흐름(도입→핵심→사례→리스크→정리)을 만든다. +- 발표 중 **참여형 활동 없이 진행한다.** (참여자에게 '직접 해보라'는 지시 금지) +- 프롬프트/템플릿은 "참고 예시"로만 제시하고, 단계별 따라하기 구성은 만들지 않는다. + +출력 형식(반드시 준수): +- 최종 출력은 JSON 한 덩어리만 출력한다. (설명/문장/코드블록 금지) +- JSON은 아래 스키마를 만족해야 한다: slides.schema.json +- slides[0]은 반드시 type="cover"로 둔다. (표지는 meta.title/meta.subtitle/meta.badge로 자동 생성됨) +- 슬라이드 타입은 다음만 사용한다: + - cover, agenda, section, bullets, two_column, process, table + +작성 규칙: +- bullets는 4~7개 내로, 한 줄은 60자 내로. +- 별도의 prompt(코드블록) 슬라이드를 만들지 않는다. (참여형 활동 유도로 오해될 수 있음) +- table 슬라이드는 열 3~4개, 행 3~6개 정도로 간결하게. +- 보안/윤리/환각 등 리스크가 있는 주제는 "Do & Don't" 또는 "리스크/완화"를 반드시 포함한다. +- 마지막은 요약 + 다음 행동(오늘부터 1개 실행)으로 끝낸다. diff --git a/AX 강의 - 1/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기/make_ppt.py b/AX 강의 - 1/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기/make_ppt.py new file mode 100644 index 0000000..6ae124f --- /dev/null +++ b/AX 강의 - 1/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기/make_ppt.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +import subprocess +import sys +from pathlib import Path + + +def main() -> None: + base = Path(__file__).resolve().parent + common = base.parent / "_common" / "make_ppt.py" + spec = base / "slides.json" + out = base / f"{base.name}.pptx" + subprocess.check_call([sys.executable, str(common), "--spec", str(spec), "--out", str(out)]) + + +if __name__ == "__main__": + main() diff --git a/AX 강의 - 1/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기/slides.example.json b/AX 강의 - 1/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기/slides.example.json new file mode 100644 index 0000000..44a390a --- /dev/null +++ b/AX 강의 - 1/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기/slides.example.json @@ -0,0 +1,112 @@ +{ + "meta": { + "title": "예시 - 강의형(참여형 활동 없음)", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "예시 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝: 오늘은 참여형 활동 없이, 사례/체크리스트 중심으로 진행합니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 흐름을 10초로 안내하고 바로 본론으로 들어갑니다." + }, + { + "type": "section", + "title": "1. 왜 필요한가", + "subtitle": "리더십부터 실무자까지", + "notes": "리더 관점(성과/리스크)과 실무 관점(시간/품질)을 연결해 설명합니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "시간 절감(반복 업무)", + "품질 표준화(템플릿)", + "리스크 감소(검증/승인)", + "온보딩 가속", + "의사결정 리드타임 단축" + ], + "notes": "조직 사례가 있다면 1개만 붙여 설득력을 높입니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "핵심 개념은 3~6개로 제한하고, 각각 1문장으로 정의합니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "오해 vs 현실", + "left_title": "오해", + "left_bullets": ["AI는 만능", "한 번 도입하면 끝"], + "right_title": "현실", + "right_bullets": ["사람 검증이 필수", "운영/거버넌스가 성패를 좌우"], + "notes": "오해를 정리한 뒤, 현실 기준을 '팀 표준'으로 제시합니다." + }, + { + "type": "process", + "chapter": "Part 3", + "title": "적용 루틴(강의형 가이드)", + "steps": [ + "목표/대상/제약 정의", + "입력 데이터 정리", + "출력 형식 지정", + "검증/리스크 체크", + "공유/표준화", + "지표로 개선" + ], + "notes": "참여자에게 '지금 해보라'가 아니라, 기준과 사례를 설명합니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "Before / After (예시)", + "columns": ["업무", "기존", "개선", "절감"], + "rows": [ + ["회의록", "40분", "12분", "28분"], + ["메일", "20분", "5분", "15분"], + ["보고 1p", "60분+", "20분", "40분"] + ], + "notes": "표는 정의/기간을 같이 확인하며 읽습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화", + "left_title": "리스크", + "left_bullets": ["환각/오류", "보안/기밀", "품질 편차", "운영 장애"], + "right_title": "완화", + "right_bullets": ["원문 대조", "입력 금지/가명화", "승인/리뷰", "로그/모니터링"], + "notes": "리스크는 '기술'이 아니라 '프로세스'로 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "요약 & 다음 행동", + "bullets": [ + "목적·맥락·형식 + 검증", + "작게 시작해 표준화", + "지표로 개선", + "오늘 행동: 템플릿 1개를 팀 표준으로 정하기" + ], + "notes": "마무리는 '오늘부터 무엇을 할지' 한 문장으로 정리합니다." + } + ] +} diff --git a/AX 강의 - 1/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기/slides.json b/AX 강의 - 1/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기/slides.json new file mode 100644 index 0000000..f69169c --- /dev/null +++ b/AX 강의 - 1/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기/slides.json @@ -0,0 +1,311 @@ +{ + "meta": { + "title": "실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "조직문화 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝(10초): 오늘 주제는 '실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기'입니다.\n운영 안내(10초): 오늘은 참여형 활동 없이, 사례와 체크리스트 중심으로 정리합니다.\n목표(10초): 왜 중요한지 → 핵심 원칙 → 사례 해설 → 리스크/대응 → 다음 행동까지 30분에 끝냅니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 구성(20초): 5파트로 진행합니다.\n- 1) 왜 필요한가\n- 2) 핵심 개념/원칙\n- 3) 사례로 이해하는 적용 가이드\n- 4) 리스크/체크리스트\n- 5) 요약 & 다음 행동\n안내(10초): 참여형 활동 없이, 바로 가져가 쓸 수 있는 요약/체크리스트 중심입니다." + }, + { + "type": "section", + "title": "1. 왜 이 주제를 이해해야 하나", + "subtitle": "리더십부터 실무자까지", + "notes": "전환(10초): 이제 '1. 왜 이 주제를 이해해야 하나' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "리더십 관점: 왜 중요한가", + "bullets": [ + "실험 문화 없이는 혁신이 확장되지 않음", + "작은 성공은 변화관리의 증거(저항 감소)", + "리스크를 통제하는 실험 프로세스가 필요", + "성과를 ‘학습’으로 정의해야 지속", + "사례 전파가 투자 대비 효과를 만든다" + ], + "notes": "핵심(10초): '리더십 관점: 왜 중요한가' 슬라이드입니다.\n포인트(20초): 실험 문화 없이는 혁신이 확장되지 않음 / 작은 성공은 변화관리의 증거(저항 감소)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "실무자 관점: 무엇이 달라지나", + "bullets": [ + "완벽을 요구하면 시도 자체가 멈춘다", + "작은 실험은 내 업무를 개선하는 가장 빠른 길", + "실패 사례 공유는 팀 전체의 시간 절감", + "AI는 실험-피드백에 최적", + "인정/보상이 있으면 참여가 늘어난다" + ], + "notes": "핵심(10초): '실무자 관점: 무엇이 달라지나' 슬라이드입니다.\n포인트(20초): 완벽을 요구하면 시도 자체가 멈춘다 / 작은 실험은 내 업무를 개선하는 가장 빠른 길\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "two_column", + "chapter": "Part 1", + "title": "흔한 오해 vs 현실", + "left_title": "오해", + "left_bullets": [ + "실패하면 평가가 깎인다", + "실험은 큰 프로젝트여야 한다", + "아이디어가 완벽해야 시작", + "보안 때문에 아무것도 못 한다" + ], + "right_title": "현실", + "right_bullets": [ + "실험은 학습을 위한 장치", + "2주짜리 작은 개선이 더 가치", + "초안으로 시작해 반복", + "가이드와 범위 설정으로 안전하게 가능" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "개선 아이디어가 실제 성과로 연결", + "팀 내 학습 속도↑", + "업무 표준 템플릿 축적", + "도입 저항 감소", + "성과 공유로 동기부여↑" + ], + "notes": "핵심(10초): '기대 효과(정량/정성)' 슬라이드입니다.\n포인트(20초): 개선 아이디어가 실제 성과로 연결 / 팀 내 학습 속도↑\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "전환(10초): 이제 '2. 핵심 개념과 원칙' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "핵심 개념 6가지", + "bullets": [ + "Small Win: 2주 이내, 영향 범위 제한", + "가설-실험-측정-회고", + "리스크 사전 체크(보안/규정)", + "성과는 ‘시간/품질’로 측정", + "사례는 템플릿으로 전환", + "칭찬/공유가 운영의 핵심" + ], + "notes": "핵심(10초): '핵심 개념 6가지' 슬라이드입니다.\n포인트(20초): Small Win: 2주 이내, 영향 범위 제한 / 가설-실험-측정-회고\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "process", + "chapter": "Part 2", + "title": "실행 프레임워크(권장 루틴)", + "steps": [ + "문제 1개 선정(반복/병목)", + "가설 세우기(어떻게 나아질까)", + "2주 실험 설계(범위/지표)", + "실행(템플릿/자동화)", + "측정(전/후 비교)", + "공유(사례 카드)" + ], + "notes": "핵심(10초): '실행 프레임워크(권장 루틴)'는 실행 흐름(루틴)을 제시합니다.\n요약(20초): 문제 1개 선정(반복/병목) → 가설 세우기(어떻게 나아질까) → 2주 실험 설계(범위/지표) …\n팁(10초): 이 순서를 팀 템플릿으로 고정하면 재작업이 크게 줄어듭니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "좋은 예 vs 나쁜 예 (짧은 비교)", + "left_title": "좋은 예", + "left_bullets": [ + "범위를 작게 잡는다", + "전/후 지표를 정한다", + "보안 체크를 먼저 한다", + "산출물을 템플릿으로 남긴다" + ], + "right_title": "나쁜 예", + "right_bullets": [ + "범위를 크게 잡는다", + "측정 없이 ‘좋아 보임’", + "규정/보안 미검토", + "공유 없이 개인만 사용" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "자주 하는 실수", + "bullets": [ + "실험 목표가 모호", + "일정/범위 과대", + "회고 없이 종료", + "실패를 숨김", + "운영/보상 구조 부재" + ], + "notes": "핵심(10초): '자주 하는 실수' 슬라이드입니다.\n포인트(20초): 실험 목표가 모호 / 일정/범위 과대\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "3. 사례로 이해하는 적용 가이드", + "subtitle": "참여형 활동 없이도 이해되는 예시 중심", + "notes": "전환(10초): 이제 '3. 사례로 이해하는 적용 가이드' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 1) 2주 Small Win 실험 설계", + "bullets": [ + "요청의 역할/관점: 혁신 실험 코치", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"업무 문제: [문제] / 목표: [정량 목표]\"", + "포인트: 정량 목표 1개는 필수", + "포인트: 리스크/완화 포함", + "포인트: 주차별로 쪼개기" + ], + "notes": "핵심(10초): '사례 1) 2주 Small Win 실험 설계' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 혁신 실험 코치 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 2) 사례 전파용 ‘사례 카드’ 만들기", + "bullets": [ + "요청의 역할/관점: 사내 공유 게시판 에디터", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"아래 실험 결과를 1장 사례 카드로 요약해줘. / - 문제(1줄)\"", + "포인트: 숫자(효과)를 꼭 넣기", + "포인트: 복붙용 템플릿 포함", + "포인트: 다음 실험으로 연결" + ], + "notes": "핵심(10초): '사례 2) 사례 전파용 ‘사례 카드’ 만들기' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 사내 공유 게시판 에디터 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "Small Win 기준(예시)", + "columns": [ + "기준", + "권장", + "피해야 할 것" + ], + "rows": [ + [ + "기간", + "2주 이내", + "3개월 장기" + ], + [ + "범위", + "팀/프로세스 1개", + "전사 확장" + ], + [ + "지표", + "시간/품질", + "모호한 만족" + ], + [ + "리스크", + "사전 체크", + "사후 대응" + ] + ], + "notes": "읽는 법(15초): 표는 기준, 권장, 피해야 할 것 기준으로 비교합니다.\n포인트(15초): 수치/정의/기간을 같이 확인해 오해를 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "결과 품질 검증 체크", + "bullets": [ + "사실/수치/고유명사는 원문 대조", + "누락된 가정이 없는지 질문", + "대안 2개 이상 비교 요청", + "리스크/반론을 함께 요청" + ], + "notes": "핵심(10초): '결과 품질 검증 체크' 슬라이드입니다.\n포인트(20초): 사실/수치/고유명사는 원문 대조 / 누락된 가정이 없는지 질문\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "4. 리스크 & 체크리스트", + "subtitle": "안전하게, 팀 단위로 굴리기", + "notes": "전환(10초): 이제 '4. 리스크 & 체크리스트' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화 전략", + "left_title": "리스크", + "left_bullets": [ + "범위 확대(스코프 크립)", + "성과 미측정", + "보안/규정 위반", + "실패 낙인" + ], + "right_title": "완화", + "right_bullets": [ + "실험 범위/기간 고정", + "전/후 지표 강제", + "리스크 체크리스트", + "학습/칭찬 중심 운영" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "체크리스트(현업 적용용)", + "bullets": [ + "2주 이내인가", + "지표가 있는가", + "범위가 1개인가", + "리스크 체크했나", + "사례 카드로 공유했나" + ], + "notes": "핵심(10초): '체크리스트(현업 적용용)' 슬라이드입니다.\n포인트(20초): 2주 이내인가 / 지표가 있는가\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "팀 적용(롤아웃) 방법", + "bullets": [ + "월 1회 데모데이", + "사례 카드 템플릿 통일", + "작은 보상/인정", + "실패 공유도 보상" + ], + "notes": "핵심(10초): '팀 적용(롤아웃) 방법' 슬라이드입니다.\n포인트(20초): 월 1회 데모데이 / 사례 카드 템플릿 통일\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "5. 요약 & 다음 행동", + "subtitle": "오늘부터 1개만 실행", + "notes": "전환(10초): 이제 '5. 요약 & 다음 행동' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "핵심 요약", + "bullets": [ + "작게, 빠르게, 측정하고 공유", + "실험은 학습을 위한 장치", + "템플릿이 자산이 된다", + "오늘 행동: 내 업무 1개를 2주 실험으로 정의" + ], + "notes": "핵심(10초): '핵심 요약' 슬라이드입니다.\n포인트(20초): 작게, 빠르게, 측정하고 공유 / 실험은 학습을 위한 장치\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + } + ] +} diff --git a/AX 강의 - 1/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기/slides.schema.json b/AX 강의 - 1/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기/slides.schema.json new file mode 100644 index 0000000..11cd0ff --- /dev/null +++ b/AX 강의 - 1/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기/slides.schema.json @@ -0,0 +1,218 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX Curriculum Slides Spec", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "badge": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "tone": { "type": "string" }, + "footer_left": { "type": "string" } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 20, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { + "type": "string", + "enum": ["cover", "agenda", "section", "bullets", "two_column", "process", "prompt", "table"] + }, + "chapter": { "type": "string" }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "items": { "type": "array", "items": { "type": "string" } }, + "bullets": { "type": "array", "items": { "type": "string" } }, + "left_title": { "type": "string" }, + "left_bullets": { "type": "array", "items": { "type": "string" } }, + "right_title": { "type": "string" }, + "right_bullets": { "type": "array", "items": { "type": "string" } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "prompt": { "type": "string" }, + "tips": { "type": "array", "items": { "type": "string" } }, + "columns": { "type": "array", "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": true +} + +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AX Deck Slides JSON Schema", + "type": "object", + "additionalProperties": false, + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "additionalProperties": false, + "required": ["title", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "author": { "type": "string" }, + "date": { "type": "string" }, + "language": { "type": "string", "default": "ko-KR" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "version": { "type": "string" } + } + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { "$ref": "#/definitions/slide" } + } + }, + "definitions": { + "bulletItem": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "additionalProperties": false, + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "children": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + } + ] + }, + "column": { + "type": "object", + "additionalProperties": false, + "required": ["heading", "bullets"], + "properties": { + "heading": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + }, + "slide": { + "type": "object", + "additionalProperties": false, + "required": ["type", "title"], + "properties": { + "type": { + "type": "string", + "enum": [ + "title", + "section", + "agenda", + "bullets", + "two_column_bullets", + "quote", + "table", + "exercise", + "closing", + "blank" + ] + }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + }, + "items": { "type": "array", "items": { "type": "string" } }, + "left": { "$ref": "#/definitions/column" }, + "right": { "$ref": "#/definitions/column" }, + "quote": { "type": "string" }, + "attribution": { "type": "string" }, + "headers": { "type": "array", "minItems": 1, "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "timebox_minutes": { "type": "integer", "minimum": 1 }, + "notes": { "type": "string" } + }, + "allOf": [ + { "if": { "properties": { "type": { "const": "agenda" } } }, "then": { "required": ["items"] } }, + { "if": { "properties": { "type": { "const": "bullets" } } }, "then": { "required": ["bullets"] } }, + { + "if": { "properties": { "type": { "const": "two_column_bullets" } } }, + "then": { "required": ["left", "right"] } + }, + { "if": { "properties": { "type": { "const": "quote" } } }, "then": { "required": ["quote"] } }, + { "if": { "properties": { "type": { "const": "table" } } }, "then": { "required": ["headers", "rows"] } }, + { "if": { "properties": { "type": { "const": "exercise" } } }, "then": { "required": ["steps"] } } + ] + } + } +} +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX 교육용 slides.json 스키마", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 5, "maximum": 180 }, + "audience": { "type": "string" }, + "language": { "type": "string", "enum": ["ko"] }, + "version": { "type": "integer", "minimum": 1 } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { "type": "string", "enum": ["title", "section", "content", "two_content"] }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "level": { "type": "integer", "minimum": 0, "maximum": 5 } + }, + "additionalProperties": false + } + ] + } + }, + "left_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "right_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "notes": { "type": "string" } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": false +} diff --git a/AX 강의 - 1/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기.pptx b/AX 강의 - 1/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기.pptx new file mode 100644 index 0000000..caf25e8 Binary files /dev/null and b/AX 강의 - 1/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기/실패해도 괜찮은 AI 실험실 - 작은 성공(Small Win) 만들기.pptx differ diff --git a/AX 강의 - 1/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석/PROMPT_엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석.txt b/AX 강의 - 1/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석/PROMPT_엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석.txt new file mode 100644 index 0000000..0cdcd89 --- /dev/null +++ b/AX 강의 - 1/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석/PROMPT_엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석.txt @@ -0,0 +1,29 @@ +너는 기업 AX 전환 교육용 PPT를 설계하는 교육 콘텐츠 디자이너다. + +주제(폴더명/PPT 제목): 엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석 +구분: 데이터 활용 +요청(시드 프롬프트): +"비전공자를 위한 AI 데이터 분석"을 주제로 해줘. 복잡한 코딩 없이 자연어로 그래프를 그리고 인사이트를 뽑아내는 과정을 시연하듯 구성해줘. '누구나 할 수 있다'는 자신감을 주는 쉬운 용어로 작성해줘. + +목표: +- 리더십부터 실무자까지 "왜 이 주제를 이해해야 하는지"를 먼저 설득한다. +- 30분 교육으로 진행 가능하도록 구성한다. +- 최소 20장 이상(권장 22장) 슬라이드가 나오도록 한다. +- 예시(상황/결과/체크리스트/사례)가 풍부해야 한다. +- 발표자가 그대로 읽어도 자연스럽도록 슬라이드 흐름(도입→핵심→사례→리스크→정리)을 만든다. +- 발표 중 **참여형 활동 없이 진행한다.** (참여자에게 '직접 해보라'는 지시 금지) +- 프롬프트/템플릿은 "참고 예시"로만 제시하고, 단계별 따라하기 구성은 만들지 않는다. + +출력 형식(반드시 준수): +- 최종 출력은 JSON 한 덩어리만 출력한다. (설명/문장/코드블록 금지) +- JSON은 아래 스키마를 만족해야 한다: slides.schema.json +- slides[0]은 반드시 type="cover"로 둔다. (표지는 meta.title/meta.subtitle/meta.badge로 자동 생성됨) +- 슬라이드 타입은 다음만 사용한다: + - cover, agenda, section, bullets, two_column, process, table + +작성 규칙: +- bullets는 4~7개 내로, 한 줄은 60자 내로. +- 별도의 prompt(코드블록) 슬라이드를 만들지 않는다. (참여형 활동 유도로 오해될 수 있음) +- table 슬라이드는 열 3~4개, 행 3~6개 정도로 간결하게. +- 보안/윤리/환각 등 리스크가 있는 주제는 "Do & Don't" 또는 "리스크/완화"를 반드시 포함한다. +- 마지막은 요약 + 다음 행동(오늘부터 1개 실행)으로 끝낸다. diff --git a/AX 강의 - 1/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석/make_ppt.py b/AX 강의 - 1/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석/make_ppt.py new file mode 100644 index 0000000..6ae124f --- /dev/null +++ b/AX 강의 - 1/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석/make_ppt.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +import subprocess +import sys +from pathlib import Path + + +def main() -> None: + base = Path(__file__).resolve().parent + common = base.parent / "_common" / "make_ppt.py" + spec = base / "slides.json" + out = base / f"{base.name}.pptx" + subprocess.check_call([sys.executable, str(common), "--spec", str(spec), "--out", str(out)]) + + +if __name__ == "__main__": + main() diff --git a/AX 강의 - 1/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석/slides.example.json b/AX 강의 - 1/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석/slides.example.json new file mode 100644 index 0000000..44a390a --- /dev/null +++ b/AX 강의 - 1/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석/slides.example.json @@ -0,0 +1,112 @@ +{ + "meta": { + "title": "예시 - 강의형(참여형 활동 없음)", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "예시 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝: 오늘은 참여형 활동 없이, 사례/체크리스트 중심으로 진행합니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 흐름을 10초로 안내하고 바로 본론으로 들어갑니다." + }, + { + "type": "section", + "title": "1. 왜 필요한가", + "subtitle": "리더십부터 실무자까지", + "notes": "리더 관점(성과/리스크)과 실무 관점(시간/품질)을 연결해 설명합니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "시간 절감(반복 업무)", + "품질 표준화(템플릿)", + "리스크 감소(검증/승인)", + "온보딩 가속", + "의사결정 리드타임 단축" + ], + "notes": "조직 사례가 있다면 1개만 붙여 설득력을 높입니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "핵심 개념은 3~6개로 제한하고, 각각 1문장으로 정의합니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "오해 vs 현실", + "left_title": "오해", + "left_bullets": ["AI는 만능", "한 번 도입하면 끝"], + "right_title": "현실", + "right_bullets": ["사람 검증이 필수", "운영/거버넌스가 성패를 좌우"], + "notes": "오해를 정리한 뒤, 현실 기준을 '팀 표준'으로 제시합니다." + }, + { + "type": "process", + "chapter": "Part 3", + "title": "적용 루틴(강의형 가이드)", + "steps": [ + "목표/대상/제약 정의", + "입력 데이터 정리", + "출력 형식 지정", + "검증/리스크 체크", + "공유/표준화", + "지표로 개선" + ], + "notes": "참여자에게 '지금 해보라'가 아니라, 기준과 사례를 설명합니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "Before / After (예시)", + "columns": ["업무", "기존", "개선", "절감"], + "rows": [ + ["회의록", "40분", "12분", "28분"], + ["메일", "20분", "5분", "15분"], + ["보고 1p", "60분+", "20분", "40분"] + ], + "notes": "표는 정의/기간을 같이 확인하며 읽습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화", + "left_title": "리스크", + "left_bullets": ["환각/오류", "보안/기밀", "품질 편차", "운영 장애"], + "right_title": "완화", + "right_bullets": ["원문 대조", "입력 금지/가명화", "승인/리뷰", "로그/모니터링"], + "notes": "리스크는 '기술'이 아니라 '프로세스'로 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "요약 & 다음 행동", + "bullets": [ + "목적·맥락·형식 + 검증", + "작게 시작해 표준화", + "지표로 개선", + "오늘 행동: 템플릿 1개를 팀 표준으로 정하기" + ], + "notes": "마무리는 '오늘부터 무엇을 할지' 한 문장으로 정리합니다." + } + ] +} diff --git a/AX 강의 - 1/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석/slides.json b/AX 강의 - 1/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석/slides.json new file mode 100644 index 0000000..46fd738 --- /dev/null +++ b/AX 강의 - 1/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석/slides.json @@ -0,0 +1,306 @@ +{ + "meta": { + "title": "엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "데이터 활용 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝(10초): 오늘 주제는 '엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석'입니다.\n운영 안내(10초): 오늘은 참여형 활동 없이, 사례와 체크리스트 중심으로 정리합니다.\n목표(10초): 왜 중요한지 → 핵심 원칙 → 사례 해설 → 리스크/대응 → 다음 행동까지 30분에 끝냅니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 구성(20초): 5파트로 진행합니다.\n- 1) 왜 필요한가\n- 2) 핵심 개념/원칙\n- 3) 사례로 이해하는 적용 가이드\n- 4) 리스크/체크리스트\n- 5) 요약 & 다음 행동\n안내(10초): 참여형 활동 없이, 바로 가져가 쓸 수 있는 요약/체크리스트 중심입니다." + }, + { + "type": "section", + "title": "1. 왜 이 주제를 이해해야 하나", + "subtitle": "리더십부터 실무자까지", + "notes": "전환(10초): 이제 '1. 왜 이 주제를 이해해야 하나' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "리더십 관점: 왜 중요한가", + "bullets": [ + "현장 데이터가 의사결정으로 이어지려면 분석 장벽을 낮춰야 함", + "간단한 분석 자동화로 보고 리드타임이 줄어듦", + "분석 표준(정의/단위/기간)이 중요해짐", + "잘못된 해석(환각/오류)은 리스크", + "데이터 기반 문화는 도구보다 습관" + ], + "notes": "핵심(10초): '리더십 관점: 왜 중요한가' 슬라이드입니다.\n포인트(20초): 현장 데이터가 의사결정으로 이어지려면 분석 장벽을 낮춰야 함 / 간단한 분석 자동화로 보고 리드타임이 줄어듦\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "실무자 관점: 무엇이 달라지나", + "bullets": [ + "함수/피벗 없이도 ‘질문’으로 시작 가능", + "그래프/요약/이상치 탐지가 빠르게 됨", + "보고서에 넣을 문장까지 자동 초안", + "데이터 정의만 잘 주면 오류가 크게 줄어듦", + "작게 분석 루틴을 만들면 자신감↑" + ], + "notes": "핵심(10초): '실무자 관점: 무엇이 달라지나' 슬라이드입니다.\n포인트(20초): 함수/피벗 없이도 ‘질문’으로 시작 가능 / 그래프/요약/이상치 탐지가 빠르게 됨\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "two_column", + "chapter": "Part 1", + "title": "흔한 오해 vs 현실", + "left_title": "오해", + "left_bullets": [ + "데이터 분석은 코딩을 해야 한다", + "AI가 알아서 정확히 분석한다", + "데이터가 조금만 있어도 인사이트가 나온다", + "그래프는 전문가 영역이다" + ], + "right_title": "현실", + "right_bullets": [ + "질문(목표/정의/기간)이 핵심", + "AI는 오류 가능: 검증이 필요", + "데이터 품질/정의가 결과를 좌우", + "기본 차트는 누구나 만들 수 있다" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "리포트 초안 작성 시간 단축", + "반복 지표(월간/주간) 자동화", + "이상치/트렌드 조기 발견", + "시각화로 커뮤니케이션 개선", + "데이터 활용 자신감 상승" + ], + "notes": "핵심(10초): '기대 효과(정량/정성)' 슬라이드입니다.\n포인트(20초): 리포트 초안 작성 시간 단축 / 반복 지표(월간/주간) 자동화\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "전환(10초): 이제 '2. 핵심 개념과 원칙' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "핵심 개념 6가지", + "bullets": [ + "지표 정의(분모/분자/단위)", + "기간/범위 명시", + "데이터 품질 체크(누락/중복)", + "기본 통계(평균/중앙값/추세)", + "시각화(막대/선/분포)", + "해석(가설→근거→다음 행동)" + ], + "notes": "핵심(10초): '핵심 개념 6가지' 슬라이드입니다.\n포인트(20초): 지표 정의(분모/분자/단위) / 기간/범위 명시\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "process", + "chapter": "Part 2", + "title": "실행 프레임워크(권장 루틴)", + "steps": [ + "목표 질문 1개 정하기", + "데이터 컬럼/정의 확인", + "품질 체크(누락/중복/이상치)", + "그래프 1개로 트렌드 보기", + "인사이트 3개 + 가설 2개", + "다음 액션(추가 데이터/실험)" + ], + "notes": "핵심(10초): '실행 프레임워크(권장 루틴)'는 실행 흐름(루틴)을 제시합니다.\n요약(20초): 목표 질문 1개 정하기 → 데이터 컬럼/정의 확인 → 품질 체크(누락/중복/이상치) …\n팁(10초): 이 순서를 팀 템플릿으로 고정하면 재작업이 크게 줄어듭니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "좋은 예 vs 나쁜 예 (짧은 비교)", + "left_title": "좋은 예", + "left_bullets": [ + "컬럼/단위/기간을 지정", + "보고 목적(누가/왜) 명시", + "그래프 종류를 지정", + "인사이트+가설+액션까지 요청" + ], + "right_title": "나쁜 예", + "right_bullets": [ + "‘분석해줘’만 요청", + "데이터 정의 없이 수치 해석", + "기간이 섞인 데이터로 비교", + "검증 없이 결론 확정" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "자주 하는 실수", + "bullets": [ + "컬럼 의미(정의) 누락", + "단위 혼동", + "결측/이상치 미처리", + "상관/인과 혼동", + "결론만 뽑고 다음 행동이 없음" + ], + "notes": "핵심(10초): '자주 하는 실수' 슬라이드입니다.\n포인트(20초): 컬럼 의미(정의) 누락 / 단위 혼동\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "3. 사례로 이해하는 적용 가이드", + "subtitle": "참여형 활동 없이도 이해되는 예시 중심", + "notes": "전환(10초): 이제 '3. 사례로 이해하는 적용 가이드' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 1) 데이터 품질 체크 요청", + "bullets": [ + "요청의 역할/관점: 데이터 분석가", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"아래 표 데이터를 보고 먼저 '품질 체크'를 해줘. / - 누락/중복/이상치 가능성\"", + "포인트: 품질 체크가 먼저", + "포인트: 정의 질문을 받아서 오류를 줄이기", + "포인트: 전처리 제안을 기록" + ], + "notes": "핵심(10초): '사례 1) 데이터 품질 체크 요청' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 데이터 분석가 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 2) 그래프 + 인사이트 + 다음 행동", + "bullets": [ + "요청의 역할/관점: 비전공자를 돕는 분석 코치", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"목표: [목표] / 데이터 컬럼: [컬럼명/정의/단위]\"", + "포인트: ‘왜 이 그래프인지’가 중요", + "포인트: 가설과 검증방법을 같이", + "포인트: 마지막은 의사결정 행동으로" + ], + "notes": "핵심(10초): '사례 2) 그래프 + 인사이트 + 다음 행동' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 비전공자를 돕는 분석 코치 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "자연어 분석 질문 예시(초보용)", + "columns": [ + "내가 묻는 말", + "AI가 해주는 일", + "주의" + ], + "rows": [ + [ + "이번 달이 왜 떨어졌어?", + "요약+원인 후보", + "인과로 확정 금지" + ], + [ + "이상치가 있나?", + "이상치 탐지", + "원문 확인" + ], + [ + "보고서 문장 써줘", + "1p 요약", + "수치 대조" + ] + ], + "notes": "읽는 법(15초): 표는 내가 묻는 말, AI가 해주는 일, 주의 기준으로 비교합니다.\n포인트(15초): 수치/정의/기간을 같이 확인해 오해를 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "결과 품질 검증 체크", + "bullets": [ + "사실/수치/고유명사는 원문 대조", + "누락된 가정이 없는지 질문", + "대안 2개 이상 비교 요청", + "리스크/반론을 함께 요청" + ], + "notes": "핵심(10초): '결과 품질 검증 체크' 슬라이드입니다.\n포인트(20초): 사실/수치/고유명사는 원문 대조 / 누락된 가정이 없는지 질문\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "4. 리스크 & 체크리스트", + "subtitle": "안전하게, 팀 단위로 굴리기", + "notes": "전환(10초): 이제 '4. 리스크 & 체크리스트' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화 전략", + "left_title": "리스크", + "left_bullets": [ + "단위/정의 오류로 오해", + "환각으로 근거 없는 결론", + "민감 데이터 입력", + "상관/인과 혼동" + ], + "right_title": "완화", + "right_bullets": [ + "정의/단위/기간을 강제 입력", + "가설+검증 절차 포함", + "가명화/요약 후 입력", + "결론은 ‘가설’로 표현" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "체크리스트(현업 적용용)", + "bullets": [ + "지표 정의/단위/기간이 명확한가", + "결측/중복/이상치 확인했나", + "그래프가 목적과 맞나", + "인사이트가 ‘근거’와 연결되나", + "다음 행동이 있는가" + ], + "notes": "핵심(10초): '체크리스트(현업 적용용)' 슬라이드입니다.\n포인트(20초): 지표 정의/단위/기간이 명확한가 / 결측/중복/이상치 확인했나\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "팀 적용(롤아웃) 방법", + "bullets": [ + "팀 공통 ‘지표 정의’ 템플릿 배포", + "월간 리포트 질문 템플릿화", + "분석 결과는 가설/근거/액션 포맷", + "민감 데이터 처리 규칙 공유" + ], + "notes": "핵심(10초): '팀 적용(롤아웃) 방법' 슬라이드입니다.\n포인트(20초): 팀 공통 ‘지표 정의’ 템플릿 배포 / 월간 리포트 질문 템플릿화\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "5. 요약 & 다음 행동", + "subtitle": "오늘부터 1개만 실행", + "notes": "전환(10초): 이제 '5. 요약 & 다음 행동' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "핵심 요약", + "bullets": [ + "분석은 코딩이 아니라 ‘질문+정의’", + "품질 체크→그래프→인사이트→액션 루틴", + "결론은 가설로 두고 검증", + "오늘 행동: 내 지표 1개 정의(단위/기간) 쓰기" + ], + "notes": "핵심(10초): '핵심 요약' 슬라이드입니다.\n포인트(20초): 분석은 코딩이 아니라 ‘질문+정의’ / 품질 체크→그래프→인사이트→액션 루틴\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + } + ] +} diff --git a/AX 강의 - 1/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석/slides.schema.json b/AX 강의 - 1/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석/slides.schema.json new file mode 100644 index 0000000..11cd0ff --- /dev/null +++ b/AX 강의 - 1/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석/slides.schema.json @@ -0,0 +1,218 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX Curriculum Slides Spec", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "badge": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "tone": { "type": "string" }, + "footer_left": { "type": "string" } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 20, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { + "type": "string", + "enum": ["cover", "agenda", "section", "bullets", "two_column", "process", "prompt", "table"] + }, + "chapter": { "type": "string" }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "items": { "type": "array", "items": { "type": "string" } }, + "bullets": { "type": "array", "items": { "type": "string" } }, + "left_title": { "type": "string" }, + "left_bullets": { "type": "array", "items": { "type": "string" } }, + "right_title": { "type": "string" }, + "right_bullets": { "type": "array", "items": { "type": "string" } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "prompt": { "type": "string" }, + "tips": { "type": "array", "items": { "type": "string" } }, + "columns": { "type": "array", "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": true +} + +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AX Deck Slides JSON Schema", + "type": "object", + "additionalProperties": false, + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "additionalProperties": false, + "required": ["title", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "author": { "type": "string" }, + "date": { "type": "string" }, + "language": { "type": "string", "default": "ko-KR" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "version": { "type": "string" } + } + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { "$ref": "#/definitions/slide" } + } + }, + "definitions": { + "bulletItem": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "additionalProperties": false, + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "children": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + } + ] + }, + "column": { + "type": "object", + "additionalProperties": false, + "required": ["heading", "bullets"], + "properties": { + "heading": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + }, + "slide": { + "type": "object", + "additionalProperties": false, + "required": ["type", "title"], + "properties": { + "type": { + "type": "string", + "enum": [ + "title", + "section", + "agenda", + "bullets", + "two_column_bullets", + "quote", + "table", + "exercise", + "closing", + "blank" + ] + }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + }, + "items": { "type": "array", "items": { "type": "string" } }, + "left": { "$ref": "#/definitions/column" }, + "right": { "$ref": "#/definitions/column" }, + "quote": { "type": "string" }, + "attribution": { "type": "string" }, + "headers": { "type": "array", "minItems": 1, "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "timebox_minutes": { "type": "integer", "minimum": 1 }, + "notes": { "type": "string" } + }, + "allOf": [ + { "if": { "properties": { "type": { "const": "agenda" } } }, "then": { "required": ["items"] } }, + { "if": { "properties": { "type": { "const": "bullets" } } }, "then": { "required": ["bullets"] } }, + { + "if": { "properties": { "type": { "const": "two_column_bullets" } } }, + "then": { "required": ["left", "right"] } + }, + { "if": { "properties": { "type": { "const": "quote" } } }, "then": { "required": ["quote"] } }, + { "if": { "properties": { "type": { "const": "table" } } }, "then": { "required": ["headers", "rows"] } }, + { "if": { "properties": { "type": { "const": "exercise" } } }, "then": { "required": ["steps"] } } + ] + } + } +} +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX 교육용 slides.json 스키마", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 5, "maximum": 180 }, + "audience": { "type": "string" }, + "language": { "type": "string", "enum": ["ko"] }, + "version": { "type": "integer", "minimum": 1 } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { "type": "string", "enum": ["title", "section", "content", "two_content"] }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "level": { "type": "integer", "minimum": 0, "maximum": 5 } + }, + "additionalProperties": false + } + ] + } + }, + "left_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "right_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "notes": { "type": "string" } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": false +} diff --git a/AX 강의 - 1/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석.pptx b/AX 강의 - 1/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석.pptx new file mode 100644 index 0000000..4f0259e Binary files /dev/null and b/AX 강의 - 1/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석/엑셀 함수 몰라도 괜찮아 - 말로 하는 데이터 분석.pptx differ diff --git a/AX 강의 - 1/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)/PROMPT_오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형).txt b/AX 강의 - 1/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)/PROMPT_오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형).txt new file mode 100644 index 0000000..f003520 --- /dev/null +++ b/AX 강의 - 1/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)/PROMPT_오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형).txt @@ -0,0 +1,29 @@ +너는 기업 AX 전환 교육용 PPT를 설계하는 교육 콘텐츠 디자이너다. + +주제(폴더명/PPT 제목): 오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형) +구분: 실행력 +요청(시드 프롬프트): +"노코드 툴을 활용한 워크플로우 자동화 설계(강의형)" 슬라이드를 구성해줘. 서로 다른 앱(메일-슬랙-엑셀)을 AI로 연결하는 구조도를 포함하고, 운영 관점(예외 처리, 승인 단계, 로그/모니터링)을 자세히 설명해줘. 직관적이고 기술적인 신뢰감이 가는 디자인으로 제안해줘. + +목표: +- 리더십부터 실무자까지 "왜 이 주제를 이해해야 하는지"를 먼저 설득한다. +- 30분 교육으로 진행 가능하도록 구성한다. +- 최소 20장 이상(권장 22장) 슬라이드가 나오도록 한다. +- 예시(상황/결과/체크리스트/사례)가 풍부해야 한다. +- 발표자가 그대로 읽어도 자연스럽도록 슬라이드 흐름(도입→핵심→사례→리스크→정리)을 만든다. +- 발표 중 **참여형 활동 없이 진행한다.** (참여자에게 '직접 해보라'는 지시 금지) +- 프롬프트/템플릿은 "참고 예시"로만 제시하고, 단계별 따라하기 구성은 만들지 않는다. + +출력 형식(반드시 준수): +- 최종 출력은 JSON 한 덩어리만 출력한다. (설명/문장/코드블록 금지) +- JSON은 아래 스키마를 만족해야 한다: slides.schema.json +- slides[0]은 반드시 type="cover"로 둔다. (표지는 meta.title/meta.subtitle/meta.badge로 자동 생성됨) +- 슬라이드 타입은 다음만 사용한다: + - cover, agenda, section, bullets, two_column, process, table + +작성 규칙: +- bullets는 4~7개 내로, 한 줄은 60자 내로. +- 별도의 prompt(코드블록) 슬라이드를 만들지 않는다. (참여형 활동 유도로 오해될 수 있음) +- table 슬라이드는 열 3~4개, 행 3~6개 정도로 간결하게. +- 보안/윤리/환각 등 리스크가 있는 주제는 "Do & Don't" 또는 "리스크/완화"를 반드시 포함한다. +- 마지막은 요약 + 다음 행동(오늘부터 1개 실행)으로 끝낸다. diff --git a/AX 강의 - 1/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)/make_ppt.py b/AX 강의 - 1/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)/make_ppt.py new file mode 100644 index 0000000..6ae124f --- /dev/null +++ b/AX 강의 - 1/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)/make_ppt.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +import subprocess +import sys +from pathlib import Path + + +def main() -> None: + base = Path(__file__).resolve().parent + common = base.parent / "_common" / "make_ppt.py" + spec = base / "slides.json" + out = base / f"{base.name}.pptx" + subprocess.check_call([sys.executable, str(common), "--spec", str(spec), "--out", str(out)]) + + +if __name__ == "__main__": + main() diff --git a/AX 강의 - 1/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)/slides.example.json b/AX 강의 - 1/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)/slides.example.json new file mode 100644 index 0000000..44a390a --- /dev/null +++ b/AX 강의 - 1/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)/slides.example.json @@ -0,0 +1,112 @@ +{ + "meta": { + "title": "예시 - 강의형(참여형 활동 없음)", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "예시 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝: 오늘은 참여형 활동 없이, 사례/체크리스트 중심으로 진행합니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 흐름을 10초로 안내하고 바로 본론으로 들어갑니다." + }, + { + "type": "section", + "title": "1. 왜 필요한가", + "subtitle": "리더십부터 실무자까지", + "notes": "리더 관점(성과/리스크)과 실무 관점(시간/품질)을 연결해 설명합니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "시간 절감(반복 업무)", + "품질 표준화(템플릿)", + "리스크 감소(검증/승인)", + "온보딩 가속", + "의사결정 리드타임 단축" + ], + "notes": "조직 사례가 있다면 1개만 붙여 설득력을 높입니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "핵심 개념은 3~6개로 제한하고, 각각 1문장으로 정의합니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "오해 vs 현실", + "left_title": "오해", + "left_bullets": ["AI는 만능", "한 번 도입하면 끝"], + "right_title": "현실", + "right_bullets": ["사람 검증이 필수", "운영/거버넌스가 성패를 좌우"], + "notes": "오해를 정리한 뒤, 현실 기준을 '팀 표준'으로 제시합니다." + }, + { + "type": "process", + "chapter": "Part 3", + "title": "적용 루틴(강의형 가이드)", + "steps": [ + "목표/대상/제약 정의", + "입력 데이터 정리", + "출력 형식 지정", + "검증/리스크 체크", + "공유/표준화", + "지표로 개선" + ], + "notes": "참여자에게 '지금 해보라'가 아니라, 기준과 사례를 설명합니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "Before / After (예시)", + "columns": ["업무", "기존", "개선", "절감"], + "rows": [ + ["회의록", "40분", "12분", "28분"], + ["메일", "20분", "5분", "15분"], + ["보고 1p", "60분+", "20분", "40분"] + ], + "notes": "표는 정의/기간을 같이 확인하며 읽습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화", + "left_title": "리스크", + "left_bullets": ["환각/오류", "보안/기밀", "품질 편차", "운영 장애"], + "right_title": "완화", + "right_bullets": ["원문 대조", "입력 금지/가명화", "승인/리뷰", "로그/모니터링"], + "notes": "리스크는 '기술'이 아니라 '프로세스'로 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "요약 & 다음 행동", + "bullets": [ + "목적·맥락·형식 + 검증", + "작게 시작해 표준화", + "지표로 개선", + "오늘 행동: 템플릿 1개를 팀 표준으로 정하기" + ], + "notes": "마무리는 '오늘부터 무엇을 할지' 한 문장으로 정리합니다." + } + ] +} diff --git a/AX 강의 - 1/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)/slides.json b/AX 강의 - 1/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)/slides.json new file mode 100644 index 0000000..3ff3fc9 --- /dev/null +++ b/AX 강의 - 1/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)/slides.json @@ -0,0 +1,311 @@ +{ + "meta": { + "title": "오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "실행력 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝(10초): 오늘 주제는 '오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)'입니다.\n운영 안내(10초): 오늘은 참여형 활동 없이, 사례와 체크리스트 중심으로 정리합니다.\n목표(10초): 왜 중요한지 → 핵심 원칙 → 사례 해설 → 리스크/대응 → 다음 행동까지 30분에 끝냅니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 구성(20초): 5파트로 진행합니다.\n- 1) 왜 필요한가\n- 2) 핵심 개념/원칙\n- 3) 사례로 이해하는 적용 가이드\n- 4) 리스크/체크리스트\n- 5) 요약 & 다음 행동\n안내(10초): 참여형 활동 없이, 바로 가져가 쓸 수 있는 요약/체크리스트 중심입니다." + }, + { + "type": "section", + "title": "1. 왜 이 주제를 이해해야 하나", + "subtitle": "리더십부터 실무자까지", + "notes": "전환(10초): 이제 '1. 왜 이 주제를 이해해야 하나' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "리더십 관점: 왜 중요한가", + "bullets": [ + "자동화는 ‘업무 표준화’와 직결", + "작은 자동화가 누적되면 생산성 격차가 커짐", + "통합(메일/슬랙/시트)의 설계가 중요", + "권한/로그/보안 통제가 필수", + "운영 관점(장애/오작동) 고려 필요" + ], + "notes": "핵심(10초): '리더십 관점: 왜 중요한가' 슬라이드입니다.\n포인트(20초): 자동화는 ‘업무 표준화’와 직결 / 작은 자동화가 누적되면 생산성 격차가 커짐\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "실무자 관점: 무엇이 달라지나", + "bullets": [ + "반복 전달/복붙 작업을 줄이는 가장 빠른 방법", + "노코드로도 충분히 시작 가능", + "자동화는 ‘작게’가 핵심", + "실수(누락/지연) 감소", + "내 업무를 시스템화하면 야근이 줄어듦" + ], + "notes": "핵심(10초): '실무자 관점: 무엇이 달라지나' 슬라이드입니다.\n포인트(20초): 반복 전달/복붙 작업을 줄이는 가장 빠른 방법 / 노코드로도 충분히 시작 가능\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "two_column", + "chapter": "Part 1", + "title": "흔한 오해 vs 현실", + "left_title": "오해", + "left_bullets": [ + "자동화는 거창하다", + "개발이 없으면 못 한다", + "한 번 만들면 끝이다", + "자동화는 위험하다" + ], + "right_title": "현실", + "right_bullets": [ + "1~2개 앱 연결부터 가능", + "노코드+AI로 시작 가능", + "운영/모니터링이 중요", + "권한/로그로 안전하게 가능" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "복붙/전달 시간 절감", + "업무 누락 감소(트리거/알림)", + "업무 흐름 가시화", + "협업 속도↑", + "프로세스 표준화" + ], + "notes": "핵심(10초): '기대 효과(정량/정성)' 슬라이드입니다.\n포인트(20초): 복붙/전달 시간 절감 / 업무 누락 감소(트리거/알림)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "전환(10초): 이제 '2. 핵심 개념과 원칙' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "핵심 개념 6가지", + "bullets": [ + "Trigger(시작 조건)", + "Action(실행)", + "Filter(조건)", + "AI Step(분류/요약/추출)", + "Human 승인 단계", + "로그/모니터링" + ], + "notes": "핵심(10초): '핵심 개념 6가지' 슬라이드입니다.\n포인트(20초): Trigger(시작 조건) / Action(실행)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "process", + "chapter": "Part 2", + "title": "실행 프레임워크(권장 루틴)", + "steps": [ + "업무 1개 선정(반복/규칙적)", + "Trigger 정의(메일 수신 등)", + "AI 단계(요약/분류/추출)", + "Action 연결(슬랙/시트)", + "예외 처리(조건/승인)", + "모니터링/개선" + ], + "notes": "핵심(10초): '실행 프레임워크(권장 루틴)'는 실행 흐름(루틴)을 제시합니다.\n요약(20초): 업무 1개 선정(반복/규칙적) → Trigger 정의(메일 수신 등) → AI 단계(요약/분류/추출) …\n팁(10초): 이 순서를 팀 템플릿으로 고정하면 재작업이 크게 줄어듭니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "좋은 예 vs 나쁜 예 (짧은 비교)", + "left_title": "좋은 예", + "left_bullets": [ + "단일 흐름부터 시작", + "예외/승인 단계 포함", + "로그/테스트 케이스 준비", + "권한 최소화" + ], + "right_title": "나쁜 예", + "right_bullets": [ + "여러 흐름을 한 번에", + "예외 없이 자동 발송", + "테스트 없이 운영", + "권한 과다 부여" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "자주 하는 실수", + "bullets": [ + "트리거 조건이 모호", + "중복 실행", + "에러 시 알림 없음", + "민감 데이터 노출", + "운영 주체 없음" + ], + "notes": "핵심(10초): '자주 하는 실수' 슬라이드입니다.\n포인트(20초): 트리거 조건이 모호 / 중복 실행\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "3. 사례로 이해하는 적용 가이드", + "subtitle": "참여형 활동 없이도 이해되는 예시 중심", + "notes": "전환(10초): 이제 '3. 사례로 이해하는 적용 가이드' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 1) 자동화 시나리오 설계(업무→흐름)", + "bullets": [ + "요청의 역할/관점: 워크플로우 설계자", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"업무: [업무] / 앱: 이메일, 슬랙, 구글시트\"", + "포인트: 목표를 1개로", + "포인트: 예외/승인을 반드시", + "포인트: 중복 방지 조건 넣기" + ], + "notes": "핵심(10초): '사례 1) 자동화 시나리오 설계(업무→흐름)' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 워크플로우 설계자 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 2) AI 단계 프롬프트(분류+추출)", + "bullets": [ + "요청의 역할/관점: 이메일 분류/추출기", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"입력은 이메일 본문이야. / 1) 카테고리(요청/문의/공지/기타)로 분류\"", + "포인트: 출력 형식을 고정", + "포인트: 담당/기한이 핵심", + "포인트: 필드 추출로 자동 기록" + ], + "notes": "핵심(10초): '사례 2) AI 단계 프롬프트(분류+추출)' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 이메일 분류/추출기 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "워크플로우 예시(메일→슬랙→시트)", + "columns": [ + "단계", + "입력", + "출력" + ], + "rows": [ + [ + "Trigger", + "특정 메일 수신", + "본문/제목" + ], + [ + "AI Step", + "본문", + "요약+카테고리" + ], + [ + "Action", + "요약", + "슬랙 알림" + ], + [ + "Log", + "필드", + "시트 기록" + ] + ], + "notes": "읽는 법(15초): 표는 단계, 입력, 출력 기준으로 비교합니다.\n포인트(15초): 수치/정의/기간을 같이 확인해 오해를 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "결과 품질 검증 체크", + "bullets": [ + "사실/수치/고유명사는 원문 대조", + "누락된 가정이 없는지 질문", + "대안 2개 이상 비교 요청", + "리스크/반론을 함께 요청" + ], + "notes": "핵심(10초): '결과 품질 검증 체크' 슬라이드입니다.\n포인트(20초): 사실/수치/고유명사는 원문 대조 / 누락된 가정이 없는지 질문\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "4. 리스크 & 체크리스트", + "subtitle": "안전하게, 팀 단위로 굴리기", + "notes": "전환(10초): 이제 '4. 리스크 & 체크리스트' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화 전략", + "left_title": "리스크", + "left_bullets": [ + "오작동으로 잘못된 알림/기록", + "민감정보 유출", + "중복 실행", + "운영 부재" + ], + "right_title": "완화", + "right_bullets": [ + "승인 단계/조건 필터", + "가명화/필드 최소화", + "중복 방지 키", + "에러 알림/로그" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "체크리스트(현업 적용용)", + "bullets": [ + "트리거가 명확한가", + "예외/승인이 있는가", + "민감정보를 최소화했나", + "중복 방지 장치가 있나", + "에러 알림이 있나" + ], + "notes": "핵심(10초): '체크리스트(현업 적용용)' 슬라이드입니다.\n포인트(20초): 트리거가 명확한가 / 예외/승인이 있는가\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "팀 적용(롤아웃) 방법", + "bullets": [ + "팀 1개 흐름부터 파일럿", + "체크리스트로 승인", + "성과(절감시간) 공유", + "표준 템플릿으로 확장" + ], + "notes": "핵심(10초): '팀 적용(롤아웃) 방법' 슬라이드입니다.\n포인트(20초): 팀 1개 흐름부터 파일럿 / 체크리스트로 승인\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "5. 요약 & 다음 행동", + "subtitle": "오늘부터 1개만 실행", + "notes": "전환(10초): 이제 '5. 요약 & 다음 행동' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "핵심 요약", + "bullets": [ + "자동화는 ‘작게 시작→안전하게 확장’", + "Trigger-AI-Action-Log가 기본 구조", + "예외/승인/로그가 안전장치", + "오늘 행동: 내 업무 1개를 Trigger/Action으로 정의" + ], + "notes": "핵심(10초): '핵심 요약' 슬라이드입니다.\n포인트(20초): 자동화는 ‘작게 시작→안전하게 확장’ / Trigger-AI-Action-Log가 기본 구조\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + } + ] +} diff --git a/AX 강의 - 1/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)/slides.schema.json b/AX 강의 - 1/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)/slides.schema.json new file mode 100644 index 0000000..11cd0ff --- /dev/null +++ b/AX 강의 - 1/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)/slides.schema.json @@ -0,0 +1,218 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX Curriculum Slides Spec", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "badge": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "tone": { "type": "string" }, + "footer_left": { "type": "string" } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 20, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { + "type": "string", + "enum": ["cover", "agenda", "section", "bullets", "two_column", "process", "prompt", "table"] + }, + "chapter": { "type": "string" }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "items": { "type": "array", "items": { "type": "string" } }, + "bullets": { "type": "array", "items": { "type": "string" } }, + "left_title": { "type": "string" }, + "left_bullets": { "type": "array", "items": { "type": "string" } }, + "right_title": { "type": "string" }, + "right_bullets": { "type": "array", "items": { "type": "string" } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "prompt": { "type": "string" }, + "tips": { "type": "array", "items": { "type": "string" } }, + "columns": { "type": "array", "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": true +} + +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AX Deck Slides JSON Schema", + "type": "object", + "additionalProperties": false, + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "additionalProperties": false, + "required": ["title", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "author": { "type": "string" }, + "date": { "type": "string" }, + "language": { "type": "string", "default": "ko-KR" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "version": { "type": "string" } + } + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { "$ref": "#/definitions/slide" } + } + }, + "definitions": { + "bulletItem": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "additionalProperties": false, + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "children": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + } + ] + }, + "column": { + "type": "object", + "additionalProperties": false, + "required": ["heading", "bullets"], + "properties": { + "heading": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + }, + "slide": { + "type": "object", + "additionalProperties": false, + "required": ["type", "title"], + "properties": { + "type": { + "type": "string", + "enum": [ + "title", + "section", + "agenda", + "bullets", + "two_column_bullets", + "quote", + "table", + "exercise", + "closing", + "blank" + ] + }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + }, + "items": { "type": "array", "items": { "type": "string" } }, + "left": { "$ref": "#/definitions/column" }, + "right": { "$ref": "#/definitions/column" }, + "quote": { "type": "string" }, + "attribution": { "type": "string" }, + "headers": { "type": "array", "minItems": 1, "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "timebox_minutes": { "type": "integer", "minimum": 1 }, + "notes": { "type": "string" } + }, + "allOf": [ + { "if": { "properties": { "type": { "const": "agenda" } } }, "then": { "required": ["items"] } }, + { "if": { "properties": { "type": { "const": "bullets" } } }, "then": { "required": ["bullets"] } }, + { + "if": { "properties": { "type": { "const": "two_column_bullets" } } }, + "then": { "required": ["left", "right"] } + }, + { "if": { "properties": { "type": { "const": "quote" } } }, "then": { "required": ["quote"] } }, + { "if": { "properties": { "type": { "const": "table" } } }, "then": { "required": ["headers", "rows"] } }, + { "if": { "properties": { "type": { "const": "exercise" } } }, "then": { "required": ["steps"] } } + ] + } + } +} +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX 교육용 slides.json 스키마", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 5, "maximum": 180 }, + "audience": { "type": "string" }, + "language": { "type": "string", "enum": ["ko"] }, + "version": { "type": "integer", "minimum": 1 } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { "type": "string", "enum": ["title", "section", "content", "two_content"] }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "level": { "type": "integer", "minimum": 0, "maximum": 5 } + }, + "additionalProperties": false + } + ] + } + }, + "left_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "right_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "notes": { "type": "string" } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": false +} diff --git a/AX 강의 - 1/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형).pptx b/AX 강의 - 1/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형).pptx new file mode 100644 index 0000000..58d03ce Binary files /dev/null and b/AX 강의 - 1/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)/오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형).pptx differ diff --git a/AX 강의 - 1/우리 팀만의 AI 지식 창고 만들기/PROMPT_우리 팀만의 AI 지식 창고 만들기.txt b/AX 강의 - 1/우리 팀만의 AI 지식 창고 만들기/PROMPT_우리 팀만의 AI 지식 창고 만들기.txt new file mode 100644 index 0000000..3893ba1 --- /dev/null +++ b/AX 강의 - 1/우리 팀만의 AI 지식 창고 만들기/PROMPT_우리 팀만의 AI 지식 창고 만들기.txt @@ -0,0 +1,29 @@ +너는 기업 AX 전환 교육용 PPT를 설계하는 교육 콘텐츠 디자이너다. + +주제(폴더명/PPT 제목): 우리 팀만의 AI 지식 창고 만들기 +구분: 협업/공유 +요청(시드 프롬프트): +"사내 AI 자산 공유 및 협업 문화"에 대한 발표 자료야. 팀원들이 발견한 좋은 프롬프트를 공유하는 방법과 사내 챗봇 활용법을 포함해줘. '함께 성장하는 조직'을 강조하는 따뜻하고 협력적인 톤으로 만들어줘. + +목표: +- 리더십부터 실무자까지 "왜 이 주제를 이해해야 하는지"를 먼저 설득한다. +- 30분 교육으로 진행 가능하도록 구성한다. +- 최소 20장 이상(권장 22장) 슬라이드가 나오도록 한다. +- 예시(상황/결과/체크리스트/사례)가 풍부해야 한다. +- 발표자가 그대로 읽어도 자연스럽도록 슬라이드 흐름(도입→핵심→사례→리스크→정리)을 만든다. +- 발표 중 **참여형 활동 없이 진행한다.** (참여자에게 '직접 해보라'는 지시 금지) +- 프롬프트/템플릿은 "참고 예시"로만 제시하고, 단계별 따라하기 구성은 만들지 않는다. + +출력 형식(반드시 준수): +- 최종 출력은 JSON 한 덩어리만 출력한다. (설명/문장/코드블록 금지) +- JSON은 아래 스키마를 만족해야 한다: slides.schema.json +- slides[0]은 반드시 type="cover"로 둔다. (표지는 meta.title/meta.subtitle/meta.badge로 자동 생성됨) +- 슬라이드 타입은 다음만 사용한다: + - cover, agenda, section, bullets, two_column, process, table + +작성 규칙: +- bullets는 4~7개 내로, 한 줄은 60자 내로. +- 별도의 prompt(코드블록) 슬라이드를 만들지 않는다. (참여형 활동 유도로 오해될 수 있음) +- table 슬라이드는 열 3~4개, 행 3~6개 정도로 간결하게. +- 보안/윤리/환각 등 리스크가 있는 주제는 "Do & Don't" 또는 "리스크/완화"를 반드시 포함한다. +- 마지막은 요약 + 다음 행동(오늘부터 1개 실행)으로 끝낸다. diff --git a/AX 강의 - 1/우리 팀만의 AI 지식 창고 만들기/make_ppt.py b/AX 강의 - 1/우리 팀만의 AI 지식 창고 만들기/make_ppt.py new file mode 100644 index 0000000..6ae124f --- /dev/null +++ b/AX 강의 - 1/우리 팀만의 AI 지식 창고 만들기/make_ppt.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +import subprocess +import sys +from pathlib import Path + + +def main() -> None: + base = Path(__file__).resolve().parent + common = base.parent / "_common" / "make_ppt.py" + spec = base / "slides.json" + out = base / f"{base.name}.pptx" + subprocess.check_call([sys.executable, str(common), "--spec", str(spec), "--out", str(out)]) + + +if __name__ == "__main__": + main() diff --git a/AX 강의 - 1/우리 팀만의 AI 지식 창고 만들기/slides.example.json b/AX 강의 - 1/우리 팀만의 AI 지식 창고 만들기/slides.example.json new file mode 100644 index 0000000..44a390a --- /dev/null +++ b/AX 강의 - 1/우리 팀만의 AI 지식 창고 만들기/slides.example.json @@ -0,0 +1,112 @@ +{ + "meta": { + "title": "예시 - 강의형(참여형 활동 없음)", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "예시 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝: 오늘은 참여형 활동 없이, 사례/체크리스트 중심으로 진행합니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 흐름을 10초로 안내하고 바로 본론으로 들어갑니다." + }, + { + "type": "section", + "title": "1. 왜 필요한가", + "subtitle": "리더십부터 실무자까지", + "notes": "리더 관점(성과/리스크)과 실무 관점(시간/품질)을 연결해 설명합니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "시간 절감(반복 업무)", + "품질 표준화(템플릿)", + "리스크 감소(검증/승인)", + "온보딩 가속", + "의사결정 리드타임 단축" + ], + "notes": "조직 사례가 있다면 1개만 붙여 설득력을 높입니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "핵심 개념은 3~6개로 제한하고, 각각 1문장으로 정의합니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "오해 vs 현실", + "left_title": "오해", + "left_bullets": ["AI는 만능", "한 번 도입하면 끝"], + "right_title": "현실", + "right_bullets": ["사람 검증이 필수", "운영/거버넌스가 성패를 좌우"], + "notes": "오해를 정리한 뒤, 현실 기준을 '팀 표준'으로 제시합니다." + }, + { + "type": "process", + "chapter": "Part 3", + "title": "적용 루틴(강의형 가이드)", + "steps": [ + "목표/대상/제약 정의", + "입력 데이터 정리", + "출력 형식 지정", + "검증/리스크 체크", + "공유/표준화", + "지표로 개선" + ], + "notes": "참여자에게 '지금 해보라'가 아니라, 기준과 사례를 설명합니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "Before / After (예시)", + "columns": ["업무", "기존", "개선", "절감"], + "rows": [ + ["회의록", "40분", "12분", "28분"], + ["메일", "20분", "5분", "15분"], + ["보고 1p", "60분+", "20분", "40분"] + ], + "notes": "표는 정의/기간을 같이 확인하며 읽습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화", + "left_title": "리스크", + "left_bullets": ["환각/오류", "보안/기밀", "품질 편차", "운영 장애"], + "right_title": "완화", + "right_bullets": ["원문 대조", "입력 금지/가명화", "승인/리뷰", "로그/모니터링"], + "notes": "리스크는 '기술'이 아니라 '프로세스'로 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "요약 & 다음 행동", + "bullets": [ + "목적·맥락·형식 + 검증", + "작게 시작해 표준화", + "지표로 개선", + "오늘 행동: 템플릿 1개를 팀 표준으로 정하기" + ], + "notes": "마무리는 '오늘부터 무엇을 할지' 한 문장으로 정리합니다." + } + ] +} diff --git a/AX 강의 - 1/우리 팀만의 AI 지식 창고 만들기/slides.json b/AX 강의 - 1/우리 팀만의 AI 지식 창고 만들기/slides.json new file mode 100644 index 0000000..e41c7aa --- /dev/null +++ b/AX 강의 - 1/우리 팀만의 AI 지식 창고 만들기/slides.json @@ -0,0 +1,306 @@ +{ + "meta": { + "title": "우리 팀만의 AI 지식 창고 만들기", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "협업/공유 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝(10초): 오늘 주제는 '우리 팀만의 AI 지식 창고 만들기'입니다.\n운영 안내(10초): 오늘은 참여형 활동 없이, 사례와 체크리스트 중심으로 정리합니다.\n목표(10초): 왜 중요한지 → 핵심 원칙 → 사례 해설 → 리스크/대응 → 다음 행동까지 30분에 끝냅니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 구성(20초): 5파트로 진행합니다.\n- 1) 왜 필요한가\n- 2) 핵심 개념/원칙\n- 3) 사례로 이해하는 적용 가이드\n- 4) 리스크/체크리스트\n- 5) 요약 & 다음 행동\n안내(10초): 참여형 활동 없이, 바로 가져가 쓸 수 있는 요약/체크리스트 중심입니다." + }, + { + "type": "section", + "title": "1. 왜 이 주제를 이해해야 하나", + "subtitle": "리더십부터 실무자까지", + "notes": "전환(10초): 이제 '1. 왜 이 주제를 이해해야 하나' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "리더십 관점: 왜 중요한가", + "bullets": [ + "개인 역량이 아닌 ‘팀 자산’으로 전환해야 지속가능", + "중복 작업(같은 프롬프트 재발명) 비용 절감", + "검증된 템플릿은 품질/리스크를 동시에 관리", + "사내 지식의 누적이 조직 경쟁력", + "공유 문화는 변화관리의 핵심 장치" + ], + "notes": "핵심(10초): '리더십 관점: 왜 중요한가' 슬라이드입니다.\n포인트(20초): 개인 역량이 아닌 ‘팀 자산’으로 전환해야 지속가능 / 중복 작업(같은 프롬프트 재발명) 비용 절감\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "실무자 관점: 무엇이 달라지나", + "bullets": [ + "좋은 프롬프트를 공유하면 내 일이 쉬워짐", + "남의 템플릿을 쓰면 빠르게 숙련 가능", + "사내 챗봇/검색이 있으면 물어볼 곳이 생김", + "실패 사례도 공유하면 같은 실수를 줄임", + "함께 성장하는 경험이 동기부여가 됨" + ], + "notes": "핵심(10초): '실무자 관점: 무엇이 달라지나' 슬라이드입니다.\n포인트(20초): 좋은 프롬프트를 공유하면 내 일이 쉬워짐 / 남의 템플릿을 쓰면 빠르게 숙련 가능\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "two_column", + "chapter": "Part 1", + "title": "흔한 오해 vs 현실", + "left_title": "오해", + "left_bullets": [ + "공유하면 내 경쟁력이 줄어든다", + "프롬프트는 사람마다 달라서 공유가 무의미", + "지식창고는 만들기만 하고 안 쓴다", + "정리는 나중에 해도 된다" + ], + "right_title": "현실", + "right_bullets": [ + "공유는 ‘표준’과 ‘시간 절감’을 만든다", + "템플릿+변수로 재사용 가능", + "검색 가능/업데이트 규칙이 핵심", + "정리는 ‘업무 과정’에 붙여야 지속" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "템플릿 재사용으로 문서 품질 표준화", + "신입/전배 온보딩 시간 단축", + "보안/검증 규칙의 내재화", + "아이디어/사례 축적으로 혁신 속도↑", + "개인 만족도/협업 신뢰↑" + ], + "notes": "핵심(10초): '기대 효과(정량/정성)' 슬라이드입니다.\n포인트(20초): 템플릿 재사용으로 문서 품질 표준화 / 신입/전배 온보딩 시간 단축\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "전환(10초): 이제 '2. 핵심 개념과 원칙' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "핵심 개념 6가지", + "bullets": [ + "템플릿(목적/입력/출력/검증) 구조화", + "태그/카테고리로 검색 가능하게", + "예시(좋은 입력/좋은 출력) 포함", + "버전 관리(업데이트 로그)", + "검증 체크리스트를 함께 저장", + "사내 챗봇은 Q&A + 자산 추천 허브" + ], + "notes": "핵심(10초): '핵심 개념 6가지' 슬라이드입니다.\n포인트(20초): 템플릿(목적/입력/출력/검증) 구조화 / 태그/카테고리로 검색 가능하게\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "process", + "chapter": "Part 2", + "title": "실행 프레임워크(권장 루틴)", + "steps": [ + "팀 공통 업무 5개 선정", + "각 업무 템플릿 1개씩 수집", + "형식 통일(메타/변수/예시)", + "검증/보안 규칙 삽입", + "게시(위키/게시판) + 태그", + "주 1회 ‘템플릿 개선’ 10분" + ], + "notes": "핵심(10초): '실행 프레임워크(권장 루틴)'는 실행 흐름(루틴)을 제시합니다.\n요약(20초): 팀 공통 업무 5개 선정 → 각 업무 템플릿 1개씩 수집 → 형식 통일(메타/변수/예시) …\n팁(10초): 이 순서를 팀 템플릿으로 고정하면 재작업이 크게 줄어듭니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "좋은 예 vs 나쁜 예 (짧은 비교)", + "left_title": "좋은 예", + "left_bullets": [ + "템플릿에 변수 자리 표시", + "좋은 예시(입력/출력) 포함", + "사용 시 주의사항/검증 포함", + "태그로 검색 가능" + ], + "right_title": "나쁜 예", + "right_bullets": [ + "본문만 덩어리로 공유", + "사용 맥락(언제/누가)을 누락", + "보안/검증 없이 공유", + "중복 템플릿 난립" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "자주 하는 실수", + "bullets": [ + "템플릿 표준 포맷이 없음", + "업데이트/소유자 부재", + "검색/태그 없이 저장", + "공유가 ‘평가’가 되어 참여↓", + "사내 챗봇과 연결하지 않음" + ], + "notes": "핵심(10초): '자주 하는 실수' 슬라이드입니다.\n포인트(20초): 템플릿 표준 포맷이 없음 / 업데이트/소유자 부재\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "3. 사례로 이해하는 적용 가이드", + "subtitle": "참여형 활동 없이도 이해되는 예시 중심", + "notes": "전환(10초): 이제 '3. 사례로 이해하는 적용 가이드' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 1) 프롬프트를 ‘템플릿’으로 표준화", + "bullets": [ + "요청의 역할/관점: 프롬프트 라이브러리 편집자", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"아래 프롬프트를 팀 공유용 템플릿으로 바꿔줘. / - 목적(1줄)\"", + "포인트: 변수는 [대괄호]로 표시", + "포인트: 검증 체크를 기본 포함", + "포인트: 사용 상황을 써야 재사용됨" + ], + "notes": "핵심(10초): '사례 1) 프롬프트를 ‘템플릿’으로 표준화' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 프롬프트 라이브러리 편집자 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 2) 사내 챗봇용 Q&A/가이드 생성", + "bullets": [ + "요청의 역할/관점: 사내 챗봇 지식베이스 작성자", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"주제: [주제] / 직원들이 자주 물을 질문 10개를 만들고,\"", + "포인트: 질문은 실무자의 언어로", + "포인트: 주의사항(보안/검증)을 붙이기", + "포인트: 관련 템플릿을 추천하도록" + ], + "notes": "핵심(10초): '사례 2) 사내 챗봇용 Q&A/가이드 생성' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 사내 챗봇 지식베이스 작성자 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "지식 창고 카드(예시 포맷)", + "columns": [ + "필드", + "예시" + ], + "rows": [ + [ + "제목", + "회의록 요약(결정/액션)" + ], + [ + "변수", + "[메모], [참석자], [기한]" + ], + [ + "출력", + "표(결정/담당/기한)" + ], + [ + "검증", + "수치/이름 원문 대조" + ] + ], + "notes": "읽는 법(15초): 표는 필드, 예시 기준으로 비교합니다.\n포인트(15초): 수치/정의/기간을 같이 확인해 오해를 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "결과 품질 검증 체크", + "bullets": [ + "사실/수치/고유명사는 원문 대조", + "누락된 가정이 없는지 질문", + "대안 2개 이상 비교 요청", + "리스크/반론을 함께 요청" + ], + "notes": "핵심(10초): '결과 품질 검증 체크' 슬라이드입니다.\n포인트(20초): 사실/수치/고유명사는 원문 대조 / 누락된 가정이 없는지 질문\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "4. 리스크 & 체크리스트", + "subtitle": "안전하게, 팀 단위로 굴리기", + "notes": "전환(10초): 이제 '4. 리스크 & 체크리스트' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화 전략", + "left_title": "리스크", + "left_bullets": [ + "기밀/민감정보가 공유됨", + "품질 낮은 템플릿 확산", + "관리 부재로 방치", + "공유 문화 저항" + ], + "right_title": "완화", + "right_bullets": [ + "공유 전 마스킹/가이드", + "검증된 템플릿만 ‘추천’ 표시", + "소유자/업데이트 주기 지정", + "칭찬/학습 중심 운영" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "체크리스트(현업 적용용)", + "bullets": [ + "템플릿에 목적/상황/변수가 있는가", + "예시 입력/출력이 있는가", + "검증/보안 체크가 있는가", + "태그가 붙었는가", + "소유자/버전이 있는가" + ], + "notes": "핵심(10초): '체크리스트(현업 적용용)' 슬라이드입니다.\n포인트(20초): 템플릿에 목적/상황/변수가 있는가 / 예시 입력/출력이 있는가\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "팀 적용(롤아웃) 방법", + "bullets": [ + "초기: 5개 템플릿으로 시작", + "운영: 주간 공유 10분", + "품질: 추천/검증 배지", + "확장: 챗봇이 템플릿 추천" + ], + "notes": "핵심(10초): '팀 적용(롤아웃) 방법' 슬라이드입니다.\n포인트(20초): 초기: 5개 템플릿으로 시작 / 운영: 주간 공유 10분\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "5. 요약 & 다음 행동", + "subtitle": "오늘부터 1개만 실행", + "notes": "전환(10초): 이제 '5. 요약 & 다음 행동' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "핵심 요약", + "bullets": [ + "지식은 공유될 때 자산이 된다", + "템플릿 표준화 + 검색 + 검증이 핵심", + "운영(업데이트) 없으면 방치된다", + "오늘 행동: 내 템플릿 1개를 표준 포맷으로 올리기" + ], + "notes": "핵심(10초): '핵심 요약' 슬라이드입니다.\n포인트(20초): 지식은 공유될 때 자산이 된다 / 템플릿 표준화 + 검색 + 검증이 핵심\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + } + ] +} diff --git a/AX 강의 - 1/우리 팀만의 AI 지식 창고 만들기/slides.schema.json b/AX 강의 - 1/우리 팀만의 AI 지식 창고 만들기/slides.schema.json new file mode 100644 index 0000000..11cd0ff --- /dev/null +++ b/AX 강의 - 1/우리 팀만의 AI 지식 창고 만들기/slides.schema.json @@ -0,0 +1,218 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX Curriculum Slides Spec", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "badge": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "tone": { "type": "string" }, + "footer_left": { "type": "string" } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 20, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { + "type": "string", + "enum": ["cover", "agenda", "section", "bullets", "two_column", "process", "prompt", "table"] + }, + "chapter": { "type": "string" }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "items": { "type": "array", "items": { "type": "string" } }, + "bullets": { "type": "array", "items": { "type": "string" } }, + "left_title": { "type": "string" }, + "left_bullets": { "type": "array", "items": { "type": "string" } }, + "right_title": { "type": "string" }, + "right_bullets": { "type": "array", "items": { "type": "string" } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "prompt": { "type": "string" }, + "tips": { "type": "array", "items": { "type": "string" } }, + "columns": { "type": "array", "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": true +} + +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AX Deck Slides JSON Schema", + "type": "object", + "additionalProperties": false, + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "additionalProperties": false, + "required": ["title", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "author": { "type": "string" }, + "date": { "type": "string" }, + "language": { "type": "string", "default": "ko-KR" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "version": { "type": "string" } + } + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { "$ref": "#/definitions/slide" } + } + }, + "definitions": { + "bulletItem": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "additionalProperties": false, + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "children": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + } + ] + }, + "column": { + "type": "object", + "additionalProperties": false, + "required": ["heading", "bullets"], + "properties": { + "heading": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + }, + "slide": { + "type": "object", + "additionalProperties": false, + "required": ["type", "title"], + "properties": { + "type": { + "type": "string", + "enum": [ + "title", + "section", + "agenda", + "bullets", + "two_column_bullets", + "quote", + "table", + "exercise", + "closing", + "blank" + ] + }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + }, + "items": { "type": "array", "items": { "type": "string" } }, + "left": { "$ref": "#/definitions/column" }, + "right": { "$ref": "#/definitions/column" }, + "quote": { "type": "string" }, + "attribution": { "type": "string" }, + "headers": { "type": "array", "minItems": 1, "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "timebox_minutes": { "type": "integer", "minimum": 1 }, + "notes": { "type": "string" } + }, + "allOf": [ + { "if": { "properties": { "type": { "const": "agenda" } } }, "then": { "required": ["items"] } }, + { "if": { "properties": { "type": { "const": "bullets" } } }, "then": { "required": ["bullets"] } }, + { + "if": { "properties": { "type": { "const": "two_column_bullets" } } }, + "then": { "required": ["left", "right"] } + }, + { "if": { "properties": { "type": { "const": "quote" } } }, "then": { "required": ["quote"] } }, + { "if": { "properties": { "type": { "const": "table" } } }, "then": { "required": ["headers", "rows"] } }, + { "if": { "properties": { "type": { "const": "exercise" } } }, "then": { "required": ["steps"] } } + ] + } + } +} +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX 교육용 slides.json 스키마", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 5, "maximum": 180 }, + "audience": { "type": "string" }, + "language": { "type": "string", "enum": ["ko"] }, + "version": { "type": "integer", "minimum": 1 } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { "type": "string", "enum": ["title", "section", "content", "two_content"] }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "level": { "type": "integer", "minimum": 0, "maximum": 5 } + }, + "additionalProperties": false + } + ] + } + }, + "left_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "right_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "notes": { "type": "string" } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": false +} diff --git a/AX 강의 - 1/우리 팀만의 AI 지식 창고 만들기/우리 팀만의 AI 지식 창고 만들기.pptx b/AX 강의 - 1/우리 팀만의 AI 지식 창고 만들기/우리 팀만의 AI 지식 창고 만들기.pptx new file mode 100644 index 0000000..3769485 Binary files /dev/null and b/AX 강의 - 1/우리 팀만의 AI 지식 창고 만들기/우리 팀만의 AI 지식 창고 만들기.pptx differ diff --git a/AX 강의 - 1/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법/PROMPT_질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법.txt b/AX 강의 - 1/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법/PROMPT_질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법.txt new file mode 100644 index 0000000..787960a --- /dev/null +++ b/AX 강의 - 1/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법/PROMPT_질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법.txt @@ -0,0 +1,29 @@ +너는 기업 AX 전환 교육용 PPT를 설계하는 교육 콘텐츠 디자이너다. + +주제(폴더명/PPT 제목): 질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법 +구분: 문제 해결 +요청(시드 프롬프트): +"AI 성능을 200% 끌어올리는 질문의 기술(Prompting)"에 대해 설명해줘. 단순 명령과 구체적 명령의 차이, 논리적 사고를 돕는 프롬프트 프레임워크를 단계별로 구성해줘. 교육적인 전문성이 느껴지는 톤으로 작성해줘. + +목표: +- 리더십부터 실무자까지 "왜 이 주제를 이해해야 하는지"를 먼저 설득한다. +- 30분 교육으로 진행 가능하도록 구성한다. +- 최소 20장 이상(권장 22장) 슬라이드가 나오도록 한다. +- 예시(상황/결과/체크리스트/사례)가 풍부해야 한다. +- 발표자가 그대로 읽어도 자연스럽도록 슬라이드 흐름(도입→핵심→사례→리스크→정리)을 만든다. +- 발표 중 **참여형 활동 없이 진행한다.** (참여자에게 '직접 해보라'는 지시 금지) +- 프롬프트/템플릿은 "참고 예시"로만 제시하고, 단계별 따라하기 구성은 만들지 않는다. + +출력 형식(반드시 준수): +- 최종 출력은 JSON 한 덩어리만 출력한다. (설명/문장/코드블록 금지) +- JSON은 아래 스키마를 만족해야 한다: slides.schema.json +- slides[0]은 반드시 type="cover"로 둔다. (표지는 meta.title/meta.subtitle/meta.badge로 자동 생성됨) +- 슬라이드 타입은 다음만 사용한다: + - cover, agenda, section, bullets, two_column, process, table + +작성 규칙: +- bullets는 4~7개 내로, 한 줄은 60자 내로. +- 별도의 prompt(코드블록) 슬라이드를 만들지 않는다. (참여형 활동 유도로 오해될 수 있음) +- table 슬라이드는 열 3~4개, 행 3~6개 정도로 간결하게. +- 보안/윤리/환각 등 리스크가 있는 주제는 "Do & Don't" 또는 "리스크/완화"를 반드시 포함한다. +- 마지막은 요약 + 다음 행동(오늘부터 1개 실행)으로 끝낸다. diff --git a/AX 강의 - 1/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법/make_ppt.py b/AX 강의 - 1/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법/make_ppt.py new file mode 100644 index 0000000..6ae124f --- /dev/null +++ b/AX 강의 - 1/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법/make_ppt.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +import subprocess +import sys +from pathlib import Path + + +def main() -> None: + base = Path(__file__).resolve().parent + common = base.parent / "_common" / "make_ppt.py" + spec = base / "slides.json" + out = base / f"{base.name}.pptx" + subprocess.check_call([sys.executable, str(common), "--spec", str(spec), "--out", str(out)]) + + +if __name__ == "__main__": + main() diff --git a/AX 강의 - 1/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법/slides.example.json b/AX 강의 - 1/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법/slides.example.json new file mode 100644 index 0000000..44a390a --- /dev/null +++ b/AX 강의 - 1/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법/slides.example.json @@ -0,0 +1,112 @@ +{ + "meta": { + "title": "예시 - 강의형(참여형 활동 없음)", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "예시 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝: 오늘은 참여형 활동 없이, 사례/체크리스트 중심으로 진행합니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 흐름을 10초로 안내하고 바로 본론으로 들어갑니다." + }, + { + "type": "section", + "title": "1. 왜 필요한가", + "subtitle": "리더십부터 실무자까지", + "notes": "리더 관점(성과/리스크)과 실무 관점(시간/품질)을 연결해 설명합니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "시간 절감(반복 업무)", + "품질 표준화(템플릿)", + "리스크 감소(검증/승인)", + "온보딩 가속", + "의사결정 리드타임 단축" + ], + "notes": "조직 사례가 있다면 1개만 붙여 설득력을 높입니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "핵심 개념은 3~6개로 제한하고, 각각 1문장으로 정의합니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "오해 vs 현실", + "left_title": "오해", + "left_bullets": ["AI는 만능", "한 번 도입하면 끝"], + "right_title": "현실", + "right_bullets": ["사람 검증이 필수", "운영/거버넌스가 성패를 좌우"], + "notes": "오해를 정리한 뒤, 현실 기준을 '팀 표준'으로 제시합니다." + }, + { + "type": "process", + "chapter": "Part 3", + "title": "적용 루틴(강의형 가이드)", + "steps": [ + "목표/대상/제약 정의", + "입력 데이터 정리", + "출력 형식 지정", + "검증/리스크 체크", + "공유/표준화", + "지표로 개선" + ], + "notes": "참여자에게 '지금 해보라'가 아니라, 기준과 사례를 설명합니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "Before / After (예시)", + "columns": ["업무", "기존", "개선", "절감"], + "rows": [ + ["회의록", "40분", "12분", "28분"], + ["메일", "20분", "5분", "15분"], + ["보고 1p", "60분+", "20분", "40분"] + ], + "notes": "표는 정의/기간을 같이 확인하며 읽습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화", + "left_title": "리스크", + "left_bullets": ["환각/오류", "보안/기밀", "품질 편차", "운영 장애"], + "right_title": "완화", + "right_bullets": ["원문 대조", "입력 금지/가명화", "승인/리뷰", "로그/모니터링"], + "notes": "리스크는 '기술'이 아니라 '프로세스'로 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "요약 & 다음 행동", + "bullets": [ + "목적·맥락·형식 + 검증", + "작게 시작해 표준화", + "지표로 개선", + "오늘 행동: 템플릿 1개를 팀 표준으로 정하기" + ], + "notes": "마무리는 '오늘부터 무엇을 할지' 한 문장으로 정리합니다." + } + ] +} diff --git a/AX 강의 - 1/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법/slides.json b/AX 강의 - 1/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법/slides.json new file mode 100644 index 0000000..c5e5fdb --- /dev/null +++ b/AX 강의 - 1/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법/slides.json @@ -0,0 +1,311 @@ +{ + "meta": { + "title": "질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "문제 해결 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝(10초): 오늘 주제는 '질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법'입니다.\n운영 안내(10초): 오늘은 참여형 활동 없이, 사례와 체크리스트 중심으로 정리합니다.\n목표(10초): 왜 중요한지 → 핵심 원칙 → 사례 해설 → 리스크/대응 → 다음 행동까지 30분에 끝냅니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 구성(20초): 5파트로 진행합니다.\n- 1) 왜 필요한가\n- 2) 핵심 개념/원칙\n- 3) 사례로 이해하는 적용 가이드\n- 4) 리스크/체크리스트\n- 5) 요약 & 다음 행동\n안내(10초): 참여형 활동 없이, 바로 가져가 쓸 수 있는 요약/체크리스트 중심입니다." + }, + { + "type": "section", + "title": "1. 왜 이 주제를 이해해야 하나", + "subtitle": "리더십부터 실무자까지", + "notes": "전환(10초): 이제 '1. 왜 이 주제를 이해해야 하나' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "리더십 관점: 왜 중요한가", + "bullets": [ + "문제 정의가 흔들리면 AI도 흔들림(결정 품질 저하)", + "질문 프레임은 조직의 사고 체계를 표준화", + "빠른 실험(가설-검증)으로 전략 속도↑", + "회의 생산성이 ‘질문 품질’에 의해 결정", + "리스크/반론까지 포함한 질문이 안전한 의사결정으로 연결" + ], + "notes": "핵심(10초): '리더십 관점: 왜 중요한가' 슬라이드입니다.\n포인트(20초): 문제 정의가 흔들리면 AI도 흔들림(결정 품질 저하) / 질문 프레임은 조직의 사고 체계를 표준화\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "실무자 관점: 무엇이 달라지나", + "bullets": [ + "AI는 ‘무엇을’보다 ‘왜/어떻게’를 잘 물을 때 강해짐", + "좋은 질문은 작업 재작업을 줄여줌", + "프레임워크만 있으면 누구나 품질을 올릴 수 있음", + "아이디어 발산이 막힐 때 강력한 파트너", + "문서/기획 능력도 함께 상승" + ], + "notes": "핵심(10초): '실무자 관점: 무엇이 달라지나' 슬라이드입니다.\n포인트(20초): AI는 ‘무엇을’보다 ‘왜/어떻게’를 잘 물을 때 강해짐 / 좋은 질문은 작업 재작업을 줄여줌\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "two_column", + "chapter": "Part 1", + "title": "흔한 오해 vs 현실", + "left_title": "오해", + "left_bullets": [ + "AI는 센스 있게 알아서 해준다", + "질문은 길수록 좋다", + "정답을 한 번에 받아야 한다", + "브레인스토밍은 사람끼리만 한다" + ], + "right_title": "현실", + "right_bullets": [ + "AI는 맥락이 없으면 ‘평균 답’", + "핵심 조건을 구조화하면 짧아도 강함", + "초안→추가 질문→정제 루프가 정답", + "AI는 발산·정리·비판 역할에 강함" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "아이디어 발산 속도↑(대안 10개/5분)", + "문제 정의 명확화로 실행 리스크↓", + "회의 아젠다/의사결정 질문이 정교해짐", + "기획서/제안서 품질 표준화", + "개인 논리/표현력 향상" + ], + "notes": "핵심(10초): '기대 효과(정량/정성)' 슬라이드입니다.\n포인트(20초): 아이디어 발산 속도↑(대안 10개/5분) / 문제 정의 명확화로 실행 리스크↓\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "전환(10초): 이제 '2. 핵심 개념과 원칙' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "핵심 개념 6가지", + "bullets": [ + "Role: 역할 부여", + "Goal: 목적/성공 기준", + "Context: 배경/제약", + "Format: 출력 형식", + "Critique: 반론/리스크", + "Iterate: 후속 질문으로 정제" + ], + "notes": "핵심(10초): '핵심 개념 6가지' 슬라이드입니다.\n포인트(20초): Role: 역할 부여 / Goal: 목적/성공 기준\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "process", + "chapter": "Part 2", + "title": "실행 프레임워크(권장 루틴)", + "steps": [ + "문제 한 줄 정의(무엇을/왜)", + "성공 기준 3개 설정", + "맥락(현황/제약/대상) 추가", + "출력 형식(표/목차/단계) 지정", + "반론/리스크 요청", + "2회 반복 정제(추가 질문)" + ], + "notes": "핵심(10초): '실행 프레임워크(권장 루틴)'는 실행 흐름(루틴)을 제시합니다.\n요약(20초): 문제 한 줄 정의(무엇을/왜) → 성공 기준 3개 설정 → 맥락(현황/제약/대상) 추가 …\n팁(10초): 이 순서를 팀 템플릿으로 고정하면 재작업이 크게 줄어듭니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "좋은 예 vs 나쁜 예 (짧은 비교)", + "left_title": "좋은 예", + "left_bullets": [ + "‘목적+성공기준’이 있는 질문", + "대안 3개 이상을 강제", + "반론/리스크 포함", + "출력 형식(표/프레임) 지정" + ], + "right_title": "나쁜 예", + "right_bullets": [ + "‘아이디어 내줘’만 요청", + "제약 없이 무한 발산", + "결론만 달라고 함(근거 없음)", + "반론/리스크를 배제" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "자주 하는 실수", + "bullets": [ + "문제 정의 없이 해결책부터 요청", + "대상/상황을 숨김(‘알아서’ 기대)", + "한 번에 완벽을 기대", + "출력 형식을 주지 않아 재작업", + "비판(리스크) 질문을 생략" + ], + "notes": "핵심(10초): '자주 하는 실수' 슬라이드입니다.\n포인트(20초): 문제 정의 없이 해결책부터 요청 / 대상/상황을 숨김(‘알아서’ 기대)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "3. 사례로 이해하는 적용 가이드", + "subtitle": "참여형 활동 없이도 이해되는 예시 중심", + "notes": "전환(10초): 이제 '3. 사례로 이해하는 적용 가이드' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 1) 5W1H로 문제 정의하기", + "bullets": [ + "요청의 역할/관점: 논리적 사고 코치", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"내가 해결하려는 문제는: [문제] / 아래 5W1H 질문을 통해 누락된 정보를 찾아줘.\"", + "포인트: 답을 채우면 프롬프트가 완성된다", + "포인트: 성공 기준은 측정 가능하게", + "포인트: 제약(예산/기간/규정)을 명시" + ], + "notes": "핵심(10초): '사례 1) 5W1H로 문제 정의하기' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 논리적 사고 코치 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 2) 브레인스토밍을 ‘발산→수렴’으로", + "bullets": [ + "요청의 역할/관점: 브레인스토밍 파트너", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"목표: [목표] / 제약: [기간/예산/규정]\"", + "포인트: 발산은 ‘개수 강제’", + "포인트: 수렴은 ‘평가기준’", + "포인트: 리스크까지 같이 보자" + ], + "notes": "핵심(10초): '사례 2) 브레인스토밍을 ‘발산→수렴’으로' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 브레인스토밍 파트너 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "질문 프레임워크(요약)", + "columns": [ + "요소", + "의미", + "예시" + ], + "rows": [ + [ + "Role", + "관점 고정", + "너는 10년차 PM이야" + ], + [ + "Goal", + "목표/성공기준", + "시간 20% 단축" + ], + [ + "Format", + "산출물 형태", + "표(열: 옵션/장단)" + ], + [ + "Critique", + "반론/리스크", + "리스크 3개도" + ] + ], + "notes": "읽는 법(15초): 표는 요소, 의미, 예시 기준으로 비교합니다.\n포인트(15초): 수치/정의/기간을 같이 확인해 오해를 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "결과 품질 검증 체크", + "bullets": [ + "사실/수치/고유명사는 원문 대조", + "누락된 가정이 없는지 질문", + "대안 2개 이상 비교 요청", + "리스크/반론을 함께 요청" + ], + "notes": "핵심(10초): '결과 품질 검증 체크' 슬라이드입니다.\n포인트(20초): 사실/수치/고유명사는 원문 대조 / 누락된 가정이 없는지 질문\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "4. 리스크 & 체크리스트", + "subtitle": "안전하게, 팀 단위로 굴리기", + "notes": "전환(10초): 이제 '4. 리스크 & 체크리스트' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화 전략", + "left_title": "리스크", + "left_bullets": [ + "평균 답변으로 시간 낭비", + "편향된 결론(대안 부족)", + "현실 제약 미반영", + "환각으로 근거 왜곡" + ], + "right_title": "완화", + "right_bullets": [ + "프레임(Goal/Context/Format) 고정", + "대안 3개 이상 요청", + "제약 조건 명시", + "근거/출처/가정 확인" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "체크리스트(현업 적용용)", + "bullets": [ + "문제 정의 1문장 있는가", + "성공 기준 3개가 있는가", + "제약 조건이 포함됐나", + "출력 형식을 지정했나", + "반론/리스크를 요청했나" + ], + "notes": "핵심(10초): '체크리스트(현업 적용용)' 슬라이드입니다.\n포인트(20초): 문제 정의 1문장 있는가 / 성공 기준 3개가 있는가\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "팀 적용(롤아웃) 방법", + "bullets": [ + "팀 공통 질문 템플릿(회의용) 만들기", + "회의 아젠다는 ‘질문’으로 작성", + "좋은 질문/나쁜 질문 사례 공유", + "결과물은 표준 포맷으로 저장" + ], + "notes": "핵심(10초): '팀 적용(롤아웃) 방법' 슬라이드입니다.\n포인트(20초): 팀 공통 질문 템플릿(회의용) 만들기 / 회의 아젠다는 ‘질문’으로 작성\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "5. 요약 & 다음 행동", + "subtitle": "오늘부터 1개만 실행", + "notes": "전환(10초): 이제 '5. 요약 & 다음 행동' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "핵심 요약", + "bullets": [ + "질문 품질이 AI 성과를 결정", + "프레임워크(Goal/Context/Format/Critique)로 표준화", + "발산→수렴 루프가 핵심", + "오늘 행동: 내 업무 1개를 5W1H로 재질문" + ], + "notes": "핵심(10초): '핵심 요약' 슬라이드입니다.\n포인트(20초): 질문 품질이 AI 성과를 결정 / 프레임워크(Goal/Context/Format/Critique)로 표준화\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + } + ] +} diff --git a/AX 강의 - 1/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법/slides.schema.json b/AX 강의 - 1/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법/slides.schema.json new file mode 100644 index 0000000..11cd0ff --- /dev/null +++ b/AX 강의 - 1/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법/slides.schema.json @@ -0,0 +1,218 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX Curriculum Slides Spec", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "badge": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "tone": { "type": "string" }, + "footer_left": { "type": "string" } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 20, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { + "type": "string", + "enum": ["cover", "agenda", "section", "bullets", "two_column", "process", "prompt", "table"] + }, + "chapter": { "type": "string" }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "items": { "type": "array", "items": { "type": "string" } }, + "bullets": { "type": "array", "items": { "type": "string" } }, + "left_title": { "type": "string" }, + "left_bullets": { "type": "array", "items": { "type": "string" } }, + "right_title": { "type": "string" }, + "right_bullets": { "type": "array", "items": { "type": "string" } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "prompt": { "type": "string" }, + "tips": { "type": "array", "items": { "type": "string" } }, + "columns": { "type": "array", "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": true +} + +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AX Deck Slides JSON Schema", + "type": "object", + "additionalProperties": false, + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "additionalProperties": false, + "required": ["title", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "author": { "type": "string" }, + "date": { "type": "string" }, + "language": { "type": "string", "default": "ko-KR" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "version": { "type": "string" } + } + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { "$ref": "#/definitions/slide" } + } + }, + "definitions": { + "bulletItem": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "additionalProperties": false, + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "children": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + } + ] + }, + "column": { + "type": "object", + "additionalProperties": false, + "required": ["heading", "bullets"], + "properties": { + "heading": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + }, + "slide": { + "type": "object", + "additionalProperties": false, + "required": ["type", "title"], + "properties": { + "type": { + "type": "string", + "enum": [ + "title", + "section", + "agenda", + "bullets", + "two_column_bullets", + "quote", + "table", + "exercise", + "closing", + "blank" + ] + }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + }, + "items": { "type": "array", "items": { "type": "string" } }, + "left": { "$ref": "#/definitions/column" }, + "right": { "$ref": "#/definitions/column" }, + "quote": { "type": "string" }, + "attribution": { "type": "string" }, + "headers": { "type": "array", "minItems": 1, "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "timebox_minutes": { "type": "integer", "minimum": 1 }, + "notes": { "type": "string" } + }, + "allOf": [ + { "if": { "properties": { "type": { "const": "agenda" } } }, "then": { "required": ["items"] } }, + { "if": { "properties": { "type": { "const": "bullets" } } }, "then": { "required": ["bullets"] } }, + { + "if": { "properties": { "type": { "const": "two_column_bullets" } } }, + "then": { "required": ["left", "right"] } + }, + { "if": { "properties": { "type": { "const": "quote" } } }, "then": { "required": ["quote"] } }, + { "if": { "properties": { "type": { "const": "table" } } }, "then": { "required": ["headers", "rows"] } }, + { "if": { "properties": { "type": { "const": "exercise" } } }, "then": { "required": ["steps"] } } + ] + } + } +} +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX 교육용 slides.json 스키마", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 5, "maximum": 180 }, + "audience": { "type": "string" }, + "language": { "type": "string", "enum": ["ko"] }, + "version": { "type": "integer", "minimum": 1 } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { "type": "string", "enum": ["title", "section", "content", "two_content"] }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "level": { "type": "integer", "minimum": 0, "maximum": 5 } + }, + "additionalProperties": false + } + ] + } + }, + "left_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "right_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "notes": { "type": "string" } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": false +} diff --git a/AX 강의 - 1/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법.pptx b/AX 강의 - 1/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법.pptx new file mode 100644 index 0000000..637dfb0 Binary files /dev/null and b/AX 강의 - 1/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법/질문이 경쟁력이다 - AI를 브레인스토밍 파트너로 쓰는 법.pptx differ diff --git a/AX 강의 - 1/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기/PROMPT_칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기.txt b/AX 강의 - 1/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기/PROMPT_칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기.txt new file mode 100644 index 0000000..3904914 --- /dev/null +++ b/AX 강의 - 1/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기/PROMPT_칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기.txt @@ -0,0 +1,29 @@ +너는 기업 AX 전환 교육용 PPT를 설계하는 교육 콘텐츠 디자이너다. + +주제(폴더명/PPT 제목): 칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기 +구분: 업무 효율 +요청(시드 프롬프트): +"직장인 공통 업무 자동화(이메일, 요약, 일정)"를 주제로 슬라이드를 구성해줘. 비포&애프터 비교표를 넣어서 AI 활용 시 절약되는 시간을 수치로 보여줘. 실용적이고 에너제틱한 느낌의 레이아웃으로 제안해줘. + +목표: +- 리더십부터 실무자까지 "왜 이 주제를 이해해야 하는지"를 먼저 설득한다. +- 30분 교육으로 진행 가능하도록 구성한다. +- 최소 20장 이상(권장 22장) 슬라이드가 나오도록 한다. +- 예시(상황/결과/체크리스트/사례)가 풍부해야 한다. +- 발표자가 그대로 읽어도 자연스럽도록 슬라이드 흐름(도입→핵심→사례→리스크→정리)을 만든다. +- 발표 중 **참여형 활동 없이 진행한다.** (참여자에게 '직접 해보라'는 지시 금지) +- 프롬프트/템플릿은 "참고 예시"로만 제시하고, 단계별 따라하기 구성은 만들지 않는다. + +출력 형식(반드시 준수): +- 최종 출력은 JSON 한 덩어리만 출력한다. (설명/문장/코드블록 금지) +- JSON은 아래 스키마를 만족해야 한다: slides.schema.json +- slides[0]은 반드시 type="cover"로 둔다. (표지는 meta.title/meta.subtitle/meta.badge로 자동 생성됨) +- 슬라이드 타입은 다음만 사용한다: + - cover, agenda, section, bullets, two_column, process, table + +작성 규칙: +- bullets는 4~7개 내로, 한 줄은 60자 내로. +- 별도의 prompt(코드블록) 슬라이드를 만들지 않는다. (참여형 활동 유도로 오해될 수 있음) +- table 슬라이드는 열 3~4개, 행 3~6개 정도로 간결하게. +- 보안/윤리/환각 등 리스크가 있는 주제는 "Do & Don't" 또는 "리스크/완화"를 반드시 포함한다. +- 마지막은 요약 + 다음 행동(오늘부터 1개 실행)으로 끝낸다. diff --git a/AX 강의 - 1/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기/make_ppt.py b/AX 강의 - 1/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기/make_ppt.py new file mode 100644 index 0000000..6ae124f --- /dev/null +++ b/AX 강의 - 1/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기/make_ppt.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +import subprocess +import sys +from pathlib import Path + + +def main() -> None: + base = Path(__file__).resolve().parent + common = base.parent / "_common" / "make_ppt.py" + spec = base / "slides.json" + out = base / f"{base.name}.pptx" + subprocess.check_call([sys.executable, str(common), "--spec", str(spec), "--out", str(out)]) + + +if __name__ == "__main__": + main() diff --git a/AX 강의 - 1/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기/slides.example.json b/AX 강의 - 1/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기/slides.example.json new file mode 100644 index 0000000..44a390a --- /dev/null +++ b/AX 강의 - 1/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기/slides.example.json @@ -0,0 +1,112 @@ +{ + "meta": { + "title": "예시 - 강의형(참여형 활동 없음)", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "예시 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝: 오늘은 참여형 활동 없이, 사례/체크리스트 중심으로 진행합니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 흐름을 10초로 안내하고 바로 본론으로 들어갑니다." + }, + { + "type": "section", + "title": "1. 왜 필요한가", + "subtitle": "리더십부터 실무자까지", + "notes": "리더 관점(성과/리스크)과 실무 관점(시간/품질)을 연결해 설명합니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "시간 절감(반복 업무)", + "품질 표준화(템플릿)", + "리스크 감소(검증/승인)", + "온보딩 가속", + "의사결정 리드타임 단축" + ], + "notes": "조직 사례가 있다면 1개만 붙여 설득력을 높입니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "핵심 개념은 3~6개로 제한하고, 각각 1문장으로 정의합니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "오해 vs 현실", + "left_title": "오해", + "left_bullets": ["AI는 만능", "한 번 도입하면 끝"], + "right_title": "현실", + "right_bullets": ["사람 검증이 필수", "운영/거버넌스가 성패를 좌우"], + "notes": "오해를 정리한 뒤, 현실 기준을 '팀 표준'으로 제시합니다." + }, + { + "type": "process", + "chapter": "Part 3", + "title": "적용 루틴(강의형 가이드)", + "steps": [ + "목표/대상/제약 정의", + "입력 데이터 정리", + "출력 형식 지정", + "검증/리스크 체크", + "공유/표준화", + "지표로 개선" + ], + "notes": "참여자에게 '지금 해보라'가 아니라, 기준과 사례를 설명합니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "Before / After (예시)", + "columns": ["업무", "기존", "개선", "절감"], + "rows": [ + ["회의록", "40분", "12분", "28분"], + ["메일", "20분", "5분", "15분"], + ["보고 1p", "60분+", "20분", "40분"] + ], + "notes": "표는 정의/기간을 같이 확인하며 읽습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화", + "left_title": "리스크", + "left_bullets": ["환각/오류", "보안/기밀", "품질 편차", "운영 장애"], + "right_title": "완화", + "right_bullets": ["원문 대조", "입력 금지/가명화", "승인/리뷰", "로그/모니터링"], + "notes": "리스크는 '기술'이 아니라 '프로세스'로 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "요약 & 다음 행동", + "bullets": [ + "목적·맥락·형식 + 검증", + "작게 시작해 표준화", + "지표로 개선", + "오늘 행동: 템플릿 1개를 팀 표준으로 정하기" + ], + "notes": "마무리는 '오늘부터 무엇을 할지' 한 문장으로 정리합니다." + } + ] +} diff --git a/AX 강의 - 1/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기/slides.json b/AX 강의 - 1/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기/slides.json new file mode 100644 index 0000000..6f772a5 --- /dev/null +++ b/AX 강의 - 1/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기/slides.json @@ -0,0 +1,316 @@ +{ + "meta": { + "title": "칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "업무 효율 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝(10초): 오늘 주제는 '칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기'입니다.\n운영 안내(10초): 오늘은 참여형 활동 없이, 사례와 체크리스트 중심으로 정리합니다.\n목표(10초): 왜 중요한지 → 핵심 원칙 → 사례 해설 → 리스크/대응 → 다음 행동까지 30분에 끝냅니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 구성(20초): 5파트로 진행합니다.\n- 1) 왜 필요한가\n- 2) 핵심 개념/원칙\n- 3) 사례로 이해하는 적용 가이드\n- 4) 리스크/체크리스트\n- 5) 요약 & 다음 행동\n안내(10초): 참여형 활동 없이, 바로 가져가 쓸 수 있는 요약/체크리스트 중심입니다." + }, + { + "type": "section", + "title": "1. 왜 이 주제를 이해해야 하나", + "subtitle": "리더십부터 실무자까지", + "notes": "전환(10초): 이제 '1. 왜 이 주제를 이해해야 하나' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "리더십 관점: 왜 중요한가", + "bullets": [ + "개인 효율이 팀 생산성으로 이어지는 ‘확장 효과’", + "반복 업무 표준화는 품질/리스크를 동시에 낮춤", + "‘시간 절감’은 가장 빠르게 측정 가능한 KPI", + "업무 인수인계/온보딩 속도 개선", + "자동화는 프로세스 개선의 출발점" + ], + "notes": "핵심(10초): '리더십 관점: 왜 중요한가' 슬라이드입니다.\n포인트(20초): 개인 효율이 팀 생산성으로 이어지는 ‘확장 효과’ / 반복 업무 표준화는 품질/리스크를 동시에 낮춤\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "실무자 관점: 무엇이 달라지나", + "bullets": [ + "메일/요약/일정이 하루 시간을 갉아먹는 주범", + "AI는 초안/정리/체크리스트에 특히 강함", + "내 업무 스타일을 템플릿으로 만들면 반복이 줄어듦", + "실수(누락/오타/톤) 감소로 스트레스↓", + "매일 10분 절감이 1달이면 큰 차이를 만듦" + ], + "notes": "핵심(10초): '실무자 관점: 무엇이 달라지나' 슬라이드입니다.\n포인트(20초): 메일/요약/일정이 하루 시간을 갉아먹는 주범 / AI는 초안/정리/체크리스트에 특히 강함\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "two_column", + "chapter": "Part 1", + "title": "흔한 오해 vs 현실", + "left_title": "오해", + "left_bullets": [ + "자동화는 개발자만 한다", + "AI 쓰면 오히려 시간이 더 든다", + "메일은 사람이 직접 써야 한다", + "회의록은 정리할 수밖에 없다" + ], + "right_title": "현실", + "right_bullets": [ + "No-code/템플릿으로 누구나 가능", + "초안→검토 루틴이면 오히려 빨라짐", + "톤/대상/형식 지정하면 안정적으로 작성", + "결정/액션만 뽑으면 ‘짧게’ 끝남" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "하루 10~20분 절감 → 월 3~6시간 확보", + "회의 후속 액션 누락 감소", + "메일 품질(명확성/톤) 표준화", + "일정 충돌/우선순위 정리로 야근 감소", + "반복 작업 스트레스↓" + ], + "notes": "핵심(10초): '기대 효과(정량/정성)' 슬라이드입니다.\n포인트(20초): 하루 10~20분 절감 → 월 3~6시간 확보 / 회의 후속 액션 누락 감소\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "전환(10초): 이제 '2. 핵심 개념과 원칙' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "핵심 개념 6가지", + "bullets": [ + "반복 업무를 ‘템플릿’으로 바꾸기", + "입력: 맥락(대상/목적/제약) 주기", + "출력: 형식(표/체크리스트/메일 구조) 주기", + "검증: 누락/반론/다음 액션 확인", + "축적: 잘 된 결과를 라이브러리화", + "자동화: 앱 연결(메일-슬랙-시트)" + ], + "notes": "핵심(10초): '핵심 개념 6가지' 슬라이드입니다.\n포인트(20초): 반복 업무를 ‘템플릿’으로 바꾸기 / 입력: 맥락(대상/목적/제약) 주기\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "process", + "chapter": "Part 2", + "title": "실행 프레임워크(권장 루틴)", + "steps": [ + "업무 3개(메일/요약/일정)를 선정", + "각 업무의 ‘좋은 예’ 1개 수집", + "AI에 초안 생성(형식 지정)", + "검토 체크리스트로 빠르게 수정", + "템플릿 저장(제목/용도/변수)", + "주 1회 성과 기록(분 단위)" + ], + "notes": "핵심(10초): '실행 프레임워크(권장 루틴)'는 실행 흐름(루틴)을 제시합니다.\n요약(20초): 업무 3개(메일/요약/일정)를 선정 → 각 업무의 ‘좋은 예’ 1개 수집 → AI에 초안 생성(형식 지정) …\n팁(10초): 이 순서를 팀 템플릿으로 고정하면 재작업이 크게 줄어듭니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "좋은 예 vs 나쁜 예 (짧은 비교)", + "left_title": "좋은 예", + "left_bullets": [ + "메일: 대상/목적/톤/요청사항이 명확", + "요약: 결론+액션 아이템 중심", + "일정: 우선순위/제약(가능시간) 포함", + "체크리스트: 누락 질문 포함" + ], + "right_title": "나쁜 예", + "right_bullets": [ + "‘메일 써줘’만 요청", + "회의 원문 그대로 장문 요약", + "일정 제약 없이 ‘잡아줘’", + "검증 없이 바로 전송" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "자주 하는 실수", + "bullets": [ + "형식 없이 장문 생성", + "변수(대상/날짜/숫자) 관리 안 함", + "검토 없이 외부 발송", + "템플릿을 저장하지 않음", + "자동화를 먼저 하고 목적을 놓침" + ], + "notes": "핵심(10초): '자주 하는 실수' 슬라이드입니다.\n포인트(20초): 형식 없이 장문 생성 / 변수(대상/날짜/숫자) 관리 안 함\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "3. 사례로 이해하는 적용 가이드", + "subtitle": "참여형 활동 없이도 이해되는 예시 중심", + "notes": "전환(10초): 이제 '3. 사례로 이해하는 적용 가이드' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 1) 3분 만에 ‘메일 초안’ 만들기", + "bullets": [ + "요청의 역할/관점: 비즈니스 이메일 작성 전문가", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"수신자는 [직급/관계], 목적은 [목적]이야. / 배경: [상황 2~3줄]\"", + "포인트: 수신자 관계를 꼭 명시", + "포인트: 요청사항은 번호로", + "포인트: 마감일/다음 행동을 명확히" + ], + "notes": "핵심(10초): '사례 1) 3분 만에 ‘메일 초안’ 만들기' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 비즈니스 이메일 작성 전문가 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 2) 회의록을 ‘결정+액션’으로 압축", + "bullets": [ + "요청의 역할/관점: 회의록 정리 비서", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"아래 회의 메모를 읽고 다음 형식으로 정리해줘. / 1) 결론/결정사항(최대 5개)\"", + "포인트: 액션은 ‘담당/기한’이 핵심", + "포인트: 리스크를 같이 뽑으면 누락↓", + "포인트: 다음 아젠다로 회의 품질↑" + ], + "notes": "핵심(10초): '사례 2) 회의록을 ‘결정+액션’으로 압축' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 회의록 정리 비서 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "Before / After (시간 절감 예시)", + "columns": [ + "업무", + "기존", + "AI 협업", + "절감" + ], + "rows": [ + [ + "메일 초안", + "20분", + "5분", + "15분" + ], + [ + "회의록 요약", + "40분", + "12분", + "28분" + ], + [ + "일정 조율", + "15분", + "5분", + "10분" + ], + [ + "보고서 1p 요약", + "60분", + "20분", + "40분" + ] + ], + "notes": "읽는 법(15초): 표는 업무, 기존, AI 협업, 절감 기준으로 비교합니다.\n포인트(15초): 수치/정의/기간을 같이 확인해 오해를 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "결과 품질 검증 체크", + "bullets": [ + "사실/수치/고유명사는 원문 대조", + "누락된 가정이 없는지 질문", + "대안 2개 이상 비교 요청", + "리스크/반론을 함께 요청" + ], + "notes": "핵심(10초): '결과 품질 검증 체크' 슬라이드입니다.\n포인트(20초): 사실/수치/고유명사는 원문 대조 / 누락된 가정이 없는지 질문\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "4. 리스크 & 체크리스트", + "subtitle": "안전하게, 팀 단위로 굴리기", + "notes": "전환(10초): 이제 '4. 리스크 & 체크리스트' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화 전략", + "left_title": "리스크", + "left_bullets": [ + "품질 미검증 상태로 외부 전송", + "민감정보 포함 가능", + "톤/표현 오류로 오해 발생", + "자동화 실패(중복/오작동)" + ], + "right_title": "완화", + "right_bullets": [ + "발송 전 체크리스트(수신자/톤/숫자)", + "가명화/요약 후 입력", + "표준 템플릿 사용", + "자동화는 작은 범위부터 단계적" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "체크리스트(현업 적용용)", + "bullets": [ + "메일 목적/요청/기한이 명확한가", + "수치/날짜/이름을 원문 대조했나", + "민감정보가 포함되지 않았나", + "액션 아이템 담당/기한이 있는가", + "템플릿으로 저장했나" + ], + "notes": "핵심(10초): '체크리스트(현업 적용용)' 슬라이드입니다.\n포인트(20초): 메일 목적/요청/기한이 명확한가 / 수치/날짜/이름을 원문 대조했나\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "팀 적용(롤아웃) 방법", + "bullets": [ + "팀 공통 템플릿(메일/회의록) 배포", + "주간 ‘절감시간’ 공유", + "좋은 결과는 예시로 축적", + "오해/실수 사례도 같이 공유" + ], + "notes": "핵심(10초): '팀 적용(롤아웃) 방법' 슬라이드입니다.\n포인트(20초): 팀 공통 템플릿(메일/회의록) 배포 / 주간 ‘절감시간’ 공유\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "5. 요약 & 다음 행동", + "subtitle": "오늘부터 1개만 실행", + "notes": "전환(10초): 이제 '5. 요약 & 다음 행동' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "핵심 요약", + "bullets": [ + "루틴 업무는 AI가 가장 잘 도와주는 영역", + "핵심은 ‘형식 지정 + 검증’", + "절감시간을 측정하면 확산이 빨라진다", + "오늘 행동: 메일/회의록 템플릿 1개씩 저장" + ], + "notes": "핵심(10초): '핵심 요약' 슬라이드입니다.\n포인트(20초): 루틴 업무는 AI가 가장 잘 도와주는 영역 / 핵심은 ‘형식 지정 + 검증’\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + } + ] +} diff --git a/AX 강의 - 1/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기/slides.schema.json b/AX 강의 - 1/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기/slides.schema.json new file mode 100644 index 0000000..11cd0ff --- /dev/null +++ b/AX 강의 - 1/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기/slides.schema.json @@ -0,0 +1,218 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX Curriculum Slides Spec", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "badge": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "tone": { "type": "string" }, + "footer_left": { "type": "string" } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 20, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { + "type": "string", + "enum": ["cover", "agenda", "section", "bullets", "two_column", "process", "prompt", "table"] + }, + "chapter": { "type": "string" }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "items": { "type": "array", "items": { "type": "string" } }, + "bullets": { "type": "array", "items": { "type": "string" } }, + "left_title": { "type": "string" }, + "left_bullets": { "type": "array", "items": { "type": "string" } }, + "right_title": { "type": "string" }, + "right_bullets": { "type": "array", "items": { "type": "string" } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "prompt": { "type": "string" }, + "tips": { "type": "array", "items": { "type": "string" } }, + "columns": { "type": "array", "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": true +} + +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AX Deck Slides JSON Schema", + "type": "object", + "additionalProperties": false, + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "additionalProperties": false, + "required": ["title", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "author": { "type": "string" }, + "date": { "type": "string" }, + "language": { "type": "string", "default": "ko-KR" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "version": { "type": "string" } + } + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { "$ref": "#/definitions/slide" } + } + }, + "definitions": { + "bulletItem": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "additionalProperties": false, + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "children": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + } + ] + }, + "column": { + "type": "object", + "additionalProperties": false, + "required": ["heading", "bullets"], + "properties": { + "heading": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + }, + "slide": { + "type": "object", + "additionalProperties": false, + "required": ["type", "title"], + "properties": { + "type": { + "type": "string", + "enum": [ + "title", + "section", + "agenda", + "bullets", + "two_column_bullets", + "quote", + "table", + "exercise", + "closing", + "blank" + ] + }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + }, + "items": { "type": "array", "items": { "type": "string" } }, + "left": { "$ref": "#/definitions/column" }, + "right": { "$ref": "#/definitions/column" }, + "quote": { "type": "string" }, + "attribution": { "type": "string" }, + "headers": { "type": "array", "minItems": 1, "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "timebox_minutes": { "type": "integer", "minimum": 1 }, + "notes": { "type": "string" } + }, + "allOf": [ + { "if": { "properties": { "type": { "const": "agenda" } } }, "then": { "required": ["items"] } }, + { "if": { "properties": { "type": { "const": "bullets" } } }, "then": { "required": ["bullets"] } }, + { + "if": { "properties": { "type": { "const": "two_column_bullets" } } }, + "then": { "required": ["left", "right"] } + }, + { "if": { "properties": { "type": { "const": "quote" } } }, "then": { "required": ["quote"] } }, + { "if": { "properties": { "type": { "const": "table" } } }, "then": { "required": ["headers", "rows"] } }, + { "if": { "properties": { "type": { "const": "exercise" } } }, "then": { "required": ["steps"] } } + ] + } + } +} +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX 교육용 slides.json 스키마", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 5, "maximum": 180 }, + "audience": { "type": "string" }, + "language": { "type": "string", "enum": ["ko"] }, + "version": { "type": "integer", "minimum": 1 } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { "type": "string", "enum": ["title", "section", "content", "two_content"] }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "level": { "type": "integer", "minimum": 0, "maximum": 5 } + }, + "additionalProperties": false + } + ] + } + }, + "left_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "right_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "notes": { "type": "string" } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": false +} diff --git a/AX 강의 - 1/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기.pptx b/AX 강의 - 1/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기.pptx new file mode 100644 index 0000000..b9debde Binary files /dev/null and b/AX 강의 - 1/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기/칼퇴를 부르는 AI 비서 - 루틴 업무 1시간 단축하기.pptx differ diff --git a/AX 강의 - 1/회사의 비밀을 지키며 AI와 대화하는 법/PROMPT_회사의 비밀을 지키며 AI와 대화하는 법.txt b/AX 강의 - 1/회사의 비밀을 지키며 AI와 대화하는 법/PROMPT_회사의 비밀을 지키며 AI와 대화하는 법.txt new file mode 100644 index 0000000..8a31486 --- /dev/null +++ b/AX 강의 - 1/회사의 비밀을 지키며 AI와 대화하는 법/PROMPT_회사의 비밀을 지키며 AI와 대화하는 법.txt @@ -0,0 +1,29 @@ +너는 기업 AX 전환 교육용 PPT를 설계하는 교육 콘텐츠 디자이너다. + +주제(폴더명/PPT 제목): 회사의 비밀을 지키며 AI와 대화하는 법 +구분: 윤리/보안 +요청(시드 프롬프트): +"기업용 AI 보안 및 가이드라인" 발표 자료를 만들어줘. 내부 데이터 유출 사례, 안전한 프롬프트 작성 규칙, 우리 회사만의 보안 수칙(Do's & Don'ts)을 포함해줘. 경각심을 주되 명확한 행동 지침을 강조해줘. + +목표: +- 리더십부터 실무자까지 "왜 이 주제를 이해해야 하는지"를 먼저 설득한다. +- 30분 교육으로 진행 가능하도록 구성한다. +- 최소 20장 이상(권장 22장) 슬라이드가 나오도록 한다. +- 예시(상황/결과/체크리스트/사례)가 풍부해야 한다. +- 발표자가 그대로 읽어도 자연스럽도록 슬라이드 흐름(도입→핵심→사례→리스크→정리)을 만든다. +- 발표 중 **참여형 활동 없이 진행한다.** (참여자에게 '직접 해보라'는 지시 금지) +- 프롬프트/템플릿은 "참고 예시"로만 제시하고, 단계별 따라하기 구성은 만들지 않는다. + +출력 형식(반드시 준수): +- 최종 출력은 JSON 한 덩어리만 출력한다. (설명/문장/코드블록 금지) +- JSON은 아래 스키마를 만족해야 한다: slides.schema.json +- slides[0]은 반드시 type="cover"로 둔다. (표지는 meta.title/meta.subtitle/meta.badge로 자동 생성됨) +- 슬라이드 타입은 다음만 사용한다: + - cover, agenda, section, bullets, two_column, process, table + +작성 규칙: +- bullets는 4~7개 내로, 한 줄은 60자 내로. +- 별도의 prompt(코드블록) 슬라이드를 만들지 않는다. (참여형 활동 유도로 오해될 수 있음) +- table 슬라이드는 열 3~4개, 행 3~6개 정도로 간결하게. +- 보안/윤리/환각 등 리스크가 있는 주제는 "Do & Don't" 또는 "리스크/완화"를 반드시 포함한다. +- 마지막은 요약 + 다음 행동(오늘부터 1개 실행)으로 끝낸다. diff --git a/AX 강의 - 1/회사의 비밀을 지키며 AI와 대화하는 법/make_ppt.py b/AX 강의 - 1/회사의 비밀을 지키며 AI와 대화하는 법/make_ppt.py new file mode 100644 index 0000000..6ae124f --- /dev/null +++ b/AX 강의 - 1/회사의 비밀을 지키며 AI와 대화하는 법/make_ppt.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +import subprocess +import sys +from pathlib import Path + + +def main() -> None: + base = Path(__file__).resolve().parent + common = base.parent / "_common" / "make_ppt.py" + spec = base / "slides.json" + out = base / f"{base.name}.pptx" + subprocess.check_call([sys.executable, str(common), "--spec", str(spec), "--out", str(out)]) + + +if __name__ == "__main__": + main() diff --git a/AX 강의 - 1/회사의 비밀을 지키며 AI와 대화하는 법/slides.example.json b/AX 강의 - 1/회사의 비밀을 지키며 AI와 대화하는 법/slides.example.json new file mode 100644 index 0000000..44a390a --- /dev/null +++ b/AX 강의 - 1/회사의 비밀을 지키며 AI와 대화하는 법/slides.example.json @@ -0,0 +1,112 @@ +{ + "meta": { + "title": "예시 - 강의형(참여형 활동 없음)", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "예시 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝: 오늘은 참여형 활동 없이, 사례/체크리스트 중심으로 진행합니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 흐름을 10초로 안내하고 바로 본론으로 들어갑니다." + }, + { + "type": "section", + "title": "1. 왜 필요한가", + "subtitle": "리더십부터 실무자까지", + "notes": "리더 관점(성과/리스크)과 실무 관점(시간/품질)을 연결해 설명합니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "시간 절감(반복 업무)", + "품질 표준화(템플릿)", + "리스크 감소(검증/승인)", + "온보딩 가속", + "의사결정 리드타임 단축" + ], + "notes": "조직 사례가 있다면 1개만 붙여 설득력을 높입니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "핵심 개념은 3~6개로 제한하고, 각각 1문장으로 정의합니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "오해 vs 현실", + "left_title": "오해", + "left_bullets": ["AI는 만능", "한 번 도입하면 끝"], + "right_title": "현실", + "right_bullets": ["사람 검증이 필수", "운영/거버넌스가 성패를 좌우"], + "notes": "오해를 정리한 뒤, 현실 기준을 '팀 표준'으로 제시합니다." + }, + { + "type": "process", + "chapter": "Part 3", + "title": "적용 루틴(강의형 가이드)", + "steps": [ + "목표/대상/제약 정의", + "입력 데이터 정리", + "출력 형식 지정", + "검증/리스크 체크", + "공유/표준화", + "지표로 개선" + ], + "notes": "참여자에게 '지금 해보라'가 아니라, 기준과 사례를 설명합니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "Before / After (예시)", + "columns": ["업무", "기존", "개선", "절감"], + "rows": [ + ["회의록", "40분", "12분", "28분"], + ["메일", "20분", "5분", "15분"], + ["보고 1p", "60분+", "20분", "40분"] + ], + "notes": "표는 정의/기간을 같이 확인하며 읽습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화", + "left_title": "리스크", + "left_bullets": ["환각/오류", "보안/기밀", "품질 편차", "운영 장애"], + "right_title": "완화", + "right_bullets": ["원문 대조", "입력 금지/가명화", "승인/리뷰", "로그/모니터링"], + "notes": "리스크는 '기술'이 아니라 '프로세스'로 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "요약 & 다음 행동", + "bullets": [ + "목적·맥락·형식 + 검증", + "작게 시작해 표준화", + "지표로 개선", + "오늘 행동: 템플릿 1개를 팀 표준으로 정하기" + ], + "notes": "마무리는 '오늘부터 무엇을 할지' 한 문장으로 정리합니다." + } + ] +} diff --git a/AX 강의 - 1/회사의 비밀을 지키며 AI와 대화하는 법/slides.json b/AX 강의 - 1/회사의 비밀을 지키며 AI와 대화하는 법/slides.json new file mode 100644 index 0000000..9030208 --- /dev/null +++ b/AX 강의 - 1/회사의 비밀을 지키며 AI와 대화하는 법/slides.json @@ -0,0 +1,306 @@ +{ + "meta": { + "title": "회사의 비밀을 지키며 AI와 대화하는 법", + "subtitle": "AX 전환 교육 (30분 / 20+ Slides)", + "badge": "윤리/보안 트랙", + "duration_minutes": 30, + "audience": "리더십 + 실무자", + "tone": "명확하고 실용적, 예시 중심", + "footer_left": "AX 전환 교육 | 2026.02" + }, + "slides": [ + { + "type": "cover", + "notes": "오프닝(10초): 오늘 주제는 '회사의 비밀을 지키며 AI와 대화하는 법'입니다.\n운영 안내(10초): 오늘은 참여형 활동 없이, 사례와 체크리스트 중심으로 정리합니다.\n목표(10초): 왜 중요한지 → 핵심 원칙 → 사례 해설 → 리스크/대응 → 다음 행동까지 30분에 끝냅니다." + }, + { + "type": "agenda", + "title": "오늘의 흐름 (30분)", + "items": [ + "1) 왜 필요한가", + "2) 핵심 개념/원칙", + "3) 사례로 이해하는 적용 가이드", + "4) 리스크/체크리스트", + "5) 요약 & 다음 행동" + ], + "notes": "전체 구성(20초): 5파트로 진행합니다.\n- 1) 왜 필요한가\n- 2) 핵심 개념/원칙\n- 3) 사례로 이해하는 적용 가이드\n- 4) 리스크/체크리스트\n- 5) 요약 & 다음 행동\n안내(10초): 참여형 활동 없이, 바로 가져가 쓸 수 있는 요약/체크리스트 중심입니다." + }, + { + "type": "section", + "title": "1. 왜 이 주제를 이해해야 하나", + "subtitle": "리더십부터 실무자까지", + "notes": "전환(10초): 이제 '1. 왜 이 주제를 이해해야 하나' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "리더십 관점: 왜 중요한가", + "bullets": [ + "AI 활용은 ‘통제’가 없으면 보안 사고로 직결", + "정책/도구/권한/감사(로그) 체계를 리더가 결정", + "사고 1건의 비용은 도입 효익을 초과할 수 있음", + "규정 준수(PII/저작권/계약) 책임은 조직에 있음", + "현업이 이해하는 ‘행동 지침’이 있어야 실행됨" + ], + "notes": "핵심(10초): '리더십 관점: 왜 중요한가' 슬라이드입니다.\n포인트(20초): AI 활용은 ‘통제’가 없으면 보안 사고로 직결 / 정책/도구/권한/감사(로그) 체계를 리더가 결정\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "실무자 관점: 무엇이 달라지나", + "bullets": [ + "나도 모르게 기밀/개인정보를 넣기 쉬움", + "보안 규칙은 복잡해 보여도 핵심은 단순(입력 금지)", + "대안(가명화/요약/사내툴)만 알면 안전하게 쓸 수 있음", + "안전한 프롬프트는 결과 품질도 더 좋아짐", + "한 번의 실수가 개인/조직 리스크로 확대" + ], + "notes": "핵심(10초): '실무자 관점: 무엇이 달라지나' 슬라이드입니다.\n포인트(20초): 나도 모르게 기밀/개인정보를 넣기 쉬움 / 보안 규칙은 복잡해 보여도 핵심은 단순(입력 금지)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "two_column", + "chapter": "Part 1", + "title": "흔한 오해 vs 현실", + "left_title": "오해", + "left_bullets": [ + "‘내가 쓴 건 괜찮겠지’", + "AI에 넣어도 어차피 저장 안 할 것", + "민감정보만 빼면 원문을 넣어도 된다", + "출처 없이 써도 문제 없다" + ], + "right_title": "현실", + "right_bullets": [ + "실수는 항상 발생: 시스템으로 막아야 함", + "도구/정책에 따라 저장/학습 여부가 다름", + "원문 자체가 민감일 수 있음(계약/특허/환자)", + "저작권/라이선스/규정은 ‘사람 책임’" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 1", + "title": "기대 효과(정량/정성)", + "bullets": [ + "데이터 유출 위험↓(입력 규칙 표준화)", + "검증 가능한 활용만 남아 품질↑", + "사고 대응 시간↓(로그/절차 명확)", + "팀원 불안↓(허용/금지 기준 명확)", + "AI 활용이 지속가능한 문화로 정착" + ], + "notes": "핵심(10초): '기대 효과(정량/정성)' 슬라이드입니다.\n포인트(20초): 데이터 유출 위험↓(입력 규칙 표준화) / 검증 가능한 활용만 남아 품질↑\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "2. 핵심 개념과 원칙", + "subtitle": "이것만 지키면 실패 확률이 줄어든다", + "notes": "전환(10초): 이제 '2. 핵심 개념과 원칙' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "핵심 개념 6가지", + "bullets": [ + "‘입력=외부 전송’으로 가정하고 설계", + "PII/기밀/영업비밀/환자정보는 입력 금지", + "가명화/요약/마스킹이 기본 대안", + "출처/라이선스 확인(저작권)", + "사내 승인된 도구 우선(계정/로그)", + "결과물 검증·책임은 사용자/조직" + ], + "notes": "핵심(10초): '핵심 개념 6가지' 슬라이드입니다.\n포인트(20초): ‘입력=외부 전송’으로 가정하고 설계 / PII/기밀/영업비밀/환자정보는 입력 금지\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "process", + "chapter": "Part 2", + "title": "실행 프레임워크(권장 루틴)", + "steps": [ + "데이터 분류(공개/내부/기밀/PII)", + "허용 도구 확인(사내/외부)", + "입력 전 마스킹/요약", + "출력 검증(사실/출처/저작권)", + "저장/공유 기준 적용", + "사고 시 보고 절차 실행" + ], + "notes": "핵심(10초): '실행 프레임워크(권장 루틴)'는 실행 흐름(루틴)을 제시합니다.\n요약(20초): 데이터 분류(공개/내부/기밀/PII) → 허용 도구 확인(사내/외부) → 입력 전 마스킹/요약 …\n팁(10초): 이 순서를 팀 템플릿으로 고정하면 재작업이 크게 줄어듭니다." + }, + { + "type": "two_column", + "chapter": "Part 2", + "title": "좋은 예 vs 나쁜 예 (짧은 비교)", + "left_title": "좋은 예", + "left_bullets": [ + "가명화된 데이터로 질문", + "규정/제약을 먼저 선언", + "출처/근거를 요청", + "최종 활용 전 ‘검증 체크’ 포함" + ], + "right_title": "나쁜 예", + "right_bullets": [ + "고객/환자 원문 붙여넣기", + "계약서/특허 원문 전체 입력", + "사내 매출/단가/전략 수치 입력", + "출처 없이 이미지/문구 그대로 사용" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 2", + "title": "자주 하는 실수", + "bullets": [ + "‘민감정보’ 정의를 협소하게 이해", + "마스킹 없이 원문 그대로 입력", + "도구별 정책(저장/학습) 미확인", + "AI 생성물의 저작권/표절 리스크 무시", + "결과물을 사내 공유 채널에 무단 게시" + ], + "notes": "핵심(10초): '자주 하는 실수' 슬라이드입니다.\n포인트(20초): ‘민감정보’ 정의를 협소하게 이해 / 마스킹 없이 원문 그대로 입력\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "3. 사례로 이해하는 적용 가이드", + "subtitle": "참여형 활동 없이도 이해되는 예시 중심", + "notes": "전환(10초): 이제 '3. 사례로 이해하는 적용 가이드' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 1) ‘안전하게 요약’ 프롬프트", + "bullets": [ + "요청의 역할/관점: 보안에 민감한 문서 요약 전문가", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"아래 텍스트는 민감정보가 포함될 수 있으니, / 1) 민감정보로 추정되는 부분을 [REDACTED]\"", + "포인트: 원문 전체가 아니라 ‘필요 최소’만", + "포인트: REDACTED 표기 습관화", + "포인트: 추가 질문으로 누락 방지" + ], + "notes": "핵심(10초): '사례 1) ‘안전하게 요약’ 프롬프트' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 보안에 민감한 문서 요약 전문가 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "사례 2) Do & Don't 체크 생성", + "bullets": [ + "요청의 역할/관점: 기업용 AI 활용 가이드라인 작성자", + "핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)", + "출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨", + "짧은 예시 문장(참고): \"우리 팀 업무는 [업무영역]이고 다루는 데이터는 [데이터종류]야. / 이 팀에 적용할 AI 활용 D\"", + "포인트: 업무영역/데이터를 구체화", + "포인트: 규칙은 행동 단위로 쓰기", + "포인트: 예시는 실제 문장으로" + ], + "notes": "핵심(10초): '사례 2) Do & Don't 체크 생성' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 기업용 AI 활용 가이드라인 작성자 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "table", + "chapter": "Part 3", + "title": "입력 금지 vs 안전한 대안(예시)", + "columns": [ + "금지 입력", + "왜 위험?", + "대안" + ], + "rows": [ + [ + "개인식별정보(이름/연락처/주민번호)", + "PII 유출", + "가명화(ID치환) + 범위화" + ], + [ + "계약서/특허 원문", + "영업비밀/법적 리스크", + "핵심 조항만 요약 + 비식별" + ], + [ + "내부 매출/단가/전략", + "경쟁/시장 리스크", + "지표를 구간화 + 공개정보만" + ] + ], + "notes": "읽는 법(15초): 표는 금지 입력, 왜 위험?, 대안 기준으로 비교합니다.\n포인트(15초): 수치/정의/기간을 같이 확인해 오해를 줄입니다." + }, + { + "type": "bullets", + "chapter": "Part 3", + "title": "결과 품질 검증 체크", + "bullets": [ + "사실/수치/고유명사는 원문 대조", + "누락된 가정이 없는지 질문", + "대안 2개 이상 비교 요청", + "리스크/반론을 함께 요청" + ], + "notes": "핵심(10초): '결과 품질 검증 체크' 슬라이드입니다.\n포인트(20초): 사실/수치/고유명사는 원문 대조 / 누락된 가정이 없는지 질문\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "4. 리스크 & 체크리스트", + "subtitle": "안전하게, 팀 단위로 굴리기", + "notes": "전환(10초): 이제 '4. 리스크 & 체크리스트' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "two_column", + "chapter": "Part 4", + "title": "리스크와 완화 전략", + "left_title": "리스크", + "left_bullets": [ + "기밀/PII 입력으로 인한 유출", + "저작권/표절 이슈", + "규정 위반(내부통제)", + "환각으로 인한 오판" + ], + "right_title": "완화", + "right_bullets": [ + "데이터 분류/입력 금지 리스트", + "가명화/요약 템플릿 제공", + "출처 표기/검증 프로세스", + "승인된 도구만 사용 + 로그" + ], + "notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "체크리스트(현업 적용용)", + "bullets": [ + "내가 넣는 데이터가 PII/기밀인가", + "사내 승인 도구/계정인가", + "원문 대신 요약/마스킹 했나", + "출처/라이선스 확인했나", + "결과물을 공유해도 되는가" + ], + "notes": "핵심(10초): '체크리스트(현업 적용용)' 슬라이드입니다.\n포인트(20초): 내가 넣는 데이터가 PII/기밀인가 / 사내 승인 도구/계정인가\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "bullets", + "chapter": "Part 4", + "title": "팀 적용(롤아웃) 방법", + "bullets": [ + "팀별 ‘금지 입력’ 사례집 만들기", + "프롬프트 템플릿에 보안 문구 기본 삽입", + "월 1회 사례 공유(사고/미스 포함)", + "보안 담당과 채널 고정(질문/승인)" + ], + "notes": "핵심(10초): '팀 적용(롤아웃) 방법' 슬라이드입니다.\n포인트(20초): 팀별 ‘금지 입력’ 사례집 만들기 / 프롬프트 템플릿에 보안 문구 기본 삽입\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + }, + { + "type": "section", + "title": "5. 요약 & 다음 행동", + "subtitle": "오늘부터 1개만 실행", + "notes": "전환(10초): 이제 '5. 요약 & 다음 행동' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다." + }, + { + "type": "bullets", + "chapter": "Part 5", + "title": "핵심 요약", + "bullets": [ + "입력은 곧 외부 전송이라고 가정", + "금지 리스트 + 대안(가명화/요약)만 지켜도 80% 해결", + "출처/저작권/환각은 반드시 검증", + "오늘 행동: 내 업무 ‘금지 입력 5개’와 대안 5개 정리" + ], + "notes": "핵심(10초): '핵심 요약' 슬라이드입니다.\n포인트(20초): 입력은 곧 외부 전송이라고 가정 / 금지 리스트 + 대안(가명화/요약)만 지켜도 80% 해결\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다." + } + ] +} diff --git a/AX 강의 - 1/회사의 비밀을 지키며 AI와 대화하는 법/slides.schema.json b/AX 강의 - 1/회사의 비밀을 지키며 AI와 대화하는 법/slides.schema.json new file mode 100644 index 0000000..11cd0ff --- /dev/null +++ b/AX 강의 - 1/회사의 비밀을 지키며 AI와 대화하는 법/slides.schema.json @@ -0,0 +1,218 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX Curriculum Slides Spec", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "badge": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "tone": { "type": "string" }, + "footer_left": { "type": "string" } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 20, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { + "type": "string", + "enum": ["cover", "agenda", "section", "bullets", "two_column", "process", "prompt", "table"] + }, + "chapter": { "type": "string" }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "items": { "type": "array", "items": { "type": "string" } }, + "bullets": { "type": "array", "items": { "type": "string" } }, + "left_title": { "type": "string" }, + "left_bullets": { "type": "array", "items": { "type": "string" } }, + "right_title": { "type": "string" }, + "right_bullets": { "type": "array", "items": { "type": "string" } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "prompt": { "type": "string" }, + "tips": { "type": "array", "items": { "type": "string" } }, + "columns": { "type": "array", "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": true +} + +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AX Deck Slides JSON Schema", + "type": "object", + "additionalProperties": false, + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "additionalProperties": false, + "required": ["title", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "author": { "type": "string" }, + "date": { "type": "string" }, + "language": { "type": "string", "default": "ko-KR" }, + "duration_minutes": { "type": "integer", "minimum": 1 }, + "audience": { "type": "string" }, + "version": { "type": "string" } + } + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { "$ref": "#/definitions/slide" } + } + }, + "definitions": { + "bulletItem": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "additionalProperties": false, + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "children": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + } + ] + }, + "column": { + "type": "object", + "additionalProperties": false, + "required": ["heading", "bullets"], + "properties": { + "heading": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + } + } + }, + "slide": { + "type": "object", + "additionalProperties": false, + "required": ["type", "title"], + "properties": { + "type": { + "type": "string", + "enum": [ + "title", + "section", + "agenda", + "bullets", + "two_column_bullets", + "quote", + "table", + "exercise", + "closing", + "blank" + ] + }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { "$ref": "#/definitions/bulletItem" } + }, + "items": { "type": "array", "items": { "type": "string" } }, + "left": { "$ref": "#/definitions/column" }, + "right": { "$ref": "#/definitions/column" }, + "quote": { "type": "string" }, + "attribution": { "type": "string" }, + "headers": { "type": "array", "minItems": 1, "items": { "type": "string" } }, + "rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } }, + "steps": { "type": "array", "items": { "type": "string" } }, + "timebox_minutes": { "type": "integer", "minimum": 1 }, + "notes": { "type": "string" } + }, + "allOf": [ + { "if": { "properties": { "type": { "const": "agenda" } } }, "then": { "required": ["items"] } }, + { "if": { "properties": { "type": { "const": "bullets" } } }, "then": { "required": ["bullets"] } }, + { + "if": { "properties": { "type": { "const": "two_column_bullets" } } }, + "then": { "required": ["left", "right"] } + }, + { "if": { "properties": { "type": { "const": "quote" } } }, "then": { "required": ["quote"] } }, + { "if": { "properties": { "type": { "const": "table" } } }, "then": { "required": ["headers", "rows"] } }, + { "if": { "properties": { "type": { "const": "exercise" } } }, "then": { "required": ["steps"] } } + ] + } + } +} +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "AX 교육용 slides.json 스키마", + "type": "object", + "required": ["meta", "slides"], + "properties": { + "meta": { + "type": "object", + "required": ["title", "duration_minutes", "language"], + "properties": { + "title": { "type": "string", "minLength": 1 }, + "subtitle": { "type": "string" }, + "duration_minutes": { "type": "integer", "minimum": 5, "maximum": 180 }, + "audience": { "type": "string" }, + "language": { "type": "string", "enum": ["ko"] }, + "version": { "type": "integer", "minimum": 1 } + }, + "additionalProperties": true + }, + "slides": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": ["type"], + "properties": { + "type": { "type": "string", "enum": ["title", "section", "content", "two_content"] }, + "title": { "type": "string" }, + "subtitle": { "type": "string" }, + "bullets": { + "type": "array", + "items": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "required": ["text"], + "properties": { + "text": { "type": "string" }, + "level": { "type": "integer", "minimum": 0, "maximum": 5 } + }, + "additionalProperties": false + } + ] + } + }, + "left_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "right_bullets": { "$ref": "#/properties/slides/items/properties/bullets" }, + "notes": { "type": "string" } + }, + "additionalProperties": true + } + } + }, + "additionalProperties": false +} diff --git a/AX 강의 - 1/회사의 비밀을 지키며 AI와 대화하는 법/회사의 비밀을 지키며 AI와 대화하는 법.pptx b/AX 강의 - 1/회사의 비밀을 지키며 AI와 대화하는 법/회사의 비밀을 지키며 AI와 대화하는 법.pptx new file mode 100644 index 0000000..987e621 Binary files /dev/null and b/AX 강의 - 1/회사의 비밀을 지키며 AI와 대화하는 법/회사의 비밀을 지키며 AI와 대화하는 법.pptx differ diff --git a/AX 과제 - 1/AI 리터러시 기초/PROMPT_AI 리터러시 기초 b/AX 과제 - 1/AI 리터러시 기초/PROMPT_AI 리터러시 기초 deleted file mode 100644 index dfa32ca..0000000 --- a/AX 과제 - 1/AI 리터러시 기초/PROMPT_AI 리터러시 기초 +++ /dev/null @@ -1,65 +0,0 @@ -당신은 비기술 직군도 이해할 수 있는 “생성형 AI 기초(리터러시)” 30분 교육을 설계하고, PPT 슬라이드를 작성하는 전문가입니다. -목표: 이 프롬프트의 결과물로, 현재 폴더에 `AI 리터러시 기초.pptx`를 제작할 수 있을 정도로 “슬라이드별 원고/레이아웃 지시/예시”가 완성된 설계 문서를 작성하세요. - -## 0) 산출물/형식 요구사항(필수) -- 산출물 목표 파일: `./AI 리터러시 기초.pptx` -- 교육시간: 30분 -- 슬라이드 수: 최소 20장(권장 22~28장) -- 각 슬라이드 구성(반드시 포함): - 1) **슬라이드 제목** - 2) **서브타이틀(1문장)** - 3) **예시(실제 질문/답변/작업 예시)** -- 예시는 “실무에서 바로 써먹을 수 있는” 형태(프롬프트 문장 포함) -- 언어: 한국어 - -## 1) 슬라이드 작성 스타일 가이드(필수) -- 슬라이드 레이아웃 통일: - - 상단: 제목 - - 좌측: 핵심 개념(3~5불릿) - - 우측: 예시(프롬프트/결과/주의점) -- 예시는 항상 “Before/After” 또는 “나쁜 입력/좋은 입력” 비교를 포함. -- 각 슬라이드의 불릿은 한 줄 18~22자 내, 5개 이하. - -## 2) 목차(슬라이드 번호 포함)를 먼저 제시 -다음 주제를 자연스럽게 연결: -- 생성형 AI/LLM 개념 -- 잘하는 것 vs 못하는 것 -- 환각(오류)와 검증 방법 -- 대표 툴(예: ChatGPT, 이미지 생성 도구)의 쓰임새 -- 안전/보안/저작권 기본 -- “오늘부터 바로 쓰는” 5가지 루틴 - -형식: -1. (Slide 1) ... -... - -## 3) 슬라이드별 상세 원고 -목차에 나온 슬라이드 번호/제목을 그대로 사용하여 아래 템플릿으로 작성하세요. - -### Slide N. <제목> -- **서브타이틀**: ... -- **핵심 포인트(3~5)**: - - ... -- **예시(프롬프트/결과)**: - - **상황**: ... - - **나쁜 입력**: "..." - - **좋은 입력**: "..." - - **기대 결과(요약)**: ... - - **주의/검증 포인트**: - - ... -- **발화 스크립트(20~40초)**: ... - -## 4) 필수 예시 세트(누락 금지) -아래 6개는 반드시 각각 1장 이상으로 다루세요. -- 이메일 답장 초안 만들기(톤/목적 지정) -- 회의록 요약 및 액션아이템 추출 -- 표 형태로 비교/정리(열 정의) -- 정책/규정 텍스트에서 체크리스트 만들기 -- 이미지 생성 시 요구사항을 구체화하는 법(스타일/구도/금지 요소) -- “검증 질문” 템플릿(근거/출처/불확실성 표시) - -## 5) 마무리 체크 -- 20장 이상인지 -- 모든 슬라이드에 제목/서브타이틀/예시가 있는지 -- 예시 프롬프트 문장이 실제로 복붙 가능한지 - diff --git a/AX 과제 - 1/AI 보안 및 리스크 관리/PROMPT_AI 보안 및 리스크 관리 b/AX 과제 - 1/AI 보안 및 리스크 관리/PROMPT_AI 보안 및 리스크 관리 deleted file mode 100644 index 672ca41..0000000 --- a/AX 과제 - 1/AI 보안 및 리스크 관리/PROMPT_AI 보안 및 리스크 관리 +++ /dev/null @@ -1,57 +0,0 @@ -당신은 기업 환경에서의 “AI 보안 및 리스크 관리” 30분 교육을 설계하고, 정책/사례 중심으로 PPT 슬라이드를 작성하는 전문가입니다. -목표: 이 프롬프트의 결과물로, 현재 폴더에 `AI 보안 및 리스크 관리.pptx`를 제작할 수 있을 정도로 “슬라이드별 원고/레이아웃 지시/예시”가 완성된 설계 문서를 작성하세요. - -## 0) 산출물/형식 요구사항(필수) -- 산출물 목표 파일: `./AI 보안 및 리스크 관리.pptx` -- 교육시간: 30분 -- 슬라이드 수: 최소 20장(권장 22~30장) -- 각 슬라이드 필수: - 1) **슬라이드 제목** - 2) **서브타이틀(1문장)** - 3) **예시(사고/위반/모범사례/체크리스트)** -- 언어: 한국어 - -## 1) 슬라이드 스타일 가이드(필수) -- 레이아웃 통일: - - 상단: 제목/서브타이틀 - - 중앙: 핵심 리스크/원칙(3~5불릿) - - 하단: 예시(사례) 박스 + “대응 체크리스트” 3~5개 -- “허용/금지/조건부 허용”을 표로 자주 표현(시각적 명확성). - -## 2) 목차(슬라이드 번호 포함)를 먼저 제시 -필수 흐름: -- 왜 AI 보안이 기존 보안과 다른가(데이터 유출/재학습/로그) -- 입력 금지 데이터(PII/기밀/계약/재무 등)와 예외 처리 -- 저작권/라이선스/출처 표기 기본 -- 모델 환각/오답 리스크와 검증 프로세스 -- 공급망 리스크(플러그인/확장/외부 API) -- 운영 통제: 승인/감사/기록/모니터링 -- 실무 Do/Don’t + 신고/대응 절차 - -## 3) 슬라이드별 상세 원고(템플릿) -### Slide N. <제목> -- **서브타이틀**: ... -- **핵심 포인트(3~5)**: - - ... -- **예시(사례/체크리스트)**: - - **사례 제목**: ... - - **상황**: ... - - **문제(리스크)**: - - ... - - **올바른 대응**: - - ... - - **체크리스트(3~5)**: - - ... -- **발화 스크립트(20~40초)**: ... - -## 4) 필수 표/체크리스트(누락 금지) -- “입력 금지 데이터” 표(데이터 유형 / 예시 / 대체 방법) -- “출처/저작권 체크리스트”(이미지/문장/코드 각각) -- “AI 결과물 검증 체크리스트”(수치/법무/정책/최신정보) -- “외부 도구 사용 승인 체크”(플러그인/업로드/공유) - -## 5) 마지막 체크 -- 20장 이상인지 -- 모든 슬라이드에 제목/서브타이틀/예시가 있는지 -- 정책 문구가 “현업이 바로 지킬 수 있는 수준의 구체성”인지 - diff --git a/AX 과제 - 1/PROMPT.txt b/AX 과제 - 1/PROMPT.txt deleted file mode 100644 index 8b3065e..0000000 --- a/AX 과제 - 1/PROMPT.txt +++ /dev/null @@ -1,27 +0,0 @@ -각 교육 커리큘럼에 대해서 목차 설계 및 슬라이드 작성을 위해서 필요한 프롬프트를 작성해줘. - -# 프롬프트 설계 방법 -* 각 교육 커리큘럼별로 폴더를 만들어줘. (폴더이름은 한글 과제명으로 할 것) -* 각 폴더 안에 한글 과제명 앞에 PROMPT_ prefix를 붙여서 프롬프트를 작성해줘. -* 목차에 대해서 설명과 이해가 쉽도록 예시 위주의 작성하도록 해줘. -* 프롬프트 내용의 산출물은 해당 폴더 내 과제명.pptx 파워포인트를 작성하는 거야. -* 슬라이드는 슬라이드 제목, 서브타이틀, 예시 순으로 간격과 라인이 잘 맞도록 신경써서 작성합니다. - - -# 진행 방법 -* 먼저 성공적인 AX(AI Transformation) 전환을 위해 리더십부터 실무자까지 왜 이 주제가 필요한지 이해하세요. -* 주제에 맞는 목차를 상세하고 세분화해서 설계하세요. -** 내용은 설명하고 이해하기 쉽도록 목차가 설계되어야 합니다. -* 각 커리큘럼 별 최소 20페이지 아상 슬라이드가 만들어 지도록 슬라이드 제목을 목차에 맞추어 생성해줘. -* 교육시간은 30분정도로 진행될 수 있도록 내용 구성해주세요. - - -# AX 전환 교육 커리큘럼 리스트 -* 전사 리더십 교육: AX 비전 및 전략 수립, AI 거버넌스 및 윤리 가이드라인 구축 -* AI 리터러시 기초: 생성형 AI 개념 이해, 주요 AI 툴(ChatGPT, Midjourney 등) 기본 활용법 -* 프롬프트 엔지니어링 실무: 효과적인 지시문 작성법 및 업무 생산성 향상 기법 -* 직무별 맞춤화 교육: 마케팅(콘텐츠 자동 생성), 영업(고객 응대 자동화), 기획(데이터 분석 및 리포트) 등 -* 데이터 전략 및 인프라 교육: 데이터 정제 및 관리 기술, AI 아키텍처 이해 -* 변화 관리 및 조직 문화: AI 도입에 따른 일하는 방식의 변화, 심리적 안전감 및 협업 문화 조성 -* AI 보안 및 리스크 관리: 기업 데이터 보안 정책, 저작권 및 규제 대응 방안 -* PoC 기반 실전 워크숍: 현업 Pain Point 기반의 AI 솔루션 프로토타입 제작 및 검증 \ No newline at end of file diff --git a/AX 과제 - 1/PoC 기반 실전 워크숍/PROMPT_PoC 기반 실전 워크숍 b/AX 과제 - 1/PoC 기반 실전 워크숍/PROMPT_PoC 기반 실전 워크숍 deleted file mode 100644 index 1d0f34b..0000000 --- a/AX 과제 - 1/PoC 기반 실전 워크숍/PROMPT_PoC 기반 실전 워크숍 +++ /dev/null @@ -1,56 +0,0 @@ -당신은 “PoC 기반 실전 워크숍” 30분 교육(또는 워크숍 오리엔테이션)을 설계하고, 참가자가 바로 실행할 수 있도록 PPT 슬라이드를 작성하는 전문가입니다. -목표: 이 프롬프트의 결과물로, 현재 폴더에 `PoC 기반 실전 워크숍.pptx`를 제작할 수 있을 정도로 “슬라이드별 원고/레이아웃 지시/예시”가 완성된 설계 문서를 작성하세요. - -## 0) 산출물/형식 요구사항(필수) -- 산출물 목표 파일: `./PoC 기반 실전 워크숍.pptx` -- 교육시간: 30분 -- 슬라이드 수: 최소 20장(권장 22~30장) -- 각 슬라이드 필수: - 1) **슬라이드 제목** - 2) **서브타이틀(1문장)** - 3) **예시(현업 Pain Point → PoC로 바꾸는 과정)** -- 언어: 한국어 - -## 1) 슬라이드 스타일 가이드(필수) -- 레이아웃 통일: - - 상단: 제목/서브타이틀 - - 중앙: 단계/체크리스트(3~6스텝) - - 하단: 예시(미니 케이스) 박스 -- 모든 단계 슬라이드는 “입력/출력/성공 기준”을 한 줄씩 포함. - -## 2) 목차(슬라이드 번호 포함)를 먼저 제시 -반드시 포함할 흐름: -- PoC의 정의: 무엇을 검증하고 무엇을 버릴지 -- 문제 정의(As-Is) → 목표(To-Be) → 지표(KPI)로 변환 -- 데이터/권한/보안 체크 -- 프롬프트/워크플로우 설계(반복/검증/로그) -- MVP 범위 자르기(스코프 컷) -- 데모/검증 계획(사용자 테스트) -- 산출물 패키징: 문서/프롬프트/운영 가이드 - -## 3) 슬라이드별 상세 원고(템플릿) -### Slide N. <제목> -- **서브타이틀**: ... -- **핵심 단계/체크(3~6)**: - - ... -- **예시(미니 케이스)**: - - **Pain Point**: ... - - **PoC 목표**: ... - - **입력(데이터/문서)**: ... - - **출력(형식)**: ... - - **성공 기준(KPI)**: ... - - **리스크/가드레일**: - - ... -- **발화 스크립트(20~40초)**: ... - -## 4) 필수 미니 케이스 3개(누락 금지) -각 케이스는 최소 2장(문제정의 1장 + 설계/검증 1장) 이상으로 구성. -- 케이스 A: 신청서/양식 기반 자동 평가 보고서(체크리스트/루브릭) -- 케이스 B: 회의록 요약 + 액션아이템 자동화(검증 포함) -- 케이스 C: 규정/정책 준수 점검(금칙/조건부 허용 포함) - -## 5) 마지막 체크 -- 20장 이상인지 -- 모든 슬라이드에 제목/서브타이틀/예시가 있는지 -- “참가자가 바로 실행할 수 있는 체크리스트”가 충분히 포함됐는지 - diff --git a/AX 과제 - 1/데이터 전략 및 인프라 교육/PROMPT_데이터 전략 및 인프라 교육 b/AX 과제 - 1/데이터 전략 및 인프라 교육/PROMPT_데이터 전략 및 인프라 교육 deleted file mode 100644 index dd0b10e..0000000 --- a/AX 과제 - 1/데이터 전략 및 인프라 교육/PROMPT_데이터 전략 및 인프라 교육 +++ /dev/null @@ -1,55 +0,0 @@ -당신은 “데이터 전략 및 인프라 교육” 30분 강의를 설계하고, 비기술/준기술 청중이 이해할 수 있도록 PPT 슬라이드를 작성하는 전문가입니다. -목표: 이 프롬프트의 결과물로, 현재 폴더에 `데이터 전략 및 인프라 교육.pptx`를 제작할 수 있을 정도로 “슬라이드별 원고/레이아웃 지시/예시”가 완성된 설계 문서를 작성하세요. - -## 0) 산출물/형식 요구사항(필수) -- 산출물 목표 파일: `./데이터 전략 및 인프라 교육.pptx` -- 교육시간: 30분 -- 슬라이드 수: 최소 20장(권장 22~28장) -- 각 슬라이드 필수: - 1) **슬라이드 제목** - 2) **서브타이틀(1문장)** - 3) **예시(현업 데이터 사례 + 전/후 비교 또는 체크리스트)** -- 언어: 한국어 - -## 1) 슬라이드 스타일 가이드(필수) -- 레이아웃 통일: - - 상단: 제목/서브타이틀 - - 중앙: 핵심 개념(3~5불릿) - - 하단: 예시(표 또는 체크리스트) — 반드시 “구체 데이터 항목” 포함 -- 어려운 용어는 슬라이드 하단에 “한 줄 정의(괄호)”로 즉시 해설. - -## 2) 목차(슬라이드 번호 포함)를 먼저 제시 -반드시 포함할 큰 흐름: -- 데이터가 왜 AX의 병목이 되는가(사례) -- 데이터 품질(정확/완전/일관/적시/유일)과 실무 체크 -- 정제/표준화/메타데이터(정의서) 필요성 -- 데이터 파이프라인 개념(수집→저장→가공→서빙) -- 거버넌스/권한/보안(최소 기준) -- “작게 시작→확장” 실행 로드맵(30/60/90일) - -## 3) 슬라이드별 상세 원고(템플릿) -### Slide N. <제목> -- **서브타이틀**: ... -- **핵심 포인트(3~5)**: - - ... -- **예시(전/후 또는 체크리스트)**: - - **상황**: ... - - **예시 데이터(샘플)**: (열 3~6개 정도의 작은 표를 텍스트로 제시) - - **문제점**: (2~4불릿) - - **개선 후(정의/규칙)**: (2~4불릿) - - **검증 체크(2~4)**: - - ... -- **발화 스크립트(20~40초)**: ... - -## 4) 필수 예시 주제(누락 금지) -- 코드/명명 규칙 불일치로 생기는 분석 오류(예: 제품코드/지역코드) -- 결측치/중복/이상치가 KPI를 왜곡하는 사례 -- 데이터 정의서(메타데이터) 한 장 예시(필드명/정의/단위/예시/소유자) -- 권한/보안: “누가 무엇에 접근 가능한가” 매트릭스 예시 -- 파이프라인 장애 시 영향도(보고서/대시보드/업무) 예시 - -## 5) 마지막 체크 -- 20장 이상인지 -- 모든 슬라이드에 제목/서브타이틀/예시가 있는지 -- 예시가 “현업이 납득할 만큼 구체적”인지 - diff --git a/AX 과제 - 1/변화 관리 및 조직 문화/PROMPT_변화 관리 및 조직 문화 b/AX 과제 - 1/변화 관리 및 조직 문화/PROMPT_변화 관리 및 조직 문화 deleted file mode 100644 index fd8279a..0000000 --- a/AX 과제 - 1/변화 관리 및 조직 문화/PROMPT_변화 관리 및 조직 문화 +++ /dev/null @@ -1,58 +0,0 @@ -당신은 “AX 도입을 위한 변화 관리 및 조직 문화” 30분 교육을 설계하고, 설득력 있는 PPT 슬라이드를 작성하는 전문가입니다. -목표: 이 프롬프트의 결과물로, 현재 폴더에 `변화 관리 및 조직 문화.pptx`를 제작할 수 있을 정도로 “슬라이드별 원고/레이아웃 지시/예시”가 완성된 설계 문서를 작성하세요. - -## 0) 산출물/형식 요구사항(필수) -- 산출물 목표 파일: `./변화 관리 및 조직 문화.pptx` -- 교육시간: 30분 -- 슬라이드 수: 최소 20장(권장 22~28장) -- 각 슬라이드 필수: - 1) **슬라이드 제목** - 2) **서브타이틀(1문장)** - 3) **예시(현업 대화/상황극/케이스)** -- 언어: 한국어 - -## 1) 슬라이드 스타일 가이드(필수) -- 레이아웃 통일: - - 상단: 제목/서브타이틀 - - 중앙: 핵심 메시지(3~5불릿) - - 하단: 예시(상황극) 박스 -- 예시 박스는 항상 “등장인물/상황/대응 문장(스크립트)”를 포함. -- 메시지는 “심리적 안전감 + 생산성 + 공정성(평가/보상)” 3축으로 정리. - -## 2) 목차(슬라이드 번호 포함)를 먼저 제시 -필수 흐름: -- 왜 도구 도입만으로 실패하는가(사례) -- 저항의 유형(불안/통제감 상실/평가 우려/윤리·보안) -- 심리적 안전감 설계(질문/실험/실수 허용의 경계) -- 업무 재설계: 역할/역량/업무 분장 변화 -- 커뮤니케이션: 리더 메시지/FAQ/원칙 -- 운영 체계: 교육/코칭/커뮤니티/사례 공유 -- 성과 측정/보상: 무엇을 측정하고 어떻게 인정할지 - -## 3) 슬라이드별 상세 원고(템플릿) -### Slide N. <제목> -- **서브타이틀**: ... -- **핵심 포인트(3~5)**: - - ... -- **예시(상황극 박스)**: - - **등장인물**: (예: 팀장, 실무자, 보안담당) - - **상황**: ... - - **대응 스크립트(좋은 예)**: - - "..." - - **대응 스크립트(나쁜 예)**: - - "..." - - **정리(원칙 1~2줄)**: ... -- **발화 스크립트(20~40초)**: ... - -## 4) 필수 예시(누락 금지) -- “AI 쓰면 평가에 불리할까?” 우려를 다루는 대화 스크립트 -- “보안 때문에 아무것도 못 한다” 갈등을 푸는 합의 예시(원칙/프로세스) -- “AI가 내 일을 빼앗는다” 불안을 “업무 재설계”로 전환하는 예시 -- “실험해도 되는 범위”를 정하는 경계(Do/Don’t) 예시 -- 사례 공유 문화(Weekly demo / prompt library) 정착 예시 - -## 5) 마지막 체크 -- 20장 이상인지 -- 모든 슬라이드에 제목/서브타이틀/예시가 있는지 -- 예시가 “실제 조직에서 벌어질 법한 말”로 작성됐는지 - diff --git a/AX 과제 - 1/전사 리더십 교육/PROMPT_전사 리더십 교육 b/AX 과제 - 1/전사 리더십 교육/PROMPT_전사 리더십 교육 deleted file mode 100644 index ce476d1..0000000 --- a/AX 과제 - 1/전사 리더십 교육/PROMPT_전사 리더십 교육 +++ /dev/null @@ -1,72 +0,0 @@ -당신은 기업 AX(AI Transformation) 교육 콘텐츠 기획자이자 PPT 슬라이드 작가입니다. -목표: 이 프롬프트의 결과물로, 현재 폴더에 `전사 리더십 교육.pptx`를 제작할 수 있을 정도로 “슬라이드별 원고/레이아웃 지시/예시”가 완성된 설계 문서를 작성하세요. - -## 0) 산출물/형식 요구사항(필수) -- 산출물 목표 파일: `./전사 리더십 교육.pptx` -- 교육시간: 30분 (리더십 대상, 메시지 밀도 높게) -- 슬라이드 수: 최소 20장(권장 22~26장) -- 각 슬라이드는 다음 순서를 반드시 포함: - 1) **슬라이드 제목** - 2) **서브타이틀(1문장)** - 3) **예시(사례/비유/미니 케이스)** -- 톤: 간결/결정지향/리스크 인지/ROI 관점 -- 언어: 한국어 - -## 1) 슬라이드 작성 스타일 가이드(필수) -- 모든 슬라이드는 “제목(상단) / 본문(중앙) / 예시 박스(하단)” 3영역으로 통일. -- 본문은 3~5개 핵심 불릿(한 줄 18~22자 내)로 제한. -- 예시 박스는 항상 다음 템플릿: - - **예시 제목**: (짧게) - - **상황**: (1~2문장) - - **대응/결정 포인트**: (2~3불릿) -- 정렬/간격: - - 제목과 본문 사이 여백 충분히(시각적으로 “숨 쉴 공간”) - - 불릿 간 간격 균일 - - 표/박스는 좌우 정렬선 맞추기(그리드) - -## 2) 목차 설계(먼저 제시) -아래 형식으로 “목차(슬라이드 번호 포함)”를 먼저 작성하세요. -- Part와 목적을 명시하고, 슬라이드 제목이 교육 흐름을 자연스럽게 만들도록 구성하세요. - -형식: -1. (Slide 1) ... -2. (Slide 2) ... -... - -## 3) 슬라이드별 상세 원고(목차 다음에) -목차에 나온 슬라이드 번호/제목을 그대로 사용하여, 슬라이드별로 아래를 모두 작성하세요. - -슬라이드 템플릿(반드시 준수): -### Slide N. <제목> -- **서브타이틀**: ... -- **본문 포인트(3~5)**: - - ... -- **예시(박스)**: - - **예시 제목**: ... - - **상황**: ... - - **대응/결정 포인트**: - - ... -- **발화 스크립트(20~40초 분량)**: (강의자가 읽을 수 있게 자연어로) - -## 4) 필수 포함 주제(누락 금지) -- AX 비전/전략: “왜 지금 AX인가” + 경쟁우위 구조 -- 리더십 역할: 방향 제시/우선순위/의사결정/장애 제거 -- 가치-사례-지표: 생산성/품질/리스크/컴플라이언스 관점 KPI -- 거버넌스: 역할과 책임(R&R), 승인 체계, 데이터/모델 관리 -- 윤리/보안/저작권: 리더십이 반드시 결정해야 하는 최소 기준 -- 도입 로드맵: 30/60/90일 실행안(예: PoC → Pilot → Scale) -- 조직 변화관리: 저항/역량/보상/커뮤니케이션 - -## 5) 예시 요구사항(예시 중심으로) -예시는 “실제 회사에서 일어날 법한” 형태로 작성하세요. -- 예시 카테고리 최소 4종: - - (A) 보고서/문서 자동화 - - (B) 고객 대응/영업 지원 - - (C) 규정/컴플라이언스 점검 - - (D) 교육/지식관리(FAQ/가이드 자동화) - -## 6) 마지막 출력 체크(자체 점검 후 반영) -- 슬라이드 수가 20장 이상인지 -- 모든 슬라이드에 제목/서브타이틀/예시가 있는지 -- 30분 진행이 가능한 흐름(도입→핵심→실행→리스크→마무리)인지 - diff --git a/AX 과제 - 1/직무별 맞춤화 교육/PROMPT_직무별 맞춤화 교육 b/AX 과제 - 1/직무별 맞춤화 교육/PROMPT_직무별 맞춤화 교육 deleted file mode 100644 index daf58cd..0000000 --- a/AX 과제 - 1/직무별 맞춤화 교육/PROMPT_직무별 맞춤화 교육 +++ /dev/null @@ -1,63 +0,0 @@ -당신은 “직무별 맞춤화 교육(마케팅/영업/기획 중심)” 30분 교육 커리큘럼과 PPT 슬라이드를 설계하는 전문가입니다. -목표: 이 프롬프트의 결과물로, 현재 폴더에 `직무별 맞춤화 교육.pptx`를 제작할 수 있을 정도로 “슬라이드별 원고/레이아웃 지시/예시”가 완성된 설계 문서를 작성하세요. - -## 0) 산출물/형식 요구사항(필수) -- 산출물 목표 파일: `./직무별 맞춤화 교육.pptx` -- 교육시간: 30분 -- 슬라이드 수: 최소 20장(권장 24~32장) -- 각 슬라이드 필수: - 1) **슬라이드 제목** - 2) **서브타이틀(1문장)** - 3) **예시(직무 상황 + 프롬프트 + 기대 산출물)** -- 언어: 한국어 - -## 1) 슬라이드 스타일 가이드(필수) -- 파트별 색상/아이콘만 다르게, 그리드는 통일. -- 예시 영역은 “입력(자료) → 프롬프트 → 출력(형식)” 3칸 구조로 통일. -- 출력 형식은 표/불릿/체크리스트 중 하나로 고정해 예시를 명확히. - -## 2) 목차(슬라이드 번호 포함)를 먼저 제시 -다음 파트 구성을 반드시 포함: -- 공통: 직무 맞춤 프롬프트 구성 요소(역할/목표/지표/제약/형식) -- 마케팅: 콘텐츠 자동 생성(캠페인/카피/QA), 브랜드 톤 가이드 -- 영업: 고객 응대 자동화(FAQ/반론처리), 미팅 준비/요약 -- 기획: 데이터 분석/리포트(가정/지표/인사이트), 의사결정 문서 -- 각 파트마다 “실패 사례(나쁜 프롬프트)” 1장 이상 포함 - -## 3) 슬라이드별 상세 원고(템플릿) -### Slide N. <제목> -- **서브타이틀**: ... -- **핵심 포인트(3~5)**: - - ... -- **예시(입력→프롬프트→출력)**: - - **입력(자료)**: (예: 제품 특징 3개, 고객 페르소나 1개, 데이터 표 5행 등) - - **프롬프트**: - "..." - - **기대 출력(형식 고정)**: - - (표/불릿/체크리스트로 구체 예시) - - **주의/검증 포인트**: - - ... -- **발화 스크립트(20~40초)**: ... - -## 4) 필수 직무 예시 목록(누락 금지) -- 마케팅(최소 4장): - - 캠페인 목표/타깃/채널별 카피 생성(표) - - 브랜드 톤 가이드 적용/금칙어 - - 콘텐츠 캘린더(주간) 자동 생성 - - 경쟁사 비교 요약(근거/불확실성 표시) -- 영업(최소 4장): - - 고객 이메일 답장(정책 준수) - - 반론처리 스크립트(상황별 3가지) - - 미팅 전 브리핑(고객/이슈/질문) - - 통화/미팅 요약 + 다음 액션 -- 기획(최소 4장): - - KPI 대시보드 요약(결론→근거) - - 데이터 품질 체크리스트 생성 - - 리스크/의존성/결정사항 정리 - - 1페이지 보고서(원페이지) 구조화 - -## 5) 마지막 체크 -- 20장 이상인지 -- 모든 슬라이드에 제목/서브타이틀/예시가 있는지 -- 예시가 “직무별로 정말 다른 프롬프트”가 되도록 차별화됐는지 - diff --git a/AX 과제 - 1/프롬프트 엔지니어링 실무/PROMPT_프롬프트 엔지니어링 실무 b/AX 과제 - 1/프롬프트 엔지니어링 실무/PROMPT_프롬프트 엔지니어링 실무 deleted file mode 100644 index 62b1ab7..0000000 --- a/AX 과제 - 1/프롬프트 엔지니어링 실무/PROMPT_프롬프트 엔지니어링 실무 +++ /dev/null @@ -1,67 +0,0 @@ -당신은 “프롬프트 엔지니어링 실무” 30분 교육을 설계하고, PPT 슬라이드를 작성하는 전문가입니다. -목표: 이 프롬프트의 결과물로, 현재 폴더에 `프롬프트 엔지니어링 실무.pptx`를 제작할 수 있을 정도로 “슬라이드별 원고/레이아웃 지시/예시”가 완성된 설계 문서를 작성하세요. - -## 0) 산출물/형식 요구사항(필수) -- 산출물 목표 파일: `./프롬프트 엔지니어링 실무.pptx` -- 교육시간: 30분 -- 슬라이드 수: 최소 20장(권장 24~30장) -- 각 슬라이드는 반드시 포함: - 1) **슬라이드 제목** - 2) **서브타이틀(1문장)** - 3) **예시(프롬프트 템플릿 + 결과 요약 + 개선 포인트)** -- 언어: 한국어 - -## 1) 슬라이드 작성 스타일 가이드(필수) -- 일관된 3단 구성: - - 상단: 제목/서브타이틀 - - 중앙: “원칙/패턴” (3~5불릿) - - 하단: “예시(프롬프트)” 박스 (코드블록처럼 보여도 됨) -- 예시는 항상 “초안 → 개선(2단계 이상)”의 반복 정제를 보여줄 것. -- 출력 형식/제약을 명시하는 사례를 반드시 포함(표/JSON/체크리스트 등). - -## 2) 목차(슬라이드 번호 포함)를 먼저 제시 -다음 흐름을 포함: -- 프롬프트의 목적: 통제/재현성/검증가능성 -- 역할(Role)·목적(Why)·상황(Context)·형식(Format)·제약(Constraints) -- Few-shot / Template / Rubric -- 단계화(Plan → Execute), 자기검증(Checks), 반례/에지케이스 -- 업무별 템플릿 라이브러리화/버전관리 - -형식: -1. (Slide 1) ... -... - -## 3) 슬라이드별 상세 원고 -아래 템플릿으로 작성하세요. - -### Slide N. <제목> -- **서브타이틀**: ... -- **핵심 포인트(3~5)**: - - ... -- **예시(프롬프트 박스)**: - - **업무 상황**: ... - - **초안 프롬프트**: - "..." - - **개선 프롬프트(버전 2)**: - "..." - - **개선 프롬프트(버전 3, 선택)**: - "..." - - **기대 출력(요약)**: ... - - **검증 체크(2~4)**: - - ... -- **발화 스크립트(20~40초)**: ... - -## 4) 필수 포함 “실무 예시” (누락 금지) -각 항목은 최소 1장 이상으로 다루세요. -- 보고서/문서: “결론 먼저 + 근거 번호” 형식 통제 -- 표/정리: “열 정의 + 단위 + 빈값 처리” 포함 -- 평가/심사: 루브릭(기준표) 기반 판정(✓/△/✗) + 근거 -- 고객응대: 톤/금칙어/정책 준수 조건 포함 -- 데이터 분석: 가정/한계/추가 질문 먼저 받기 -- 프롬프트 템플릿: 재사용 가능한 변수 자리표시자({목표}, {대상}, {제약}) - -## 5) 마지막 체크 -- 20장 이상인지 -- 모든 슬라이드에 제목/서브타이틀/예시가 있는지 -- 예시 프롬프트가 “복붙 가능 + 재현성”을 갖는지 - diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e782805 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +python-pptx>=0.6.23 +