AX 과제 - 1 → AX 강의 - 1 폴더명 변경 및 강의형 산출물 추가

Made-with: Cursor
This commit is contained in:
dsyoon
2026-02-26 09:55:10 +09:00
parent b0a2b0eec4
commit c0c486bc86
87 changed files with 10359 additions and 520 deletions

View File

@@ -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개 실행)으로 끝낸다.

View File

@@ -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()

View File

@@ -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": "마무리는 '오늘부터 무엇을 할지' 한 문장으로 정리합니다."
}
]
}

View File

@@ -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초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다."
}
]
}

View File

@@ -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
}