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 자산 공유 및 협업 문화"에 대한 발표 자료야. 팀원들이 발견한 좋은 프롬프트를 공유하는 방법과 사내 챗봇 활용법을 포함해줘. '함께 성장하는 조직'을 강조하는 따뜻하고 협력적인 톤으로 만들어줘.
목표:
- 리더십부터 실무자까지 "왜 이 주제를 이해해야 하는지"를 먼저 설득한다.
- 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,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초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다."
}
]
}

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
}