Spaces:
No application file
No application file
RAG5_2_ChooseLLM ํ๋ก์ ํธ ๊ณํ์
ํ๋ก์ ํธ ๊ฐ์
์ด ํ๋ก์ ํธ๋ RAG(Retrieval-Augmented Generation) ๊ธฐ๋ฐ ๊ฒ์ ์ฑ๋ด์ผ๋ก, ์ง์๋ฒ ์ด์ค์์ ๊ด๋ จ ์ ๋ณด๋ฅผ ๊ฒ์ํ์ฌ ์ฌ์ฉ์ ์ง์์ ๋ต๋ณํฉ๋๋ค. ์ฃผ์ ํน์ง์ผ๋ก๋ OpenAI์ DeepSeek ๋ฑ ๋ค์ํ LLM์ ์ ํํ์ฌ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ๊ณผ ์ฅ์น ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ
์ง์๋ฒ ์ด์ค ๊ด๋ฆฌ
- ๋ฌธ์ ์ ๋ก๋ (.txt, .md, .csv ๋ฑ)
- ๋ฌธ์ ์ฒญํฌ ๋ถํ ๋ฐ ๋ฒกํฐ ์ธ๋ฑ์ฑ
- ์ง์๋ฒ ์ด์ค ๋ฌธ์ ๋ชฉ๋ก ์กฐํ
LLM ์ ํ
- OpenAI, DeepSeek ๋ฑ ๋ค์ํ LLM ์ ํ ๊ฐ๋ฅ
- LLM ๋ณ๊ฒฝ ์ ์ค์๊ฐ ์ ํ
- ํ์ฌ ์ฌ์ฉ ์ค์ธ LLM ์ ๋ณด ํ์
์ฑ๋ด ๊ธฐ๋ฅ
- ํ ์คํธ ๊ธฐ๋ฐ ์ง์์๋ต
- ์์ฑ ์ธ์ ๋ฐ ์ง์์๋ต (VITO STT ํ์ฉ)
- ๊ฒ์ ๊ฒฐ๊ณผ ์ ๋ณด ์ถ์ฒ ํ์
์ฅ์น ๊ด๋ฆฌ ๊ธฐ๋ฅ
- ๋ก์ปฌ PC์ ํต์ ํ๋ ๊ธฐ๋ฅ
- ์ฅ์น ์ํ ํ์ธ ๋ฐ ์ฅ์น ๋ชฉ๋ก ์กฐํ
- ํ๋ก๊ทธ๋จ ๋ชฉ๋ก ์กฐํ ๋ฐ ์คํ
๊ธฐ์ ์คํ
- ๋ฐฑ์๋: Flask (Python)
- ํ๋ก ํธ์๋: HTML, CSS, JavaScript
- LLM ํตํฉ: OpenAI API, DeepSeek API
- ๊ฒ์ ๊ธฐ๋ฅ: ๋ฒกํฐ ๊ฒ์, ์ฌ์์ํ
- STT ์๋น์ค: VITO API
- ํต์ ํ๋กํ ์ฝ: RESTful API
์๋ฃ๋ ์์
- ํ๋ก์ ํธ ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ค์
- Flask ์น ์๋ฒ ๊ตฌํ
- ๋ค์ค LLM ์ธํฐํ์ด์ค ๊ตฌํ (OpenAI, DeepSeek)
- ์ฌ์ฉ์ ์ธ์ฆ ๊ธฐ๋ฅ ๊ตฌํ
- ๋ฒกํฐ ๊ฒ์ ๋ฐ ์ฌ์์ํ ๊ธฐ๋ฅ ๊ตฌํ
- ๋ฌธ์ ์ฒ๋ฆฌ ๋ฐ ๊ด๋ฆฌ ๊ธฐ๋ฅ ๊ตฌํ
- ์น ์ธํฐํ์ด์ค ๊ตฌํ
- ์ฅ์น ๊ด๋ฆฌ ๊ธฐ๋ฅ ํตํฉ
- ์ฅ์น ๊ด๋ฆฌ UI ๊ตฌํ
- ์ฅ์น๊ด๋ฆฌ ํญ ํด๋ฆญ ์ด๋ฒคํธ ๋ฒ๊ทธ ์์
์งํํด์ผ ํ ์์
- ๋ฌธ์๊ด๋ฆฌ&์ฅ์น๊ด๋ฆฌ ํญ ๋ก๋ฉ์ง์ ํ์ ํด๊ฒฐ๊ฒฐ
- LLM ์ ํ UI ๊ฐ์
- ๋๋กญ๋ค์ด์ ์์ด์ฝ ์ถ๊ฐ
- ๊ฐ LLM๋ณ ์์ธ ๋ชจ๋ธ ์ ๋ณด ํ์
- ์๋ต ๋ด ์์ค ๋งํฌ ํด๋ฆญ ์ ์๋ฌธ ํ์ ๊ธฐ๋ฅ
- ์๋ต ์๋ ๊ฐ์
- ์ค๋ฅ ์ฒ๋ฆฌ ๊ฐํ
- ํ ์คํธ ์ผ์ด์ค ์์ฑ ๋ฐ ์ ๋ ํ ์คํธ ๊ตฌํ
- ์ฌ์ฉ์ ๊ฐ์ด๋ ๋ฌธ์ ์์ฑ
ํตํฉ ๊ตฌํ ๋ด์ฉ
1. ์น์ฑ ํตํฉ
- ๋จ์ผ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ RAG ๊ฒ์ ์ฑ๋ด๊ณผ ์ฅ์น ๊ด๋ฆฌ ๊ธฐ๋ฅ ํตํฉ
- ํญ ๊ธฐ๋ฐ ์ธํฐํ์ด์ค๋ก ๊ธฐ๋ฅ ๋ถ๋ฆฌ (๋ํ, ๋ฌธ์๊ด๋ฆฌ, ์ฅ์น๊ด๋ฆฌ)
- Flask๋ฅผ ํตํ ์ค์ ์ง์ค์ ์๋ฒ ๊ด๋ฆฌ
2. ์ฅ์น ๊ด๋ฆฌ ๊ธฐ๋ฅ
- ์ฅ์น ์ํ ํ์ธ ๊ธฐ๋ฅ
- ์ฐ๊ฒฐ๋ ์ฅ์น ๋ชฉ๋ก ์กฐํ
- ์คํ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ ๋ชฉ๋ก ์กฐํ ๋ฐ ์คํ
- ์๋ฒ์์ RESTful API ํต์
3. ํ๋ก ํธ์๋ ๊ตฌํ
- ์ง๊ด์ ์ธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค
- ์ค์๊ฐ ์ํ ์ ๋ฐ์ดํธ
- ์๋ฌ ์ฒ๋ฆฌ ๋ฐ ์ฌ์ฉ์ ํผ๋๋ฐฑ ์ ๊ณต
- ๋ฐ์ํ ๋์์ธ ์ ์ฉ
์ต๊ทผ ๋ฒ๊ทธ ์์
์ฅ์น๊ด๋ฆฌ ํญ ์๋ ๋ฌธ์ ํด๊ฒฐ
๋ฌธ์ ์ํฉ: UI์์ ์ฅ์น๊ด๋ฆฌ ๋ฒํผ์ด ์ ํ ์๋ํ์ง ์๋ ๋ฌธ์ ๋ฐ์
์์ธ ๋ถ์:
- HTML ๋ฌธ์ :
device-style.css
ํ์ผ์ด HTML์ ๋งํฌ๋์ด ์์ง ์์
- JavaScript ๋ฌธ์ :
app.js
์์ deviceTab ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ์ ๋๋ก ๋ฑ๋ก๋์ง ์์app-device.js
์app.js
๊ฐ์ ํจ์ ๊ณต์ ์ ๋ฌธ์ ๋ฐ์
ํด๊ฒฐ ๋ฐฉ๋ฒ:
- HTML ์์ :
device-style.css
ํ์ผ์ HTML์ head ์น์ ์ ๋งํฌ ์ถ๊ฐ- ์ฅ์น๊ด๋ฆฌ ํญ์ ์ํ ์ง์ ์ ์ธ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ HTML ๋ด๋ถ ์คํฌ๋ฆฝํธ๋ก ์ถ๊ฐ
- ์ด๋ฒคํธ ํธ๋ค๋ง ๊ฐ์ :
- ์ฅ์น๊ด๋ฆฌ ํญ์ ์ง์ onclick ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ถ๊ฐํ์ฌ ๊ธฐ์กด ๋ฌธ์ ์ฐํ
- ๋๋ฒ๊น ์ฉ ์ฝ์ ๋ก๊ทธ ์ถ๊ฐ๋ก ๋ฌธ์ ์ถ์ ๊ฐ๋ฅํ๊ฒ ํจ
์์ ํ์ผ:
app/templates/index.html
: CSS ๋งํฌ ๋ฐ ์ง์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ถ๊ฐdocs/project_plan.md
: ๋ฌธ์ ํด๊ฒฐ ๊ณผ์ ๋ฌธ์ํ
ํ์ผ ๊ตฌ์กฐ
RAG5_2_ChooseLLM/
โโโ app/
โ โโโ app.py # ๋ฉ์ธ Flask ์ ํ๋ฆฌ์ผ์ด์
โ โโโ app_routes.py # ๊ธฐ๋ณธ ๋ผ์ฐํธ ์ ์
โ โโโ app_device_routes.py # ์ฅ์น ๊ด๋ฆฌ ๊ด๋ จ ๋ผ์ฐํธ
โ โโโ static/
โ โ โโโ css/
โ โ โ โโโ style.css # ๊ธฐ๋ณธ ์คํ์ผ์ํธ
โ โ โ โโโ device-style.css # ์ฅ์น ๊ด๋ฆฌ ์คํ์ผ์ํธ
โ โ โโโ js/
โ โ โโโ app.js # ๋ฉ์ธ JavaScript
โ โ โโโ app-device.js # ์ฅ์น ๊ด๋ฆฌ JavaScript
โ โโโ templates/
โ โโโ index.html # ๋ฉ์ธ ํ์ด์ง ํ
ํ๋ฆฟ (์์ ๋จ)
โ โโโ login.html # ๋ก๊ทธ์ธ ํ์ด์ง ํ
ํ๋ฆฟ
โโโ data/ # ์
๋ก๋๋ ๋ฌธ์ ์ ์ฅ
โโโ docs/ # ํ๋ก์ ํธ ๋ฌธ์
โโโ retrieval/ # ๊ฒ์ ๊ด๋ จ ๋ชจ๋
โโโ utils/ # ์ ํธ๋ฆฌํฐ ๋ชจ๋
ํ๊ฒฝ ๋ณ์ ์ค์
ADMIN_USERNAME
: ๊ด๋ฆฌ์ ์ฌ์ฉ์๋ช (๊ธฐ๋ณธ๊ฐ: admin)ADMIN_PASSWORD
: ๊ด๋ฆฌ์ ๋น๋ฐ๋ฒํธ (๊ธฐ๋ณธ๊ฐ: rag12345)DEVICE_SERVER_URL
: ์ฅ์น ๊ด๋ฆฌ ์๋ฒ URL (๊ธฐ๋ณธ๊ฐ: http://localhost:5050)OPENAI_API_KEY
: OpenAI API ํคDEEPSEEK_API_KEY
: DeepSeek API ํคVITO_API_KEY
: VITO STT API ํค
์ฐธ๊ณ ์ฌํญ
- ์ฅ์น ๊ด๋ฆฌ ์๋ฒ๋ ๋ณ๋๋ก ์คํ๋์ด์ผ ํจ (ํฌํธ 5050)
- OpenAI, DeepSeek ๋ฐ VITO API ํค๋ .env ํ์ผ์ ์ค์ ํด์ผ ํจ
- ์ด๊ธฐ ๋ก๊ทธ์ธ ๊ณ์ ์ ๋ณด๋ ํ๊ฒฝ ๋ณ์์ ์ค์ ํ๊ฑฐ๋ ๊ธฐ๋ณธ๊ฐ ์ฌ์ฉ
- ์ฅ์น๊ด๋ฆฌ ํญ ํด๋ฆญ ์ ์ฝ์ ๋ก๊ทธ๋ฅผ ํ์ธํ์ฌ ์ด๋ฒคํธ ์ฒ๋ฆฌ ์ํ ๊ฒ์ฆ ๊ฐ๋ฅ
ํ์ฌ ๋ฌธ์ ์ฌํญ
- ๋ฌธ์๊ด๋ฆฌ & ์ฅ์น๊ด๋ฆฌ์์ ๋ก๋ฉํ์์ ์ง์