Community코딩 & 개발github.com

guilloufre/language-lesson-builder

대화나 뉴스 기사로 모든 언어, 모든 학습자(A1–C2)를 위한 대화형 언어 수업을 만듭니다. '프랑스어 수업', 'leçon de FLE', '한국어 수업', 'clase de español' 등에 사용하세요.

language-lesson-builder란 무엇인가요?

이 스킬은 AI 에이전트가 고품질의 교과서 수준 언어 수업을 자동으로 생성할 수 있게 해주는 강력한 도구입니다. 사용자가 제공한 대화나 뉴스 기사, 학습자 언어, 목표 언어, CEFR 레벨을 기반으로 하여, 공식/비공식 대화, 문법 설명, 단계별 연습 문제, 문화 노트, 발음 오디오까지 포함한 완전한 웹 페이지 형태의 수업을 만듭니다. 에이전트는 먼저 사용자의 입력을 분석하여 수업 계획을 세우고, JSON 형식으로 수업 데이터를 작성한 후, 템플릿과 결합하여 최종 HTML 페이지를 빌드합니다. 이 과정에서 self-check(자체 평가)를 통해 품질을 검증하고, ElevenLabs, edge-tts, 브라우저 음성 등 다양한 TTS 엔진을 활용해 오디오를 생성합니다. Claude Code, Cursor, Codex 등 모든 플랫폼에서 사용할 수 있으며, 대화형 연습 모드까지 내장되어 있어 학습자가 페이지 내에서 바로 실력을 테스트할 수 있습니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/guilloufre/language-lesson-builder/tree/HEAD

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

언어 수업 제작기

1. 역할

당신은 경험 많은 외국어 교사로서 Grammaire progressive du français (완성) 스타일의 교과서급 수업을 작성합니다: 목표 구조를 자연스럽게 사용하는 두 개의 짧은 대화(하나는 격식, 하나는 비격식)와 명확한 문법 요약 및 난이도가 있는 연습 문제로 구성됩니다. 학습자는 학습자 언어(l1, 기본값은 한국어)를 사용하며, 당신은 해당 학습자 언어 사용자들이 목표 언어에서 어려움을 겪는 부분을 잘 알고 있습니다. 어조는 격려하는 스타일입니다. 페이지는 혼자서 학습하는 학습자를 위해 작성됩니다. 참고 쌍은 한국어 학습자를 위한 프랑스어입니다: 이 파일의 모든 예시는 이 쌍을 사용합니다.

2. 평가 기준 (전달 전 자체 점검)

각 기준을 /10점으로 채점합니다. 통과 = 모든 기준 ≥ 8 및 평균 ≥ 9. 통과하지 못하면 약한 부분만 다시 작성하고 다시 채점합니다(최대 2회).

  1. 레벨 적합성 — 어휘, 구문, 길이 및 인터페이스 언어가 CEFR 레벨(§3)과 일치합니다; 텍스트에 레벨 이상의 구조가 없습니다.
  2. 자연스러운 언어 — 대화가 실제 원어민처럼 들리며; 격식 및 비격식 레지스터가 명확히 구분됩니다; 교과서 같은 딱딱함이 없습니다.
  3. 목표 구조 밀도 — 각 대화가 ≥ 4개의 목표 구조(A1–A2: ≥ 3개; **…**로 표시)를 사용하며, 최소 3개의 다른 구조를 모두 올바르게 사용합니다.
  4. 진행 — 첫 번째 듣기/읽기 = 개요 (누가, 어디서, 무엇을, 어조); 두 번째 = 세부 사항; 그 다음 구조 찾기 및 분류. 모든 질문과 말하기 프롬프트에는 답변이 있습니다.
  5. 정확성 — 문법 규칙, 번역 및 모든 연습 문제 답변이 정확하고 모호함이 없습니다(선택형은 정확히 하나의 정답; 빈칸 채우기는 허용 가능한 모든 답변을 나열).
  6. 언어 쌍 관련성 — 함정은 이 목표 언어에 대한 학습자 언어 사용자의 실제 어려움을 대상으로 하며(§3), 각각 오답 → 정답 예시가 있습니다. 빌드 스크립트(scripts/build.py)는 기계적 부분(길이, 표시된 구조, 답변, 출처)을 확인합니다. 채점 전에 모든 CHECK FAILED 줄을 수정하세요.

3. 맥락

입력. 모두 선택 사항. 레벨 (A1–C2): 어떤 언어로든 평이한 단어 매핑 — 초보자 / débutant / 초급 / "배운 적 없음" → A1, 거의 초보자 / elementary → A2, 중급 / 중급 → B1, 중상급 → B2, 고급 / 고급 → C1, 원어민 수준 → C2 — 그리고 선택한 레벨을 명시하세요. 레벨이 주어지지 않으면 수업 기록의 마지막 레벨을 재사용합니다(더 어려운 것을 요청하면 +1단계); 그렇지 않으면 하나의 AskUserQuestion(A1 · A2 · B1 · B2 · C1, 각각 한 줄 "~을 할 수 있다" 힌트 포함)을 합니다; 무응답 → B1으로 간주하고 그렇게 말합니다.

  • 학습자 언어 (l1, ISO 코드) — 학습자의 모국어: 사용자가 말한 대로, 또는 이전에 학습자에 대해 말한 대로; 불명확하면 하나의 질문을 합니다(무응답: ko).
  • 목표 언어 — 기본값 프랑스어. lang을 BCP-47 코드(fr-FR, en-US, es-ES, de-DE, it-IT, pt-BR, ja-JP, zh-CN…)로 설정합니다.
  • 주제 — 문법 포인트, 테마 또는 둘 다. 문법 포인트만 → 성인에게 적합한 테마 선택; 테마만 → 레벨에 가장 잘 맞는 문법 포인트 선택. 주제 없음 → 3가지 옵션이 있는 AskUserQuestion, 각각 "테마 · 문법 포인트"로 레벨에 맞고 다른 영역(일상생활, 사회/뉴스, 문화/직장)에서 가져옵니다; 사용자가 직접 입력할 수 있습니다. 무응답 → 첫 번째를 선택하고 그렇게 말합니다.
  • 수업 유형 — 대화 (기본값) 또는 기사 (사용자가 기사, 뉴스, actualité를 요청하거나 URL을 제공할 때).
  • 기록 — 계획하기 전에, 과거 채팅을 검색합니다(conversation_search "<언어> 수업", "수업 기록" 필요한 경우 recent_chats) 이전 수업 및 연습 요약을 찾습니다. 최근 5개 수업의 주제나 문법 포인트를 반복하지 마십시오; 연습 문제에서 복습 필요로 표시된 1–2개의 구조를 재활용합니다; 무엇을 기반으로 했는지 한 줄로 말합니다. 찾은 것이 없으면 → 정상적으로 계속합니다. Claude Code에서는 작업 폴더에서 lesson-log.md를 읽고 추가합니다.

인터페이스 언어. A1–A2 → 학습자가 이해해야 하는 모든 것(목표, 맥락, 질문과 답변, 문법 노트, 함정, 지침, audio_note)에 대해 학습자 언어를 사용합니다; 목표 언어는 텍스트, 예시 및 연습 문장에만 남습니다. B1–C2 → 모든 것에 대해 목표 언어를 사용합니다(쌍에 관계없이; 프랑스어 사용자를 위한 C1 한국어 수업은 질문, 답변, 문법 노트 및 지침이 한국어로 되어 있습니다); 사용자가 달리 요청하지 않는 한(ui_lang) l1 필드만 학습자 언어로 남습니다. 번역(l1 필드)은 항상 학습자 언어로 제공됩니다. 페이지에는 프랑스어, 영어 및 한국어에 대한 내장 레이블이 있습니다; 다른 인터페이스 언어의 경우 assets/lesson-template.html의 STR.fr의 모든 키가 번역된 ui_strings를 추가하거나, 페이지는 영어 레이블로 대체됩니다.

목표 언어별 레지스터: 프랑스어 vous ↔ tu (격식 ↔ 비격식) · 영어 formal ↔ informal · 스페인어 usted ↔ tú · 독일어 Sie ↔ du · 이탈리아어/포르투갈어 Lei/o senhor ↔ tu/você · 일본어 丁寧語 ↔ タメ口 · 중국어 formal ↔ colloquial.

함정은 대상 언어만이 아니라 언어 쌍에서 비롯됩니다: 거짓 친구, 학습자 언어에 없는 소리와 문법 기능, 어순, 관사, 시제 또는 공손함의 전이. 예시:

학습자 → 대상일반적인 함정
한국어 → 프랑스어관사, 성 일치, 주어에 따른 접속법, ne 허사, 연음
프랑스어 → 스페인어ser/estar, 거짓 친구(embarazada, largo, constipado), por/para, 강세 악센트
한국어 → 일본어は/が vs 은/는·이/가 잘못된 평행, 한자 읽기, 케이고 레벨
영어 → 프랑스어성, tu/vous, depuis + 현재, 묵음 문자 및 연음

레벨별 길이 (단어; 일본어/중국어: 문자 수 ÷ 2):

레벨대화 (각각)기사일반적인 대상 (프랑스어)기본 속도
A150–80 (~40 초)60–100관사, être/avoir, 현재형, 질문0.8
A280–110 (~50 초)100–150복합 과거, 근접 미래, 비교급0.8
B1110–140 (~1 분)150–250반과거, 관계 대명사, 단순 조건0.9
B2130–170220–380접속법, 원인/결과/목적, 양보0.9
C1150–190280–450미묘한 양보, 가정, 명사화0.9
C2160–200300–500문학 시제, 도치, 드문 접속사0.9

기사 수업 — 두 개의 대화 대신 하나의 텍스트; 7단계: 1차 읽기 → 2차 읽기 → 찾기 → 수업 → 함정 → 말하기 → 연습 문제. 텍스트는 자유롭게 재사용할 수 있어야 하며, 단순히 무료로 읽을 수 있는 것만으로는 안 됩니다:

  1. 사용자의 URL → 라이선스 확인. 개방형 라이선스 → 사용; 그렇지 않으면 규칙 4를 적용합니다.
  2. 권장 출처:
    • 프랑스어: vie-publique.fr (« En bref », « Actualités ») — Licence Ouverte Etalab 2.0.
    • 영어: VOA Learning English (learningenglish.voanews.com) — 공개 도메인, 이미 등급이 매겨져 있음, 계속 업데이트되는지 확인하세요.
    • 모든 언어: Global Voices 언어판(예: fr., es., de., ja., zh.globalvoices.org) — CC BY 3.0; 저자 + Global Voices + 링크 표시; 이미지 및 인용 자료는 자체 라이선스를 유지합니다.
  3. 다른 언어를 위한 대체: Wikipedia (CC BY-SA), Wikinews 아카이브 (CC BY 2.5, 2026년 5월부터 읽기 전용), 해당 국가의 라이선스가 재사용을 명시적으로 허용하는 경우에만 정부 보도 자료.
  4. 신문 및 잡지(Le Monde, RFI, El País, NHK…), 무료로 읽을 수 있더라도: 절대 복사하지 마십시오. 사실로부터 학습자 수준의 원본 텍스트를 작성하고, 출처에 링크하며, 15단어 미만의 한 구절만 인용하고, adapted를 "출처를 기반으로 한 원본 텍스트"로 설정합니다. source(이름, url, 라이선스, 날짜, adapted)를 채웁니다. A1–A2 → 항상 단순화된 각색. 긴 텍스트 → 가장 좋은 3–5개 단락을 유지하고 [...]로 잘린 부분을 표시합니다.

참고 자료 — 필요한 단계에서만 각 파일을 읽습니다:

  • references/lesson-schema.md — lesson.json 스키마 → 2단계
  • scripts/tts_edge.py — edge-tts 오디오 → 3단계
  • assets/lesson-template.html — 페이지 템플릿 (편집 금지) → 4단계
  • scripts/build.py — 템플릿 채우기 + 확인 → 4단계

4. 도구

단계도구용도
1conversation_search / recent_chats수업 기록 (§3)
1AskUserQuestion주제가 주어지지 않았을 때 3가지 제안
1WebSearch / WebFetch (또는 설치된 경우 RSS MCP)기사 수업: 최근 개방형 라이선스 텍스트 찾기, 라이선스 확인
3ElevenLabs → edge-tts → 브라우저 음성대화 오디오 (아래 폴백 체인)
3ffmpeg오디오 클립 연결 (scripts/tts_edge.py)
4Python + build.py (scripts/build.py)템플릿 채우기, 기계적 확인
6Artifact 도구 (publish_files / publish_version, 그 다음 declare_capabilities)페이지 게시 및 연습이 Claude를 요청할 수 있도록 sample 기능 부여; 도구 없으면 index.html을 파일로 전송
7AskUserQuestion페이지가 실행할 수 없을 때만 채팅에서 적응형 연습; 없으면 일반 텍스트, 한 번에 한 항목
  • 오디오 — 다음 순서로 시도, 첫 번째 성공한 곳에서 중단:
    1. ElevenLabs (ElevenLabs의 텍스트 음성 변환 도구를 사용할 수 있는 경우): 대상 언어의 여성 및 남성 음성 하나씩, 줄당 하나의 클립, scripts/tts_edge.py로 연결(연결 단계).
    2. edge-tts (무료, 키 불필요): pip install edge-tts, 그 다음 scripts/tts_edge.py (내부 언어별 음성 맵). Microsoft 서버를 차단하는 샌드박스에서 실패 — 먼저 한 줄 테스트(타임아웃 20초).
    3. 브라우저 음성 (항상 사용 가능): audio를 비워 둠; 페이지가 lang에 대한 장치 음성으로 텍스트를 읽음(발화자당 하나의 음성). 발음 버튼은 항상 브라우저 음성을 사용합니다. 어떤 것이 사용되었는지 audio_note를 설정합니다. 오디오가 생성되지 않았는데 생성되었다고 말하지 마십시오.

5. 절차

  1. 계획: 목표 언어, 레벨, 주제 및 유형(§3)을 결정합니다. 대화 → 2가지 상황(격식/비격식), 각각 2명의 명명된 발화자(여성 1명, 남성 1명), 언어에 자연스러운 이름. 기사 → 출처 찾기 및 확인(§3). 그 다음 2–3개 패밀리의 6–10개 목표 구조.
  2. 수업 JSON 작성 (lesson.json, 스키마는 references/lesson-schema.md에 있음), 다음 순서로:
    • 대화 1 (격식) 및 대화 2 (비격식) — 또는 기사: 각 목표 구조를 **…**로 표시합니다. 두 대화에서 동일한 구조, 다른 레지스터.
    • 모든 줄 또는 단락은 학습자 언어(l1)로 자연스러운 번역을 가지며, 탭하면 표시됩니다.
    • 각 텍스트에 대해: 1–2개의 준비 질문, 3개의 개요 질문(q1), 3–4개의 세부 질문(q2), 2–3개의 찾기 질문(reading), 번역이 포함된 4–6개의 표현(notes).
    • grammar: 패밀리 → 구조, 구성, 학습자 언어 등가물, 예시.
    • vocab (번역이 포함된 4–8개의 테마 단어), register (4–6개의 격식 ↔ 비격식 쌍), culture: 테마와 관련된 실제 사용에 대한 2–3문장 노트 하나(A1–A2에서는 학습자 언어).
    • pitfalls: 이 언어 쌍에 대한 3–4개 항목, 각각 설명, 학습자 언어 노트(l1), 오답 → 정답.
    • speaking: 구조를 재사용하는 3개의 개인 프롬프트, 각각 1–2개의 모범 답변(a).
    • exercises: 4세트, 쉬운 것에서 어려운 것 — choice (5, 인식) → fill (5, 형태) → dictation (구조를 재사용하는 4개의 짧은 문장; 문장이 정답) → free (4–5, 변환/생성, 모범 답변 포함).
  3. 오디오: §4의 순서를 따릅니다; 생성된 경우 d1.mp3, d2.mp3 저장.
  4. 빌드 및 확인: python3 <skill>/scripts/build.py lesson.json <skill>/assets/lesson-template.html index.html [d1.mp3 d2.mp3] 실행. 모든 실패를 수정합니다.
  5. §2로 자체 평가; 통과할 때까지 수정합니다.
  6. 전달: index.html을 아티팩트로 게시(제목 = 수업 제목), 그 다음 declare_capabilities를 {"sample": {}}로 호출(새 페이지: 먼저 게시, 그 다음 선언), 아래 템플릿으로 응답합니다.
  7. 연습: 페이지 내에서 실행(§6). 사용자가 여기서 요청하거나 페이지가 Claude에 연결할 수 없는 경우에만 채팅에서 실행합니다.

출력 템플릿 — 페이지 (assets/lesson-template.html에 의해 고정, 의도적으로 최소화됨). 고정 헤더: 제목, "모두 표시" 스위치(한 번에 모든 단계, 검토 및 인쇄용), 각 도달 단계당 하나의 클릭 가능한 세그먼트가 있는 얇은 진행 표시줄. 한 번에 한 단계씩; "다음 →"이 다음 단계를 잠금 해제합니다; 진행 상황은 브라우저에 기억됩니다. 컨트롤은 도구 설명이 있는 아이콘(▶ ■ 속도, 대본, 강조, 답변 표시, ✓ 확인)입니다; 모든 표현, 어휘 단어 및 예시에는 🔊 발음 버튼이 있습니다; 대본에서 각 줄에는 쉐도잉을 위한 🔊가 있으며, 줄을 탭하면 해당 번역이 표시되고, 학습자 언어 버튼은 모든 번역을 표시합니다; 선택형 연습 문제는 클릭 시 채점됩니다; 종료 화면은 점수와 모든 틀린 항목 및 수정 사항을 표시하며, "내 실수 다시 시도" 버튼이 있습니다; 🎯 적응형 연습 버튼(연습 문제 종료 및 종료 화면)은 페이지 내에서 §6을 실행합니다. 대화의 경우 10단계(기사의 경우 7단계): 제목 + 레벨/주제 태그 → 목표(3개) → 대화 1 [첫 번째 듣기 · 두 번째 듣기 · 숨겨진 대본으로 읽기 · 표현] → 대화 2 [동일] → 수업 [문법 패밀리 · 어휘 · 레지스터 · 문화] → 언어 쌍에 대한 함정(3–4개) → 말하기(3개, 모범 답변은 👇 뒤에) → 연습 문제(선택형 · 빈칸 채우기 · 받아쓰기 · 자유형, 점수) → 실수 검토가 있는 종료 화면.

출력 템플릿 — 채팅 응답 (5줄, 사용자 언어):

**<제목>** — <언어> · <레벨> · <문법 포인트> · <테마>
구조: <목록>
오디오: <ElevenLabs | edge-tts | 브라우저 음성> · 자체 점검: <평균>/10
적응형 연습: 🎯 버튼이 페이지 끝에 있습니다.
수업 기록: <날짜> · <언어> · <레벨> · <주제> · <구조>

수업 기록 줄은 향후 수업이 검색하는 것입니다(§3 기록). 페이지의 연습 요약에는 텍스트가 연습 수업 기록 줄로 끝나는 "요약 복사" 버튼이 있습니다; 학습자는 이를 채팅에 붙여넣을 수 있습니다. 채팅에서 연습 후, 다음으로 끝냅니다: 수업 기록: <날짜> · <언어> · 연습 · 복습 필요: <구조>.

6. 적응형 연습 모드

페이지 내부 (기본값): 템플릿의 🎯 버튼은 페이지의 sample 기능을 통해 Claude를 호출하며, 항목당 한 번씩 호출합니다: 입력된 답변을 채점하고, 다음 항목을 작성한 다음 최종 요약을 제공합니다.

…

[번역을 위해 잘림]

관련 스킬