OLED/Display ๊ธฐ์ ํ์ต์ ์ํ ์คํ๋ผ์ธ ํ์ต ํ๋ซํผ
RAG ๊ธฐ๋ฐ LLM ์์๋ธ์ ํ์ฉํ ์ ๋ฌธ ์ฉ์ด ํ์ต ์์คํ ์ผ๋ก, 4์ง์ ๋คํ ํด์ฆ, ๋ฒ์ญ ํ์ต, ์ค๋ต ๊ด๋ฆฌ, ํต๊ณ ์ถ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
RAG ์กฐ๊ฑด๋ณ ํด์ฆ(& ๋ฒ์ญ) ์์ฑ ์์ค ๋น๊ต

- Easy/Medium/Hard ๋์ด๋ ์ ํ
- ์ค์๊ฐ ์ ๋ต ํ์ธ ๋ฐ ํผ๋๋ฐฑ
- 256๊ฐ OLED ์ ๋ฌธ ์ฉ์ด ๊ธฐ๋ฐ
- ์์ด โ ํ๊ตญ์ด ์๋ฐฉํฅ ๋ฒ์ญ
- ์ฃผ๊ด์ ๋ต๋ณ ์ ๋ ฅ
- ํํธ ์ ๊ณต ๊ธฐ๋ฅ
- ํ๋ฆฐ ๋ฌธ์ ์๋ ์ ์ฅ
- ํํฐ๋ง (์ ํ, ๋์ด๋)
- ์์ธ ๋ณด๊ธฐ ๋ฐ ๋ณต์ต ๊ธฐ๋ฅ
- ์ง๋ฌธ-๋ต๋ณ-์ ๋ต ๋น๊ต
- ์ค์๊ฐ ์ ์ ์ถ์
- ํ๊ท /์ต๊ณ ์ ์ ํ์
- ํ์ต ํ์คํ ๋ฆฌ
- ๋์ด๋๋ณ/์ ํ๋ณ ํต๊ณ
- ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ ํ์ต (ํฅํ ๊ตฌํ ์์ )
- ๋ฐ์ดํฐ ๋ถ์ ๋ฐ ์๊ฐํ
- Python 3.8 ์ด์
- 5GB ์ด์์ ๋์คํฌ ๊ณต๊ฐ (๋ชจ๋ธ ํฌํจ)
# ์ ์ฅ์ ํด๋ก
git clone https://github.com/yourusername/DisplayLearn.git
cd DisplayLearn
# ์์กด์ฑ ์ค์น
pip install -r requirements.txt
# (์ ํ) PyQt6๊ฐ ์๋ค๋ฉด
pip install PyQt6>=6.6.0LLM ๋ฒ์ญ ๋ชจ๋ธ์ ์ฒซ ์คํ ์ ์๋์ผ๋ก ๋ค์ด๋ก๋๋๊ฑฐ๋, ์๋์ผ๋ก ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค:
# ๋ฒ์ญ ๋ชจ๋ธ ์๋ ๋ค์ด๋ก๋
python tools/download_models.py๋ชจ๋ธ์ models/cache/ ํด๋์ ์ ์ฅ๋๋ฉฐ, Git์๋ ํฌํจ๋์ง ์์ต๋๋ค.
๋ค์ ๋ฐ์ดํฐ ํ์ผ๋ค์ Git ์ ์ฅ์์ ํฌํจ๋์ด ์์ด ๋ณ๋ ๋ค์ด๋ก๋๊ฐ ํ์ ์์ต๋๋ค:
data/excel/- Excel ์ฉ์ด ํ์ผdata/json/- JSON ์ฉ์ด ํ์ผdata/quiz/- ์์ฑ๋ ํด์ฆ ํ์ผ (์ ํ์ฌํญ)data/translation/- ์์ฑ๋ ๋ฒ์ญ ๋ฌธ์ ํ์ผ (์ ํ์ฌํญ)
์ฐธ๊ณ : PDF ํ์ผ์ ablation ์คํ์์๋ง ์ฌ์ฉ๋๋ฉฐ, ๊ธฐ๋ณธ ์์คํ ์์๋ ์ฌ์ฉํ์ง ์์ต๋๋ค.
์ฒซ ์คํ ์ ์ RAG ๋ฒกํฐ DB๋ฅผ ๊ตฌ์ถํด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ ์์คํ ์ Excel + JSON + ์นํฌ๋กค๋ฌ ์กฐํฉ์ ์ฌ์ฉํฉ๋๋ค:
# ๋ฐฉ๋ฒ 1: ์ ์ฉ ์คํฌ๋ฆฝํธ ์ฌ์ฉ (๊ถ์ฅ)
python tools/rebuild_rag_db_excel_json_web.py
# ๋ฐฉ๋ฒ 2: build_rag_db.py ์ฌ์ฉ
python tools/build_rag_db.py \
--excel-file data/excel/display์ฉ์ด.xlsx \
--json-file data/json/display.json \
--web-only --max-pages 5๊ตฌ์ถ ๊ณผ์ :
- Excel ํ์ผ์์ ์ฉ์ด ์ถ์ถ (
data/excel/display์ฉ์ด.xlsx) - JSON ํ์ผ์์ ์ฉ์ด ์ถ์ถ (
data/json/display.json) - ์น ํฌ๋กค๋ง์ผ๋ก ์ถ๊ฐ ์ฉ์ด ์์ง (์ฌ์ดํธ๋น ์ต๋ 5ํ์ด์ง)
์์ฑ๋ ๋ฒกํฐ DB๋ data/vector_db/์ ์ ์ฅ๋๋ฉฐ, Git์๋ ํฌํจ๋์ง ์์ต๋๋ค.
์ด๋ฏธ ๊ตฌ์ถ๋์ด ์๋์ง ํ์ธ:
# ๋ฒกํฐ DB ์กด์ฌ ์ฌ๋ถ ํ์ธ
ls -la data/vector_db/๋ฒกํฐ DB๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ฉด ์ฌ๊ตฌ์ถ ์์ด ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
streamlit run app_streamlit.pypython app/main.py์ฒซ ์คํ ์:
- ์ฌ์ฉ์ ๋ฑ๋ก/๋ก๊ทธ์ธ
- ๋ชจ๋ธ ์๋ ๋ค์ด๋ก๋ (์ฒซ ์คํ ์์๋ง)
- ๋ฉ์ธ ํ๋ฉด ํ์
Ctrl+1: ํด์ฆ ํญCtrl+2: ๋ฒ์ญ ํญCtrl+3: ์ค๋ต๋ ธํธ ํญCtrl+4: ์ ์ํ ํญCtrl+5: ML ํ์ต ํญ
Ctrl+L: ์ฌ์ฉ์ ๋ณ๊ฒฝCtrl+Q: ์ข ๋ฃF1: ๋์๋ง
1-4๋๋A-D: ๋ต ์ ํEnter: ์ ์ถ
Ctrl+Enter: ์ ์ถ
- ํด์ฆ ํญ ์ ํ
- ๋์ด๋ ๋ฐ ๋ฌธ์ ์ ์ ํ
- ์์ ๋ฒํผ ํด๋ฆญ
- ๋ฌธ์ ํ๊ธฐ
- ๊ฒฐ๊ณผ ํ์ธ ๋ฐ ์ค๋ต๋ ธํธ ์๋ ์ ์ฅ
- ์ค๋ต๋ ธํธ ํญ ์ ํ
- ํํฐ ์ ์ฉ (์ ํ)
- ๋ฌธ์ ๋๋ธํด๋ฆญํ์ฌ ์์ธ ๋ณด๊ธฐ
- ์ง๋ฌธ-๋ต๋ณ-์ ๋ต ๋น๊ต
DisplayLearn/
โโโ app/ # ์ ํ๋ฆฌ์ผ์ด์
โ โโโ main.py # PyQt6 ๋ฉ์ธ ์คํ ํ์ผ
โ โโโ ui/ # UI ์์ ฏ
โ โโโ utils/ # ์ ํธ๋ฆฌํฐ (์ฌ์ฉ์/์ ์/์ค๋ต ๊ด๋ฆฌ)
โโโ app_streamlit.py # Streamlit ๋ฉ์ธ ์ฑ
โโโ core/ # ํต์ฌ ๋ก์ง
โ โโโ quiz_engine.py # ํด์ฆ ์์ง
โ โโโ quiz_generator.py # ํด์ฆ ์์ฑ
โ โโโ translation_generator.py # ๋ฒ์ญ ๋ฌธ์ ์์ฑ
โ โโโ rag/ # RAG ์์คํ
โโโ tools/ # ๋๊ตฌ ์คํฌ๋ฆฝํธ
โ โโโ build_rag_db.py # RAG DB ๊ตฌ์ถ
โ โโโ generate_all_quizzes.py # ํด์ฆ ์ผ๊ด ์์ฑ
โ โโโ download_models.py # ๋ชจ๋ธ ๋ค์ด๋ก๋
โโโ ml/ # ML ๊ธฐ๋ฅ (๋ฏธ์์ฑ)
โโโ models/ # ๋ฒ์ญ ๋ชจ๋ธ
โโโ data/ # ๋ฐ์ดํฐ
โ โโโ excel/ # Excel ์ฉ์ด ํ์ผ
โ โโโ json/ # JSON ์ฉ์ด ํ์ผ
โ โโโ quiz/ # ํด์ฆ ๋ฐ์ดํฐ
โ โโโ translation/ # ๋ฒ์ญ ๋ฐ์ดํฐ
โ โโโ vector_db/ # RAG ๋ฒกํฐ DB (์์ฑ๋จ)
โ โโโ users.json # ์ฌ์ฉ์ ์ ๋ณด
โ โโโ scores.json # ์ ์ ๊ธฐ๋ก
โ โโโ wrong_answers.json # ์ค๋ต ๊ธฐ๋ก
โโโ ablation/ # RAG ablation ์คํ
โ โโโ RAG_COMPARISON_GUIDE.md
โ โโโ compare_rag_scenarios.py
โ โโโ results/ # ์คํ ๊ฒฐ๊ณผ
โโโ resources/ # ๋ฆฌ์์ค (์์ด์ฝ ๋ฑ)
โโโ requirements.txt # ์์กด์ฑ
โโโ setup.py # ์ค์น ์คํฌ๋ฆฝํธ
โโโ README.md # ์ด ํ์ผ
์ฃผ์ ํจํค์ง:
- streamlit (์น ์ฑ)
- PyQt6 6.6.0+ (๋ฐ์คํฌํฑ ์ฑ)
- transformers 4.35.0+
- torch 2.0.0+
- chromadb 0.4.0+
- sentence-transformers 2.2.0+
์ ์ฒด ๋ชฉ๋ก์ requirements.txt ์ฐธ์กฐ.
# PyInstaller ์ฌ์ฉ (PyQt6 ๋ฒ์ )
pip install pyinstaller
pyinstaller --onefile --windowed app/main.py๋ค์ํ RAG ๋ฐ์ดํฐ ์์ค ์กฐํฉ์ ๋ํ ์คํ ๊ฒฐ๊ณผ๋ ablation/ ํด๋์ ์์ต๋๋ค.
์คํ ์๋๋ฆฌ์ค:
- Excel๋ง, JSON๋ง, ์นํฌ๋กค๋ฌ๋ง
- Excel + JSON, PDF + ์นํฌ๋กค๋ฌ
- Excel + JSON + ์นํฌ๋กค๋ฌ (๊ธฐ๋ณธ ์์คํ )
- PDF ํฌํจ ์กฐํฉ (ablation ์คํ ์ ์ฉ)
PDF ์ฌ์ฉ: PDF ํ์ผ์ ablation ์คํ์์๋ง ์ฌ์ฉ๋๋ฉฐ, ๊ธฐ๋ณธ ์์คํ ์์๋ ์ฌ์ฉํ์ง ์์ต๋๋ค. PDF๋ฅผ ํฌํจํ ์คํ์ ์คํํ๋ ค๋ฉด:
# PDF ํฌํจ RAG DB ๊ตฌ์ถ (ablation ์คํ์ฉ)
python tools/build_rag_db.py --pdf-only
# ๋๋ ablation ์คํ ์คํฌ๋ฆฝํธ ์ฌ์ฉ
python ablation/compare_rag_scenarios.py --scenario pdf_only์ฐธ๊ณ ์๋ฃ:
- ๊ฐ์ด๋:
ablation/RAG_COMPARISON_GUIDE.md - ์คํ ์คํฌ๋ฆฝํธ:
ablation/compare_rag_scenarios.py - ๊ฒฐ๊ณผ:
ablation/results/
์์ธํ ๋ด์ฉ์ ablation/README.md๋ฅผ ์ฐธ์กฐํ์ธ์.
DisplayLearn์ ๋ค์ 7๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ๊ตฌ์ถ๋์์ต๋๋ค:
- Excel ํ์ ๊ฐ๋ฐ (Display ์ ๋ฌธ ์ฉ์ด ํ์ผ)
- JSON ํ์ ๊ฐ๋ฐ (์ฉ์ด ๋ฐ์ดํฐ ํ์ผ)
- ์น ํฌ๋กค๋ฌ ๊ฐ๋ฐ (์ ๋ฌธ ์ฌ์ดํธ ํฌ๋กค๋ง)
- ๋ฐ์ดํฐ ๊ฒ์ฆ ๋ฐ ์ ๊ทํ
์คํ ๋ฐฉ๋ฒ:
# Excel + JSON + ์นํฌ๋กค๋ฌ๋ก RAG DB ๊ตฌ์ถ
python tools/rebuild_rag_db_excel_json_web.py- ChromaDB ๊ธฐ๋ฐ ๋ฒกํฐ ์ ์ฅ์ ๊ตฌ์ถ
- ์๋ฒ ๋ฉ ๋ชจ๋ธ ์ด๊ธฐํ (sentence-transformers)
- ์ฉ์ด ๊ฒ์ ๋ฐ ์ปจํ ์คํธ ์ถ์ถ
- ๋ค์ค ๋ฒ์ญ ๋ชจ๋ธ ํตํฉ (NLLB, M2M-100, mBART)
- ํฉ์ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ
- GPU/CPU ์๋ ์ ํ
- 4์ง์ ๋คํ ํด์ฆ ์์ฑ๊ธฐ
- ๋ฒ์ญ ๋ฌธ์ ์์ฑ๊ธฐ
- ๋์ด๋ ์๋ ๋ถ๋ฅ
- ํด์ฆ ์์ง ๊ตฌํ
- ์์๋ธ ๋ฒ์ญ ๊ธฐ๋ฐ ๋ต์ ํ๊ฐ
- ์ ์ฌ๋ ๊ธฐ๋ฐ ์ฑ์
- Streamlit ์น ์ธํฐํ์ด์ค
- PyQt6 ๋ฐ์คํฌํฑ ์ธํฐํ์ด์ค
- ์ฌ์ฉ์ ๊ด๋ฆฌ ๋ฐ ํต๊ณ ์ถ์
- ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ
- ์ฑ๋ฅ ํ๋
- ๋ฐฐํฌ ์ค๋น
๊ธฐ๋ณธ ์์คํ ์ Excel + JSON + ์นํฌ๋กค๋ฌ ์กฐํฉ์ ์ฌ์ฉํฉ๋๋ค:
# Excel + JSON + ์นํฌ๋กค๋ฌ๋ก RAG DB ๊ตฌ์ถ (๊ถ์ฅ)
python tools/rebuild_rag_db_excel_json_web.py
# ๋๋ ๊ฐ๋ณ ์ต์
์ผ๋ก ๊ตฌ์ถ
python tools/build_rag_db.py \
--excel-file data/excel/display์ฉ์ด.xlsx \
--json-file data/json/display.json \
--web-only --max-pages 5์ฐธ๊ณ : PDF๋ ablation ์คํ์์๋ง ์ฌ์ฉ๋ฉ๋๋ค. ๊ธฐ๋ณธ ์์คํ ์์๋ ์ฌ์ฉํ์ง ์์ต๋๋ค.
# ๋ชจ๋ ํด์ฆ ์๋ ์์ฑ (4์ง์ ๋คํ + ๋ฒ์ญ, ๊ฐ ๋์ด๋๋ณ 50๊ฐ)
python tools/generate_all_quizzes.py
# ๊ฐ๋ณ ์์ฑ
python tools/generate_multiple_choice_quiz.py -n 50 -l ko --difficulty easy
python tools/generate_translation_quiz.py -n 50 --difficulty easy# ๋ฒ์ญ ๋ชจ๋ธ ์๋ ๋ค์ด๋ก๋ (์ฒซ ์คํ ์ ์๋ ๋ค์ด๋ก๋๋์ง๋ง, ์๋์ผ๋ก๋ ๊ฐ๋ฅ)
python tools/download_models.py์ฐธ๊ณ : ๋ชจ๋ธ ํ์ผ์ models/cache/์ ์ ์ฅ๋๋ฉฐ Git์๋ ํฌํจ๋์ง ์์ต๋๋ค. ๊ฐ ์ฌ์ฉ์๊ฐ ์ฒ์ ์คํ ์ ์๋์ผ๋ก ๋ค์ด๋ก๋๋ฉ๋๋ค.
MIT License
ํ๋ก์ ํธ ๋งํฌ: DisplayLearn ์ด๋ฉ์ผ: ์ด๋ฉ์ผ

