Megumin-chat / README.md
Junhoee's picture
Update README.md
1670941 verified
---
title: Megumin RAG Chat
emoji: "๐Ÿ’ฅ"
colorFrom: red
colorTo: yellow
sdk: gradio
sdk_version: 6.10.0
app_file: app.py
pinned: false
---
# Megumin RAG Chat
๋ฉ”๊ตฌ๋ฐ๊ณผ ์ง์ ‘ ๋Œ€ํ™”ํ•˜๋Š” ์ฒดํ—˜ํ˜• ์บ๋ฆญํ„ฐ ์ฑ—๋ด‡์ž…๋‹ˆ๋‹ค.
๋ฉ”๊ตฌ๋ฐ์˜ ๋งํˆฌ์™€ ๊ฐ์ •์„ , ๊ทธ๋ฆฌ๊ณ  ์ฝ”๋…ธ์Šค๋ฐ” ์„ค์ • ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ์ฐธ๊ณ ํ•ด ๋‹ต๋ณ€ํ•ฉ๋‹ˆ๋‹ค.
## ๋ฐ”๋กœ ์จ๋ณด๊ธฐ
์ด๋Ÿฐ ์งˆ๋ฌธ์œผ๋กœ ์‹œ์ž‘ํ•ด๋ณด์„ธ์š”.
- ๋ฉ”๊ตฌ๋ฐ, ์นด์ฆˆ๋งˆ ์”จ๋ฅผ ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?
- ํญ๋ ฌ๋งˆ๋ฒ•์„ ๊ฐ€๋ฅด์ณ ์ค€ ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ์ธ๊ฐ€์š”?
- ์•„์ฟ ์•„์˜ ์„ธ์ดํฌ๋ฆฌ๋“œ ๋ธŒ๋ ˆ์ดํฌ ์ŠคํŽ ์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.
- ํ™๋งˆ์กฑ๋‹ค์šด ์ž๊ธฐ์†Œ๊ฐœ๋ฅผ ํ•œ ๋ฒˆ ๋“ค๋ ค์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
์ฒซ ์ ‘์† ์‹œ ๋ฉ”๊ตฌ๋ฐ์ด ๋จผ์ € ์ธ์‚ฟ๋ง์„ ๊ฑด๋„ค๊ณ , ๋‹ต๋ณ€์€ ADK SSE ์ŠคํŠธ๋ฆฌ๋ฐ์œผ๋กœ ์ ์ง„์ ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
## ์ด Space์˜ ํŠน์ง•
- ๋ฉ”๊ตฌ๋ฐ ํŽ˜๋ฅด์†Œ๋‚˜ ๊ธฐ๋ฐ˜ ๋Œ€ํ™”
- ์„ค์ • RAG + ์Šคํƒ€์ผ RAG ๋™์‹œ ์‚ฌ์šฉ
- question ์ธ๋ฑ์Šค์™€ question+answer ์ธ๋ฑ์Šค๋ฅผ ํ•จ๊ป˜ ์กฐํšŒํ•˜๋Š” FAISS ๊ฒ€์ƒ‰
- ์ฒซ ์งˆ๋ฌธ ์‹œ lazy init
- `์„œ๋น„์Šค ์ค€๋น„ ์ค‘...`, `๋‹ต๋ณ€ ์ƒ์„ฑ ์ค‘...` ์ƒํƒœ ํ‘œ์‹œ
- ๊ทœ์น™ ๊ธฐ๋ฐ˜ ์ž‘์€ ์ƒํƒœ ๋ฐฐ์ง€
- `ssr_mode=False`๋กœ ์ดˆ๊ธฐ ๋ Œ๋” ๋ถ€๋‹ด ์™„ํ™”
- ๋ชจ๋ฐ”์ผ์—์„œ๋Š” ์ œ๋ชฉ, ์ตœ์†Œ ์„ค๋ช…, ์ด๋ฏธ์ง€, ์ฑ„ํŒ…์ฐฝ๋งŒ ๋ณด์ด๋Š” ๋‹จ์ˆœํ™” ๋ ˆ์ด์•„์›ƒ
## ์‹คํ–‰
```bash
python app_gradio.py
```
๋ฉ”์‹ ์ €ํ˜• UI:
```bash
python app_gradio_messenger.py
```
Hugging Face Spaces ์ง„์ž…์ :
```bash
python app.py
```
UI ์„ ํƒ:
```bash
MEGUMIN_UI=messenger
```
## ๋ฉ”์‹ ์ € ๋ ˆ์ด์•„์›ƒ ๋ฉ”๋ชจ
`app_gradio_messenger.py`๋Š” ๋ฐ์Šคํฌํ†ฑ ํ™˜๊ฒฝ์—์„œ Gradio ๋ž˜ํผ๊ฐ€ ์„ธ๋กœ๋กœ ๋Š˜์–ด๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์ • ๋†’์ด ๋ฉ”์‹ ์ € ๋ ˆ์ด์•„์›ƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
- ์ขŒ์ธก๊ณผ ์šฐ์ธก ์„นํ„ฐ๋Š” Gradio `Column(scale=3)`๊ณผ `Column(scale=7)`๋กœ `3:7` ๋น„์œจ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
- ๋ฉ”์‹ ์ € ํŒจ๋„ ๋†’์ด๋Š” ๋ทฐํฌํŠธ ์˜์กด flex ํ™•์žฅ์ด ์•„๋‹ˆ๋ผ CSS ๋ณ€์ˆ˜๋กœ ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค.
- ์šฐ์ธก ์„นํ„ฐ๋Š” ์„ธ ๊ฐœ์˜ ๊ณ ์ • ์—ญํ• ์„ ๊ฐ–๋Š” 3ํ–‰ grid๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.
`์ƒ๋‹จ ํ—ค๋” = 96px`, `์ž…๋ ฅ ์˜์—ญ = 176px`, `๋ฉ”์‹œ์ง€ ํ‘œ์‹œ ์˜์—ญ = ๋‚˜๋จธ์ง€ ๋†’์ด`
- ๋ฉ”์‹ ์ € UI์—์„œ๋Š” `gr.Blocks(fill_height=True)`๋ฅผ ์˜๋„์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Gradio์˜ ์ž๋™ stretch ๋ž˜ํผ๊ฐ€ ๊ณ ์ • ๋†’์ด ๋™์ž‘์„ ๋‹ค์‹œ ๊นจ๋œจ๋ฆด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
- ํ”„๋กœํ•„ ์ด๋ฏธ์ง€๋Š” ์™ธ๋ถ€ URL ๋Œ€์‹  ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€ `source_file` ํด๋”์˜ ๋กœ์ปฌ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
- ์šฐ์„ ์ˆœ์œ„๋Š” `megumin_profile.png`, `megumin_profile.jpg`, `megumin_profile.jpeg`, `megumin_profile.webp`์ด๋ฉฐ, ์—†์œผ๋ฉด ๊ฐ™์€ ํด๋”์˜ ์ฒซ ๋ฒˆ์งธ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
- ๊ธฐ๋ณธ SVG๋Š” ์ด๋ฏธ์ง€ ๋กœ๋“œ ์‹คํŒจ ์‹œ์—๋งŒ ๋ณด์ด๋ฉฐ, `source_file` ํด๋”๋Š” ๋ฉ”์‹ ์ € ๋‹จ๋… ์‹คํ–‰๊ณผ `app.py` ๊ฒฝ์œ  ์‹คํ–‰ ๋ชจ๋‘์—์„œ `allowed_paths`๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์„œ๋น™ํ•ฉ๋‹ˆ๋‹ค.
- ์ดํ›„ ๋ฉ”์‹ ์ € ๋ ˆ์ด์•„์›ƒ์„ ๋ณ€๊ฒฝํ•˜๋ฉด `app_gradio_messenger.py`์™€ `docs/agent-architecture.md`๋ฅผ ํ•จ๊ป˜ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
## Hugging Face ๊ตฌ์„ฑ
์•ฑ repo:
- `app.py`
- `app_gradio.py`
- `megumin_agent/`
- `scripts/`
- `docs/`
- `requirements.txt`
- `README.md`
dataset repo:
- `megumin_qa_dataset.json`
- `megumin_questions.faiss`
- `megumin_question_answer.faiss`
- `megumin_questions_meta.json`
- `namuwiki_qa.json`
- `namuwiki_questions.faiss`
- `namuwiki_question_answer.faiss`
- `namuwiki_questions_meta.json`
ํ•„์ˆ˜ Secret:
- `GOOGLE_API_KEY`
- `HF_TOKEN`
## ๋ฌธ์„œ
- [ADK ์ •๋ฆฌ](docs/Google-ADK.md)
- [๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๋ช…์„ธ](docs/data-collection-spec.md)
- [Agent ๊ตฌ์กฐ ๋ช…์„ธ](docs/agent-architecture.md)