RAG6_AgenticAI / docs /project_plan.md
jeongsoo's picture
init
d93e680
|
raw
history blame
4.19 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 ๊ตฌํ˜„
## ์ง„ํ–‰ํ•ด์•ผ ํ•  ์ž‘์—…
- [ ] LLM ์„ ํƒ UI ๊ฐœ์„ 
- ๋“œ๋กญ๋‹ค์šด์— ์•„์ด์ฝ˜ ์ถ”๊ฐ€
- ๊ฐ LLM๋ณ„ ์ƒ์„ธ ๋ชจ๋ธ ์ •๋ณด ํ‘œ์‹œ
- [ ] ์‘๋‹ต ๋‚ด ์†Œ์Šค ๋งํฌ ํด๋ฆญ ์‹œ ์›๋ฌธ ํ‘œ์‹œ ๊ธฐ๋Šฅ
- [ ] ์‘๋‹ต ์†๋„ ๊ฐœ์„ 
- [ ] ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๊ฐ•ํ™”
- [ ] ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ ๋ฐ ์œ ๋‹› ํ…Œ์ŠคํŠธ ๊ตฌํ˜„
- [ ] ์‚ฌ์šฉ์ž ๊ฐ€์ด๋“œ ๋ฌธ์„œ ์ž‘์„ฑ
## ํ†ตํ•ฉ ๊ตฌํ˜„ ๋‚ด์šฉ
### 1. ์›น์•ฑ ํ†ตํ•ฉ
- ๋‹จ์ผ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— RAG ๊ฒ€์ƒ‰ ์ฑ—๋ด‡๊ณผ ์žฅ์น˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ ํ†ตํ•ฉ
- ํƒญ ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ธฐ๋Šฅ ๋ถ„๋ฆฌ (๋Œ€ํ™”, ๋ฌธ์„œ๊ด€๋ฆฌ, ์žฅ์น˜๊ด€๋ฆฌ)
- Flask๋ฅผ ํ†ตํ•œ ์ค‘์•™ ์ง‘์ค‘์‹ ์„œ๋ฒ„ ๊ด€๋ฆฌ
### 2. ์žฅ์น˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ
- ์žฅ์น˜ ์ƒํƒœ ํ™•์ธ ๊ธฐ๋Šฅ
- ์—ฐ๊ฒฐ๋œ ์žฅ์น˜ ๋ชฉ๋ก ์กฐํšŒ
- ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๊ทธ๋žจ ๋ชฉ๋ก ์กฐํšŒ ๋ฐ ์‹คํ–‰
- ์„œ๋ฒ„์™€์˜ RESTful API ํ†ต์‹ 
### 3. ํ”„๋ก ํŠธ์—”๋“œ ๊ตฌํ˜„
- ์ง๊ด€์ ์ธ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค
- ์‹ค์‹œ๊ฐ„ ์ƒํƒœ ์—…๋ฐ์ดํŠธ
- ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ ์ œ๊ณต
- ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ ์šฉ
## ํŒŒ์ผ ๊ตฌ์กฐ
```
RAG5_2_ChooseLLM/
โ”œโ”€โ”€ app/
โ”‚ โ”œโ”€โ”€ app.py # ๋ฉ”์ธ Flask ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
โ”‚ โ”œโ”€โ”€ app_routes.py # ๊ธฐ๋ณธ ๋ผ์šฐํŠธ ์ •์˜
โ”‚ โ”œโ”€โ”€ app_device_routes.py # ์žฅ์น˜ ๊ด€๋ฆฌ ๊ด€๋ จ ๋ผ์šฐํŠธ
โ”‚ โ”œโ”€โ”€ static/
โ”‚ โ”‚ โ”œโ”€โ”€ css/
โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ 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 ํŒŒ์ผ์— ์„ค์ •ํ•ด์•ผ ํ•จ
- ์ดˆ๊ธฐ ๋กœ๊ทธ์ธ ๊ณ„์ • ์ •๋ณด๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋ณธ๊ฐ’ ์‚ฌ์šฉ