AI-Powered Lecture Material Generator using Multi-Agent Pipeline System
๐ v0.5.3 | ํจํค์ง ์์ ํ โ
editTemplateNotFound ์ฌ๋ฐ ๋ฐฉ์ง, PyPI wheel ๊ฒ์ฆ ์ ์ฐจ ๊ฐํ
PDF, ์นํ์ด์ง, ์ธํฐ๋ท ๊ฒ์์์ ์ ๋ณด๋ฅผ ์์งํ์ฌ ๊ณ ํ์ง ๊ฐ์์๋ฃ๋ฅผ ์๋ ์์ฑํ๋ AI ์์คํ ์ ๋๋ค.
ํต์ฌ ํต๊ณ: 12๊ฐ ์์ด์ ํธ | 9๊ฐ ๋๊ตฌ | 9๊ฐ CLI ๋ช ๋ น | 1,436+ ํ ์คํธ (~48% ์ปค๋ฒ๋ฆฌ์ง) | ~$0.035/60๋ถ ๊ฐ์ | Python 3.11 ๊ถ์ฅ
๋ฐ์ดํฐ ์์น: ~/Documents/LectureForge/ (์ผ๋ฐ ํด๋, Finder/ํ์๊ธฐ์์ ๋ฐ๋ก ์ ๊ทผ)
- ๐ ๋ฉํฐ์์ค ์์ง: PDF, URL, ์น ๊ฒ์์ ํตํ ํฌ๊ด์ ์ ๋ณด ์์ง
- ๐ Location-based ์ด๋ฏธ์ง ๋งค์นญ: RAG ์ปจํ ์คํธ ๊ธฐ๋ฐ ์๋ ์ด๋ฏธ์ง ๋ฐฐ์น (+750% ํ์ฉ๋ฅ )
- ๐ผ๏ธ ๋ํํ ์ด๋ฏธ์ง ํธ์ง: ์์ฑ๋ ๊ฐ์์ ์ด๋ฏธ์ง ์ญ์ /๊ต์ฒด (Vector DB ๊ธฐ๋ฐ ๋์ ๊ฒ์)
- ๐จ ๊ตฌ์กฐํ๋ HTML ์ถ๋ ฅ: Mermaid ๋ค์ด์ด๊ทธ๋จ, ๊ฒ์ ์ธ๋ฑ์ค, ์ฝ๋ ํ์ด๋ผ์ดํ
- ๐ฌ ํ๋ ์ ํ ์ด์ ์ฌ๋ผ์ด๋: Reveal.js ๊ธฐ๋ฐ ์๋ ๋ณํ (v0.3.0 ๋ํญ ๊ฐ์ )
- โ 6์ฐจ์ ํ์ง ํ๊ฐ: ์์ฑ๋, ํ๋ฆ, ์๊ฐ, ๋์ด๋, ์๊ฐ์๋ฃ, ์ ํ์ฑ
- ๐ ์๋ ๊ฐ์ : ํ์ง ๊ธฐ์ค ๋ฏธ๋ฌ ์ ์ต๋ 3ํ ์๋ ์์
- ๐ง RMC ์๊ธฐ๊ฒํ (v0.3.8+): ์์ด์ ํธ ๋ด๋ถ 2๋จ๊ณ ์๊ธฐ๋ฐ์ฑ (Layer 1 ๊ฒํ + Layer 2 ๊ฒํ ์ ๊ฒํ )
- CurriculumDesigner: ์น์ ์์ ๋ ผ๋ฆฌ์ฑ, ํ์ต๋ชฉํ ์ปค๋ฒ๋ฆฌ์ง, ์ ์ ๋ด์ฉ ์์ ์๋ ๊ฒ์ฆ ๋ฐ ์์
- ContentWriter: ๊ฐ๋ ๋น์ฝ, ์ค๋ช ๋ชจํธ์ฑ, ํ๋ฆ ๋จ์ ๋ฑ ์๋ฏธ๋ก ์ ํ์ง ๊ฒํ ํ ์์
- QAAgent: ๊ฐ ์ฃผ์ฅ์ ์์ค ์ปจํ ์คํธ์ ๋์กฐ โ ํ ๋ฃจ์๋ค์ด์ ํญ๋ชฉ ์ ๊ฑฐ ๋๋ ๊ฒฝ๊ณ ํ์
- ๐งช ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง: 1,436+ ํ ์คํธ ํจ์ (70๊ฐ ํ์ผ, ~48% ์ปค๋ฒ๋ฆฌ์ง)
- ๐๏ธ RAG ๊ธฐ๋ฐ ์ง์์ฐฝ๊ณ : ChromaDB ๋ฒกํฐ DB๋ก ๋ํํ Q&A ์ง์
- ๐ ๋ค๊ตญ์ด ์ง์: ํ์ ํผํฉ PDF ์ง์, ์๋ ์ธ์ด ๊ฐ์ง, Cross-lingual ๊ฒ์ (v0.3.2+)
- ๐ฏ ๊ณ ๊ธ RAG ํ์ง (v0.3.5+):
- 400๋จ์ด ๊ตฌ์กฐํ ๋ต๋ณ (5๊ฐ Markdown ์น์ ๊ฐ์ )
- 15+15 ๋์ผ ์ฟผ๋ฆฌ ๊ฒ์ (๋ค๊ตญ์ด, top-12 ๊ฒฐ๊ณผ)
- Rich Markdown ํจ๋ ๋ ๋๋ง (ํฐ๋ฏธ๋์์ ์๋ฆ๋ค์ด ์ถ๋ ฅ)
- ๋์ ์ ๋ขฐ๋ ์ ์ (ChromaDB L2 ๊ฑฐ๋ฆฌ ์ฌ๋ฐ๋ฅธ ๋ณํ)
- โก ์ฟผ๋ฆฌ ์บ์ฑ: ๋์ผ ์ง๋ฌธ 60% ๋น ๋ฅธ ์๋ต
- ๐ฌ ์์ค ์ธ์ฉ: ์๋ ์ฐธ์กฐ ๋ฐ ํ์ด์ง ๋ฒํธ ์ ๊ณต
- ๐ ์๋ ์ฌ์๋: API ์คํจ ์ ์ง์ ๋ฐฑ์คํ (์ต๋ 3ํ)
- ๐ฐ ๋น์ฉ ์ถ์ : ์ค์๊ฐ ํ ํฐ ์ฌ์ฉ๋ ๋ฐ ๋น์ฉ ์ถ์
- ๐ง ํ์ ํํธ: ~70% ํ์ ์์ ์ฑ (340/489 ํจ์)
- ๐ฏ ์์ธ ์ฒ๋ฆฌ: ๊ตฌ์กฐํ๋ ์์ธ ์์คํ (9๊ฐ ์นดํ ๊ณ ๋ฆฌ)
- ๐ ํ๋กฌํํธ ๊ด๋ฆฌ: ํ ํ๋ฆฟ ๊ธฐ๋ฐ ํ๋กฌํํธ ์์คํ
- ๐
editTemplateNotFound ์ฌ๋ฐ ๋ฐฉ์ง:server.py์์Path(__file__)์ ๋๊ฒฝ๋ก๋กindex.html์ง์ ์ฝ๊ธฐ โ pipx/PyPI ๋ถ์์ wheel์์๋ ๋์ - ๐จ ์ฌ๋ผ์ด๋ ํ์ดํ: ์์ฑ์ผ ํ์ + ๊ฐ์ด๋ฐ ์ ๋ ฌ
- ๐ PyPI ๋ฐฐํฌ ๊ฒ์ฆ ๊ฐํ:
unzip -l dist/*.whl | grep templates/editorํ์ ๋จ๊ณ DEPLOYMENT_GUIDE.md์ ์ถ๊ฐ
์ ์ฒด ๋ณ๊ฒฝ ์ด๋ ฅ์ ์๋ ๋ณ๊ฒฝ ์ด๋ ฅ ์ฐธ์กฐ
# pipx ์ค์น (์์ง ์๋ ๊ฒฝ์ฐ)
pip install pipx
pipx ensurepath
# lecture-forge ์ค์น (๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ ์๋ ์ค์น)
pipx install lecture-forge
# playwright ์ค์น (pipx ํ๊ฒฝ์ ์ถ๊ฐ)
pipx inject lecture-forge playwright
pipx runpip lecture-forge install playwright
playwright install chromium
# ์ฌ์ฉ
lecture-forge createpipx์ ์ฅ์ :
- โ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ ์๋ ์ค์น
- โ
์์คํ
์ ์ญ์์
lecture-forge๋ช ๋ น ์ฌ์ฉ ๊ฐ๋ฅ - โ ๋ค๋ฅธ Python ํ๋ก์ ํธ์ ์์กด์ฑ ์ถฉ๋ ์์
- โ conda/venv ํ๊ฒฝ ๊ด๋ฆฌ ๋ถํ์
# Python 3.11 ํ๊ฒฝ ์์ฑ (๊ฐ๋ ฅ ๊ถ์ฅ)
conda create -n lecture-forge python=3.11
conda activate lecture-forge
# PyPI์์ ์ค์น
pip install lecture-forge
# ์น ์คํฌ๋ํ์ฉ ๋ธ๋ผ์ฐ์ ์ค์น
playwright install chromium# Git ํด๋ก
git clone https://github.com/bullpeng72/Lecture_forge.git
cd Lecture_forge
# Python 3.11 ํ๊ฒฝ ์์ฑ
conda create -n lecture-forge python=3.11
conda activate lecture-forge
# ๋ก์ปฌ ์์ค์์ ์ค์น
pip install -e .
# ์น ์คํฌ๋ํ์ฉ ๋ธ๋ผ์ฐ์ ์ค์น
playwright install chromiumPython ๋ฒ์ ํธํ์ฑ:
- โ Python 3.11: ๊ฐ๋ ฅ ๊ถ์ฅ - ๋ชจ๋ ์์กด์ฑ ์๋ฒฝ ์ง์
- โ Python 3.12: ์๋ฒฝ ์ง์ - v0.3.3๋ถํฐ ๊ณต์ ์ง์
- โ Python 3.13: ์ง์๋จ - v0.3.8๋ถํฐ ๊ฒ์ฆ ์๋ฃ
Python 3.11, 3.12, 3.13 ๋ชจ๋ ์ง์ํฉ๋๋ค.
# ๋ํํ ์ค์ ๋ง๋ฒ์ฌ ์คํ
lecture-forge init์ด ๋ช ๋ น์ด๋ ๋ค์์ ์ํํฉ๋๋ค:
- โ
ํ๋ซํผ๋ณ ์ต์ ์์น์
.envํ์ผ ์๋ ์์ฑ- Windows:
%USERPROFILE%\Documents\LectureForge\.env - Mac/Linux:
~/Documents/LectureForge/.env
- Windows:
- โ ํ์ API ํค ์ ๋ ฅ ์๋ด (OpenAI, Serper)
- โ ์ ํ์ ์ด๋ฏธ์ง ๊ฒ์ API ์ค์ (Pexels, Unsplash)
- โ ํ์ผ ๊ถํ ์๋ ์ค์ (Unix/Mac: 600)
# .env ํ์ผ ์์ฑ (ํ๋ก์ ํธ ๊ฐ๋ฐ ์)
cp .env.example .env.env ํ์ผ์ ์ด์ด ๋ค์ ํญ๋ชฉ์ ์ค์ ํ์ธ์:
ํ์ API ํค:
# OpenAI API (ํ์)
OPENAI_API_KEY=sk-proj-...
# ๊ฒ์ API (ํ์)
SERPER_API_KEY=... # ๋ฌด๋ฃ: 2,500ํ/์์ ํ ์ฌํญ:
# ์ด๋ฏธ์ง ๊ฒ์ API (์ ํ)
PEXELS_API_KEY=... # ๋ฌด๋ฃ ๋ฌด์ ํ
UNSPLASH_ACCESS_KEY=... # ๋ฌด๋ฃ: 50ํ/์๊ฐ
# ๊ฒ์ ๋ฐ ํฌ๋กค๋ง ์ค์ (๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ถฉ๋ถ)
SEARCH_NUM_RESULTS=10 # ๊ฒ์ ๊ฒฐ๊ณผ ์ (์ต๋ 100)
DEEP_CRAWLER_MAX_PAGES=10 # ํฌ๋กค๋ง ํ์ด์ง ์
IMAGE_SEARCH_PER_PAGE=10 # ์ด๋ฏธ์ง ๊ฒ์ ๊ฒฐ๊ณผ ์
# ํ์ง ์ค์
QUALITY_THRESHOLD=80 # ํ์ง ์๊ณ๊ฐ (70-90)
MAX_ITERATIONS=3 # ์ต๋ ๊ฐ์ ๋ฐ๋ณต ํ์๐ก ๋ ๋ง์ ์ค์ ์ต์
์ .env.example ํ์ผ ์ฐธ์กฐ
LectureForge๋ ๋ค์ ์์๋ก .env ํ์ผ์ ํ์ํฉ๋๋ค:
- ํ๊ฒฝ ๋ณ์:
LECTURE_FORGE_ENV_FILE๋ก ์ง์ ํ ๊ฒฝ๋ก - ํ์ฌ ๋๋ ํ ๋ฆฌ:
./.env - ์ฌ์ฉ์ ๋๋ ํ ๋ฆฌ (๊ถ์ฅ):
- Windows:
%USERPROFILE%\Documents\LectureForge\.env - Mac/Linux:
~/Documents/LectureForge/.env
- Windows:
API ํค ํ๋:
- OpenAI: platform.openai.com (์ฌ์ฉ๋ ๊ธฐ๋ฐ ๊ณผ๊ธ)
- Serper: serper.dev (๋ฌด๋ฃ 2,500ํ/์)
- Pexels: pexels.com/api (๋ฌด๋ฃ)
- Unsplash: unsplash.com/developers (๋ฌด๋ฃ 50ํ/์๊ฐ)
lecture-forge create๋ํํ์ผ๋ก ๊ฐ์ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ฉด ์๋์ผ๋ก ๊ฐ์์๋ฃ๊ฐ ์์ฑ๋ฉ๋๋ค! ๐
| ๋ช ๋ น์ด | ์ค๋ช | ์ฃผ์ ์ต์ |
|---|---|---|
| init | ์ด๊ธฐ ์ค์ | --path |
| create | ๊ฐ์ ์์ฑ | --interactive, --image-search, --quality-level, --existing-kb |
| translate | ์๋ฌธ PDF โ ํ๊ตญ์ด ๊ฐ์์๋ฃ (v0.4.1+) | --no-translate, --with-diagrams, --audience-level |
| chat | Q&A ๋ชจ๋ | --knowledge-base |
| edit | ์น ๊ธฐ๋ฐ ๊ฐ์ ํธ์ง๊ธฐ (v0.5.0+) | --port, --no-browser |
| edit-images | ์ด๋ฏธ์ง ํธ์ง (CLI) | --output |
| improve | ๊ฐ์ ํฅ์ / ์ฌํ๊ฐ | --to-slides, --re-evaluate |
| cleanup | ์ง์๋ฒ ์ด์ค ๊ด๋ฆฌ | --all (-a) |
| home | ํด๋ ์ด๊ธฐ (v0.3.1+) | outputs, data, kb, env |
# ๐ ์ด๊ธฐ ์ค์ (์ฒ์ ํ ๋ฒ๋ง)
lecture-forge init
# ๐ ๊ฐ์ ์์ฑ (๋ํํ - ๊ฐ์ฅ ๊ฐ๋จ)
lecture-forge create
# ๐ ๊ณ ํ์ง ๊ฐ์ (์ด๋ฏธ์ง ๊ฒ์ ํฌํจ)
lecture-forge create --image-search --quality-level strict
# ๐ฌ Q&A ๋ชจ๋ (์๋์ผ๋ก ์ต์ ์ง์๋ฒ ์ด์ค ์ ํ)
lecture-forge chat
# ๐ ์๋ฌธ PDF ๋ฒ์ญ (ํ๊ตญ์ด ๊ฐ์์๋ฃ ์์ฑ)
lecture-forge translate paper.pdf
lecture-forge translate paper.pdf --no-translate # ์๋ฌธ ๊ตฌ์กฐ ํ์ธ (๋ฒ์ญ ์์)
# ๐จ ์ฌ๋ผ์ด๋ ๋ณํ
lecture-forge improve outputs/lecture.html --to-slides
# ๐ผ๏ธ ์ด๋ฏธ์ง ํธ์ง
lecture-forge edit-images outputs/lecture.html
# ๐งน ์ง์๋ฒ ์ด์ค ์ ๋ฆฌ (๋ํํ ์ ํ)
lecture-forge cleanup
# ๐ ํด๋ ์ด๊ธฐ (๊ฐ์ ๊ฒฐ๊ณผ๋ฌผ ํ์ธ)
lecture-forge home outputs๊ธฐ๋ณธ ์ฌ์ฉ:
lecture-forge init๋ํํ ๋ง๋ฒ์ฌ๊ฐ API ํค ์
๋ ฅ์ ์๋ดํ๊ณ ์๋์ผ๋ก .env ํ์ผ์ ์์ฑํฉ๋๋ค.
์ต์ :
| ์ต์ | ์ค๋ช | ์ฌ์ฉ ์ |
|---|---|---|
--path PATH |
์ปค์คํ ๋๋ ํ ๋ฆฌ ์ง์ | --path /custom/path |
๊ธฐ๋ณธ ์ ์ฅ ์์น:
- Windows:
C:\Users\<username>\Documents\LectureForge\.env - Mac/Linux:
~/Documents/LectureForge/.env
์์ :
# ๊ธฐ๋ณธ ์์น์ ์ค์ (๊ถ์ฅ)
lecture-forge init
# ์ปค์คํ
๋๋ ํ ๋ฆฌ ์ฌ์ฉ
lecture-forge init --path /my/config/dir
# ํ์ฌ ๋๋ ํ ๋ฆฌ์ ์์ฑ
lecture-forge init --path .ํ๋ ์ผ:
- ํ์ API ํค ์ ๋ ฅ (OpenAI, Serper)
- ์ ํ์ ์ด๋ฏธ์ง API ์ค์ (Pexels, Unsplash)
.envํ์ผ ์๋ ์์ฑ- ๊ธฐ๋ณธ ์ค์ ๊ฐ ์๋ ์ค์
- ํ์ผ ๊ถํ ๋ณด์ ์ค์ (Unix/Mac)
๊ธฐ๋ณธ ์ฌ์ฉ:
lecture-forge create๋ํํ์ผ๋ก ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ฉด ์๋์ผ๋ก ๊ฐ์๋ฅผ ์์ฑํฉ๋๋ค.
์ต์ :
| ์ต์ | ์ค๋ช | ์ฌ์ฉ ์ |
|---|---|---|
-c, --config FILE |
YAML ์ค์ ํ์ผ ์ฌ์ฉ | --config lecture.yaml |
-i, --interactive |
์์ฑ ์ค ๋ํํ Q&A ๋ชจ๋ ํ์ฑํ | --interactive |
--image-search |
์น ์ด๋ฏธ์ง ๊ฒ์ ํ์ฑํ Pexels (๊ธฐ๋ณธ ํ์ฑํ) | --no-image-search |
--quality-level LEVEL |
ํ์ง ๊ธฐ์ค ์ค์ | --quality-level strict |
-o, --output FILE |
์ถ๋ ฅ ํ์ผ๋ช ์ง์ (ํ์ฅ์ ์ ์ธ) | --output my_lecture |
--async-mode |
Async I/O ์ฌ์ฉ (70% ๋น ๋ฆ, ์คํ์ ) | --async-mode |
--include-pdf-images |
PDF ์ด๋ฏธ์ง ์ถ์ถ ๋ฐ location-based ์๋ ๋ฐฐ์น (๊ธฐ๋ณธ ํ์ฑํ) | --no-include-pdf-images |
--auto-describe-images |
PDF ์ด๋ฏธ์ง GPT-4o-mini ์ค๋ช ์๋ ์์ฑ (๊ธฐ๋ณธ ํ์ฑํ) | --no-auto-describe-images |
--existing-kb PATH |
๊ธฐ์กด ์ง์๋ฒ ์ด์ค ์ฌ์ฌ์ฉ ๋๋ ํ์ฅ | --existing-kb data/vector_db/... |
--kb-mode MODE |
KB ์ฌ์ฉ ๋ฐฉ์: reuse_only(์ฝ๊ธฐ ์ ์ฉ, ๊ธฐ๋ณธ๊ฐ) / extend(ํ์ฅ) |
--kb-mode extend |
ํ์ง ๋ ๋ฒจ:
lenient(70์ ): ๋น ๋ฅธ ์ด์balanced(80์ ): ๊ธฐ๋ณธ๊ฐ โstrict(90์ ): ๊ณ ํ์ง
์์ :
# ๊ธฐ๋ณธ ์์ฑ
lecture-forge create
# ๊ณ ํ์ง + ์ด๋ฏธ์ง ๊ฒ์
lecture-forge create --image-search --quality-level strict
# Async ๋ชจ๋ (70% ๋น ๋ฆ, ์คํ์ )
lecture-forge create --async-mode
# YAML ์ค์ ์ฌ์ฉ
lecture-forge create --config my_config.yaml๊ธฐ๋ณธ ์ฌ์ฉ:
lecture-forge chat์๋์ผ๋ก ์ต์ ์ง์๋ฒ ์ด์ค๋ฅผ ์ ํํฉ๋๋ค.
์ต์ :
| ์ต์ | ์ค๋ช | ์ฌ์ฉ ์ |
|---|---|---|
--knowledge-base PATH |
ํน์ ์ง์๋ฒ ์ด์ค ์ง์ | -kb ./data/vector_db/AI_xxx |
๋ํํ ๋ช ๋ น์ด:
/help: ๋์๋ง ํ์/exit,/quit: ์ข ๋ฃCtrl+C: ๊ฐ์ ์ข ๋ฃ
์์ :
# ์๋ ์ ํ
lecture-forge chat
# ํน์ ์ง์๋ฒ ์ด์ค ์ฌ์ฉ
lecture-forge chat -kb ./data/vector_db/lecture_20260209_123456๊ธฐ๋ณธ ์ฌ์ฉ:
lecture-forge edit outputs/lecture.html๋ก์ปฌ Flask ์๋ฒ(๊ธฐ๋ณธ ํฌํธ 5757)๋ฅผ ์คํํ๊ณ ๋ธ๋ผ์ฐ์ ๋ฅผ ์๋์ผ๋ก ์ฝ๋๋ค.
์ต์ :
| ์ต์ | ์ค๋ช | ์ฌ์ฉ ์ |
|---|---|---|
--port INTEGER |
์๋ฒ ํฌํธ ์ง์ (๊ธฐ๋ณธ: 5757) | --port 8080 |
--no-browser |
๋ธ๋ผ์ฐ์ ์๋ ์คํ ์์ด ์๋ฒ๋ง ์คํ | --no-browser |
3-ํจ๋ ์๋ํฐ ๊ตฌ์ฑ:
- ์ผ์ชฝ ํจ๋: ์น์ ๋ชฉ๋ก โ ์น์ ์ถ๊ฐยท์ญ์ ยท์์ ๋ณ๊ฒฝ
- ์ค์ ํจ๋: Markdown ํธ์ง๊ธฐ (EasyMDE) โ HTML โ Markdown ์๋ ๋ณํ
- ์ค๋ฅธ์ชฝ ํจ๋: ์ด๋ฏธ์ง ๊ฐค๋ฌ๋ฆฌ โ ๋์ ๊ฒ์ (Vector DB), ๊ต์ฒด, ์ ๋ก๋
์์ :
# ๊ธฐ๋ณธ ์คํ (ํฌํธ 5757, ๋ธ๋ผ์ฐ์ ์๋ ์คํ)
lecture-forge edit outputs/my_lecture.html
# ์ปค์คํ
ํฌํธ
lecture-forge edit outputs/my_lecture.html --port 8080
# ์๋ฒ๋ง ์์ (์๊ฒฉ ์ ์ ๋ฑ)
lecture-forge edit outputs/my_lecture.html --no-browser
โ ๏ธ Reveal.js ์ฌ๋ผ์ด๋ ํ์ผ(*_slides.html)์ ์ง์ํ์ง ์์ต๋๋ค.
๊ธฐ๋ณธ ์ฌ์ฉ:
lecture-forge edit-images outputs/lecture.html์ต์ :
| ์ต์ | ์ค๋ช | ์ฌ์ฉ ์ |
|---|---|---|
--output FILE |
์ถ๋ ฅ ํ์ผ ๊ฒฝ๋ก | -o outputs/edited.html |
๋ํํ ๋ช ๋ น์ด:
| ๋ช ๋ น์ด | ์ค๋ช | ์์ |
|---|---|---|
d <๋ฒํธ> |
์ด๋ฏธ์ง ์ญ์ | d 3 |
u <๋ฒํธ> |
์ญ์ ์ทจ์ | u 3 |
r <๋ฒํธ> |
์ด๋ฏธ์ง ๊ต์ฒด (Vector DB ๊ฒ์) | r 5 |
s |
๋ณ๊ฒฝ์ฌํญ ์ ์ฅ | s |
/exit, /quit (๋๋ q) |
์ข ๋ฃ (์ ์ฅ ์ ํจ) | /exit |
h |
๋์๋ง | h |
์์ :
# ๊ธฐ๋ณธ (์๋ณธ_edited.html๋ก ์ ์ฅ)
lecture-forge edit-images outputs/my_lecture.html
# ์ถ๋ ฅ ํ์ผ ์ง์
lecture-forge edit-images outputs/my_lecture.html -o outputs/final.html๊ธฐ๋ณธ ์ฌ์ฉ:
lecture-forge translate paper.pdf์์ด PDF์์ ์ฑํฐ ๊ตฌ์กฐ๋ฅผ ์ถ์ถํ๊ณ , ํ๊ตญ์ด๋ก ๋ฒ์ญํ์ฌ HTML ๊ฐ์์๋ฃ๋ฅผ ์์ฑํฉ๋๋ค.
์ต์ :
| ์ต์ | ์ค๋ช | ์ฌ์ฉ ์ |
|---|---|---|
--output FILE |
์ถ๋ ฅ ํ์ผ๋ช ์ง์ (ํ์ฅ์ ์ ์ธ) | -o my_lecture_ko |
--quality-level LEVEL |
ํ์ง ๊ธฐ์ค: lenient(70) / balanced(80) / strict(90) |
--quality-level strict |
--audience-level LEVEL |
๋์ ์์ค: beginner / intermediate / advanced |
--audience-level beginner |
--no-translate |
๋ฒ์ญ ์์ด ์๋ฌธ ๊ตฌ์กฐ๋ง ์ถ์ถ (๊ตฌ์กฐ ๋๋ฒ๊น ์ฉ, ๋น ๋ฆ) | --no-translate |
--with-slides |
์ฌ๋ผ์ด๋ ๋ณํ๋ ํจ๊ป ์ํ | --with-slides |
--with-diagrams |
Mermaid ๋ค์ด์ด๊ทธ๋จ ์๋ ์์ฑ (๊ธฐ๋ณธ OFF) | --with-diagrams |
๊ตฌ์กฐ ์ถ์ถ ์ฐ์ ์์:
- PDF TOC โ ๊ฐ์ฅ ์ ํ, ํ์ PDF 80%+ ์ ์ฉ
- ํฐํธ ํฌ๊ธฐ ๋ถ์ โ ๋ณธ๋ฌธ๋ณด๋ค ํฐ ํฐํธ ์๋ ๊ฐ์ง
- ํ์ด์ง ๊ทธ๋ฃน (ํด๋ฐฑ) โ ๊ท ๋ฑ ํ์ด์ง ๋ฒ์ ๋ถํ
๋ฒ์ญ ํน์ง:
- ๊ธฐ์ ์ฉ์ด:
ํ๊ตญ์ด(English)ํ์ ์ ์ง (์:์ ๊ฒฝ๋ง(Neural Network)) - ์ฝ๋ ๋ธ๋ก:
__CODE_BLOCK_N__ํ๋ ์ด์คํ๋๋ก ์๋ฌธ ๋ณด์กด - AI/ML ํ์ค ์ฉ์ด ์ฌ์ 25๊ฐ ์ ์ฉ (์ผ๊ด๋ ๋ฒ์ญ)
- PDF ์ํฐํฉํธ ์๋ ์ ๊ฑฐ (ํ์ด์ง ๋ฒํธ, ์ํฐ๋งํฌ ๋ฑ)
์์ :
# ๊ธฐ๋ณธ ๋ฒ์ญ (โ paper_ko.html)
lecture-forge translate paper.pdf
# ์ถ๋ ฅ ํ์ผ๋ช
์ง์
lecture-forge translate paper.pdf -o my_lecture_ko
# ์๋ฌธ ๊ตฌ์กฐ ํ์ธ (๋ฒ์ญ ์์, ๋น ๋ฆ)
lecture-forge translate paper.pdf --no-translate
# ๊ณ ํ์ง + ์ฌ๋ผ์ด๋ ๋ณํ
lecture-forge translate paper.pdf --quality-level strict --with-slides
# ์ด๊ธ ๋์ ๋ฒ์ญ
lecture-forge translate paper.pdf --audience-level beginner
# Mermaid ๋ค์ด์ด๊ทธ๋จ ์์ฑ ํฌํจ (๊ธฐ๋ณธ OFF)
lecture-forge translate paper.pdf --with-diagrams๊ธฐ๋ณธ ์ฌ์ฉ:
lecture-forge improve outputs/lecture.html --to-slides์ต์ :
| ์ต์ | ์ค๋ช | ์ฌ์ฉ ์ |
|---|---|---|
--to-slides |
Reveal.js ์ฌ๋ผ์ด๋ ๋ณํ (*_slides.html) โ ์น์
๋ณ LLM ์ฌ์์ฑ ๊ธฐ๋ณธ ํฌํจ (โค35์, ๋ง์ค์ํ ์์) |
--to-slides |
--with-notes |
์ฌ๋ผ์ด๋๋ณ ๋ฐํ์ ๋ ธํธ ์๋ ์์ฑ (LLM) | --with-notes |
--re-evaluate |
KB ๊ธฐ๋ฐ ํ์ง ์ฌํ๊ฐ + ๋ฏธ๋ฐ์ ๋ด์ฉ ๋ณด์ถฉ ์ถ๊ฐ (*_enhanced.html) |
--re-evaluate |
--quality-level LEVEL |
์ฌํ๊ฐ ํ์ง ๊ธฐ์ค: lenient(70) / balanced(80) / strict(90) |
--quality-level strict |
--kb PATH |
KB ๊ฒฝ๋ก ์๋ ์ง์ (HTML ๋ฉํ๋ฐ์ดํฐ ์๋ ๊ธฐ์กด ํ์ผ์ฉ fallback) | --kb /path/to/vector_db/... |
์์ :
# ์ฌ๋ผ์ด๋ ๋ณํ (๊ธฐ๋ณธ)
lecture-forge improve outputs/lecture.html --to-slides
# ๋ฐํ์ ๋
ธํธ ํฌํจ (๋ธ๋ผ์ฐ์ ์์ Sํค)
lecture-forge improve outputs/lecture.html --to-slides --with-notes
# KB ๊ธฐ๋ฐ ํ์ง ์ฌํ๊ฐ + ๋ณด์ถฉ (โ *_enhanced.html)
lecture-forge improve outputs/lecture.html --re-evaluate
# ์๊ฒฉํ ๊ธฐ์ค์ผ๋ก ์ฌํ๊ฐ
lecture-forge improve outputs/lecture.html --re-evaluate --quality-level strict
# ๊ธฐ์กด ํ์ผ (๋ฉํ๋ฐ์ดํฐ ์์) โ KB ๊ฒฝ๋ก ์๋ ์ง์
lecture-forge improve outputs/lecture.html --re-evaluate --kb ~/Documents/LectureForge/data/vector_db/MyTopic_...
# ์ฌํ๊ฐ + ์ฌ๋ผ์ด๋ ๋ณํ ๋์ ์ ์ฉ
lecture-forge improve outputs/lecture.html --re-evaluate --to-slides๊ธฐ๋ณธ ์ฌ์ฉ:
lecture-forge cleanup๋ํํ์ผ๋ก ์ญ์ ํ ์ง์๋ฒ ์ด์ค๋ฅผ ์ ํํฉ๋๋ค.
์ต์ :
| ์ต์ | ์ค๋ช | ์ฌ์ฉ ์ |
|---|---|---|
-a, --all |
๋ชจ๋ ์ง์๋ฒ ์ด์ค ์ญ์ ( |
--all |
์์ :
# ๋ํํ ์ ํ (์์ )
lecture-forge cleanup
# ์ ์ฒด ์ญ์ (๋ณต๊ตฌ ๋ถ๊ฐ๋ฅ!)
lecture-forge cleanup --all๊ฐ์ ์์ฑ ์๋ฃ ํ ๋ค์ ํ์ผ๋ค์ด ์์ฑ๋ฉ๋๋ค:
outputs/
โโโ [์ฃผ์ ]_[๋ ์ง์๊ฐ].html # ๐ HTML ๊ฐ์์๋ฃ
โโโ [์ฃผ์ ]_[๋ ์ง์๊ฐ]_slides.html # ๐ฌ ์ฌ๋ผ์ด๋ (--to-slides ์ฌ์ฉ ์)
data/
โโโ vector_db/
โโโ [์ฃผ์ ]_[๋ ์ง์๊ฐ]/ # ๐๏ธ ์ง์๋ฒ ์ด์ค (Q&A์ฉ)
โโโ chroma.sqlite3
โโโ ...
ํฌํจ ๋ด์ฉ:
- โ HTML ๊ฐ์์๋ฃ: ์ด๋ฏธ์ง, Mermaid ๋ค์ด์ด๊ทธ๋จ, ์ฝ๋ ํ์ด๋ผ์ดํ , ๊ฒ์ ์ธ๋ฑ์ค
- โ ์ง์๋ฒ ์ด์ค: ChromaDB ๋ฒกํฐ DB (๋ํํ Q&A ์ง์)
- โ ํต๊ณ ์ ๋ณด: ํ์ง ์ ์, ํ ํฐ ์ฌ์ฉ๋, ์์ ๋น์ฉ
- โ ์ฌ๋ผ์ด๋: Reveal.js ํ๋ ์ ํ ์ด์ (์ ํ ์ฌํญ)
๋ ๋ง์ ์ ์ด๊ฐ ํ์ํ ๊ฒฝ์ฐ .env ํ์ผ์์ ๋ค์ ์ค์ ์ ์กฐ์ ํ ์ ์์ต๋๋ค:
# ๊ฒ์ ๋ฐ ํฌ๋กค๋ง
SEARCH_NUM_RESULTS=20 # ๊ธฐ๋ณธ: 10, ์ต๋: 100
DEEP_CRAWLER_MAX_PAGES=30 # ๊ธฐ๋ณธ: 10
DEEP_CRAWLER_MAX_DEPTH=3 # ๊ธฐ๋ณธ: 2
# ์ด๋ฏธ์ง
IMAGE_SEARCH_PER_PAGE=15 # ๊ธฐ๋ณธ: 10
MAX_IMAGES_PER_SEARCH=20 # ๊ธฐ๋ณธ: 10
# ํ์ง
QUALITY_THRESHOLD=90 # ๊ธฐ๋ณธ: 80 (70-90)
MAX_ITERATIONS=5 # ๊ธฐ๋ณธ: 3
# ์ฑ๋ฅ
CHUNK_SIZE=800 # ๊ธฐ๋ณธ: 1000 (์์์๋ก ์ ๋ฐ)
WEB_SCRAPER_TIMEOUT=60 # ๊ธฐ๋ณธ: 30์ด๐ก ์ ์ฒด ์ค์ ๋ชฉ๋ก: .env.example ํ์ผ ์ฐธ์กฐ (15+ ํ๊ฒฝ๋ณ์)
flowchart TD
CLI["๐ฅ๏ธ CLI Interface<br/>์
๋ ฅ ์์ง, ์งํ ์ํฉ, Q&A ์ธํฐ๋์
"]
Orchestrator["โ๏ธ Pipeline Orchestrator<br/>์์ด์ ํธ ์กฐ์จ ๋ฐ ํ์คํฌ ๊ด๋ฆฌ"]
Phase12["๐ Phase 1-2<br/>Collection & Analysis"]
KB["๐๏ธ Knowledge Base<br/>Vector DB + RAG Caching"]
Phase34["โ๏ธ Phase 3-4<br/>Generation & Quality QA"]
Output["๐ค Output<br/>HTML + Slides"]
CLI --> Orchestrator
Orchestrator --> Phase12
Orchestrator --> KB
Phase12 -->|์ ์ฅ| KB
KB -->|RAG Query| Phase34
Phase34 -->|RAG Query| KB
Phase34 --> Output
style CLI fill:#e1f5ff
style Orchestrator fill:#fff4e1
style Phase12 fill:#e8f5e9
style KB fill:#f3e5f5
style Phase34 fill:#fff9c4
style Output fill:#ffebee
| # | ์์ด์ ํธ | ์ญํ | ํ์ผ |
|---|---|---|---|
| 1 | Content Collector ๐ | ํ ์คํธ ์์ง ๋ฐ ๋ฒกํฐํ | content_collector.py |
| 2 | Image Collector ๐ผ๏ธ | ์ด๋ฏธ์ง ์์ง ๋ฐ Vision AI ๋ถ์ | image_collector.py |
| 3 | Content Analyzer ๐ | ๋ด์ฉ ๋ถ์ ๋ฐ ํ ํฝ ํด๋ฌ์คํฐ | content_analyzer.py |
| 4 | Curriculum Designer ๐ | ๊ฐ์ ๊ตฌ์กฐ ์ค๊ณ | curriculum_designer.py |
| 5 | Content Writer โ๏ธ | RAG ๊ธฐ๋ฐ ์ปจํ ์ธ ์์ฑ | content_writer.py |
| 6 | Content Enhancer ๐ง | KB ๊ธฐ๋ฐ ์ฝํ ์ธ ๋ณด๊ฐยท์ฌํ๊ฐ | content_enhancer.py |
| 7 | Diagram Generator ๐ | Mermaid ๋ค์ด์ด๊ทธ๋จ ์์ฑ | diagram_generator.py |
| 8 | Quality Evaluator โ | 6์ฐจ์ ํ์ง ํ๊ฐ | quality_evaluator.py |
| 9 | Revision Agent ๐ | ์๋/๋ฐ์๋ ์์ | revision_agent.py |
| 10 | Q&A Agent ๐ค | ์ง์์ฐฝ๊ณ ๊ธฐ๋ฐ ๋ํ (RAG ์บ์ฑ) | qa_agent.py |
| 11 | HTML Assembler ๐จ | ์ต์ข HTML ์์ฑ | html_assembler.py |
| 12 | PDF Translator ๐ | ์๋ฌธ PDF โ ํ๊ตญ์ด ๊ฐ์์๋ฃ | pdf_translator.py |
| # | ๋๊ตฌ | ์ญํ | ํ์ผ |
|---|---|---|---|
| 1 | PDF Parser ๐ | PDF ํ ์คํธ ์ถ์ถ | pdf_parser.py |
| 2 | Image Extractor ๐ผ๏ธ | PDF/HTML ์ด๋ฏธ์ง ์ถ์ถ | image_extractor.py |
| 3 | Web Scraper ๐ | ์น ํ์ด์ง ์คํฌ๋ํ | web_scraper.py |
| 4 | Playwright Crawler ๐ญ | ๋์ ์น ํฌ๋กค๋ง | playwright_crawler.py |
| 5 | Deep Web Crawler ๐ท๏ธ | ๋ค์ธต ์น ํฌ๋กค๋ง (Hada.io) | deep_web_crawler.py |
| 6 | Search Tool ๐ | Serper ๊ฒ์ API | search_tool.py |
| 7 | Image Search ๐จ | Pexels/Unsplash ๊ฒ์ | image_search.py |
| 8 | PDF Image Describer ๐ | GPT-4o Vision ์ด๋ฏธ์ง ์ค๋ช | pdf_image_describer.py |
| 9 | Image Editor โ๏ธ | ๋ํํ ์ด๋ฏธ์ง ํธ์ง | image_editor.py |
%%{init: {'theme':'base', 'themeVariables': { 'pie1':'#e8f5e9', 'pie2':'#bbdefb', 'pie3':'#fff9c4', 'pie4':'#f8bbd0', 'pie5':'#ffccbc', 'pie6':'#d1c4e9'}}}%%
pie title ํ์ง ํ๊ฐ ๊ฐ์ค์น ๋ถํฌ
"๋ด์ฉ ์์ฑ๋ (ํ์ต ๋ชฉํ)" : 25
"๋
ผ๋ฆฌ์ ํ๋ฆ (์ฐ๊ฒฐ์ฑ)" : 20
"๋์ด๋ ์ ํฉ์ฑ (๋ ๋ฒจ)" : 20
"์๊ฐ์๋ฃ ํ์ง (์ด๋ฏธ์ง)" : 15
"์๊ฐ ์ ํฉ์ฑ (๋ถ๋)" : 10
"๊ธฐ์ ์ ์ ํ์ฑ (๊ฒ์ฆ)" : 10
| ์ฐจ์ | ๊ฐ์ค์น | ํ๊ฐ ๊ธฐ์ค | ์ธ๋ถ ํญ๋ชฉ |
|---|---|---|---|
| ๐ ๋ด์ฉ ์์ฑ๋ | 25% | ํ์ต ๋ชฉํ ๋ฌ์ฑ๋ | ์ฃผ์ ์ปค๋ฒ๋ฆฌ์ง, ๊น์ด, ์์ |
| ๐ ๋ ผ๋ฆฌ์ ํ๋ฆ | 20% | ์น์ ๊ฐ ์ฐ๊ฒฐ์ฑ | ๊ตฌ์กฐ, ์ ๊ฐ, ์์ง์ฑ |
| ๐ฏ ๋์ด๋ ์ ํฉ์ฑ | 20% | ์๊ฐ์ ๋ ๋ฒจ ์ผ์น | ์ฉ์ด, ๋ณต์ก๋, ์ฌ์ ์ง์ |
| ๐ผ๏ธ ์๊ฐ์๋ฃ ํ์ง | 15% | ์ด๋ฏธ์ง/๋ค์ด์ด๊ทธ๋จ ์ถฉ๋ถ์ฑ | ๊ด๋ จ์ฑ, ํ์ง, ๋ฐฐ์น |
| โฑ๏ธ ์๊ฐ ์ ํฉ์ฑ | 10% | ๊ฐ์ ์๊ฐ vs ๋ถ๋ | ๋จ์ด ์, ๋ฐ๋, ํ์ด์ฑ |
| โ ๊ธฐ์ ์ ์ ํ์ฑ | 10% | ์ฌ์ค ๊ด๊ณ ๊ฒ์ฆ | ์ฝ๋, ๊ฐ๋ , ์ฉ์ด |
ํฉ๊ฒฉ ๊ธฐ์ค: 80์ ์ด์ (์๋ ๋ฐ๋ณต ๊ฐ์ , ์ต๋ 3ํ)
Q: ์ด๋ค Python ๋ฒ์ ์ด ํ์ํ๊ฐ์?
A: Python 3.11, 3.12, 3.13 ๋ชจ๋ ์ง์ํฉ๋๋ค.
- โ Python 3.11: ์๋ฒฝ ์ง์ (๊ถ์ฅ)
- โ Python 3.12: ์๋ฒฝ ์ง์ (v0.3.3+)
- โ Python 3.13: ์ง์๋จ (v0.3.8+, ๊ฒ์ฆ ์๋ฃ)
# ๋ฒ์ ํ์ธ
python --version
# Python 3.11 ํ๊ฒฝ ์์ฑ (๊ถ์ฅ)
conda create -n lecture-forge python=3.11
conda activate lecture-forge
pip install lecture-forgeQ: API ํค๊ฐ ๊ผญ ํ์ํ๊ฐ์?
A:
- ํ์: OpenAI API, Serper API
- ์ ํ: Pexels API, Unsplash API (์ด๋ฏธ์ง ๊ฒ์์ฉ)
์ด๋ฏธ์ง API ์์ด๋ PDF/์น ์ด๋ฏธ์ง๋ง์ผ๋ก ์๋ํฉ๋๋ค.
Q: ๋น์ฉ์ด ์ผ๋ง๋ ๋๋์?
A: ์ค์ ์ธก์ ๋น์ฉ (v0.2.4+ ๊ธฐ์ค):
- 60๋ถ ๊ฐ์: ์ฝ $0.035
- 180๋ถ ๊ฐ์: ์ฝ $0.105
(GPT-4o-mini ์ฌ์ฉ. ๋ณด์์ ์ด๋ก ์ถ์ : $0.22/180๋ถ)
์์ฑ ์๋ฃ ํ ์ ํํ ๋น์ฉ์ด ํ์๋ฉ๋๋ค.
Q: .env ํ์ผ ์ค์ ์ ๋ฐ๊พธ๋ ค๋ฉด?
A: .env ํ์ผ์ ์ด์ด ์ํ๋ ๊ฐ์ ์์ ํ์ธ์:
# ๊ฒ์ ๊ฒฐ๊ณผ ์ฆ๊ฐ
SEARCH_NUM_RESULTS=20
# ํฌ๋กค๋ง ๋ฒ์ ํ๋
DEEP_CRAWLER_MAX_PAGES=30
# ํ์์์ ์ฆ๊ฐ
WEB_SCRAPER_TIMEOUT=60๋ณ๊ฒฝ ํ ์ฌ์์ํ๋ฉด ๋ฐ๋ก ์ ์ฉ๋ฉ๋๋ค.
Q: ์คํ๋ผ์ธ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฐ์?
A:
- ์์ฑ ์: API ํ์ (OpenAI, Serper ๋ฑ)
- ์์ฑ ํ: HTML ํ์ผ๊ณผ ์ง์์ฐฝ๊ณ ๋ ์คํ๋ผ์ธ ์ฌ์ฉ ๊ฐ๋ฅ
- Chat ๋ชจ๋: ์ง์์ฐฝ๊ณ ๋ ์คํ๋ผ์ธ ์๋ํ์ง๋ง LLM API๋ ํ์
Q: ํ์ง ๋ ๋ฒจ์ ์ฐจ์ด๋?
A:
| ๋ ๋ฒจ | ์๊ณ๊ฐ | ์ฉ๋ | ์๊ฐ |
|---|---|---|---|
lenient |
70์ | ๋น ๋ฅธ ์ด์ | ์งง์ |
balanced |
80์ | ๊ธฐ๋ณธ๊ฐ โ | ๋ณดํต |
strict |
90์ | ๊ณ ํ์ง ํ๋ก๋์ | ๊น |
์๊ณ๊ฐ ๋ฏธ๋ฌ ์ ์ต๋ 3ํ ์๋ ๊ฐ์ ํฉ๋๋ค.
Q: Chat ๋ชจ๋ ์ข ๋ฃ ๋ฐฉ๋ฒ์?
A: ๋ค์ ์ค ํ๋ ์ฌ์ฉ:
/exit๋๋/quit(๊ถ์ฅ)Ctrl+C(๊ฐ์ ์ข ๋ฃ)
Q: ์ด๋ฏธ์ง๊ฐ ์ ๋๋ก ๋งค์นญ๋์ง ์์ผ๋ฉด?
A: v0.2.0์ Location-based ๋งค์นญ์ด ์๋์ผ๋ก ์๋ํฉ๋๋ค:
- PDF ์ด๋ฏธ์ง: 85% ์๋ ๋งค์นญ (ํ์ด์ง ๊ธฐ๋ฐ)
- ์น ์ด๋ฏธ์ง: ํค์๋ ๊ธฐ๋ฐ ๋ณด์
- ์๋ ํธ์ง:
lecture-forge edit-images๋ก ๊ต์ฒด ๊ฐ๋ฅ
Q: ํ ์คํธ๋ ์ด๋ป๊ฒ ์คํํ๋์?
# ์ ์ฒด ํ
์คํธ
pytest tests/ -v
# ์ปค๋ฒ๋ฆฌ์ง ํ์ธ
pytest tests/ --cov=lecture_forge --cov-report=html
# ํน์ ํ
์คํธ
pytest tests/unit/agents/test_content_writer.py -v
# ํน์ ์์ด์ ํธ๋ง
pytest tests/unit/agents/ -vQ: API ํธ์ถ์ด ์คํจํ๋ฉด ์ด๋ป๊ฒ ๋๋์?
A: v0.2.0๋ถํฐ ์๋ ์ฌ์๋ ๊ธฐ๋ฅ์ด ์์ต๋๋ค:
- ์ต๋ 3ํ ์ฌ์๋
- ์ง์ ๋ฐฑ์คํ: 2์ด โ 4์ด โ 10์ด
- ์ผ์์ ์ค๋ฅ ์๋ ๋ณต๊ตฌ
- OpenAI, Serper, Pexels, Unsplash ๋ชจ๋ ์ง์
Q: RAG ์ฟผ๋ฆฌ ์บ์ฑ์ ์ด๋ป๊ฒ ์๋ํ๋์?
A:
- ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ ๊ฐ์๋ฅผ MD5 ํด์๋ก ๋ณํํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์บ์
- ๋์ผ ์ง๋ฌธ์ 60% ๋น ๋ฅธ ์๋ต
- ์บ์ ํํธ/๋ฏธ์ค ํต๊ณ ์๋ ์ถ์
- ์ธ์ ๋์ ์ ์ง (ํ๋ก์ธ์ค ์ข ๋ฃ ์ ์ด๊ธฐํ)
Q: ์ค์ ์ ํ๊ฒฝ๋ณ๋ก ๋ค๋ฅด๊ฒ ํ๋ ค๋ฉด?
A: .env ํ์ผ์ ํ๊ฒฝ๋ณ๋ก ๋ถ๋ฆฌํ์ธ์:
# ๊ฐ๋ฐ ํ๊ฒฝ
.env.development
# ํ๋ก๋์
ํ๊ฒฝ
.env.production
# ์ฌ์ฉ
cp .env.production .env
lecture-forge create- ๐
editTemplateNotFound ์ฌ๋ฐ ๋ฐฉ์ง (v0.5.3):server.py์์Path(__file__)์ ๋๊ฒฝ๋ก๋กindex.html์ง์ ์ฝ๊ธฐ - ๐จ ์ฌ๋ผ์ด๋ ํ์ดํ ๊ฐ์ (v0.5.3): ์์ฑ์ผ ํ์ + ๊ฐ์ด๋ฐ ์ ๋ ฌ
- ๐ PyPI ๋ฐฐํฌ ๊ฒ์ฆ ๊ฐํ (v0.5.3): wheel ๋ด์ฉ ํ์ ํ์ธ ์ ์ฐจ ์ถ๊ฐ (
unzip -l dist/*.whl | grep templates/editor) - ๐ ์น ๊ธฐ๋ฐ ๊ฐ์ ํธ์ง๊ธฐ (
edit๋ช ๋ น์ด, v0.5.0): 3-ํจ๋ SPA ์๋ํฐ (ํฌํธ 5757) โ ์น์ CRUD, Markdown ํธ์ง (EasyMDE), ์ด๋ฏธ์ง ๊ฐค๋ฌ๋ฆฌยท๋์ ๊ฒ์ - ๐ฆ ์์กด์ฑ ์ถ๊ฐ:
flask>=3.0.0,markdownify>=0.12.1ยท CLI ๋ช ๋ น์ด 8๊ฐ โ 9๊ฐ - ๐ ๋ฒ๊ทธ์์ (v0.5.1):
editTemplateNotFound,improve --to-slidesIndexError - ๐ง
BaseAgentmax_tokens์ ์ญํ (v0.5.2):MAX_LLM_TOKENS(๊ธฐ๋ณธ 4096) ํ๊ฒฝ๋ณ์ ์ ์ด - ๐ RMC ๋ฃจํ ์ํ (v0.5.2):
MAX_RMC_ROUNDS(๊ธฐ๋ณธ 1) โ ๋ฌดํ ๋ฐ๋ณต ๋ฐฉ์ง - โก ๋ค์ด์ด๊ทธ๋จ ๋ณ๋ ฌ ์์ฑ (v0.5.2):
ThreadPoolExecutor๋ก ์น์ ๋น ๋ค์ค ๋ค์ด์ด๊ทธ๋จ ๋ณ๋ ฌ ์ฒ๋ฆฌ - ๐ HTML ์น์
ID ์ค๋ณต ๋ฐฉ์ง (v0.5.2): ์์ฑ ์์ ์ค๋ณต ์ ๊ฑฐ (
_2,_3suffix)
- ๐ ๊ฒ์ ์ปค๋ฒ๋ฆฌ์ง (v0.4.0): ์น์
์ ์ฒด ์ธ๋ฑ์ฑ,
--re-evaluateHTML ํต๊ณ ์๋ ์ ๋ฐ์ดํธ,--to-slides๊ธฐ๋ณธ LLM ์ฌ์์ฑ (โค35์) - ๐ translate ๋ช
๋ น์ด (v0.4.1): PDF ์ํฐํฉํธ ์ ๊ฑฐ, TOC ๊ฐ์ง, AI/ML ์ฉ์ด์ฌ์ 25๊ฐ,
--with-diagramsopt-in - ๐๏ธ ์ํคํ
์ฒ ์ ๋ฆฌ (v0.4.3):
agents/โcli/import ์๋ฐ ์ ๊ฑฐ, config ์์ ํ์ฑ, ํ ์คํธ 36๊ฐ ์ถ๊ฐ
- ๐ง RMC ์๊ธฐ๊ฒํ (v0.3.8): CurriculumDesignerยทContentWriterยทQAAgent 2๋จ๊ณ ์๊ธฐ๋ฐ์ฑ, ํ ๋ฃจ์๋ค์ด์ ํญ๋ชฉ ์ ๊ฑฐ, Python 3.13 ๊ฒ์ฆ
- ๐ผ๏ธ UI & ์ฌ๋ผ์ด๋ (v0.3.7): Lightbox ํด๋ฆญ ํ๋, ํ๊ตญ์ด ์๋ธ์คํธ๋ง ๊ฒ์, Mermaid ์ ์ฒด ๋๋น, API ์์
- ๐ง ์ฝ๋ ํ์ง (v0.3.6):
make_api_retry()ํฉํ ๋ฆฌ,BaseImageSearchTool, RAG ํ๋ผ๋ฏธํฐ ํ๊ฒฝ๋ณ์ํ, Chat ๋ก๊ทธ - ๐ฏ RAG ํ์ง (v0.3.5): 400๋จ์ด ๊ตฌ์กฐํ ๋ต๋ณ, 15+15 ๋์ผ์ฟผ๋ฆฌ(top-12), ChromaDB ์ ๋ขฐ๋ ์์ , Rich ๋ ๋๋ง
- โก Async I/O (v0.3.4):
--async-mode, httpx ๋ณ๋ ฌ ์์ง 70% ํฅ์ - โจ๏ธ ์ ๋ ฅ ์์คํ (v0.3.3): prompt-toolkit, ํ๊ตญ์ด ์๋ฒฝ ์ง์, ํ์คํ ๋ฆฌยท์๋์์ฑ
- ๐ ๋ค๊ตญ์ด (v0.3.2): langdetect, Cross-lingual ๋์ผ์ฟผ๋ฆฌ, ์ง๋ฅํ ์ฌ๋ญํน
- ๐ ๋๋ ํ ๋ฆฌ (v0.3.1):
~/Documents/LectureForge/,home์ปค๋งจ๋, ์๋ ๋ง์ด๊ทธ๋ ์ด์ - ๐จ ํ๋ ์ ํ ์ด์ (v0.3.0): Mermaid ๋ค์ด์ด๊ทธ๋จ, ์์ธ์ฒ๋ฆฌ ์์คํ (9๊ฐ), ์ฌ๋ผ์ด๋ ์ต์ ํ
- โก RAG ์ฟผ๋ฆฌ ์บ์ฑ(60%), ์๋ API ์ฌ์๋(์ง์ ๋ฐฑ์คํ), Config ๋ฆฌํฉํ ๋ง(15+ ํ๊ฒฝ๋ณ์)
- ๐ ์ด๋ฏธ์ง ํฌ๊ธฐ ๋ฒ๊ทธ ์์ (์๋ณธ ๋ณด์กด), Visual scoreยท์ฌ๋ผ์ด๋ ๋ฒ๊ทธ ์์ , Full HD WebP ์ง์
- ๐งช 77+ ๋จ์ ํ ์คํธ, ํ์ ํํธ 40% โ 75%
- 10๊ฐ ์ ๋ฌธ ์์ด์ ํธ, ๋ฉํฐ์์ค ์์ง (PDFยทURLยท๊ฒ์)
- Location-based ์ด๋ฏธ์ง ๋งค์นญ (+750%), ChromaDB ์ง์์ฐฝ๊ณ
- 6์ฐจ์ ํ์ง ํ๊ฐ, HTML ์ถ๋ ฅ, Reveal.js ์ฌ๋ผ์ด๋ ๋ณํ
๊ธฐ์ฌ๋ฅผ ํ์ํฉ๋๋ค! ๋ค์ ์ ์ฐจ๋ฅผ ๋ฐ๋ผ์ฃผ์ธ์:
- ์ด์ ์์ฑ: ๋ณ๊ฒฝ์ฌํญ์ ๋จผ์ ๋ ผ์
- ํฌํฌ & ๋ธ๋์น: feature ๋ธ๋์น ์์ฑ
- ํ ์คํธ ์์ฑ: ์ ๊ธฐ๋ฅ์ ๋ํ ํ ์คํธ ์ถ๊ฐ
- PR ์ ์ถ: ๋ณ๊ฒฝ์ฌํญ ์ค๋ช ๊ณผ ํจ๊ป ์ ์ถ
์์ธํ ๋ด์ฉ์ CONTRIBUTING.md๋ฅผ ์ฐธ์กฐํ์ธ์.
MIT License - ์์ธํ ๋ด์ฉ์ LICENSE ์ฐธ์กฐ
- ์ด์ ํธ๋์ปค: GitHub Issues
- ํ๋ก์ ํธ ๊ฐ์ด๋: CLAUDE.md
- ๊ธฐ์ ๋ถ์: INPUT_LIMITS_ANALYSIS.md
- ํ ์คํธ ๊ฐ์ด๋: tests/README.md
์ด ํ๋ก์ ํธ๋ ๋ค์ ์คํ์์ค ํ๋ก์ ํธ๋ค์ ํ์ฉํฉ๋๋ค:
- LangChain - Multi-Agent ํ๋ ์์ํฌ
- ChromaDB - ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- OpenAI - GPT-4o ๋ชจ๋ธ
- Serper - ๊ฒ์ API
- Pexels & Unsplash - ์ด๋ฏธ์ง API
Made with โค๏ธ by Sungwoo Kim
โญ ์ด ํ๋ก์ ํธ๊ฐ ๋์์ด ๋์๋ค๋ฉด GitHub Star๋ฅผ ๋๋ฌ์ฃผ์ธ์!