RAG6_AgenticAI / docs /project_plan.md
jeongsoo's picture
fix
f61a84c
|
raw
history blame
5.6 kB
# RAG5_2_ChooseLLM ํ”„๋กœ์ ํŠธ ๊ณ„ํš์„œ
## ํ”„๋กœ์ ํŠธ ๊ฐœ์š”
์ด ํ”„๋กœ์ ํŠธ๋Š” RAG(Retrieval-Augmented Generation) ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰ ์ฑ—๋ด‡์œผ๋กœ, ์ง€์‹๋ฒ ์ด์Šค์—์„œ ๊ด€๋ จ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์‚ฌ์šฉ์ž ์งˆ์˜์— ๋‹ต๋ณ€ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ํŠน์ง•์œผ๋กœ๋Š” OpenAI์™€ DeepSeek ๋“ฑ ๋‹ค์–‘ํ•œ LLM์„ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๊ณผ ์žฅ์น˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
## ์ฃผ์š” ๊ธฐ๋Šฅ
1. ์ง€์‹๋ฒ ์ด์Šค ๊ด€๋ฆฌ
- ๋ฌธ์„œ ์—…๋กœ๋“œ (.txt, .md, .csv ๋“ฑ)
- ๋ฌธ์„œ ์ฒญํฌ ๋ถ„ํ•  ๋ฐ ๋ฒกํ„ฐ ์ธ๋ฑ์‹ฑ
- ์ง€์‹๋ฒ ์ด์Šค ๋ฌธ์„œ ๋ชฉ๋ก ์กฐํšŒ
2. LLM ์„ ํƒ
- OpenAI, DeepSeek ๋“ฑ ๋‹ค์–‘ํ•œ LLM ์„ ํƒ ๊ฐ€๋Šฅ
- LLM ๋ณ€๊ฒฝ ์‹œ ์‹ค์‹œ๊ฐ„ ์ „ํ™˜
- ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ LLM ์ •๋ณด ํ‘œ์‹œ
3. ์ฑ—๋ด‡ ๊ธฐ๋Šฅ
- ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ์งˆ์˜์‘๋‹ต
- ์Œ์„ฑ ์ธ์‹ ๋ฐ ์งˆ์˜์‘๋‹ต (VITO STT ํ™œ์šฉ)
- ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ •๋ณด ์ถœ์ฒ˜ ํ‘œ์‹œ
4. ์žฅ์น˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ
- ๋กœ์ปฌ PC์™€ ํ†ต์‹ ํ•˜๋Š” ๊ธฐ๋Šฅ
- ์žฅ์น˜ ์ƒํƒœ ํ™•์ธ ๋ฐ ์žฅ์น˜ ๋ชฉ๋ก ์กฐํšŒ
- ํ”„๋กœ๊ทธ๋žจ ๋ชฉ๋ก ์กฐํšŒ ๋ฐ ์‹คํ–‰
## ๊ธฐ์ˆ  ์Šคํƒ
- **๋ฐฑ์—”๋“œ:** Flask (Python)
- **ํ”„๋ก ํŠธ์—”๋“œ:** HTML, CSS, JavaScript
- **LLM ํ†ตํ•ฉ:** OpenAI API, DeepSeek API
- **๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ:** ๋ฒกํ„ฐ ๊ฒ€์ƒ‰, ์žฌ์ˆœ์œ„ํ™”
- **STT ์„œ๋น„์Šค:** VITO API
- **ํ†ต์‹  ํ”„๋กœํ† ์ฝœ:** RESTful API
## ์™„๋ฃŒ๋œ ์ž‘์—…
- [X] ํ”„๋กœ์ ํŠธ ๊ธฐ๋ณธ ๊ตฌ์กฐ ์„ค์ •
- [X] Flask ์›น ์„œ๋ฒ„ ๊ตฌํ˜„
- [X] ๋‹ค์ค‘ LLM ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ (OpenAI, DeepSeek)
- [X] ์‚ฌ์šฉ์ž ์ธ์ฆ ๊ธฐ๋Šฅ ๊ตฌํ˜„
- [X] ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ๋ฐ ์žฌ์ˆœ์œ„ํ™” ๊ธฐ๋Šฅ ๊ตฌํ˜„
- [X] ๋ฌธ์„œ ์ฒ˜๋ฆฌ ๋ฐ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ ๊ตฌํ˜„
- [X] ์›น ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„
- [X] ์žฅ์น˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ ํ†ตํ•ฉ
- [X] ์žฅ์น˜ ๊ด€๋ฆฌ UI ๊ตฌํ˜„
- [X] ์žฅ์น˜๊ด€๋ฆฌ ํƒญ ํด๋ฆญ ์ด๋ฒคํŠธ ๋ฒ„๊ทธ ์ˆ˜์ •
## ์ง„ํ–‰ํ•ด์•ผ ํ•  ์ž‘์—…
- [ ] ๋ฌธ์„œ๊ด€๋ฆฌ&์žฅ์น˜๊ด€๋ฆฌ ํƒญ ๋กœ๋”ฉ์ง€์† ํ˜„์ƒ ํ•ด๊ฒฐ๊ฒฐ
- [ ] LLM ์„ ํƒ UI ๊ฐœ์„ 
- ๋“œ๋กญ๋‹ค์šด์— ์•„์ด์ฝ˜ ์ถ”๊ฐ€
- ๊ฐ LLM๋ณ„ ์ƒ์„ธ ๋ชจ๋ธ ์ •๋ณด ํ‘œ์‹œ
- [ ] ์‘๋‹ต ๋‚ด ์†Œ์Šค ๋งํฌ ํด๋ฆญ ์‹œ ์›๋ฌธ ํ‘œ์‹œ ๊ธฐ๋Šฅ
- [ ] ์‘๋‹ต ์†๋„ ๊ฐœ์„ 
- [ ] ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๊ฐ•ํ™”
- [ ] ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ ๋ฐ ์œ ๋‹› ํ…Œ์ŠคํŠธ ๊ตฌํ˜„
- [ ] ์‚ฌ์šฉ์ž ๊ฐ€์ด๋“œ ๋ฌธ์„œ ์ž‘์„ฑ
## ํ†ตํ•ฉ ๊ตฌํ˜„ ๋‚ด์šฉ
### 1. ์›น์•ฑ ํ†ตํ•ฉ
- ๋‹จ์ผ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— RAG ๊ฒ€์ƒ‰ ์ฑ—๋ด‡๊ณผ ์žฅ์น˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ ํ†ตํ•ฉ
- ํƒญ ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ธฐ๋Šฅ ๋ถ„๋ฆฌ (๋Œ€ํ™”, ๋ฌธ์„œ๊ด€๋ฆฌ, ์žฅ์น˜๊ด€๋ฆฌ)
- Flask๋ฅผ ํ†ตํ•œ ์ค‘์•™ ์ง‘์ค‘์‹ ์„œ๋ฒ„ ๊ด€๋ฆฌ
### 2. ์žฅ์น˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ
- ์žฅ์น˜ ์ƒํƒœ ํ™•์ธ ๊ธฐ๋Šฅ
- ์—ฐ๊ฒฐ๋œ ์žฅ์น˜ ๋ชฉ๋ก ์กฐํšŒ
- ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๊ทธ๋žจ ๋ชฉ๋ก ์กฐํšŒ ๋ฐ ์‹คํ–‰
- ์„œ๋ฒ„์™€์˜ RESTful API ํ†ต์‹ 
### 3. ํ”„๋ก ํŠธ์—”๋“œ ๊ตฌํ˜„
- ์ง๊ด€์ ์ธ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค
- ์‹ค์‹œ๊ฐ„ ์ƒํƒœ ์—…๋ฐ์ดํŠธ
- ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ ์ œ๊ณต
- ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ ์šฉ
## ์ตœ๊ทผ ๋ฒ„๊ทธ ์ˆ˜์ •
### ์žฅ์น˜๊ด€๋ฆฌ ํƒญ ์ž‘๋™ ๋ฌธ์ œ ํ•ด๊ฒฐ
**๋ฌธ์ œ ์ƒํ™ฉ:** UI์—์„œ ์žฅ์น˜๊ด€๋ฆฌ ๋ฒ„ํŠผ์ด ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ
**์›์ธ ๋ถ„์„:**
1. HTML ๋ฌธ์ œ:
- `device-style.css` ํŒŒ์ผ์ด HTML์— ๋งํฌ๋˜์–ด ์žˆ์ง€ ์•Š์Œ
2. JavaScript ๋ฌธ์ œ:
- `app.js`์—์„œ deviceTab ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์ œ๋Œ€๋กœ ๋“ฑ๋ก๋˜์ง€ ์•Š์Œ
- `app-device.js`์™€ `app.js` ๊ฐ„์˜ ํ•จ์ˆ˜ ๊ณต์œ ์— ๋ฌธ์ œ ๋ฐœ์ƒ
**ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:**
1. HTML ์ˆ˜์ •:
- `device-style.css` ํŒŒ์ผ์„ HTML์˜ head ์„น์…˜์— ๋งํฌ ์ถ”๊ฐ€
- ์žฅ์น˜๊ด€๋ฆฌ ํƒญ์„ ์œ„ํ•œ ์ง์ ‘์ ์ธ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ HTML ๋‚ด๋ถ€ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ถ”๊ฐ€
2. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง ๊ฐœ์„ :
- ์žฅ์น˜๊ด€๋ฆฌ ํƒญ์— ์ง์ ‘ 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 ํŒŒ์ผ์— ์„ค์ •ํ•ด์•ผ ํ•จ
- ์ดˆ๊ธฐ ๋กœ๊ทธ์ธ ๊ณ„์ • ์ •๋ณด๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋ณธ๊ฐ’ ์‚ฌ์šฉ
- ์žฅ์น˜๊ด€๋ฆฌ ํƒญ ํด๋ฆญ ์‹œ ์ฝ˜์†” ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜์—ฌ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์ƒํƒœ ๊ฒ€์ฆ ๊ฐ€๋Šฅ
## ํ˜„์žฌ ๋ฌธ์ œ ์‚ฌํ•ญ
- ๋ฌธ์„œ๊ด€๋ฆฌ & ์žฅ์น˜๊ด€๋ฆฌ์—์„œ ๋กœ๋”ฉํ˜„์ƒ์ƒ ์ง€์†