Skip to main content

AI-powered lecture material generator with multilingual support using LangChain

Project description

LectureForge ๐ŸŽ“

AI-Powered Lecture Material Generator using Multi-Agent Pipeline System

Python 3.11+ Version License: MIT Status Test Coverage

๐Ÿš€ v0.3.6 Beta Release | Code Quality & Reliability ๐Ÿ”ง (retry utility, base classes, config validation)

PDF, ์›นํŽ˜์ด์ง€, ์ธํ„ฐ๋„ท ๊ฒ€์ƒ‰์—์„œ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ ๊ณ ํ’ˆ์งˆ ๊ฐ•์˜์ž๋ฃŒ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜๋Š” AI ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ํ†ต๊ณ„: 10๊ฐœ ์—์ด์ „ํŠธ | 9๊ฐœ ๋„๊ตฌ | 7๊ฐœ CLI ๋ช…๋ น | 827๊ฐœ+ ํ…Œ์ŠคํŠธ (~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ํšŒ ์ž๋™ ์ˆ˜์ •
  • ๐Ÿงช ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€: 827๊ฐœ+ ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜ (81๊ฐœ ํŒŒ์ผ, ~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ํšŒ)
  • ๐Ÿ’ฐ ๋น„์šฉ ์ถ”์ : ์‹ค์‹œ๊ฐ„ ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ ๋น„์šฉ ์ถ”์ •
  • ๐Ÿ”ง ํƒ€์ž… ํžŒํŠธ: 71% ํƒ€์ž… ์•ˆ์ •์„ฑ
  • ๐ŸŽฏ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ: ๊ตฌ์กฐํ™”๋œ ์˜ˆ์™ธ ์‹œ์Šคํ…œ (9๊ฐœ ์นดํ…Œ๊ณ ๋ฆฌ)
  • ๐Ÿ“ ํ”„๋กฌํ”„ํŠธ ๊ด€๋ฆฌ: ํ…œํ”Œ๋ฆฟ ๊ธฐ๋ฐ˜ ํ”„๋กฌํ”„ํŠธ ์‹œ์Šคํ…œ

๐Ÿš€ ์ตœ๊ทผ ๊ฐœ์„ ์‚ฌํ•ญ

v0.3.6 (2026-02-18) - ์ฝ”๋“œ ํ’ˆ์งˆ & ์•ˆ์ •์„ฑ ๐Ÿ”ง

๋ฒ„๊ทธ ์ˆ˜์ •:

  • temperature=0.0 ๋ฒ„๊ทธ ์ˆ˜์ •: BaseAgent์—์„œ or ์—ฐ์‚ฐ์ž๊ฐ€ 0.0์„ falsy๋กœ ์ฒ˜๋ฆฌํ•˜๋˜ ๋ฌธ์ œ ์ˆ˜์ •
  • QAAgent ํ•˜๋“œ์ฝ”๋”ฉ ๊ฒฝ๋กœ ์ˆ˜์ •: Config.USER_CONFIG_DIR ์‚ฌ์šฉ์œผ๋กœ ์ด์‹์„ฑ ํ–ฅ์ƒ

์ฝ”๋“œ ํ’ˆ์งˆ ๊ฐœ์„ :

  • make_api_retry() ์œ ํ‹ธ๋ฆฌํ‹ฐ: 4๊ณณ์— ์ค‘๋ณต๋œ retry ๋กœ์ง์„ utils/retry.py ํŒฉํ† ๋ฆฌ ํ•จ์ˆ˜๋กœ ํ†ตํ•ฉ
  • BaseImageSearchTool ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค: Unsplash/Pexels ์ค‘๋ณต ์ฝ”๋“œ ~100์ค„ ์ œ๊ฑฐ
  • RAG ํŒŒ๋ผ๋ฏธํ„ฐ ํ™˜๊ฒฝ๋ณ€์ˆ˜ํ™”: RAG_QA_N_RESULTS, RAG_QA_TOP_K, RAG_CONTENT_N_RESULTS
  • Config ๊ฒ€์ฆ ๊ฐ•ํ™”: IMAGE_WEIGHT_* ๋ฐ CONTENT_*_RATIO ํ•ฉ๊ณ„ 1.0 ๊ฒ€์ฆ ์ถ”๊ฐ€

Chat ๊ฐœ์„ :

  • ์‘๋‹ต ๋กœ๊น…: AI ๋‹ต๋ณ€๋„ conversation_log.txt์— ์ €์žฅ (๊ธฐ์กด์—” ์‚ฌ์šฉ์ž ์งˆ๋ฌธ๋งŒ ๊ธฐ๋ก)

ํ…Œ์ŠคํŠธ:

  • async ๋„๊ตฌ ์œ ๋‹› ํ…Œ์ŠคํŠธ 23๊ฐœ ์‹ ๊ทœ ์ถ”๊ฐ€ (async_search_tool, async_web_scraper)
  • ์ด 827๊ฐœ+ ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜ (81๊ฐœ ํŒŒ์ผ)

v0.3.5 (2026-02-18) - RAG ํ’ˆ์งˆ ๋Œ€ํญ ํ–ฅ์ƒ ๐ŸŽฏ

Chat ๋‹ต๋ณ€ ํ’ˆ์งˆ ํ–ฅ์ƒ:

  • ๋‹ต๋ณ€ ๊ธธ์ด ๋ณด์žฅ: ์ตœ์†Œ 400๋‹จ์–ด + 5๊ฐœ Markdown ์„น์…˜ ๊ตฌ์กฐ ๊ฐ•์ œ
    • ## ๊ฐœ์š”, ## ์ƒ์„ธ ์„ค๋ช…, ## ํ•ต์‹ฌ ํฌ์ธํŠธ, ## ์˜ˆ์‹œ ๋ฐ ๊ทผ๊ฑฐ, ## ์ถ”๊ฐ€ ๊ณ ๋ ค์‚ฌํ•ญ
    • ๊ตฌ์กฐํ™”๋œ ๋‹ต๋ณ€์œผ๋กœ ํ•™์Šต ์ดํ•ด๋„ ํฌ๊ฒŒ ํ–ฅ์ƒ
  • ๊ฒ€์ƒ‰ ๊ฐ•ํ™”: n_results 10โ†’15 (+50%), top_k 8โ†’12 (+50%)
    • ๋” ๋งŽ์€ ์ปจํ…์ŠคํŠธ ๊ธฐ๋ฐ˜์˜ ํ’๋ถ€ํ•œ ๋‹ต๋ณ€
    • Source ๋‹ค์–‘์„ฑ ์ตœ๋Œ€ 3๊ฐœ/source-page (๊ธฐ์กด 2๊ฐœ)
  • LLM ์˜จ๋„ ์ตœ์ ํ™”: temperature 0.7โ†’0.3 (RAG ์ •ํ™•๋„ ํ–ฅ์ƒ)
  • Rich Markdown ๋ Œ๋”๋ง: ๋‹ต๋ณ€์„ ํŒจ๋„ ํ˜•์‹์œผ๋กœ ์•„๋ฆ„๋‹ต๊ฒŒ ํ‘œ์‹œ
  • ์‹ ๋ขฐ๋„ ์ˆ˜์ •: ChromaDB L2 ๊ฑฐ๋ฆฌ ๋ณ€ํ™˜ ๋ฒ„๊ทธ ์ˆ˜์ • (ํ•ญ์ƒ 0% โ†’ ์‹ค์ œ ์‹ ๋ขฐ๋„)
    • ์ˆ˜์ • ์ „: similarity = 1 - distance (์Œ์ˆ˜ ๋ฐœ์ƒ โ†’ 0% ๊ฐ•์ œ)
    • ์ˆ˜์ • ํ›„: similarity = max(0.0, 1 - distance / 2) (์˜ฌ๋ฐ”๋ฅธ [0,1] ๋ฒ”์œ„)

๋ฒ„๊ทธ ์ˆ˜์ •:

  • init_helpers.py: deprecated pkg_resources.path โ†’ importlib.resources.files() API ์ „ํ™˜ (Python 3.11+ ๊ฒฝ๊ณ  ์ œ๊ฑฐ)

์‚ฌ์šฉ ์˜ˆ์‹œ:

You: ํŒŒ์ด์ฌ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?
๐ŸŒ Detected: Korean | ๐Ÿ”„ Cross-lingual search (15+15 chunks)

โ•ญโ”€ Assistant โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ ## ๊ฐœ์š”                                              โ”‚
โ”‚ ํŒŒ์ด์ฌ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ํ•จ์ˆ˜๋ฅผ ๋ž˜ํ•‘ํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š”            โ”‚
โ”‚ ๊ณ ์ฐจ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.                                       โ”‚
โ”‚                                                     โ”‚
โ”‚ ## ์ƒ์„ธ ์„ค๋ช…                                          โ”‚
โ”‚ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” @syntax๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ...                       โ”‚
โ”‚ [์ƒ์„ธํ•œ 400๋‹จ์–ด ์ด์ƒ์˜ ๋‹ต๋ณ€]                             โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
๐ŸŽฏ Confidence: High (87%)

ํšจ๊ณผ:

  • โœ… ๋‹ต๋ณ€ ๊ธธ์ด +300% (์งง์€ ๋‹ต๋ณ€ โ†’ 400๋‹จ์–ด ๊ตฌ์กฐํ™” ๋‹ต๋ณ€)
  • โœ… ์‹ ๋ขฐ๋„ ํ‘œ์‹œ ์ •์ƒํ™” (ํ•ญ์ƒ 0% ๋ฒ„๊ทธ ์ˆ˜์ •)
  • โœ… ๊ฒ€์ƒ‰ ์ปจํ…์ŠคํŠธ +50% (10โ†’15 chunks)
  • โœ… ํ„ฐ๋ฏธ๋„ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ (Rich Markdown Panel ๋ Œ๋”๋ง)

v0.3.4 (2026-02-16) - Async I/O ์ง€์› โšก

์ปจํ…์ธ  ์ˆ˜์ง‘ 70% ์„ฑ๋Šฅ ํ–ฅ์ƒ:

  • Async I/O: PDF, URL, ๊ฒ€์ƒ‰์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌ
    • ๋‹จ์ผ ์†Œ์Šค: ๊ธฐ์กด๊ณผ ๋™์ผ
    • ๋ณต์ˆ˜ ์†Œ์Šค: ๋™์‹œ ์‹คํ–‰์œผ๋กœ 70% ๋น ๋ฆ„
    • ์˜ˆ: PDF 3๊ฐœ + URL 5๊ฐœ โ†’ ์ˆœ์ฐจ 80์ดˆ โ†’ ๋ณ‘๋ ฌ 24์ดˆ
  • CLI ํ”Œ๋ž˜๊ทธ: --async-mode ์ถ”๊ฐ€ (์‹คํ—˜์ )
  • AsyncContentCollectorAgent: ๋น„๋™๊ธฐ ์ˆ˜์ง‘ ์—์ด์ „ํŠธ
    • asyncio.gather()๋กœ ์ž‘์—… ๋ณ‘๋ ฌํ™”
    • ThreadPoolExecutor๋กœ CPU-bound ์ž‘์—… ์ฒ˜๋ฆฌ
  • Async Tools: httpx, aiofiles ๊ธฐ๋ฐ˜
    • Async web scraper (httpx)
    • Async search tool (Serper API)
    • Rate limiting ์ง€์›

์‚ฌ์šฉ ์˜ˆ์‹œ:

# ๊ธฐ๋ณธ (sync)
lecture-forge create

# Async ๋ชจ๋“œ (์‹คํ—˜์  - 70% ๋น ๋ฆ„)
lecture-forge create --async-mode

# Async + ๊ณ ํ’ˆ์งˆ
lecture-forge create --async-mode --quality-level strict

ํšจ๊ณผ:

  • โœ… ์ปจํ…์ธ  ์ˆ˜์ง‘ ๋‹จ๊ณ„: 70% ์‹œ๊ฐ„ ๋‹จ์ถ•
  • โœ… ์—ฌ๋Ÿฌ ์†Œ์Šค ์‚ฌ์šฉ ์‹œ: ํšจ๊ณผ ๊ทน๋Œ€ํ™”
  • โœ… ํ˜ธํ™˜์„ฑ: ๊ธฐ์กด sync ๋ชจ๋“œ 100% ์ง€์›

v0.3.3 (2026-02-15) - ์ž…๋ ฅ ์‹œ์Šคํ…œ ๊ฐœ์„  + Python 3.12 ์™„๋ฒฝ ์ง€์› โŒจ๏ธ

Chat ๋ชจ๋“œ ์ž…๋ ฅ ๊ฐœ์„ :

  • prompt-toolkit ๋„์ž…: ํ•œ๊ตญ์–ด ์ž…๋ ฅ ์™„๋ฒฝ ์ง€์›
    • โœ… ๋ฉ€ํ‹ฐ๋ฐ”์ดํŠธ ๋ฌธ์ž ์™„๋ฒฝ ์ฒ˜๋ฆฌ (ํ•œ๊ธ€, ์ผ๋ณธ์–ด ๋“ฑ)
    • โœ… ๋ฐฑ์ŠคํŽ˜์ด์Šค, ์‚ญ์ œ, ๋ฐฉํ–ฅํ‚ค ์ •์ƒ ์ž‘๋™
    • โœ… ๋ชจ๋“  ํ„ฐ๋ฏธ๋„ ํ™˜๊ฒฝ์—์„œ ์ผ๊ด€๋œ ๊ฒฝํ—˜
  • ์ž…๋ ฅ ํžˆ์Šคํ† ๋ฆฌ: โ†‘/โ†“๋กœ ์ด์ „ ์งˆ๋ฌธ ํƒ์ƒ‰, Ctrl+R ๊ฒ€์ƒ‰
  • ์ž๋™ ์ œ์•ˆ: ํƒ€์ดํ•‘ ์ค‘ ์ด์ „ ์งˆ๋ฌธ ๊ธฐ๋ฐ˜ ์ œ์•ˆ (โ†’๋กœ ์ˆ˜๋ฝ)
  • ํŽธ์ง‘ ๋‹จ์ถ•ํ‚ค: Ctrl+A/E (์ค„ ์ฒ˜์Œ/๋), Alt+โ†/โ†’ (๋‹จ์–ด ์ด๋™)

Python 3.12 ์™„๋ฒฝ ํ˜ธํ™˜:

  • NumPy 1.26.0+: Python 3.12 ๊ณต์‹ ์ง€์› (1.24 โ†’ 1.26)
  • ์˜์กด์„ฑ ๊ฒ€์ฆ: chromadb, langchain ๋“ฑ ๋ชจ๋“  ํŒจํ‚ค์ง€ ํ˜ธํ™˜ ํ™•์ธ

์‚ฌ์šฉ ์˜ˆ์‹œ:

You: ๋”ฅ๋Ÿฌ๋‹์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?  โ† ํ•œ๊ธ€ ์ž…๋ ฅ ์™„๋ฒฝ!
     โ†‘ ์ž๋™ ์ œ์•ˆ (์ด์ „ ์งˆ๋ฌธ ๊ธฐ๋ฐ˜)
๐Ÿ” Searching...
AI: ๋”ฅ๋Ÿฌ๋‹์€ ์ธ๊ณต์‹ ๊ฒฝ๋ง์„ ๊ธฐ๋ฐ˜์œผ๋กœ...

v0.3.2 (2026-02-14) - ๋‹ค๊ตญ์–ด ์ง€์› + RAG ํ’ˆ์งˆ ๊ฐ•ํ™” ๐ŸŒ๐ŸŽฏ

๋‹ค๊ตญ์–ด ์ง€์›:

  • ์ž๋™ ์–ธ์–ด ๊ฐ์ง€: ๊ฐ chunk๋งˆ๋‹ค ์–ธ์–ด ์ž๋™ ๊ฐ์ง€ (ํ•œ๊ตญ์–ด, ์˜์–ด ๋“ฑ)
  • Cross-lingual ๊ฒ€์ƒ‰: ํ•œ๊ตญ์–ด๋กœ ์งˆ๋ฌธ โ†’ ์˜์–ด ๋ฌธ์„œ๋„ ๊ฒ€์ƒ‰
    • Dual Query: ์›๋ณธ + ๋ฒˆ์—ญ ์ฟผ๋ฆฌ ๋™์‹œ ์‹คํ–‰
    • ์ง€๋Šฅํ˜• ์žฌ๋žญํ‚น: ๊ฐ™์€ ์–ธ์–ด ์šฐ์„ ์ˆœ์œ„ + ๊ต์ฐจ ์–ธ์–ด ๊ฒฐ๊ณผ ํฌํ•จ
  • ํ˜ผํ•ฉ ์–ธ์–ด PDF ์ง€์›: ํ•œ์˜ ํ˜ผํ•ฉ PDF๋„ ์™„๋ฒฝ ์ฒ˜๋ฆฌ
  • ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„๊ตฌ: ๊ธฐ์กด Vector DB์— ์–ธ์–ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž๋™ ์ถ”๊ฐ€

RAG ๋‹ต๋ณ€ ํ’ˆ์งˆ ๊ฐ•ํ™”:

  • ๊ฒ€์ƒ‰ ๋ฒ”์œ„ ํ™•๋Œ€: 5๊ฐœ โ†’ 12๊ฐœ chunks (v0.3.5์—์„œ ์ถ”๊ฐ€ ํ–ฅ์ƒ)
  • ๊ณ ๊ธ‰ ํ”„๋กฌํ”„ํŠธ: Chain of Thought ์ถ”๋ก , ๊ตฌ์กฐํ™”๋œ ๋‹ต๋ณ€ ์ƒ์„ฑ
  • ๋‹ค์–‘์„ฑ ์žฌ๋žญํ‚น: Source-Page ๋‹ค์–‘์„ฑ ๋ณด์žฅ (์ตœ๋Œ€ 3๊ฐœ/source-page, v0.3.5)
  • ๋‹ต๋ณ€ ํ›„์ฒ˜๋ฆฌ: ์งง์€ ๋‹ต๋ณ€ ์ž๋™ ํ™•์žฅ, ๋ถ€๋ถ„ ์ •๋ณด ์ถ”์ถœ
  • ์‹ ๋ขฐ๋„ ์ ์ˆ˜: ๋™์  ๊ณ„์‚ฐ ๋ฐ ์ƒ‰์ƒ ์ฝ”๋”ฉ (High/Medium/Low)

ํšจ๊ณผ:

  • โœ… ๋‹ต๋ณ€ ์™„์„ฑ๋„ +50%, Source ๋‹ค์–‘์„ฑ +100%
  • โœ… ๋ถˆ์™„์ „ ๋‹ต๋ณ€์œจ -67% (15% โ†’ 5%)
  • โœ… ์˜๋ฌธ PDF์— ํ•œ๊ตญ์–ด ์งˆ๋ฌธ ๊ฐ€๋Šฅ (vice versa)

์‚ฌ์šฉ ์˜ˆ์‹œ:

You: ํŒŒ์ด์ฌ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?
๐ŸŒ Detected: Korean | ๐Ÿ”„ Cross-lingual search
โœจ Searching 8 chunks with diversity ranking...

AI: ํŒŒ์ด์ฌ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ํ•จ์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

**ํ•ต์‹ฌ ๊ฐœ๋…:**
1. **ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ์ƒˆ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜**ํ•˜๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค
2. **@syntax**๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
3. **ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ**(๋กœ๊น…, ์ธ์ฆ, ์บ์‹ฑ)๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š”๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค

**์˜ˆ์ œ ์ฝ”๋“œ:**
[... ์ฝ”๋“œ ์˜ˆ์ œ ...]

๐Ÿ“š Sources: 3๊ฐœ ๋ฌธ์„œ (ํŽ˜์ด์ง€ 45, 67, 89)
๐ŸŽฏ Confidence: High (92%)

v0.3.1 (2026-02-13) - ๐Ÿ“‚ User-Friendly Directories

์‚ฌ์šฉ์ž ์นœํ™”์  ๋””๋ ‰ํ† ๋ฆฌ:

  • ๐Ÿ“‚ ํžˆ๋“  โ†’ ์ผ๋ฐ˜ ํด๋”: ~/.lecture-forge/ โ†’ ~/Documents/LectureForge/
    • Finder/ํƒ์ƒ‰๊ธฐ์—์„œ ๋ฐ”๋กœ ํ™•์ธ ๊ฐ€๋Šฅ
    • ๋“œ๋ž˜๊ทธ์•ค๋“œ๋กญ์œผ๋กœ ํŒŒ์ผ ๊ด€๋ฆฌ ๊ฐ„ํŽธ
    • iCloud/OneDrive ๋™๊ธฐํ™” ๊ฐ€๋Šฅ
  • ๐Ÿ  home ์ปค๋งจ๋“œ ์ถ”๊ฐ€: ๋น ๋ฅธ ํด๋” ์ ‘๊ทผ
    • lecture-forge home outputs - ๊ฐ•์˜ ๊ฒฐ๊ณผ๋ฌผ
    • lecture-forge home kb - ์ตœ์‹  ์ง€์‹๋ฒ ์ด์Šค
    • lecture-forge home env - .env ํŽธ์ง‘
  • ๐Ÿ”„ ์ž๋™ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜: ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์ž๋™ ์ด๋™

v0.3.0 (2026-02-12) - ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ์ตœ์ ํ™” ๐ŸŽฏ

  • ์Šฌ๋ผ์ด๋“œ ๊ตฌ์„ฑ ๊ฐœ์„ : ํ”„๋ ˆ์  ํ…Œ์ด์…˜์— ์ตœ์ ํ™”
    • ์Šฌ๋ผ์ด๋“œ๋‹น ํ•ญ๋ชฉ ์ˆ˜ ๊ฐ์†Œ (4๊ฐœ โ†’ 3๊ฐœ)
    • ๊ธด ๋ฆฌ์ŠคํŠธ ์ž๋™ ๋ถ„ํ•  (์ตœ๋Œ€ 5๊ฐœ์”ฉ)
    • ๋…ผ๋ฆฌ์  ์Šฌ๋ผ์ด๋“œ ๊ตฌ์„ฑ (ํ•œ ์ฃผ์ œ = ํ•œ ์Šฌ๋ผ์ด๋“œ)
  • ์Šคํƒ€์ผ ๊ฐœ์„ : ์ „๋ฌธ์ ์ธ ๋””์ž์ธ ์‹œ์Šคํ…œ
    • ์ œ๋ชฉ ํฌ๊ธฐ/์ƒ‰์ƒ ๊ณ„์ธตํ™”
    • ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ์ตœ์ ํ™”
    • ์ฝ”๋“œ ๋ธ”๋ก ์ž…์ฒด๊ฐ
  • Mermaid ๋‹ค์ด์–ด๊ทธ๋žจ: ๋ฌธ์„œ ์‹œ๊ฐํ™” ๊ฐœ์„ 
    • ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜, ์˜ˆ์™ธ ๊ณ„์ธต, ํ’ˆ์งˆ ํ‰๊ฐ€ ๋“ฑ

์ด์ „ ๋ฒ„์ „ ํ•˜์ด๋ผ์ดํŠธ

  • v0.2.7: ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ, ํ…œํ”Œ๋ฆฟ ๊ธฐ๋ฐ˜ ํ”„๋กฌํ”„ํŠธ
  • v0.2.0-0.2.6: RAG ์บ์‹ฑ, ์ž๋™ ์žฌ์‹œ๋„, ํ…Œ์ŠคํŠธ ๊ฐ•ํ™”, Config ๋ฆฌํŒฉํ† ๋ง

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

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: ๊ฐ•๋ ฅ ๊ถŒ์žฅ - ๋ชจ๋“  ์˜์กด์„ฑ ์™„๋ฒฝ ์ง€์› (Production Ready)
  • โœ… Python 3.12: ์™„๋ฒฝ ์ง€์› - v0.3.3๋ถ€ํ„ฐ ๊ณต์‹ ์ง€์› (numpy 1.26.0+)
  • โŒ Python 3.13: ๋น„๊ถŒ์žฅ - ChromaDB/hnswlib ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ ๋ฐœ์ƒ
    • ์ฆ์ƒ: GLIBCXX_3.4.32 not found ์˜ค๋ฅ˜
    • ํ•ด๊ฒฐ: Python 3.11 ๋˜๋Š” 3.12๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ ํ•„์ˆ˜

v0.3.3๋ถ€ํ„ฐ Python 3.11๊ณผ 3.12 ๋ชจ๋‘ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ ํ™˜๊ฒฝ ์„ค์ •

๋ฐฉ๋ฒ• 1: ๋Œ€ํ™”ํ˜• ์„ค์ • (๊ถŒ์žฅ โญ)

# ๋Œ€ํ™”ํ˜• ์„ค์ • ๋งˆ๋ฒ•์‚ฌ ์‹คํ–‰
lecture-forge init

์ด ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค:

  • โœ… ํ”Œ๋žซํผ๋ณ„ ์ตœ์  ์œ„์น˜์— .env ํŒŒ์ผ ์ž๋™ ์ƒ์„ฑ
    • Windows: %USERPROFILE%\Documents\LectureForge\.env
    • Mac/Linux: ~/Documents/LectureForge/.env
  • โœ… ํ•„์ˆ˜ 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 ํŒŒ์ผ์„ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค:

  1. ํ™˜๊ฒฝ ๋ณ€์ˆ˜: LECTURE_FORGE_ENV_FILE๋กœ ์ง€์ •ํ•œ ๊ฒฝ๋กœ
  2. ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ: ./.env
  3. ์‚ฌ์šฉ์ž ๋””๋ ‰ํ† ๋ฆฌ (๊ถŒ์žฅ):
    • Windows: %USERPROFILE%\Documents\LectureForge\.env
    • Mac/Linux: ~/Documents/LectureForge/.env

API ํ‚ค ํš๋“:

3๏ธโƒฃ ์ฒซ ๊ฐ•์˜ ์ƒ์„ฑ

lecture-forge create

๋Œ€ํ™”ํ˜•์œผ๋กœ ๊ฐ•์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ž๋™์œผ๋กœ ๊ฐ•์˜์ž๋ฃŒ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค! ๐ŸŽ‰


๐Ÿ’ป ์‚ฌ์šฉ๋ฒ•

๋ช…๋ น์–ด ๊ฐœ์š”

๋ช…๋ น์–ด ์„ค๋ช… ์ฃผ์š” ์˜ต์…˜
init ์ดˆ๊ธฐ ์„ค์ • --path
create ๊ฐ•์˜ ์ƒ์„ฑ --image-search, --quality-level
chat Q&A ๋ชจ๋“œ --knowledge-base
edit-images ์ด๋ฏธ์ง€ ํŽธ์ง‘ --output
improve ๊ฐ•์˜ ํ–ฅ์ƒ --to-slides
cleanup ์ง€์‹๋ฒ ์ด์Šค ๊ด€๋ฆฌ --all
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

# ๐ŸŽจ ์Šฌ๋ผ์ด๋“œ ๋ณ€ํ™˜
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 .

ํ•˜๋Š” ์ผ:

  1. ํ•„์ˆ˜ API ํ‚ค ์ž…๋ ฅ (OpenAI, Serper)
  2. ์„ ํƒ์  ์ด๋ฏธ์ง€ API ์„ค์ • (Pexels, Unsplash)
  3. .env ํŒŒ์ผ ์ž๋™ ์ƒ์„ฑ
  4. ๊ธฐ๋ณธ ์„ค์ • ๊ฐ’ ์ž๋™ ์„ค์ •
  5. ํŒŒ์ผ ๊ถŒํ•œ ๋ณด์•ˆ ์„ค์ • (Unix/Mac)

๐Ÿ“š create - ๊ฐ•์˜ ์ƒ์„ฑ

๊ธฐ๋ณธ ์‚ฌ์šฉ:

lecture-forge create

๋Œ€ํ™”ํ˜•์œผ๋กœ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ž๋™์œผ๋กœ ๊ฐ•์˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์˜ต์…˜:

์˜ต์…˜ ์„ค๋ช… ์‚ฌ์šฉ ์˜ˆ
--config FILE YAML ์„ค์ • ํŒŒ์ผ ์‚ฌ์šฉ --config lecture.yaml
--image-search ์›น ์ด๋ฏธ์ง€ ๊ฒ€์ƒ‰ ํ™œ์„ฑํ™” (Pexels/Unsplash) --image-search
--quality-level LEVEL ํ’ˆ์งˆ ๊ธฐ์ค€ ์„ค์ • --quality-level strict
--output FILE ์ถœ๋ ฅ ํŒŒ์ผ๋ช… ์ง€์ • --output my_lecture.html
--async-mode Async I/O ์‚ฌ์šฉ (70% ๋น ๋ฆ„, ์‹คํ—˜์ ) --async-mode
--include-pdf-images PDF ์ด๋ฏธ์ง€ ํฌํ•จ (๋น„๊ถŒ์žฅ, Location-based๊ฐ€ ๋” ์ข‹์Œ) --include-pdf-images

ํ’ˆ์งˆ ๋ ˆ๋ฒจ:

  • 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-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

๐ŸŽจ improve - ๊ฐ•์˜ ํ–ฅ์ƒ

๊ธฐ๋ณธ ์‚ฌ์šฉ:

lecture-forge improve outputs/lecture.html --to-slides

์˜ต์…˜:

์˜ต์…˜ ์„ค๋ช… ์‚ฌ์šฉ ์˜ˆ
--to-slides Reveal.js ์Šฌ๋ผ์ด๋“œ ๋ณ€ํ™˜ --to-slides
--enhance-pdf-images PDF ์ด๋ฏธ์ง€ ์„ค๋ช… ์ถ”๊ฐ€ (๋ ˆ๊ฑฐ์‹œ) --enhance-pdf-images
--source-pdf FILE ์›๋ณธ PDF ๊ฒฝ๋กœ (๋ ˆ๊ฑฐ์‹œ์šฉ) --source-pdf doc.pdf

โš ๏ธ ์ฃผ์˜: --enhance-pdf-images๋Š” ๋ ˆ๊ฑฐ์‹œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. v0.2.0๋ถ€ํ„ฐ๋Š” Location-based ๋งค์นญ์ด ์ž๋™์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ:

# ์Šฌ๋ผ์ด๋“œ ๋ณ€ํ™˜ (๊ถŒ์žฅ)
lecture-forge improve outputs/lecture.html --to-slides

# PDF ์ด๋ฏธ์ง€ ๋ณด๊ฐ• (๋ ˆ๊ฑฐ์‹œ)
lecture-forge improve outputs/lecture.html --enhance-pdf-images --source-pdf original.pdf

๐Ÿงน cleanup - ์ง€์‹๋ฒ ์ด์Šค ๊ด€๋ฆฌ

๊ธฐ๋ณธ ์‚ฌ์šฉ:

lecture-forge cleanup

๋Œ€ํ™”ํ˜•์œผ๋กœ ์‚ญ์ œํ•  ์ง€์‹๋ฒ ์ด์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์˜ต์…˜:

์˜ต์…˜ ์„ค๋ช… ์‚ฌ์šฉ ์˜ˆ
--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+ ํ™˜๊ฒฝ๋ณ€์ˆ˜)


๐Ÿ–ผ๏ธ ์ด๋ฏธ์ง€ ํŽธ์ง‘

์ƒ์„ฑ๋œ ๊ฐ•์˜์˜ ์ด๋ฏธ์ง€๋ฅผ ๋Œ€ํ™”ํ˜•์œผ๋กœ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ

  • ์ด๋ฏธ์ง€ ์‚ญ์ œ: ์›ํ•˜์ง€ ์•Š๋Š” ์ด๋ฏธ์ง€ ์ œ๊ฑฐ
  • ์ด๋ฏธ์ง€ ๊ต์ฒด: Vector DB์—์„œ ๋Œ€์•ˆ ์ด๋ฏธ์ง€ ์ž๋™ ๊ฒ€์ƒ‰ ๋ฐ ๊ต์ฒด
  • ๋ฏธ๋ฆฌ๋ณด๊ธฐ: ๋ณ€๊ฒฝ ์ „ ๋ชจ๋“  ์ด๋ฏธ์ง€ ์ƒํƒœ ํ™•์ธ
  • ์•ˆ์ „ํ•œ ์ €์žฅ: ์›๋ณธ ๋ฐฑ์—… ํ›„ ์ƒˆ ํŒŒ์ผ ์ƒ์„ฑ

์‚ฌ์šฉ๋ฒ•

# ์ด๋ฏธ์ง€ ํŽธ์ง‘ ๋ชจ๋“œ ์‹œ์ž‘
lecture-forge edit-images outputs/lecture.html

# ์ถœ๋ ฅ ํŒŒ์ผ ์ง€์ •
lecture-forge edit-images outputs/lecture.html -o outputs/lecture_v2.html

๋Œ€ํ™”ํ˜• ๋ช…๋ น์–ด

๋ช…๋ น์–ด ์„ค๋ช… ์˜ˆ์‹œ
d <๋ฒˆํ˜ธ> ์ด๋ฏธ์ง€ ์‚ญ์ œ d 3
u <๋ฒˆํ˜ธ> ์‚ญ์ œ ์ทจ์†Œ u 3
r <๋ฒˆํ˜ธ> ์ด๋ฏธ์ง€ ๊ต์ฒด (๋Œ€์•ˆ ๊ฒ€์ƒ‰) r 5
s ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ €์žฅ s
/exit, /quit (๋˜๋Š” q) ์ข…๋ฃŒ /exit
h ๋„์›€๋ง h

์ž‘๋™ ๋ฐฉ์‹

  1. HTML ๋ถ„์„: ๊ฐ•์˜ ํŒŒ์ผ์˜ ๋ชจ๋“  ์ด๋ฏธ์ง€ ์ถ”์ถœ ๋ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ˆ˜์ง‘
  2. ๋Œ€ํ™”ํ˜• ํŽธ์ง‘: ํ…Œ์ด๋ธ” ํ˜•์‹์œผ๋กœ ์ด๋ฏธ์ง€ ๋ชฉ๋ก ํ‘œ์‹œ ๋ฐ ํŽธ์ง‘
  3. ๋Œ€์•ˆ ๊ฒ€์ƒ‰: Vector DB๋ฅผ ํ™œ์šฉํ•œ ๊ด€๋ จ ์ด๋ฏธ์ง€ ์ž๋™ ์ œ์•ˆ (RAG ๊ธฐ๋ฐ˜)
  4. ๋ณ€๊ฒฝ ์ ์šฉ: ์‚ญ์ œ/๊ต์ฒด ์ž‘์—… ์ผ๊ด„ ์ ์šฉ ๋ฐ ์ƒˆ ํŒŒ์ผ ์ƒ์„ฑ

์˜ˆ์ œ

๐Ÿ“ธ ๊ฐ•์˜ ์ด๋ฏธ์ง€ ํŽธ์ง‘ ๋ชจ๋“œ
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”

HTML: my_lecture.html
์ด ์ด๋ฏธ์ง€: 25๊ฐœ

โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ ๋ฒˆํ˜ธ  โ”ƒ ์„ค๋ช…                               โ”ƒ ์„น์…˜              โ”ƒ ํŽ˜์ด์ง€   โ”ƒ ์ƒํƒœ      โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚  1   โ”‚ Neural network architecture       โ”‚ 1. Introduction  โ”‚  5     โ”‚ ์œ ์ง€      โ”‚
โ”‚  2   โ”‚ Backpropagation diagram           โ”‚ 2. Core Concepts โ”‚  12    โ”‚ ๐Ÿ—‘๏ธ ์‚ญ์ œ   โ”‚
โ”‚  3   โ”‚ Training process flowchart        โ”‚ 2. Core Concepts โ”‚  15    โ”‚ ๐Ÿ”„ ๊ต์ฒด   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๋ช…๋ น ์ž…๋ ฅ: r 3
๐Ÿ” ์ด๋ฏธ์ง€ 3 ๋Œ€์•ˆ ๊ฒ€์ƒ‰ ์ค‘...
โœ… 5๊ฐœ ๋Œ€์•ˆ ์ด๋ฏธ์ง€ ๋ฐœ๊ฒฌ
์„ ํƒ: 1
โœ… ์ด๋ฏธ์ง€ 3 ๊ต์ฒด ์˜ˆ์ •

๋ช…๋ น ์ž…๋ ฅ: s
๐Ÿ’พ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ €์žฅ๋จ: outputs/my_lecture_edited.html

๐Ÿ—๏ธ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

Multi-Agent ํŒŒ์ดํ”„๋ผ์ธ (10๊ฐœ ์ „๋ฌธ ์—์ด์ „ํŠธ)

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

10๊ฐœ ์ „๋ฌธ ์—์ด์ „ํŠธ

# ์—์ด์ „ํŠธ ์—ญํ•  ํŒŒ์ผ
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 Diagram Generator ๐Ÿ“Š Mermaid ๋‹ค์ด์–ด๊ทธ๋žจ ์ƒ์„ฑ diagram_generator.py
7 Quality Evaluator โœ… 6์ฐจ์› ํ’ˆ์งˆ ํ‰๊ฐ€ quality_evaluator.py
8 Revision Agent ๐Ÿ”„ ์ž๋™/๋ฐ˜์ž๋™ ์ˆ˜์ • revision_agent.py
9 Q&A Agent ๐Ÿค– ์ง€์‹์ฐฝ๊ณ  ๊ธฐ๋ฐ˜ ๋Œ€ํ™” (RAG ์บ์‹ฑ) qa_agent.py
10 HTML Assembler ๐ŸŽจ ์ตœ์ข… HTML ์ƒ์„ฑ html_assembler.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๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

  • โœ… Python 3.11: ์™„๋ฒฝ ์ง€์› (๊ถŒ์žฅ)
  • โœ… Python 3.12: ์™„๋ฒฝ ์ง€์› (v0.3.3+)
  • โŒ Python 3.13: ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ (๋น„๊ถŒ์žฅ)
# ๋ฒ„์ „ ํ™•์ธ
python --version

# Python 3.11 ํ™˜๊ฒฝ ์ƒ์„ฑ
conda create -n lecture-forge python=3.11
conda activate lecture-forge

# ๋˜๋Š” Python 3.12
conda create -n lecture-forge python=3.12
conda activate lecture-forge
Q: Python 3.13์—์„œ GLIBCXX_3.4.32 ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

A: Python 3.13์€ ChromaDB์˜ hnswlib ์˜์กด์„ฑ๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: Python 3.11 ๋˜๋Š” 3.12๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ

# ์ƒˆ ํ™˜๊ฒฝ ์ƒ์„ฑ (3.11 ๋˜๋Š” 3.12)
conda create -n lecture-forge python=3.11  # ๋˜๋Š” python=3.12
conda activate lecture-forge

# ์žฌ์„ค์น˜
pip install lecture-forge
playwright install chromium

Python 3.11๊ณผ 3.12 ๋ชจ๋‘ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค! (v0.3.3+)

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 ๋งค์นญ์ด ์ž๋™์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค:

  1. PDF ์ด๋ฏธ์ง€: 85% ์ž๋™ ๋งค์นญ (ํŽ˜์ด์ง€ ๊ธฐ๋ฐ˜)
  2. ์›น ์ด๋ฏธ์ง€: ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜ ๋ณด์™„
  3. ์ˆ˜๋™ ํŽธ์ง‘: 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.3.6 (2026-02-18) - ๐Ÿ”ง ์ฝ”๋“œ ํ’ˆ์งˆ & ์•ˆ์ •์„ฑ

  • ๐Ÿ› BaseAgent.temperature=0.0 falsy ๋ฒ„๊ทธ ์ˆ˜์ •
  • ๐Ÿ› QAAgent ํ•˜๋“œ์ฝ”๋”ฉ ๊ฒฝ๋กœ โ†’ Config.USER_CONFIG_DIR
  • ๐Ÿ”ง utils/retry.py: make_api_retry() ๊ณตํ†ต ํŒฉํ† ๋ฆฌ (์ค‘๋ณต 4๊ณณ ์ œ๊ฑฐ)
  • ๐Ÿ—๏ธ BaseImageSearchTool: Unsplash/Pexels ๊ณตํ†ต ๋กœ์ง ์ถ”์ถœ (~100์ค„ ๊ฐ์†Œ)
  • โš™๏ธ RAG ํŒŒ๋ผ๋ฏธํ„ฐ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ง€์›: RAG_QA_N_RESULTS, RAG_QA_TOP_K, RAG_CONTENT_N_RESULTS
  • โœ… Config ๊ฒ€์ฆ: IMAGE_WEIGHT_*, CONTENT_*_RATIO ํ•ฉ๊ณ„ 1.0 ๊ฒ€์ฆ
  • ๐Ÿ’ฌ Chat ์‘๋‹ต conversation_log.txt ์ €์žฅ (์งˆ๋ฌธ + AI ๋‹ต๋ณ€ ๋ชจ๋‘)
  • ๐Ÿงช async ๋„๊ตฌ ํ…Œ์ŠคํŠธ 23๊ฐœ ์ถ”๊ฐ€

v0.3.5 (2026-02-18) - ๐ŸŽฏ RAG ํ’ˆ์งˆ ๋Œ€ํญ ํ–ฅ์ƒ

Chat ๋‹ต๋ณ€ ํ’ˆ์งˆ:

  • ๐ŸŽฏ 400๋‹จ์–ด ๊ตฌ์กฐํ™” ๋‹ต๋ณ€: 5๊ฐœ Markdown ์„น์…˜ ๊ฐ•์ œ (๊ฐœ์š”/์ƒ์„ธ/ํ•ต์‹ฌ/์˜ˆ์‹œ/์ถ”๊ฐ€๊ณ ๋ ค)
  • ๐Ÿ” ๊ฒ€์ƒ‰ ๊ฐ•ํ™”: n_results 10โ†’15, top_k 8โ†’12 (+50%)
  • ๐ŸŒก๏ธ ์˜จ๋„ ์ตœ์ ํ™”: temperature 0.7โ†’0.3 (์ •ํ™•์„ฑ ํ–ฅ์ƒ)
  • ๐ŸŽจ Rich Markdown ๋ Œ๋”๋ง: ํ„ฐ๋ฏธ๋„ Panel ํ˜•์‹ ์ถœ๋ ฅ
  • ๐ŸŽฒ ๋‹ค์–‘์„ฑ ์ฆ๊ฐ€: source-page๋‹น ์ตœ๋Œ€ 2โ†’3๊ฐœ chunks
  • ๐Ÿ› ์‹ ๋ขฐ๋„ ์ˆ˜์ •: 1 - distance โ†’ max(0, 1 - distance/2) (ํ•ญ์ƒ 0% ๋ฒ„๊ทธ ์ˆ˜์ •)
  • ๐Ÿ”ง deprecated API ์ˆ˜์ •: pkg_resources.path โ†’ importlib.resources.files()

v0.3.4 (2026-02-16) - โšก Async I/O Support

๋น„๋™๊ธฐ I/O ์‹œ์Šคํ…œ:

  • โšก AsyncContentCollectorAgent: ๋ณ‘๋ ฌ ์ˆ˜์ง‘ (70% ์„ฑ๋Šฅ ํ–ฅ์ƒ)
    • PDF, URL, ๊ฒ€์ƒ‰ ๋™์‹œ ์‹คํ–‰
    • asyncio.gather() ๊ธฐ๋ฐ˜ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ
  • ๐ŸŒ Async Tools: httpx, aiofiles
    • Async web scraper, search tool
    • Rate limiting (token bucket)
  • ๐Ÿš€ CLI ํ†ตํ•ฉ: --async-mode ํ”Œ๋ž˜๊ทธ
    • Feature flag ํŒจํ„ด
    • ๊ธฐ์กด sync 100% ํ˜ธํ™˜

AsyncBaseAgent ํŒจํ„ด:

  • ๐Ÿ—๏ธ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฒ ์ด์Šค ํด๋ž˜์Šค
  • ๐Ÿ”ง run_in_executor(), gather_with_concurrency()
  • โœ… ํ–ฅํ›„ ๋‹ค๋ฅธ ์—์ด์ „ํŠธ์—๋„ ์ ์šฉ ๊ฐ€๋Šฅ

์˜ํ–ฅ:

  • โœ… ์ปจํ…์ธ  ์ˆ˜์ง‘ 70% ๋น ๋ฆ„
  • โœ… ์—ฌ๋Ÿฌ ์†Œ์Šค ์‚ฌ์šฉ ์‹œ ๊ทน๋Œ€ํ™”
  • โœ… Breaking change ์—†์Œ

v0.3.3 (2026-02-15) - โŒจ๏ธ Enhanced Input System

์ž…๋ ฅ ์‹œ์Šคํ…œ ๊ฐœ์„ :

  • โŒจ๏ธ prompt-toolkit ๋„์ž…: ํ•œ๊ตญ์–ด ์™„๋ฒฝ ์ง€์›
    • ๋ฉ€ํ‹ฐ๋ฐ”์ดํŠธ ๋ฌธ์ž ์ฒ˜๋ฆฌ, ๋ฐฑ์ŠคํŽ˜์ด์Šค/์‚ญ์ œ ์ •์ƒ ์ž‘๋™
    • ํ„ฐ๋ฏธ๋„ ๋…๋ฆฝ์  - ๋ชจ๋“  OS์—์„œ ์ผ๊ด€๋œ ๊ฒฝํ—˜
  • ๐Ÿ“œ ์ž…๋ ฅ ํžˆ์Šคํ† ๋ฆฌ: ~/Documents/LectureForge/chat_history.txt
    • โ†‘/โ†“: ์ด์ „/๋‹ค์Œ ์งˆ๋ฌธ, Ctrl+R: ๊ฒ€์ƒ‰
  • ๐Ÿ’ก ์ž๋™ ์ œ์•ˆ: ์ด์ „ ์งˆ๋ฌธ ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ์ œ์•ˆ
  • โšก ํŽธ์ง‘ ๋‹จ์ถ•ํ‚ค: Ctrl+A/E, Alt+โ†/โ†’, Ctrl+U

Python 3.12 ํ˜ธํ™˜:

  • ๐Ÿ”ง NumPy 1.26.0+: Python 3.12 ๊ณต์‹ ์ง€์›
  • โœ… ์ „์ฒด ์˜์กด์„ฑ Python 3.11-3.12 ๊ฒ€์ฆ

์˜ํ–ฅ:

  • โœ… Chat ๋ชจ๋“œ UX ๋Œ€ํญ ํ–ฅ์ƒ
  • โœ… ํ•œ๊ตญ์–ด ์‚ฌ์šฉ์ž ๋ถˆํŽธ ํ•ด์†Œ
  • โœ… Python 3.12 ์•ˆ์ •์  ์‹คํ–‰

v0.3.1 (2026-02-13) - ๐Ÿ“‚ User-Friendly Directories

์‚ฌ์šฉ์ž ์นœํ™”์  ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ:

  • ๐Ÿ“‚ ํžˆ๋“  โ†’ ์ผ๋ฐ˜ ๋””๋ ‰ํ† ๋ฆฌ: ~/.lecture-forge/ โ†’ ~/Documents/LectureForge/
    • Finder/ํƒ์ƒ‰๊ธฐ์—์„œ ๋ฐ”๋กœ ํ™•์ธ ๊ฐ€๋Šฅ
    • ๋“œ๋ž˜๊ทธ์•ค๋“œ๋กญ์œผ๋กœ ํŒŒ์ผ ๊ด€๋ฆฌ
    • iCloud/OneDrive ๋™๊ธฐํ™” ๊ฐ€๋Šฅ
  • ๐Ÿ  home ์ปค๋งจ๋“œ ์ถ”๊ฐ€: ๋น ๋ฅธ ํด๋” ์ ‘๊ทผ
    • lecture-forge home - ๋ฉ”์ธ ํด๋” ์—ด๊ธฐ
    • lecture-forge home outputs - ๊ฐ•์˜ ๊ฒฐ๊ณผ๋ฌผ
    • lecture-forge home data - ๋ฐ์ดํ„ฐ ํด๋”
    • lecture-forge home kb - ์ตœ์‹  ์ง€์‹๋ฒ ์ด์Šค
    • lecture-forge home env - .env ํŽธ์ง‘
  • ๐Ÿ”„ ์ž๋™ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜: ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์ž๋™ ์ด๋™ (ํ•˜์œ„ ํ˜ธํ™˜)

์˜ํ–ฅ:

  • โœ… ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ์ ‘๊ทผ์„ฑ ๋Œ€ํญ ํ–ฅ์ƒ
  • โœ… ๊ธฐ์กด ์‚ฌ์šฉ์ž ํˆฌ๋ช…ํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
  • โœ… ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ง€์› (macOS/Windows/Linux)

v0.3.0 (2026-02-12) - ๐ŸŽฏ Presentation Optimization

์Šฌ๋ผ์ด๋“œ ์ƒ์„ฑ ๋Œ€ํญ ๊ฐœ์„ :

  • ๐ŸŽฏ ๋…ผ๋ฆฌ์  ๊ตฌ์„ฑ: ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ์ตœ์ ํ™”
    • ์Šฌ๋ผ์ด๋“œ๋‹น ํ•ญ๋ชฉ ์ˆ˜: 4โ†’3 (33% ๊ฐ์†Œ)
    • ๊ธด ๋ฆฌ์ŠคํŠธ ์ž๋™ ๋ถ„ํ•  (์ตœ๋Œ€ 5๊ฐœ์”ฉ)
    • ์„œ๋ธŒ์„น์…˜ โ†’ ๋…๋ฆฝ ์ œ๋ชฉ ์Šฌ๋ผ์ด๋“œ
    • ์†Œ์ œ๋ชฉ โ†’ ์Šฌ๋ผ์ด๋“œ ํƒ€์ดํ‹€
    • ์ฝ”๋“œ ์Šฌ๋ผ์ด๋“œ ์ œ๋ชฉ ์ž๋™ ์ถ”๊ฐ€
  • ๐ŸŽจ ์Šคํƒ€์ผ ํ–ฅ์ƒ: ์ „๋ฌธ์  ๋””์ž์ธ
    • ์ œ๋ชฉ ํฌ๊ธฐ ๊ณ„์ธตํ™” (2.5em/2em/1.6em)
    • ์ƒ‰์ƒ ๊ณ„์ธตํ™” (์ง„ํ•œ/์ค‘๊ฐ„/๋ฐ์€ ํšŒ์ƒ‰)
    • ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ์ตœ์ ํ™”
    • ์ฝ”๋“œ ๋ธ”๋ก ์ž…์ฒด๊ฐ
  • ๐Ÿ“Š Mermaid ๋‹ค์ด์–ด๊ทธ๋žจ: ๋ฌธ์„œ ์‹œ๊ฐํ™”
    • ๋ชจ๋“  ํ…์ŠคํŠธ ๋‹ค์ด์–ด๊ทธ๋žจ โ†’ Mermaid
    • ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜, ์˜ˆ์™ธ ๊ณ„์ธต, ํ’ˆ์งˆ ํ‰๊ฐ€ ๋“ฑ

์˜ˆ์™ธ ์ฒ˜๋ฆฌ & ํ”„๋กฌํ”„ํŠธ ๊ด€๋ฆฌ (v0.2.7 ํ†ตํ•ฉ):

  • ๐ŸŽฏ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ: ๊ตฌ์กฐํ™”๋œ ๊ณ„์ธต (9๊ฐœ ์นดํ…Œ๊ณ ๋ฆฌ, 349์ค„)
  • ๐Ÿ“ ํ”„๋กฌํ”„ํŠธ ๊ด€๋ฆฌ: ํ…œํ”Œ๋ฆฟ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ (176์ค„)
  • โœ๏ธ ์ฝ˜ํ…์ธ  ์ƒ์„ฑ: ์ƒ์„ธํ•œ ํ”„๋กฌํ”„ํŠธ ๊ฐ€์ด๋“œ๋ผ์ธ

v0.2.6 (2026-02-12) - ๐Ÿ› Critical Image Bug Fix

Critical Bug Fix:

  • ๐Ÿ› ์ด๋ฏธ์ง€ thumbnail ๋ฒ„๊ทธ ์™„์ „ ํ•ด๊ฒฐ: ํ’ˆ์งˆ ๋ถ„์„ ์ค‘ ์›๋ณธ ์ด๋ฏธ์ง€๊ฐ€ 200px๋กœ ์ถ•์†Œ๋˜๋˜ ์น˜๋ช…์  ๋ฒ„๊ทธ ์ˆ˜์ •
    • ๋ฌธ์ œ: _analyze_image_content_fast()์—์„œ pil_image.thumbnail() ํ˜ธ์ถœ ์‹œ ์›๋ณธ ์ด๋ฏธ์ง€ ์ˆ˜์ •
    • ์ฆ์ƒ: ๋ชจ๋“  PDF ์ถ”์ถœ ์ด๋ฏธ์ง€๊ฐ€ ์ •ํ™•ํžˆ 200px ๋„ˆ๋น„๋กœ ์ €์žฅ๋จ (์˜ˆ: 200x44, 200x89, 200x125)
    • ํ•ด๊ฒฐ: ๋ถ„์„ ์ „ ์ด๋ฏธ์ง€ ๋ณต์‚ฌ๋ณธ ์ƒ์„ฑ (pil_image.copy())์œผ๋กœ ์›๋ณธ ๋ณด์กด
    • ๊ฒฐ๊ณผ: 800x600 ์ด๋ฏธ์ง€๋Š” ์ด์ œ 800x600 ๊ทธ๋Œ€๋กœ ์ €์žฅ โœ…

์˜ํ–ฅ:

  • โœ… PDF ์ด๋ฏธ์ง€ ์›๋ณธ ํฌ๊ธฐ ์™„์ „ ๋ณด์กด
  • โœ… IMAGE_MIN_WIDTH=500, IMAGE_MIN_HEIGHT=300 ํ•„ํ„ฐ ์ •์ƒ ์ž‘๋™
  • โœ… ๊ณ ํ•ด์ƒ๋„ ์ด๋ฏธ์ง€ ํ’ˆ์งˆ ์™„์ „ ๋ณด์žฅ
  • โœ… v0.2.5์˜ ์ด๋ฏธ์ง€ ํ’ˆ์งˆ ๊ฐœ์„  ๊ธฐ๋Šฅ์ด ์ด์ œ ์ •์ƒ ์ž‘๋™

๊ธฐ์ˆ  ์ƒ์„ธ:

# ์ˆ˜์ • ์ „ (๋ฒ„๊ทธ - image_extractor.py:333):
pil_image.thumbnail((200, 200), Image.Resampling.LANCZOS)  # โŒ ์›๋ณธ ์ˆ˜์ •!

# ์ˆ˜์ • ํ›„ (์ •์ƒ):
analysis_img = pil_image.copy()  # โœ… ๋ณต์‚ฌ๋ณธ ์ƒ์„ฑ
analysis_img.thumbnail((200, 200), Image.Resampling.LANCZOS)  # โœ… ๋ณต์‚ฌ๋ณธ๋งŒ ์ˆ˜์ •

v0.2.1-0.2.5 (2026-02-10~12) - ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ ํ’ˆ์งˆ ๊ฐœ์„ 

์ฃผ์š” ๊ฐœ์„ :

  • ๐Ÿ› Visual score, ํ’ˆ์งˆ ํ‰๊ฐ€, ์Šฌ๋ผ์ด๋“œ ์ƒ์„ฑ ๋ฒ„๊ทธ ์ˆ˜์ •
  • ๐ŸŽจ ์ด๋ฏธ์ง€ ํ’ˆ์งˆ ํ–ฅ์ƒ (Full HD, ๊ณ ํ’ˆ์งˆ WebP)
  • ๐Ÿ“ ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ ๋ฐ ์ผ๊ด€์„ฑ ๊ฐœ์„ 
  • โš™๏ธ Config ์ตœ์ ํ™”

v0.2.0 (2026-02-09) - Enhanced Quality Release ๐Ÿš€

์„ฑ๋Šฅ ํ–ฅ์ƒ

  • โšก RAG ์ฟผ๋ฆฌ ์บ์‹ฑ (60% ์„ฑ๋Šฅ ํ–ฅ์ƒ)
  • ๐Ÿ”„ ์ž๋™ API ์žฌ์‹œ๋„ ๋กœ์ง (์ง€์ˆ˜ ๋ฐฑ์˜คํ”„)

ํ’ˆ์งˆ ๊ฐœ์„ 

  • ๐Ÿงช 77+ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (35%+ ์ปค๋ฒ„๋ฆฌ์ง€)
  • ๐Ÿ”ง ํƒ€์ž… ํžŒํŠธ 75% ์ปค๋ฒ„๋ฆฌ์ง€ (40% โ†’ 75%)
  • ๐Ÿ› Config ๊ฒ€์ฆ ๋Ÿฐํƒ€์ž„ ์ด๋™
  • ๐Ÿ› Bare except ์•ˆํ‹ฐํŒจํ„ด ์ˆ˜์ •

์„ค์ • ๊ด€๋ฆฌ

  • ๐Ÿ”ง Config ๋ฆฌํŒฉํ† ๋ง: ๋ชจ๋“  ํ•˜๋“œ์ฝ”๋”ฉ ์ œ๊ฑฐ, .env ๊ธฐ๋ฐ˜ ์„ค์ • ์‹œ์Šคํ…œ ๋„์ž…
  • โš™๏ธ 15+ ํ™˜๊ฒฝ๋ณ€์ˆ˜: ๊ฒ€์ƒ‰, ํฌ๋กค๋ง, ์ด๋ฏธ์ง€, ํƒ€์ž„์•„์›ƒ ๋“ฑ ๋ชจ๋“  ์„ค์ • ์กฐ์ • ๊ฐ€๋Šฅ
  • ๐ŸŽ›๏ธ ์œ ์—ฐํ•œ ๋ฐฐํฌ: ๊ฐœ๋ฐœ/ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ๋ถ„๋ฆฌ ์ง€์›

๋ฌธ์„œ

  • ๐Ÿ“š CLAUDE.md, README.md, INPUT_LIMITS_ANALYSIS.md ์—…๋ฐ์ดํŠธ
  • ๐Ÿ“– Config ๊ธฐ๋ฐ˜ ์„ค์ • ๊ฐ€์ด๋“œ ์ถ”๊ฐ€

v0.1.0 (2026-02-08) - Initial Production Release ๐ŸŽ‰

  • ๐Ÿค– 10๊ฐœ ์ „๋ฌธ ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ
  • ๐Ÿ“š ๋ฉ€ํ‹ฐ์†Œ์Šค ์ปจํ…์ธ  ์ˆ˜์ง‘ (PDF, URL, ๊ฒ€์ƒ‰)
  • ๐Ÿ“ Location-based ์ด๋ฏธ์ง€ ๋งค์นญ (+750% ํ™œ์šฉ๋ฅ )
  • ๐Ÿ—„๏ธ ChromaDB ๋ฒกํ„ฐ DB ๊ธฐ๋ฐ˜ ์ง€์‹์ฐฝ๊ณ 
  • โœ… 6์ฐจ์› ํ’ˆ์งˆ ํ‰๊ฐ€ ์‹œ์Šคํ…œ
  • ๐ŸŽจ ๊ตฌ์กฐํ™”๋œ HTML ์ถœ๋ ฅ
  • ๐ŸŽฌ Reveal.js ์Šฌ๋ผ์ด๋“œ ๋ณ€ํ™˜

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

๊ธฐ์—ฌ๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ๋‹ค์Œ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ผ์ฃผ์„ธ์š”:

  1. ์ด์Šˆ ์ƒ์„ฑ: ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋จผ์ € ๋…ผ์˜
  2. ํฌํฌ & ๋ธŒ๋žœ์น˜: feature ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
  3. ํ…Œ์ŠคํŠธ ์ž‘์„ฑ: ์ƒˆ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
  4. PR ์ œ์ถœ: ๋ณ€๊ฒฝ์‚ฌํ•ญ ์„ค๋ช…๊ณผ ํ•จ๊ป˜ ์ œ์ถœ

์ž์„ธํ•œ ๋‚ด์šฉ์€ CONTRIBUTING.md๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.


๐Ÿ“„ ๋ผ์ด์„ ์Šค

MIT License - ์ž์„ธํ•œ ๋‚ด์šฉ์€ LICENSE ์ฐธ์กฐ


๐Ÿ“ž ์ง€์› ๋ฐ ๋ฌธ์˜


๐Ÿ™ ๊ฐ์‚ฌ์˜ ๋ง

์ด ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค์Œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋“ค์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค:

  • LangChain - Multi-Agent ํ”„๋ ˆ์ž„์›Œํฌ
  • ChromaDB - ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • OpenAI - GPT-4o ๋ชจ๋ธ
  • Serper - ๊ฒ€์ƒ‰ API
  • Pexels & Unsplash - ์ด๋ฏธ์ง€ API

Made with โค๏ธ by Sungwoo Kim
โญ ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด GitHub Star๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lecture_forge-0.3.6.tar.gz (251.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lecture_forge-0.3.6-py3-none-any.whl (240.2 kB view details)

Uploaded Python 3

File details

Details for the file lecture_forge-0.3.6.tar.gz.

File metadata

  • Download URL: lecture_forge-0.3.6.tar.gz
  • Upload date:
  • Size: 251.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for lecture_forge-0.3.6.tar.gz
Algorithm Hash digest
SHA256 97beab84fb12f0b2f858d524e29334987ba4a1675403ced123a89ee4ecf5eb53
MD5 6fe3f62a63cf0e04dbbb9fb6f64e6437
BLAKE2b-256 5feb8432ffa0f2a9639afaba027d61694eafd455ed8ae6b41873c975ccb4a9a9

See more details on using hashes here.

File details

Details for the file lecture_forge-0.3.6-py3-none-any.whl.

File metadata

  • Download URL: lecture_forge-0.3.6-py3-none-any.whl
  • Upload date:
  • Size: 240.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for lecture_forge-0.3.6-py3-none-any.whl
Algorithm Hash digest
SHA256 11f6a299582bba959bb6d7656085770b82cb36a81af2e375c7ff5a860c329aee
MD5 f8ffaaec867360d7a20c6394f58ca70b
BLAKE2b-256 3f3f5ac5d0e9577e26fc9e4766586a427353c35f7e9ca038405cb6b2c91bbdf3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page