AI-powered lecture material generator with multilingual support using LangChain
Project description
LectureForge ๐
AI-Powered Lecture Material Generator using Multi-Agent Pipeline System
๐ v0.5.1 | ์น ๊ธฐ๋ฐ ๊ฐ์ ํธ์ง๊ธฐ ๐ +
edit๋ช ๋ น์ด + Flask SPA ์๋ํฐ (ํฌํธ 5757)
PDF, ์นํ์ด์ง, ์ธํฐ๋ท ๊ฒ์์์ ์ ๋ณด๋ฅผ ์์งํ์ฌ ๊ณ ํ์ง ๊ฐ์์๋ฃ๋ฅผ ์๋ ์์ฑํ๋ AI ์์คํ ์ ๋๋ค.
ํต์ฌ ํต๊ณ: 12๊ฐ ์์ด์ ํธ | 9๊ฐ ๋๊ตฌ | 9๊ฐ CLI ๋ช ๋ น | 1,437+ ํ ์คํธ (~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,437+ ํ ์คํธ ํจ์ (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๊ฐ ์นดํ ๊ณ ๋ฆฌ)
- ๐ ํ๋กฌํํธ ๊ด๋ฆฌ: ํ ํ๋ฆฟ ๊ธฐ๋ฐ ํ๋กฌํํธ ์์คํ
๐ ์ต๊ทผ ๊ฐ์ ์ฌํญ (v0.5.0)
์น ๊ธฐ๋ฐ ๊ฐ์ ํธ์ง๊ธฐ ์ถ๊ฐ:
edit๋ช ๋ น์ด: 3-ํจ๋ SPA ์๋ํฐ (ํฌํธ 5757) โ ๋ธ๋ผ์ฐ์ ์์ ๊ฐ์ ์น์ ์ง์ ํธ์ง- ์น์ CRUD: ์น์ ์ถ๊ฐยท์ญ์ ยท์ด๋ + Markdown ํธ์ง๊ธฐ (EasyMDE, ์ค์๊ฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ)
- ์ด๋ฏธ์ง ๊ด๋ฆฌ: ๊ฐค๋ฌ๋ฆฌ ๋ทฐยท๋์ ๊ฒ์ยท๊ต์ฒดยท์ ๋ก๋ (Vector DB RAG ์ฐ๋)
- Flask + markdownify:
flask>=3.0.0,markdownify>=0.12.1์์กด์ฑ ์ถ๊ฐ
์ ์ฒด ๋ณ๊ฒฝ ์ด๋ ฅ์ ์๋ ๋ณ๊ฒฝ ์ด๋ ฅ ์ฐธ์กฐ
๐ ๋น ๋ฅธ ์์
1๏ธโฃ ์ค์น
๋ฐฉ๋ฒ 1: pipx๋ก ์ค์น (๊ฐ์ฅ ๊ฐํธ โญโญ)
# 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 create
pipx์ ์ฅ์ :
- โ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ ์๋ ์ค์น
- โ
์์คํ
์ ์ญ์์
lecture-forge๋ช ๋ น ์ฌ์ฉ ๊ฐ๋ฅ - โ ๋ค๋ฅธ Python ํ๋ก์ ํธ์ ์์กด์ฑ ์ถฉ๋ ์์
- โ conda/venv ํ๊ฒฝ ๊ด๋ฆฌ ๋ถํ์
๋ฐฉ๋ฒ 2: PyPI + conda ํ๊ฒฝ (๊ถ์ฅ โญ)
# Python 3.11 ํ๊ฒฝ ์์ฑ (๊ฐ๋ ฅ ๊ถ์ฅ)
conda create -n lecture-forge python=3.11
conda activate lecture-forge
# PyPI์์ ์ค์น
pip install lecture-forge
# ์น ์คํฌ๋ํ์ฉ ๋ธ๋ผ์ฐ์ ์ค์น
playwright install chromium
๋ฐฉ๋ฒ 3: ๊ฐ๋ฐ ์ค์น (์์ค ์ฝ๋ ์์ ์)
# 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 chromium
Python ๋ฒ์ ํธํ์ฑ:
- โ Python 3.11: ๊ฐ๋ ฅ ๊ถ์ฅ - ๋ชจ๋ ์์กด์ฑ ์๋ฒฝ ์ง์
- โ Python 3.12: ์๋ฒฝ ์ง์ - v0.3.3๋ถํฐ ๊ณต์ ์ง์
- โ Python 3.13: ์ง์๋จ - v0.3.8๋ถํฐ ๊ฒ์ฆ ์๋ฃ
Python 3.11, 3.12, 3.13 ๋ชจ๋ ์ง์ํฉ๋๋ค.
2๏ธโฃ ํ๊ฒฝ ์ค์
๋ฐฉ๋ฒ 1: ๋ํํ ์ค์ (๊ถ์ฅ โญ)
# ๋ํํ ์ค์ ๋ง๋ฒ์ฌ ์คํ
lecture-forge init
์ด ๋ช ๋ น์ด๋ ๋ค์์ ์ํํฉ๋๋ค:
- โ
ํ๋ซํผ๋ณ ์ต์ ์์น์
.envํ์ผ ์๋ ์์ฑ- Windows:
%USERPROFILE%\Documents\LectureForge\.env - Mac/Linux:
~/Documents/LectureForge/.env
- Windows:
- โ ํ์ API ํค ์ ๋ ฅ ์๋ด (OpenAI, Serper)
- โ ์ ํ์ ์ด๋ฏธ์ง ๊ฒ์ API ์ค์ (Pexels, Unsplash)
- โ ํ์ผ ๊ถํ ์๋ ์ค์ (Unix/Mac: 600)
๋ฐฉ๋ฒ 2: ์๋ ์ค์
# .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 ํ์ผ ์ฐธ์กฐ
.env ํ์ผ ์์น
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ํ/์๊ฐ)
3๏ธโฃ ์ฒซ ๊ฐ์ ์์ฑ
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
๋ช ๋ น์ด ์์ธ ๊ฐ์ด๋
๐ init - ์ด๊ธฐ ์ค์
๊ธฐ๋ณธ ์ฌ์ฉ:
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)
๐ create - ๊ฐ์ ์์ฑ
๊ธฐ๋ณธ ์ฌ์ฉ:
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
๐ฌ chat - Q&A ๋ชจ๋
๊ธฐ๋ณธ ์ฌ์ฉ:
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
โ๏ธ edit - ์น ๊ธฐ๋ฐ ๊ฐ์ ํธ์ง๊ธฐ (v0.5.0+)
๊ธฐ๋ณธ ์ฌ์ฉ:
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)์ ์ง์ํ์ง ์์ต๋๋ค.
๐ผ๏ธ edit-images - ์ด๋ฏธ์ง ํธ์ง
๊ธฐ๋ณธ ์ฌ์ฉ:
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
๐ translate - ์๋ฌธ PDF โ ํ๊ตญ์ด ๊ฐ์์๋ฃ (v0.4.1+)
๊ธฐ๋ณธ ์ฌ์ฉ:
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
๐จ improve - ๊ฐ์ ํฅ์
๊ธฐ๋ณธ ์ฌ์ฉ:
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
๐งน cleanup - ์ง์๋ฒ ์ด์ค ๊ด๋ฆฌ
๊ธฐ๋ณธ ์ฌ์ฉ:
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 ํ์ผ)
๋ ๋ง์ ์ ์ด๊ฐ ํ์ํ ๊ฒฝ์ฐ .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+ ํ๊ฒฝ๋ณ์)
๐๏ธ ์์คํ ์ํคํ ์ฒ
Multi-Agent ํ์ดํ๋ผ์ธ (12๊ฐ ์ ๋ฌธ ์์ด์ ํธ)
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
12๊ฐ ์ ๋ฌธ ์์ด์ ํธ
| # | ์์ด์ ํธ | ์ญํ | ํ์ผ |
|---|---|---|---|
| 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 |
9๊ฐ ๋๊ตฌ (Tools)
| # | ๋๊ตฌ | ์ญํ | ํ์ผ |
|---|---|---|---|
| 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 |
ํ์ง ํ๊ฐ ์์คํ (6์ฐจ์)
%%{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ํ)
โ FAQ
์ค์น ๋ฐ ์ค์
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-forge
Q: 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/ -v
Q: 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
๐ ๋ณ๊ฒฝ ์ด๋ ฅ
v0.5.0 ๋ฒ๊ทธ์์ (2026-02-28)
- ๐
editTemplateNotFound ์์ :templates/editor/index.htmlํ์ผ ๋๋ฝ์ผ๋ก Flask ํ ํ๋ฆฟ ์ค๋ฅ ๋ฐ์ โ ํ์ผ ์์ฑ์ผ๋ก ์์ - ๐
improve --to-slidesIndexError ์์ :slides/parser.py์์ LLM์ด ๋น bullet ๋ฆฌ์คํธ๋ฅผ ๋ฐํํ ๋ IndexError ๋ฐ์ โ ๋น ๋ฆฌ์คํธ ๊ฐ๋ ์ถ๊ฐ + ์๋ณธ ํ ์คํธ ํด๋ฐฑ
v0.5.0 (2026-02-26) - ๐ ์น ๊ธฐ๋ฐ ๊ฐ์ ํธ์ง๊ธฐ
- ๐ ์น ๊ธฐ๋ฐ ๊ฐ์ ํธ์ง๊ธฐ (
edit๋ช ๋ น์ด): 3-ํจ๋ SPA ์๋ํฐ (ํฌํธ 5757) โ ์น์ CRUD, Markdown ํธ์ง (EasyMDE), ์ด๋ฏธ์ง ๊ฐค๋ฌ๋ฆฌยท๋์ ๊ฒ์ - ๐ฆ ์์กด์ฑ ์ถ๊ฐ:
flask>=3.0.0,markdownify>=0.12.1 - ๐ CLI ๋ช ๋ น์ด: 8๊ฐ โ 9๊ฐ
v0.4.x (2026-02-22 ~ 2026-02-25) - ๐ ๋ณด๊ฐยท๋ฒ์ญยท์ํคํ ์ฒ ์ ๋ฆฌ
- ๐ ๊ฒ์ ์ปค๋ฒ๋ฆฌ์ง (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๊ฐ ์ถ๊ฐ
v0.3.x (2026-02-12 ~ 2026-02-20) - ๊ธฐ๋ฐ ๊ธฐ๋ฅ ๊ตฌ์ถ
- ๐ง 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๊ฐ), ์ฌ๋ผ์ด๋ ์ต์ ํ
v0.2.x (2026-02-09 ~ 2026-02-12) - ํ์งยท์์ ์ฑ
- โก RAG ์ฟผ๋ฆฌ ์บ์ฑ(60%), ์๋ API ์ฌ์๋(์ง์ ๋ฐฑ์คํ), Config ๋ฆฌํฉํ ๋ง(15+ ํ๊ฒฝ๋ณ์)
- ๐ ์ด๋ฏธ์ง ํฌ๊ธฐ ๋ฒ๊ทธ ์์ (์๋ณธ ๋ณด์กด), Visual scoreยท์ฌ๋ผ์ด๋ ๋ฒ๊ทธ ์์ , Full HD WebP ์ง์
- ๐งช 77+ ๋จ์ ํ ์คํธ, ํ์ ํํธ 40% โ 75%
v0.1.0 (2026-02-08) - ๐ Initial Release
- 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๋ฅผ ๋๋ฌ์ฃผ์ธ์!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lecture_forge-0.5.1.tar.gz.
File metadata
- Download URL: lecture_forge-0.5.1.tar.gz
- Upload date:
- Size: 328.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
10d53bca9bb324455f7c3fca39930c9e66603a887d04115a8c7ae5e2fe35a93f
|
|
| MD5 |
569d8e2436080814334166de2c515cee
|
|
| BLAKE2b-256 |
d0fd78ad7dd00516af8e52b4716de45f9268d62cc57bfc9cbf21b9639db05fbb
|
File details
Details for the file lecture_forge-0.5.1-py3-none-any.whl.
File metadata
- Download URL: lecture_forge-0.5.1-py3-none-any.whl
- Upload date:
- Size: 330.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b484a2725dab69c3432d1da8015ec6606acd10eaf152109c8db4bc6f904d6d6
|
|
| MD5 |
5586fe929e8043ab44e03c1a80a88fd5
|
|
| BLAKE2b-256 |
a0c6104e525a31593d25fa27f956061008134698d5b4a2ffef8add7e61046933
|