Spaces:
Runtime error
Runtime error
metadata
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. ์ ์ฅ์ ํด๋ก
git clone <repository-url>
cd open-webui-rag-system
2. ์์กด์ฑ ์ค์น
pip install -r requirements.txt
3. Tesseract OCR ์ค์น
Ubuntu/Debian:
sudo apt-get install tesseract-ocr tesseract-ocr-kor
Windows:
- Tesseract ๊ณต์ ํ์ด์ง์์ ์ค์น
4. LLM ์๋ฒ ์ค์
llm_loader.py
์์ ์ฌ์ฉํ LLM ์๋ฒ ์ค์ :
# 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. ๋ฌธ์ ์ฒ๋ฆฌ ๋ฐ ๋ฒกํฐ์คํ ์ด ์์ฑ
python document_processor_image_test.py
๋๋ ๋ฒกํฐ์คํ ์ด ๋น๋ ์คํฌ๋ฆฝํธ ์ฌ์ฉ:
python vector_store_test.py --folder dataset_test --save_path faiss_index_pymupdf
3. RAG ์๋ฒ ์คํ
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. ๊ฐ๋ณ ํ ์คํธ
๋ช ๋ น์ค์์ ์ง์ ์ง๋ฌธ:
python rag_system.py --query "๋ฌธ์์์ ์ฐพ๊ณ ์ถ์ ๋ด์ฉ"
๋ํํ ๋ชจ๋:
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 ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ
# CPU ๋ชจ๋๋ก ์คํ
python vector_store_test.py --device cpu
2. ํ๊ธ ํฐํธ ๋ฌธ์
# ํ๊ธ ํฐํธ ์ค์น (Ubuntu)
sudo apt-get install fonts-nanum
3. Tesseract ๊ฒฝ๋ก ๋ฌธ์
# pytesseract ๊ฒฝ๋ก ์๋ ์ค์
pytesseract.pytesseract.tesseract_cmd = '/usr/bin/tesseract'
4. ๋ชจ๋ธ ๋ค์ด๋ก๋ ์คํจ
# Hugging Face ์บ์ ๊ฒฝ๋ก ํ์ธ
export HF_HOME=/path/to/huggingface/cache
API ์ฌ์ฉ ์์
์ง์ ์ง์
curl -X POST "http://localhost:8000/ask" \
-H "Content-Type: application/json" \
-d '{"question": "๋ฌธ์์์ ์์ฐ ๊ด๋ จ ๋ด์ฉ์ ์ฐพ์์ฃผ์ธ์"}'
OpenAI ํธํ API
curl -X POST "http://localhost:8000/v1/chat/completions" \
-H "Content-Type: application/json" \
-d '{
"model": "rag",
"messages": [{"role": "user", "content": "์์ฐ ํํฉ์ด ์ด๋ป๊ฒ ๋๋์?"}],
"stream": false
}'
์ฑ๋ฅ ์ต์ ํ
1. ๋ฐฐ์น ํฌ๊ธฐ ์กฐ์
python vector_store_test.py --batch_size 32 # GPU ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ๋ผ ์กฐ์
2. ์ฒญํฌ ํฌ๊ธฐ ์ต์ ํ
# ๊ธด ๋ฌธ์์ ๊ฒฝ์ฐ ์ฒญํฌ ํฌ๊ธฐ ์ฆ๊ฐ
chunks = split_documents(docs, chunk_size=800, chunk_overlap=150)
3. ๊ฒ์ ๊ฒฐ๊ณผ ์ ์กฐ์
python rag_system.py --k 10 # ๋ ๋ง์ ๋ฌธ์ ์ฐธ์กฐ
๋ผ์ด์ ์ค
MIT License
๊ธฐ์ฌ ๋ฐฉ๋ฒ
- Fork the repository
- Create your feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request