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.8 | ์ด๋ฏธ์ง ๋ฒ๋ค๋ง & PDF ์ปค๋ฒ๋ฆฌ์ง ๊ท ํ ๊ฐ์
PDF, ์นํ์ด์ง, ์ธํฐ๋ท ๊ฒ์์์ ์ ๋ณด๋ฅผ ์์งํ์ฌ ๊ณ ํ์ง ๊ฐ์์๋ฃ๋ฅผ ์๋ ์์ฑํ๋ AI ์์คํ ์ ๋๋ค.
ํต์ฌ ํต๊ณ: 12๊ฐ ์์ด์ ํธ | 9๊ฐ ๋๊ตฌ | 9๊ฐ CLI ๋ช ๋ น | 1,877+ ํ ์คํธ (~81% ์ปค๋ฒ๋ฆฌ์ง) | ~$0.035/60๋ถ ๊ฐ์ | Python 3.11 ๊ถ์ฅ
๋ฐ์ดํฐ ์์น: ~/Documents/LectureForge/ (์ผ๋ฐ ํด๋, Finder/ํ์๊ธฐ์์ ๋ฐ๋ก ์ ๊ทผ)
๐ ๋ชฉ์ฐจ
โจ ์ฃผ์ ๊ธฐ๋ฅ
์ปจํ ์ธ ์์ฑ
- ๐ ๋ฉํฐ์์ค ์์ง: PDF, URL, ์น ๊ฒ์์ ํตํ ํฌ๊ด์ ์ ๋ณด ์์ง
- ๐ Location-based ์ด๋ฏธ์ง ๋งค์นญ: RAG ์ปจํ ์คํธ ๊ธฐ๋ฐ ์๋ ์ด๋ฏธ์ง ๋ฐฐ์น (+750% ํ์ฉ๋ฅ )
- ๐ผ๏ธ ๋ํํ ์ด๋ฏธ์ง ํธ์ง: ์์ฑ๋ ๊ฐ์์ ์ด๋ฏธ์ง ์ญ์ /๊ต์ฒด (Vector DB ๊ธฐ๋ฐ ๋์ ๊ฒ์)
- ๐จ ๊ตฌ์กฐํ๋ HTML ์ถ๋ ฅ: Mermaid ๋ค์ด์ด๊ทธ๋จ, ๊ฒ์ ์ธ๋ฑ์ค, ์ฝ๋ ํ์ด๋ผ์ดํ
- ๐ฌ ํ๋ ์ ํ
์ด์
์ฌ๋ผ์ด๋: Reveal.js ๊ธฐ๋ฐ ์๋ ๋ณํ (
--to-slides) โ ์น์ ๋ณ LLM ์ฌ์์ฑ (โค35์, ๋ง์ค์ํ ์์), ๋ฐํ์ ๋ ธํธ ๊ธฐ๋ณธ ํฌํจ (--without-notes๋ก ์ ์ธ)
ํ์ง ๋ณด์ฆ
- โ 6์ฐจ์ ํ์ง ํ๊ฐ: ์์ฑ๋, ํ๋ฆ, ์๊ฐ, ๋์ด๋, ์๊ฐ์๋ฃ, ์ ํ์ฑ
- ๐ ์๋ ๊ฐ์ : ํ์ง ๊ธฐ์ค ๋ฏธ๋ฌ ์ ์ต๋ 3ํ ์๋ ์์
- ๐ง RMC ์๊ธฐ๊ฒํ (v0.3.8+): ์์ด์ ํธ ๋ด๋ถ 2๋จ๊ณ ์๊ธฐ๋ฐ์ฑ (Layer 1 ๊ฒํ + Layer 2 ๊ฒํ ์ ๊ฒํ )
- CurriculumDesigner: ์น์ ์์ ๋ ผ๋ฆฌ์ฑ, ํ์ต๋ชฉํ ์ปค๋ฒ๋ฆฌ์ง, ์ ์ ๋ด์ฉ ์์ ์๋ ๊ฒ์ฆ ๋ฐ ์์
- ContentWriter: ๊ฐ๋ ๋น์ฝ, ์ค๋ช ๋ชจํธ์ฑ, ํ๋ฆ ๋จ์ ๋ฑ ์๋ฏธ๋ก ์ ํ์ง ๊ฒํ ํ ์์
- QAAgent: ๊ฐ ์ฃผ์ฅ์ ์์ค ์ปจํ ์คํธ์ ๋์กฐ โ ํ ๋ฃจ์๋ค์ด์ ํญ๋ชฉ ์ ๊ฑฐ ๋๋ ๊ฒฝ๊ณ ํ์
- ๐งช ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง: 1,877+ ํ ์คํธ ํจ์ (~81% ์ปค๋ฒ๋ฆฌ์ง)
์ง์ ๊ด๋ฆฌ
- ๐๏ธ 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๊ฐ ์นดํ ๊ณ ๋ฆฌ)
- ๐ ํ๋กฌํํธ ๊ด๋ฆฌ: ํ ํ๋ฆฟ ๊ธฐ๋ฐ ํ๋กฌํํธ ์์คํ
- ๐ฆ Ollama ์ง์ (v0.5.5+):
LLM_PROVIDER=ollama๋ก ๋ก์ปฌ LLM ์ฌ์ฉ โ OpenAI API ํค ์์ด ๊ฐ์ ์์ฑ ๊ฐ๋ฅ
๐ ์ต๊ทผ ๊ฐ์ ์ฌํญ (v0.5.8)
- ๐ฆ ์ด๋ฏธ์ง ๋ฒ๋ค๋ง: HTML ์์ฑ ์ ์ฐธ์กฐ ์ด๋ฏธ์ง๋ฅผ
{๊ฐ์๋ช }_images/ํด๋๋ก ์๋ ๋ณต์ฌ โcleanupํ์๋ ์ด๋ฏธ์ง ์๊ตฌ ๋ณด์กด (html_assembler.py) - ๐ PDF ์ปค๋ฒ๋ฆฌ์ง ๊ท ํ ๊ฐ์ : ํ ํฝ ์ถ์ถ ํ๋กฌํํธ์ ๋ฌธ์ ์ ์ฒด ๊ท ํ ๋ฐฐ๋ถ ๊ท์น ๋ช
์, probe query 10โ14๊ฐ ํ์ฅ (ํ๊ฐยท๋ฐฐํฌยทํ์ธํ๋ยท์์ ์ฑ ์ถ๊ฐ) โ ์์ด์ ํธ ํธ์ค ๋ฐฉ์ง (
content_analyzer.py)
์ ์ฒด ๋ณ๊ฒฝ ์ด๋ ฅ์ ์๋ ๋ณ๊ฒฝ ์ด๋ ฅ ์ฐธ์กฐ
๐ ๋น ๋ฅธ ์์
1๏ธโฃ ์ค์น
๋ฐฉ๋ฒ 1: pipx๋ก ์ค์น (๊ฐ์ฅ ๊ฐํธ โญโญ)
# pipx ์ค์น (์์ง ์๋ ๊ฒฝ์ฐ)
pip install pipx
pipx ensurepath
# lecture-forge ์ค์น (๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ ์๋ ์ค์น)
pipx install lecture-forge
# playwright ์ค์น (pipx ํ๊ฒฝ์ ์ฃผ์
ํ ๋ธ๋ผ์ฐ์ ๋ค์ด๋ก๋)
pipx inject lecture-forge 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:
- โ LLM ๊ณต๊ธ์ ์ ํ (OpenAI / Ollama) ๋ฐ API ํค ์ ๋ ฅ ์๋ด โ Ollama ์ ํ ์ OpenAI ๋ถํ์
- โ ์ ํ์ ์ด๋ฏธ์ง ๊ฒ์ API ์ค์ (Pexels, Unsplash)
- โ ํ์ผ ๊ถํ ์๋ ์ค์ (Unix/Mac: 600)
๋ฐฉ๋ฒ 2: ์๋ ์ค์
# .env ํ์ผ ์์ฑ (ํ๋ก์ ํธ ๊ฐ๋ฐ ์)
cp .env.example .env
.env ํ์ผ์ ์ด์ด ๋ค์ ํญ๋ชฉ์ ์ค์ ํ์ธ์:
ํ์ API ํค (OpenAI ์ฌ์ฉ ์):
# OpenAI API (OpenAI ์ฌ์ฉ ์ ํ์, Ollama ์ฌ์ฉ ์ ๋ถํ์)
OPENAI_API_KEY=sk-proj-...
# ๊ฒ์ API (ํ์)
SERPER_API_KEY=... # ๋ฌด๋ฃ: 2,500ํ/์
Ollama ๋ก์ปฌ LLM ์ฌ์ฉ ์ (OpenAI API ํค ๋ถํ์):
LLM_PROVIDER=ollama
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=llama3.2
OLLAMA_EMBEDDING_MODEL=nomic-embed-text
SERPER_API_KEY=... # ์น ๊ฒ์์ ์ฌ์ ํ ํ์
์ ํ ์ฌํญ:
# ์ด๋ฏธ์ง ๊ฒ์ 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ํ/์๊ฐ)
- Ollama: ollama.com (๋ฌด๋ฃ, ๋ก์ปฌ ์คํ) โ
OPENAI_API_KEY๋ถํ์
3๏ธโฃ ์ฒซ ๊ฐ์ ์์ฑ
lecture-forge create
๋ํํ์ผ๋ก ๊ฐ์ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ฉด ์๋์ผ๋ก ๊ฐ์์๋ฃ๊ฐ ์์ฑ๋ฉ๋๋ค! ๐
๐ป ์ฌ์ฉ๋ฒ
๋ช ๋ น์ด ๊ฐ์
| ๋ช ๋ น์ด | ์ค๋ช | ์ฃผ์ ์ต์ |
|---|---|---|
| init | ์ด๊ธฐ ์ค์ | --path, --reconfigure/-r, --show/-s |
| 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, --without-notes, --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 |
-r, --reconfigure |
๊ธฐ์กด ์ค์ ์ ์งํ๋ฉฐ ํญ๋ชฉ๋ณ ์์ | --reconfigure |
-s, --show |
ํ์ฌ ์ค์ ๊ฐ ์ถ๋ ฅ (์์ ์์) | --show |
๊ธฐ๋ณธ ์ ์ฅ ์์น:
- Windows:
C:\Users\<username>\Documents\LectureForge\.env - Mac/Linux:
~/Documents/LectureForge/.env
์์ :
# ์ฒ์ ์ค์ (๊ถ์ฅ)
lecture-forge init
# ํน์ ํญ๋ชฉ๋ง ์์ (๊ธฐ์กด API ํค ์ ์ง)
lecture-forge init --reconfigure
# ํ์ฌ ์ค์ ํ์ธ
lecture-forge init --show
# ์ปค์คํ
๋๋ ํ ๋ฆฌ ์ฌ์ฉ
lecture-forge init --path /my/config/dir
ํ๋ ์ผ (๊ธฐ๋ณธ ๋ชจ๋):
- LLM ๊ณต๊ธ์ ์ ํ (OpenAI / Ollama)
- ํ์ API ํค ์ ๋ ฅ (OpenAI, Serper) โ Ollama ์ฌ์ฉ ์ OpenAI ๋ถํ์
- ํ์ง ์ค์ (๊ธฐ๋ณธ๊ฐ์ผ๋ก ๊ฑด๋๋ฐ๊ธฐ ๊ฐ๋ฅ)
- ์ ํ์ ์ด๋ฏธ์ง API ์ค์ (Pexels, Unsplash)
.envํ์ผ ์๋ ์์ฑ- ๊ธฐ๋ณธ ์ค์ ๊ฐ ์๋ ์ค์
- ํ์ผ ๊ถํ ๋ณด์ ์ค์ (Unix/Mac)
๐ create - ๊ฐ์ ์์ฑ
๊ธฐ๋ณธ ์ฌ์ฉ:
lecture-forge create
๋ํํ์ผ๋ก ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ฉด ์๋์ผ๋ก ๊ฐ์๋ฅผ ์์ฑํฉ๋๋ค.
์ต์ :
| ์ต์ | ์ค๋ช | ์ฌ์ฉ ์ |
|---|---|---|
-c, --config FILE |
YAML ์ค์ ํ์ผ ์ฌ์ฉ | --config lecture.yaml |
-i, --interactive |
์์ฑ ์ค ๋ํํ Q&A ๋ชจ๋ ํ์ฑํ | --interactive |
--image-search / --no-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 |
--without-notes |
๋ฐํ์ ๋
ธํธ ์์ด ์ฌ๋ผ์ด๋ ์์ฑ (--to-slides ์ ๋
ธํธ๋ ๊ธฐ๋ณธ ํฌํจ) |
--to-slides --without-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
# ๋ฐํ์ ๋
ธํธ ์์ด ์ฌ๋ผ์ด๋ ๋ณํ
lecture-forge improve outputs/lecture.html --to-slides --without-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 ๋ชจ๋ โ ํ์: OpenAI API, Serper API
- Ollama ๋ชจ๋ (๋ก์ปฌ LLM,
LLM_PROVIDER=ollama) โ ํ์: Serper API๋ง (OpenAI API ๋ถํ์) - ์ ํ: Pexels API, Unsplash API (์ด๋ฏธ์ง ๊ฒ์์ฉ)
์ด๋ฏธ์ง API(Pexels, Unsplash) ์์ด๋ PDF/์น ์ด๋ฏธ์ง๋ง์ผ๋ก ์๋ํฉ๋๋ค.
Q: ๋น์ฉ์ด ์ผ๋ง๋ ๋๋์?
A: ์ค์ ์ธก์ ๋น์ฉ (OpenAI GPT-4o-mini ์ฌ์ฉ ์):
- 60๋ถ ๊ฐ์: ์ฝ $0.035
- 180๋ถ ๊ฐ์: ์ฝ $0.105
(๋ณด์์ ์ด๋ก ์ถ์ : $0.22/180๋ถ)
๐ก Ollama ์ฌ์ฉ ์: LLM_PROVIDER=ollama๋ก ๋ก์ปฌ LLM์ ์ฌ์ฉํ๋ฉด LLM ๋น์ฉ ๋ฌด๋ฃ (ํ๋์จ์ด๋ง ํ์)
์์ฑ ์๋ฃ ํ ์ ํํ ๋น์ฉ์ด ํ์๋ฉ๋๋ค.
Q: .env ํ์ผ ์ค์ ์ ๋ฐ๊พธ๋ ค๋ฉด?
A: .env ํ์ผ์ ์ด์ด ์ํ๋ ๊ฐ์ ์์ ํ์ธ์:
# ๊ฒ์ ๊ฒฐ๊ณผ ์ฆ๊ฐ
SEARCH_NUM_RESULTS=20
# ํฌ๋กค๋ง ๋ฒ์ ํ๋
DEEP_CRAWLER_MAX_PAGES=30
# ํ์์์ ์ฆ๊ฐ
WEB_SCRAPER_TIMEOUT=60
๋ณ๊ฒฝ ํ ์ฌ์์ํ๋ฉด ๋ฐ๋ก ์ ์ฉ๋ฉ๋๋ค.
์ฌ์ฉ๋ฒ
Q: ์คํ๋ผ์ธ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฐ์?
A:
- Ollama ์ฌ์ฉ ์ (
LLM_PROVIDER=ollama): ๊ฐ์ ์์ฑ๋ ์คํ๋ผ์ธ ๊ฐ๋ฅ (์น ๊ฒ์ ๊ธฐ๋ฅ ์ ์ธ) - OpenAI ์ฌ์ฉ ์: ์์ฑ ์ API ํ์ (OpenAI, Serper)
- ์์ฑ ํ: HTML ํ์ผ๊ณผ ์ง์์ฐฝ๊ณ ๋ ์ด๋ ๋ชจ๋์์๋ ์คํ๋ผ์ธ ์ฌ์ฉ ๊ฐ๋ฅ
- Chat ๋ชจ๋: Ollama๋ผ๋ฉด ์์ ์คํ๋ผ์ธ ๊ฐ๋ฅ, OpenAI๋ผ๋ฉด 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.8 (2026-04-16) - ๐ผ ์ด๋ฏธ์ง ๋ฒ๋ค๋ง & ์ปค๋ฒ๋ฆฌ์ง ๊ฐ์
- ๐ฆ ์ด๋ฏธ์ง ๋ฒ๋ค๋ง (
html_assembler.py):_bundle_images()๋ฉ์๋ ์ถ๊ฐ โ HTML ์์ฑ ์ ์ฐธ์กฐ ์ด๋ฏธ์ง๋ฅผ{๊ฐ์๋ช }_images/ํด๋๋ก ๋ณต์ฌ,cleanupํ์๋ ์ด๋ฏธ์ง ๋ณด์กด - ๐ ํ ํฝ ์ถ์ถ ๊ท ํ ๋ฐฐ๋ถ (
content_analyzer.py):_extract_key_topicsํ๋กฌํํธ์ ๋ฌธ์ ์ ์ฒด ๊ท ํ ๋ฐฐ๋ถ ๊ท์น ๋ช ์ โ ์ด๋ฐยท์ค๋ฐยทํ๋ฐ ์น์ ๋ชจ๋ ํฌํจ ์๊ตฌ - ๐ probe query ํ์ฅ: 10๊ฐ โ 14๊ฐ โ
optimization/evaluation,deployment/production,fine-tuning/training,safety/alignment์ฟผ๋ฆฌ ์ถ๊ฐ๋ก PDF ํ๋ฐ๋ถ ์ํ๋ง ๊ฐํ
v0.5.7 (2026-04-15) - ๐งน ์ฝ๋ ํ์ง ๊ฐ์
- ๐งน ๋ฏธ์ฌ์ฉ import 20๊ฐ ํ์ผ ์ ๋ฆฌ: slides/notesยทsection_rewriterยทutils, tools/async_web_scraperยทimage_extractor, utils/language_utilsยทprompt_manager, agents/content_writerยทcurriculum_designerยทqa_agent, models/curriculum, cli/commands ์ ์ฒด โ ๋ถํ์ํ typing/rich/pathlib import ์ ๊ฑฐ (๊ธฐ๋ฅ ๋ณ๊ฒฝ ์์)
v0.5.6 (2026-04-15) - ๐ Ollama ํธํ ๋ฒ๊ทธ์์ & ๋ฌธ์ ์ ํ๋
- ๐ PDFImageDescriber Ollama ํธํ:
translate์คํ ์LLM_PROVIDER=ollama์ด๋ฉดpdf_image_describer.py๊ฐ OpenAI API๋ฅผ ์ง์ ํธ์ถํด 401 ์๋ฌ ๋ฐ์ํ๋ ๋ฒ๊ทธ ์์ โcreate_llm()ํฉํ ๋ฆฌ๋ก ๊ต์ฒด (ํ ์คํธ ์ ์ฉ, ๋ชจ๋ ํ๋ก๋ฐ์ด๋ ํธํ) - ๐ ํ ํฐ ์ฌ์ฉ๋ Ollama ๋ชจ๋ธ๋ช
์คํ์ ์์ : Ollama ๋ชจ๋ธ(
qwen3.5:9b,llama3.2๋ฑ)์ดgpt-4o-mini๋ก ์๋ชป ํ์๋๋ ๋ฒ๊ทธ ์์ โ ์๋ณธ ๋ชจ๋ธ๋ช ์ ์ง, ๋น์ฉ $0.00,๋ก์ปฌ LLM โ API ๋น์ฉ ์์ํ์ - ๐ README FAQ ์์ : "API ํค ํ์" ํญ๋ชฉ์ OpenAI/Ollama ๋ชจ๋๋ก ๊ตฌ๋ถ, ๋น์ฉ FAQ์ Ollama ๋ฌด๋ฃ ์๋ด, ์คํ๋ผ์ธ FAQ์ Ollama ์์ฑ ์คํ๋ผ์ธ ๊ฐ๋ฅ ๋ฐ์
- ๐ docs/ ํํํ: api/cli.md ToC ์ฌ๊ตฌ์ฑ,
select_pdf_files๋ฌธ์ ์ถ๊ฐ,generate_lecture()๋ฐํ๊ฐ ๋ฌธ์ํ, init 3๋ชจ๋ ๋ฐ์
v0.5.5 (2026-04-13) - ๐ง CLI ์์ ์ฑ & ๋์๋ง ํํํ & Ollama ์ง์
- ๐ฆ Ollama LLM ์ง์:
LLM_PROVIDER=ollama๋ก ๋ก์ปฌ LLM ์ฌ์ฉ โcreate_llm()ํฉํ ๋ฆฌ ์ถ์ํ,BaseAgent/EmbeddingManager/slides/language_utils ์ ์ฒด ์ ์ฉ, OpenAI API ํค ์์ด ๊ฐ์ ์์ฑ ๊ฐ๋ฅ - ๐ฆ Ollama Thinking ๋ชจ๋:
OLLAMA_THINKING=auto(qwen3/qwq/deepseek-r1 ์๋ ๊ฐ์ง),reasoning=ํ๋ผ๋ฏธํฐ ์์ , qwen3.5:9b ๊ธฐ๋ณธ๊ฐ - ๐ Ollama reasoning ํ๋ผ๋ฏธํฐ ์์ :
ChatOllama์์think=๋์reasoning=์ฌ์ฉ โ thinking์ด ๊บผ์ง์ง ์์ ๋น ์๋ต ์์ฑ๋๋ ๋ฒ๊ทธ ์์ - ๐ gpt-4o-mini 404 ์์ :
language_utils.translate_text(model=None)โ Ollama ๋ชจ๋์์ OpenAI ๋ชจ๋ธ๋ช ์ผ๋ก ChatOllama ํธ์ถํ๋ ๋ฒ๊ทธ ์์ - โก 5๊ฐ ์์ด์ ํธ thinking=False: ContentAnalyzerยทDiagramGeneratorยทHTMLAssemblerยทRevisionAgentยทPDFTranslator โ deep reasoning ๋ถํ์ํ ์์ด์ ํธ ์๋ต ์๋ ๊ฐ์
- ๐ง
initLLM-first ์ค์ ์์: Phase 1=LLM, Phase 2=API ํค (Ollama ๋ชจ๋๋ OpenAI ํค ์คํต), Phase 3=ํ์ง - ๐ง
init๋ช ๋ น์ด 3๋ชจ๋:--reconfigure/-r(๊ธฐ์กด ๊ฐ ์ ์งํ๋ฉฐ ํญ๋ชฉ๋ณ ์์ ),--show/-s(์ค์ ์ถ๋ ฅ) - โ๏ธ
improve --to-slides๋ ธํธ ๊ธฐ๋ณธ ํฌํจ:--with-notes์ ๊ฑฐ, ๋ฐํ์ ๋ ธํธ ๊ธฐ๋ณธ ON โ--without-notes๋ก opt-out - ๐ AuthenticationError ์ฆ์ ์คํจ: tenacity retry์์ ์ธ์ฆยท๊ถํยท404 ์ค๋ฅ๋ ์ฌ์๋ ์์ด ์ฆ์ ์คํจ (
reraise=True) - ๐ฅ๏ธ
createProgress ๊ฐ์ : Phase 4a ์น์ ๋ณ ์งํ๋ฅ ํ์, RichHandler Console ๊ณต์ ๋ก ์ด์ค ๋ ๋๋ง ์ ๊ฑฐ - ๐ ๋์๋ง ํํํ:
--helpํต๊ณ ์์ (12 Agents, 1,870+ Tests), init--reconfigure/--show๋ฐ์ - ๐งช ํ ์คํธ ์ถ๊ฐ: retry ์ ์ฑ 8๊ฐ, init_helpers 43๊ฐ (์ด 1,877๊ฐ)
- ๐ slides ๋ชจ๋
thinking=False:section_rewriterยทnotesยทutilsโnum_predict=800~1000์์ qwen3.5 thinking์ด ์ ์ฒด ํ ํฐ ์๋น โ empty result ํ ์๋ฌธ ์ฌ์ฉ ๋ฒ๊ทธ ์์ - ๐
language_utils.translate_textthinking=False:max_tokens=2000์์ thinking phase๊ฐ ํ ํฐ ์ ๋ถ ์๋น โ ๋ฒ์ญ ๊ฒฐ๊ณผ ๋น ๋ฌธ์์ด ๋ฒ๊ทธ ์์ - ๐ง 4๊ฐ ์์ด์ ํธ
thinking=False๋ฐฉ์ด์ ๊ณ ์ : ContentCollectorยทImageCollectorยทAsyncBaseยทContentExpander โ invoke_llm ๋ฏธ์ฌ์ฉ์ด์ง๋ง ์ผ๊ด์ฑ ํ๋ณด
v0.5.4 (2026-04-03) - ๐งช ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง ๊ฐํ
- ๐งช ํ ์คํธ 401๊ฐ ์ถ๊ฐ: editorยทslidesยทutilsยทserverยทenhancerยทcurriculumยทpdf_translatorยทCLI ์ ์ฒด ์ปค๋ฒ โ 1,837๊ฐ (~81%)
- ๐ง
utils/json_utils.py:strip_json_fence()/parse_json_response()โ 4๊ฐ ์์ด์ ํธ ์ค๋ณต ํจํด ํตํฉ - ๐ ์๋ํฐ UX: '์น์ ์ ์ฅ' ๋ฒํผ ํญ์ ํ์, ํธ์ง ์์ญ ๋ฐฐ๊ฒฝ์, ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋งํฌ๋ค์ด ๋ ๋๋ง CSS
v0.5.x (2026-02-26 ~ 2026-03-05) - ๐ ์น ํธ์ง๊ธฐ ยท ์์ ์ฑ & ๋น์ฉ ๊ฐ์
- ๐
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.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.8.tar.gz.
File metadata
- Download URL: lecture_forge-0.5.8.tar.gz
- Upload date:
- Size: 357.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e5999d50b5f4ab63e0695ca0d9a80cc42138795045d33b4536539b3bd17ded68
|
|
| MD5 |
4afa10b284eb690ce086e526e9dc37ed
|
|
| BLAKE2b-256 |
1a41b0a596f4d2a2750cf5661762c182f080b73e67cf8daf35f3ed73af462e40
|
File details
Details for the file lecture_forge-0.5.8-py3-none-any.whl.
File metadata
- Download URL: lecture_forge-0.5.8-py3-none-any.whl
- Upload date:
- Size: 351.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6239b9aea089948150cb31cc243ec2d1de4530aac6c12ed11e5951f04fb8782
|
|
| MD5 |
cf55f7d88cd90d874a421aab0b104b36
|
|
| BLAKE2b-256 |
ea2b9b943b6f5aa28ecb8460b7d8fe046a8eab219fb8efc9d40beb92e21121ad
|