English | ็ฎไฝไธญๆ | ๆฅๆฌ่ช | ํ๊ตญ์ด | Bahasa Indonesia
Document | Roadmap | Twitter | Discord | Demo
๐ก RAGFlow๋?
RAGFlow๋ ์ฌ์ธต ๋ฌธ์ ์ดํด์ ๊ธฐ๋ฐํ ์คํ์์ค RAG (Retrieval-Augmented Generation) ์์ง์ ๋๋ค. ์ด ์์ง์ ๋๊ท๋ชจ ์ธ์ด ๋ชจ๋ธ(LLM)๊ณผ ๊ฒฐํฉํ์ฌ ์ ํํ ์ง๋ฌธ ์๋ต ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๋ค์ํ ๋ณต์กํ ํ์์ ๋ฐ์ดํฐ์์ ์ ๋ขฐํ ์ ์๋ ์ถ์ฒ๋ฅผ ๋ฐํ์ผ๋ก ํ ์ธ์ฉ์ ํตํด ์ด๋ฅผ ๋ท๋ฐ์นจํฉ๋๋ค. RAGFlow๋ ๊ท๋ชจ์ ์๊ด์์ด ๋ชจ๋ ๊ธฐ์ ์ ์ต์ ํ๋ RAG ์ํฌํ๋ก์ฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๐ฎ ๋ฐ๋ชจ
๋ฐ๋ชจ๋ฅผ https://demo.ragflow.io์์ ์คํํด ๋ณด์ธ์.
๐ฅ ์ ๋ฐ์ดํธ
2024-11-01 ํ์ฑ๋ ์ฒญํฌ์ ํค์๋ ์ถ์ถ ๋ฐ ๊ด๋ จ ์ง๋ฌธ ์์ฑ์ ์ถ๊ฐํ์ฌ ์ฌํ์จ์ ํฅ์์ํต๋๋ค.
2024-09-13 ์ง์๋ฒ ์ด์ค Q&A ๊ฒ์ ๋ชจ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
2024-09-09 Agent์ ์๋ฃ์๋ด ํ ํ๋ฆฟ์ ์ถ๊ฐํ์์ต๋๋ค.
2024-08-22 RAG๋ฅผ ํตํด SQL ๋ฌธ์ ํ ์คํธ๋ฅผ ์ง์ํฉ๋๋ค.
2024-08-02: graphrag์ ๋ง์ธ๋๋งต์์ ์๊ฐ์ ๋ฐ์ GraphRAG๋ฅผ ์ง์ํฉ๋๋ค.
๐ ๊ณ์ ์ง์ผ๋ด ์ฃผ์ธ์
โญ๏ธ์ฐ๋ฆฌ์ ์ ์ฅ์๋ฅผ ์ฆ๊ฒจ์ฐพ๊ธฐ์ ๋ฑ๋กํ์ฌ ํฅ๋ฏธ๋ก์ด ์๋ก์ด ๊ธฐ๋ฅ๊ณผ ์ ๋ฐ์ดํธ๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ์ธ์! ๋ชจ๋ ์๋ก์ด ๋ฆด๋ฆฌ์ค์ ๋ํ ์ฆ์ ์๋ฆผ์ ๋ฐ์ผ์ธ์! ๐
๐ ์ฃผ์ ๊ธฐ๋ฅ
๐ญ "Quality in, quality out"
- ์ฌ์ธต ๋ฌธ์ ์ดํด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ณต์กํ ํ์์ ๋น์ ํ ๋ฐ์ดํฐ์์ ์ง์์ ์ถ์ถํฉ๋๋ค.
- ๋ฌธ์ ๊ทธ๋๋ก ๋ฌดํํ ํ ํฐ์์ "๋ฐ์ดํฐ ์์ ๋ฐ๋"์ ์ฐพ์๋ ๋๋ค.
๐ฑ ํ ํ๋ฆฟ ๊ธฐ๋ฐ์ chunking
- ๋๋ํ๊ณ ์ค๋ช ๊ฐ๋ฅํ ๋ฐฉ์.
- ๋ค์ํ ํ ํ๋ฆฟ ์ต์ ์ ์ ๊ณตํฉ๋๋ค.
๐ฑ ํ ๋ฃจ์๋ค์ด์ ์ ์ค์ธ ์ ๋ขฐํ ์ ์๋ ์ธ์ฉ
- ํ ์คํธ ์ฒญํน์ ์๊ฐํํ์ฌ ์ฌ์ฉ์๊ฐ ๊ฐ์ ํ ์ ์๋๋ก ํฉ๋๋ค.
- ์ค์ํ ์ฐธ๊ณ ์๋ฃ์ ์ถ์ ๊ฐ๋ฅํ ์ธ์ฉ์ ๋น ๋ฅด๊ฒ ํ์ธํ์ฌ ์ ๋ขฐํ ์ ์๋ ๋ต๋ณ์ ์ง์ํฉ๋๋ค.
๐ ๋ค๋ฅธ ์ข ๋ฅ์ ๋ฐ์ดํฐ ์์ค์์ ํธํ์ฑ
- ์๋, ์ฌ๋ผ์ด๋, ์์ , ํ ์คํธ ํ์ผ, ์ด๋ฏธ์ง, ์ค์บ๋ณธ, ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ, ์น ํ์ด์ง ๋ฑ์ ์ง์ํฉ๋๋ค.
๐ ์๋ํ๋๊ณ ์์ฌ์ด RAG ์ํฌํ๋ก์ฐ
- ๊ฐ์ธ ๋ฐ ๋๊ท๋ชจ ๋น์ฆ๋์ค์ ๋ง์ถ ํจ์จ์ ์ธ RAG ์ค์ผ์คํธ๋ ์ด์ .
- ๊ตฌ์ฑ ๊ฐ๋ฅํ LLM ๋ฐ ์๋ฒ ๋ฉ ๋ชจ๋ธ.
- ๋ค์ค ๊ฒ์๊ณผ ๊ฒฐํฉ๋ re-ranking.
- ๋น์ฆ๋์ค์ ์ํํ๊ฒ ํตํฉํ ์ ์๋ ์ง๊ด์ ์ธ API.
๐ ์์คํ ์ํคํ ์ฒ
๐ฌ ์์ํ๊ธฐ
๐ ์ฌ์ ์ค๋น ์ฌํญ
- CPU >= 4 cores
- RAM >= 16 GB
- Disk >= 50 GB
- Docker >= 24.0.0 & Docker Compose >= v2.26.1
๋ก์ปฌ ๋จธ์ (Windows, Mac, Linux)์ Docker๊ฐ ์ค์น๋์ง ์์ ๊ฒฝ์ฐ, Docker ์์ง ์ค์น๋ฅผ ์ฐธ์กฐํ์ธ์.
๐ ์๋ฒ ์์ํ๊ธฐ
vm.max_map_count
๊ฐ 262144 ์ด์์ธ์ง ํ์ธํ์ธ์:vm.max_map_count
์ ๊ฐ์ ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด ํ์ธํ์ธ์:$ sysctl vm.max_map_count
๋ง์ฝ
vm.max_map_count
์ด 262144 ๋ณด๋ค ์๋ค๋ฉด ๊ฐ์ ์์ค์ ํ์ธ์.# ์ด ๊ฒฝ์ฐ์ 262144๋ก ์ค์ ํ์ต๋๋ค.: $ sudo sysctl -w vm.max_map_count=262144
์ด ๋ณ๊ฒฝ ์ฌํญ์ ์์คํ ์ฌ๋ถํ ํ์ ์ด๊ธฐํ๋ฉ๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฉํ๋ ค๋ฉด /etc/sysctl.conf ํ์ผ์ vm.max_map_count ๊ฐ์ ์ถ๊ฐํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ์ธ์:
vm.max_map_count=262144
๋ ํฌ์งํ ๋ฆฌ๋ฅผ ํด๋ก ํ์ธ์:
$ git clone https://github.com/infiniflow/ragflow.git
๋ฏธ๋ฆฌ ๋น๋๋ Docker ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ ์๋ฒ๋ฅผ ์์ํ์ธ์:
์๋์ ๋ช ๋ น์ RAGFlow slim(dev-slim)์ ๊ฐ๋ฐ ๋ฒ์ Docker ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค. RAGFlow slim Docker ์ด๋ฏธ์ง์๋ ์๋ฒ ๋ฉ ๋ชจ๋ธ์ด๋ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํฌํจ๋์ด ์์ง ์์ผ๋ฏ๋ก ํฌ๊ธฐ๋ ์ฝ 1GB์ ๋๋ค.
$ cd ragflow/docker $ docker compose -f docker-compose.yml up -d
- ํน์ ๋ฒ์ ์ RAGFlow slim Docker ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํ๋ ค๋ฉด, docker/.env์์
RAGFlow_IMAGE
๋ณ์๋ฅผ ์ํ๋ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ์ธ์. ์๋ฅผ ๋ค์ด,RAGFLOW_IMAGE=infiniflow/ragflow:v0.13.0-slim
์ผ๋ก ์ค์ ํฉ๋๋ค. ์ด ๋ณ๊ฒฝ์ ์๋ฃํ ํ, ์์ ๋ช ๋ น์ ๋ค์ ์คํํ์ฌ ๋ค์ด๋ก๋๋ฅผ ์์ํ์ธ์. - RAGFlow์ ์๋ฒ ๋ฉ ๋ชจ๋ธ๊ณผ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ ๊ฐ๋ฐ ๋ฒ์ Docker ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํ๋ ค๋ฉด, docker/.env์์
RAGFlow_IMAGE
๋ณ์๋ฅผRAGFLOW_IMAGE=infiniflow/ragflow:dev
๋ก ์ ๋ฐ์ดํธํ์ธ์. ์ด ๋ณ๊ฒฝ์ ์๋ฃํ ํ, ์์ ๋ช ๋ น์ ๋ค์ ์คํํ์ฌ ๋ค์ด๋ก๋๋ฅผ ์์ํ์ธ์. - ํน์ ๋ฒ์ ์ RAGFlow Docker ์ด๋ฏธ์ง๋ฅผ ์๋ฒ ๋ฉ ๋ชจ๋ธ๊ณผ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ์ฌ ๋ค์ด๋ก๋ํ๋ ค๋ฉด, docker/.env์์
RAGFlow_IMAGE
๋ณ์๋ฅผ ์ํ๋ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ์ธ์. ์๋ฅผ ๋ค์ด,RAGFLOW_IMAGE=infiniflow/ragflow:v0.13.0
๋ก ์ค์ ํฉ๋๋ค. ์ด ๋ณ๊ฒฝ์ ์๋ฃํ ํ, ์์ ๋ช ๋ น์ ๋ค์ ์คํํ์ฌ ๋ค์ด๋ก๋๋ฅผ ์์ํ์ธ์.
NOTE: ์๋ฒ ๋ฉ ๋ชจ๋ธ๊ณผ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ RAGFlow Docker ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ ์ฝ 9GB์ด๋ฉฐ, ๋ก๋ํ๋ ๋ฐ ์๋นํ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
- ํน์ ๋ฒ์ ์ RAGFlow slim Docker ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํ๋ ค๋ฉด, docker/.env์์
์๋ฒ๊ฐ ์์๋ ํ ์๋ฒ ์ํ๋ฅผ ํ์ธํ์ธ์:
$ docker logs -f ragflow-server
๋ค์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ก ์์คํ ์ด ์ฑ๊ณต์ ์ผ๋ก ์์๋์์์ ํ์ธํฉ๋๋ค:
____ ___ ______ ______ __ / __ \ / | / ____// ____// /____ _ __ / /_/ // /| | / / __ / /_ / // __ \| | /| / / / _, _// ___ |/ /_/ // __/ / // /_/ /| |/ |/ / /_/ |_|/_/ |_|\____//_/ /_/ \____/ |__/|__/ * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:9380 * Running on http://x.x.x.x:9380 INFO:werkzeug:Press CTRL+C to quit
๋ง์ฝ ํ์ธ ๋จ๊ณ๋ฅผ ๊ฑด๋๋ฐ๊ณ ๋ฐ๋ก RAGFlow์ ๋ก๊ทธ์ธํ๋ฉด, RAGFlow๊ฐ ์์ ํ ์ด๊ธฐํ๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ์์
network anormal
์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.์น ๋ธ๋ผ์ฐ์ ์ ์๋ฒ์ IP ์ฃผ์๋ฅผ ์ ๋ ฅํ๊ณ RAGFlow์ ๋ก๊ทธ์ธํ์ธ์.
๊ธฐ๋ณธ ์ค์ ์ ์ฌ์ฉํ ๊ฒฝ์ฐ,
http://IP_OF_YOUR_MACHINE
๋ง ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค (ํฌํธ ๋ฒํธ๋ ์ ์ธ). ๊ธฐ๋ณธ HTTP ์๋น์ค ํฌํธ80
์ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ผ๋ก ์ฌ์ฉํ ๋ ์๋ตํ ์ ์์ต๋๋ค.service_conf.yaml ํ์ผ์์ ์ํ๋ LLM ํฉํ ๋ฆฌ๋ฅผ
user_default_llm
์ ์ ํํ๊ณ ,API_KEY
ํ๋๋ฅผ ํด๋น API ํค๋ก ์ ๋ฐ์ดํธํ์ธ์.์์ธํ ๋ด์ฉ์ llm_api_key_setup๋ฅผ ์ฐธ์กฐํ์ธ์.
์ด์ ์ผ๊ฐ ์์๋ฉ๋๋ค!
๐ง ์ค์
์์คํ ์ค์ ๊ณผ ๊ด๋ จํ์ฌ ๋ค์ ํ์ผ๋ค์ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค:
- .env:
SVR_HTTP_PORT
,MYSQL_PASSWORD
,MINIO_PASSWORD
์ ๊ฐ์ ์์คํ ์ ๊ธฐ๋ณธ ์ค์ ์ ํฌํจํฉ๋๋ค. - service_conf.yaml: ๋ฐฑ์๋ ์๋น์ค๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
- docker-compose.yml: ์์คํ ์ docker-compose.yml์ ์ฌ์ฉํ์ฌ ์์๋ฉ๋๋ค.
.env ํ์ผ์ ๋ณ๊ฒฝ ์ฌํญ์ด service_conf.yaml ํ์ผ์ ๋ด์ฉ๊ณผ ์ผ์นํ๋๋ก ํด์ผ ํฉ๋๋ค.
./docker/README ํ์ผ์๋ ํ๊ฒฝ ์ค์ ๊ณผ ์๋น์ค ๊ตฌ์ฑ์ ๋ํ ์์ธํ ์ค๋ช ์ด ์์ผ๋ฉฐ, ./docker/README ํ์ผ์ ๋์ด๋ ๋ชจ๋ ํ๊ฒฝ ์ค์ ์ด service_conf.yaml ํ์ผ์ ํด๋น ๊ตฌ์ฑ๊ณผ ์ผ์นํ๋๋ก ํด์ผ ํฉ๋๋ค.
๊ธฐ๋ณธ HTTP ์๋น์ค ํฌํธ(80)๋ฅผ ์
๋ฐ์ดํธํ๋ ค๋ฉด docker-compose.yml ํ์ผ์์ 80:80
์ <YOUR_SERVING_PORT>:80
์ผ๋ก ๋ณ๊ฒฝํ์ธ์.
๋ชจ๋ ์์คํ ๊ตฌ์ฑ ์ ๋ฐ์ดํธ๋ ์ ์ฉ๋๊ธฐ ์ํด ์์คํ ์ฌ๋ถํ ์ด ํ์ํฉ๋๋ค.
$ docker compose -f docker/docker-compose.yml up -d
Elasticsearch ์์ Infinity ๋ก ๋ฌธ์ ์์ง ์ ํ
RAGFlow ๋ ๊ธฐ๋ณธ์ ์ผ๋ก Elasticsearch ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฒด ํ ์คํธ ๋ฐ ๋ฒกํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. [Infinity]๋ก ์ ํ(https://github.com/infiniflow/infinity/), ๋ค์ ์ ์ฐจ๋ฅผ ๋ฐ๋ฅด์ญ์์ค.
- ์คํ ์ค์ธ ๋ชจ๋ ์ปจํ
์ด๋๋ฅผ ์ค์งํฉ๋๋ค.
$docker compose-f docker/docker-compose.yml down-v
- docker/.env์ "DOC_ENGINE" ์ "infinity" ๋ก ์ค์ ํฉ๋๋ค.
- ์ปจํ
์ด๋ ๋ถํ
:
$docker compose-f docker/docker-compose.yml up-d
Linux/arm64 ์์คํ ์์ Infinity๋ก ์ ํํ๋ ๊ฒ์ ๊ณต์์ ์ผ๋ก ์ง์๋์ง ์์ต๋๋ค.
๐ง ์์ค ์ฝ๋๋ก Docker ์ด๋ฏธ์ง๋ฅผ ์ปดํ์ผํฉ๋๋ค(์๋ฒ ๋ฉ ๋ชจ๋ธ ํฌํจํ์ง ์์)
์ด Docker ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ ์ฝ 1GB์ด๋ฉฐ, ์ธ๋ถ ๋ํ ๋ชจ๋ธ๊ณผ ์๋ฒ ๋ฉ ์๋น์ค์ ์์กดํฉ๋๋ค.
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
pip3 install huggingface-hub nltk
python3 download_deps.py
bash build_docker_image.sh slim
๐ง ์์ค ์ฝ๋๋ก Docker ์ด๋ฏธ์ง๋ฅผ ์ปดํ์ผํฉ๋๋ค(์๋ฒ ๋ฉ ๋ชจ๋ธ ํฌํจ)
์ด Docker์ ํฌ๊ธฐ๋ ์ฝ 9GB์ด๋ฉฐ, ์ด๋ฏธ ์๋ฒ ๋ฉ ๋ชจ๋ธ์ ํฌํจํ๊ณ ์์ผ๋ฏ๋ก ์ธ๋ถ ๋ํ ๋ชจ๋ธ ์๋น์ค์๋ง ์์กดํ๋ฉด ๋ฉ๋๋ค.
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
pip3 install huggingface-hub nltk
python3 download_deps.py
bash build_docker_image.sh full
๐จ ์์ค ์ฝ๋๋ก ์๋น์ค๋ฅผ ์์ํฉ๋๋ค.
Poetry๋ฅผ ์ค์นํ๊ฑฐ๋ ์ด๋ฏธ ์ค์น๋ ๊ฒฝ์ฐ ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋๋๋ค:
curl -sSL https://install.python-poetry.org | python3 -
์์ค ์ฝ๋๋ฅผ ํด๋ก ํ๊ณ Python ์์กด์ฑ์ ์ค์นํฉ๋๋ค:
git clone https://github.com/infiniflow/ragflow.git cd ragflow/ export POETRY_VIRTUALENVS_CREATE=true POETRY_VIRTUALENVS_IN_PROJECT=true ~/.local/bin/poetry install --sync --no-root # install RAGFlow dependent python modules
Docker Compose๋ฅผ ์ฌ์ฉํ์ฌ ์์กด ์๋น์ค(MinIO, Elasticsearch, Redis ๋ฐ MySQL)๋ฅผ ์์ํฉ๋๋ค:
docker compose -f docker/docker-compose-base.yml up -d
/etc/hosts
์ ๋ค์ ์ค์ ์ถ๊ฐํ์ฌ docker/service_conf.yaml ์ ์ง์ ๋ ๋ชจ๋ ํธ์คํธ๋ฅผ127.0.0.1
๋ก ํด๊ฒฐํฉ๋๋ค:127.0.0.1 es01 infinity mysql minio redis
docker/service_conf.yaml ์์ mysql ํฌํธ๋ฅผ
5455
๋ก, es ํฌํธ๋ฅผ1200
์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค( docker/.env ์ ์ง์ ๋ ๋๋ก).HuggingFace์ ์ ๊ทผํ ์ ์๋ ๊ฒฝ์ฐ,
HF_ENDPOINT
ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ์ฌ ๋ฏธ๋ฌ ์ฌ์ดํธ๋ฅผ ์ฌ์ฉํ์ธ์:export HF_ENDPOINT=https://hf-mirror.com
๋ฐฑ์๋ ์๋น์ค๋ฅผ ์์ํฉ๋๋ค:
source .venv/bin/activate export PYTHONPATH=$(pwd) bash docker/launch_backend_service.sh
ํ๋ก ํธ์๋ ์์กด์ฑ์ ์ค์นํฉ๋๋ค:
cd web npm install --force
.umirc.ts ์์
proxy.target
์http://127.0.0.1:9380
์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค:ํ๋ก ํธ์๋ ์๋น์ค๋ฅผ ์์ํฉ๋๋ค:
npm run dev
๋ค์ ์ธํฐํ์ด์ค๋ ์์คํ ์ด ์ฑ๊ณต์ ์ผ๋ก ์์๋์์์ ๋ํ๋ ๋๋ค:
๐ ๋ฌธ์
๐ ๋ก๋๋งต
RAGFlow ๋ก๋๋งต 2024์ ํ์ธํ์ธ์.
๐ ์ปค๋ฎค๋ํฐ
๐ ์ปจํธ๋ฆฌ๋ทฐ์
RAGFlow๋ ์คํ์์ค ํ์ ์ ํตํด ๋ฐ์ ํฉ๋๋ค. ์ด๋ฌํ ์ ์ ์ ๋ฐํ์ผ๋ก, ์ฐ๋ฆฌ๋ ์ปค๋ฎค๋ํฐ์ ๋ค์ํ ๊ธฐ์ฌ๋ฅผ ํ์ํฉ๋๋ค. ์ฐธ์ฌํ๊ณ ์ถ์ผ์๋ค๋ฉด, ๋จผ์ ๊ฐ์ด๋๋ผ์ธ์ ๊ฒํ ํด ์ฃผ์ธ์.