Spaces:
Build error
Build error
| title: open-webui-rag-system | |
| sdk: docker | |
| # Open WebUI RAG System | |
| Open WebUI์ ์ฐ๋ ๊ฐ๋ฅํ ํ๊ตญ์ด ๋ฌธ์ ๊ธฐ๋ฐ RAG(Retrieval-Augmented Generation) ์์คํ ์ ๋๋ค. PDF์ HWPX ํ์ผ์ ์ง์ํ๋ฉฐ, ํ์ด์ง๋ณ ์ ํํ ์ ๋ณด ์ถ์ถ๊ณผ ์ถ์ฒ ์ถ์ ์ด ๊ฐ๋ฅํฉ๋๋ค. | |
| ## ์ฃผ์ ๊ธฐ๋ฅ | |
| ### 1. ๋ฌธ์ ์ฒ๋ฆฌ | |
| - **PDF ๋ฌธ์**: PyMuPDF ๊ธฐ๋ฐ ํ ์คํธ, ํ, ์ด๋ฏธ์ง OCR ์ถ์ถ | |
| - **HWPX ๋ฌธ์**: XML ํ์ฑ์ ํตํ ์น์ ๋ณ ํ ์คํธ, ํ, ์ด๋ฏธ์ง ์ถ์ถ | |
| - **ํ์ด์ง๋ณ ์ฒ๋ฆฌ**: ๊ฐ ๋ฌธ์๋ฅผ ํ์ด์ง/์น์ ๋จ์๋ก ์ ํํ๊ฒ ๋ถ๋ฆฌ | |
| - **๋ค์ค ์ฝํ ์ธ ํ์ **: ๋ณธ๋ฌธ, ํ, OCR ํ ์คํธ๋ฅผ ๊ฐ๊ฐ ์๋ณํ์ฌ ์ฒ๋ฆฌ | |
| ### 2. ๋ฒกํฐ ๊ฒ์ | |
| - **E5-Large ์๋ฒ ๋ฉ**: ๋ค๊ตญ์ด ์ง์ ๊ณ ์ฑ๋ฅ ์๋ฒ ๋ฉ ๋ชจ๋ธ | |
| - **FAISS ๋ฒกํฐ์คํ ์ด**: ๋น ๋ฅธ ์ ์ฌ๋ ๊ฒ์ | |
| - **๋ฐฐ์น ์ฒ๋ฆฌ**: ๋์ฉ๋ ๋ฌธ์ ์ฒ๋ฆฌ ์ต์ ํ | |
| - **์ฒญํฌ ๋ถํ **: ๋ฌธ๋งฅ ์ ์ง๋ฅผ ์ํ ๊ฒน์นจ ์ฒ๋ฆฌ | |
| ### 3. RAG ์์คํ | |
| - **Refine ์ฒด์ธ**: ๋ค์ค ๋ฌธ์ ์ฐธ์กฐ๋ฅผ ํตํ ์ ํํ ๋ต๋ณ ์์ฑ | |
| - **์ถ์ฒ ์ถ์ **: ํ์ด์ง ๋ฒํธ์ ๋ฌธ์๋ช ์ ํฌํจํ ์ ํํ ์ธ์ฉ | |
| - **Hallucination ๋ฐฉ์ง**: ๋ฌธ์์ ๋ช ์๋ ์ ๋ณด๋ง ์ฌ์ฉํ๋ ์๊ฒฉํ ํ๋กฌํํธ | |
| ### 4. API ์๋ฒ | |
| - **FastAPI ๊ธฐ๋ฐ**: ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ง์ | |
| - **OpenAI ํธํ**: `/v1/chat/completions` ์๋ํฌ์ธํธ ์ ๊ณต | |
| - **์คํธ๋ฆฌ๋ฐ ์ง์**: ์ค์๊ฐ ๋ต๋ณ ์์ฑ | |
| - **Open WebUI ์ฐ๋**: ํ๋ฌ๊ทธ์ธ ์์ด ๋ฐ๋ก ์ฐ๊ฒฐ ๊ฐ๋ฅ | |
| ## ์์คํ ์๊ตฌ์ฌํญ | |
| ### ํ๋์จ์ด | |
| - **GPU**: CUDA ์ง์ (์๋ฒ ๋ฉ ๋ฐ LLM ์ถ๋ก ์ฉ) | |
| - **RAM**: ์ต์ 16GB (๋์ฉ๋ ๋ฌธ์ ์ฒ๋ฆฌ ์ ๋ ํ์) | |
| - **์ ์ฅ๊ณต๊ฐ**: ๋ชจ๋ธ ๋ฐ ๋ฒกํฐ์คํ ์ด์ฉ 10GB+ | |
| ### ์ํํธ์จ์ด | |
| - Python 3.8+ | |
| - CUDA 11.7+ (GPU ์ฌ์ฉ ์) | |
| - Tesseract OCR | |
| ## ์ค์น ๋ฐฉ๋ฒ | |
| ### 1. ์ ์ฅ์ ํด๋ก | |
| ```bash | |
| git clone <repository-url> | |
| cd open-webui-rag-system | |
| ``` | |
| ### 2. ์์กด์ฑ ์ค์น | |
| ```bash | |
| pip install -r requirements.txt | |
| ``` | |
| ### 3. Tesseract OCR ์ค์น | |
| **Ubuntu/Debian:** | |
| ```bash | |
| sudo apt-get install tesseract-ocr tesseract-ocr-kor | |
| ``` | |
| **Windows:** | |
| - [Tesseract ๊ณต์ ํ์ด์ง](https://github.com/UB-Mannheim/tesseract/wiki)์์ ์ค์น | |
| ### 4. LLM ์๋ฒ ์ค์ | |
| `llm_loader.py`์์ ์ฌ์ฉํ LLM ์๋ฒ ์ค์ : | |
| ```python | |
| # EXAONE ๋ชจ๋ธ ์ฌ์ฉ ์์ | |
| base_url="http://vllm:8000/v1" | |
| model="LGAI-EXAONE/EXAONE-3.5-7.8B-Instruct" | |
| openai_api_key="token-abc123" | |
| ``` | |
| ## ์คํ ๋ฐฉ๋ฒ | |
| ### 1. ๋ฌธ์ ์ค๋น | |
| ์ฒ๋ฆฌํ ๋ฌธ์๋ค์ `dataset_test` ํด๋์ ์ ์ฅ: | |
| ``` | |
| dataset_test/ | |
| โโโ document1.pdf | |
| โโโ document2.hwpx | |
| โโโ document3.pdf | |
| ``` | |
| ### 2. ๋ฌธ์ ์ฒ๋ฆฌ ๋ฐ ๋ฒกํฐ์คํ ์ด ์์ฑ | |
| ```bash | |
| python document_processor_image_test.py | |
| ``` | |
| ๋๋ ๋ฒกํฐ์คํ ์ด ๋น๋ ์คํฌ๋ฆฝํธ ์ฌ์ฉ: | |
| ```bash | |
| python vector_store_test.py --folder dataset_test --save_path faiss_index_pymupdf | |
| ``` | |
| ### 3. RAG ์๋ฒ ์คํ | |
| ```bash | |
| python rag_server.py | |
| ``` | |
| ์๋ฒ๋ ๊ธฐ๋ณธ์ ์ผ๋ก 8000๋ฒ ํฌํธ์์ ์คํ๋ฉ๋๋ค. | |
| ### 4. Open WebUI ์ฐ๋ | |
| Open WebUI์ ๋ชจ๋ธ ์ค์ ์์ ๋ค์๊ณผ ๊ฐ์ด ์ค์ : | |
| - **API Base URL**: `http://localhost:8000/v1` | |
| - **API Key**: `token-abc123` | |
| - **Model Name**: `rag` | |
| ### 5. ๊ฐ๋ณ ํ ์คํธ | |
| ๋ช ๋ น์ค์์ ์ง์ ์ง๋ฌธ: | |
| ```bash | |
| python rag_system.py --query "๋ฌธ์์์ ์ฐพ๊ณ ์ถ์ ๋ด์ฉ" | |
| ``` | |
| ๋ํํ ๋ชจ๋: | |
| ```bash | |
| python rag_system.py | |
| ``` | |
| ## ํ๋ก์ ํธ ๊ตฌ์กฐ | |
| ``` | |
| open-webui-rag-system/ | |
| โโโ document_processor_image_test.py # ๋ฌธ์ ์ฒ๋ฆฌ ๋ฉ์ธ ๋ชจ๋ | |
| โโโ vector_store_test.py # ๋ฒกํฐ์คํ ์ด ์์ฑ ๋ชจ๋ | |
| โโโ rag_system.py # RAG ์ฒด์ธ ๊ตฌ์ฑ ๋ฐ ์ง์์๋ต | |
| โโโ rag_server.py # FastAPI ์๋ฒ | |
| โโโ llm_loader.py # LLM ๋ชจ๋ธ ๋ก๋ | |
| โโโ e5_embeddings.py # E5 ์๋ฒ ๋ฉ ๋ชจ๋ | |
| โโโ requirements.txt # ์์กด์ฑ ๋ชฉ๋ก | |
| โโโ dataset_test/ # ๋ฌธ์ ์ ์ฅ ํด๋ | |
| โโโ faiss_index_pymupdf/ # ์์ฑ๋ ๋ฒกํฐ์คํ ์ด | |
| ``` | |
| ## ํต์ฌ ๋ชจ๋ ์ค๋ช | |
| ### document_processor_image_test.py | |
| - PDF์ HWPX ํ์ผ์ ํ ์คํธ, ํ, ์ด๋ฏธ์ง๋ฅผ ํ์ด์ง๋ณ๋ก ์ถ์ถ | |
| - PyMuPDF, pdfplumber, pytesseract๋ฅผ ํ์ฉํ ๋ค์ธต ์ฒ๋ฆฌ | |
| - ์น์ ๋ณ ๋ฉํ๋ฐ์ดํฐ์ ํ์ด์ง ์ ๋ณด ์ ์ง | |
| ### vector_store_test.py | |
| - E5-Large ์๋ฒ ๋ฉ ๋ชจ๋ธ์ ์ฌ์ฉํ ๋ฒกํฐํ | |
| - FAISS๋ฅผ ์ด์ฉํ ํจ์จ์ ์ธ ๋ฒกํฐ์คํ ์ด ๊ตฌ์ถ | |
| - ๋ฐฐ์น ์ฒ๋ฆฌ๋ฅผ ํตํ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ | |
| ### rag_system.py | |
| - Refine ์ฒด์ธ์ ํ์ฉํ ๋ค๋จ๊ณ ๋ต๋ณ ์์ฑ | |
| - ํ์ด์ง ๋ฒํธ hallucination ๋ฐฉ์ง ํ๋กฌํํธ | |
| - ์ถ์ฒ ์ถ์ ๊ณผ ๋ฉํ๋ฐ์ดํฐ ๊ด๋ฆฌ | |
| ### rag_server.py | |
| - OpenAI ํธํ API ์๋ํฌ์ธํธ ์ ๊ณต | |
| - ์คํธ๋ฆฌ๋ฐ ์๋ต ์ง์ | |
| - Open WebUI์์ ์ํํ ์ฐ๋ | |
| ## ์ค์ ์ต์ | |
| ### ๋ฌธ์ ์ฒ๋ฆฌ ์ต์ | |
| - **์ฒญํฌ ํฌ๊ธฐ**: `chunk_size=500` (๊ธฐ๋ณธ๊ฐ) | |
| - **์ฒญํฌ ๊ฒน์นจ**: `chunk_overlap=100` (๊ธฐ๋ณธ๊ฐ) | |
| - **OCR ์ธ์ด**: `lang='kor+eng'` (ํ๊ตญ์ด+์์ด) | |
| ### ๊ฒ์ ์ต์ | |
| - **๊ฒ์ ๋ฌธ์ ์**: `k=7` (๊ธฐ๋ณธ๊ฐ) | |
| - **์๋ฒ ๋ฉ ๋ชจ๋ธ**: `intfloat/multilingual-e5-large-instruct` | |
| - **๋๋ฐ์ด์ค**: `cuda` ๋๋ `cpu` | |
| ### LLM ์ค์ | |
| ์ง์ํ๋ ๋ชจ๋ธ๋ค: | |
| - LGAI-EXAONE/EXAONE-3.5-7.8B-Instruct | |
| - meta-llama/Meta-Llama-3-8B-Instruct | |
| - ๊ธฐํ OpenAI ํธํ ๋ชจ๋ธ | |
| ## ํธ๋ฌ๋ธ์ํ | |
| ### 1. CUDA ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ | |
| ```bash | |
| # CPU ๋ชจ๋๋ก ์คํ | |
| python vector_store_test.py --device cpu | |
| ``` | |
| ### 2. ํ๊ธ ํฐํธ ๋ฌธ์ | |
| ```bash | |
| # ํ๊ธ ํฐํธ ์ค์น (Ubuntu) | |
| sudo apt-get install fonts-nanum | |
| ``` | |
| ### 3. Tesseract ๊ฒฝ๋ก ๋ฌธ์ | |
| ```python | |
| # pytesseract ๊ฒฝ๋ก ์๋ ์ค์ | |
| pytesseract.pytesseract.tesseract_cmd = '/usr/bin/tesseract' | |
| ``` | |
| ### 4. ๋ชจ๋ธ ๋ค์ด๋ก๋ ์คํจ | |
| ```bash | |
| # Hugging Face ์บ์ ๊ฒฝ๋ก ํ์ธ | |
| export HF_HOME=/path/to/huggingface/cache | |
| ``` | |
| ## API ์ฌ์ฉ ์์ | |
| ### ์ง์ ์ง์ | |
| ```bash | |
| curl -X POST "http://localhost:8000/ask" \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"question": "๋ฌธ์์์ ์์ฐ ๊ด๋ จ ๋ด์ฉ์ ์ฐพ์์ฃผ์ธ์"}' | |
| ``` | |
| ### OpenAI ํธํ API | |
| ```bash | |
| curl -X POST "http://localhost:8000/v1/chat/completions" \ | |
| -H "Content-Type: application/json" \ | |
| -d '{ | |
| "model": "rag", | |
| "messages": [{"role": "user", "content": "์์ฐ ํํฉ์ด ์ด๋ป๊ฒ ๋๋์?"}], | |
| "stream": false | |
| }' | |
| ``` | |
| ## ์ฑ๋ฅ ์ต์ ํ | |
| ### 1. ๋ฐฐ์น ํฌ๊ธฐ ์กฐ์ | |
| ```bash | |
| python vector_store_test.py --batch_size 32 # GPU ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ๋ผ ์กฐ์ | |
| ``` | |
| ### 2. ์ฒญํฌ ํฌ๊ธฐ ์ต์ ํ | |
| ```python | |
| # ๊ธด ๋ฌธ์์ ๊ฒฝ์ฐ ์ฒญํฌ ํฌ๊ธฐ ์ฆ๊ฐ | |
| chunks = split_documents(docs, chunk_size=800, chunk_overlap=150) | |
| ``` | |
| ### 3. ๊ฒ์ ๊ฒฐ๊ณผ ์ ์กฐ์ | |
| ```bash | |
| python rag_system.py --k 10 # ๋ ๋ง์ ๋ฌธ์ ์ฐธ์กฐ | |
| ``` | |
| ## ๋ผ์ด์ ์ค | |
| MIT License | |
| ## ๊ธฐ์ฌ ๋ฐฉ๋ฒ | |
| 1. Fork the repository | |
| 2. Create your feature branch | |
| 3. Commit your changes | |
| 4. Push to the branch | |
| 5. Create a Pull Request |