English | ็ฎไฝไธญๆ | ๆฅๆฌ่ช | ํ๊ตญ์ด | Bahasa Indonesia
Document | Roadmap | Twitter | Discord | Demo
๐ก RAGFlow๋?
RAGFlow๋ ์ฌ์ธต ๋ฌธ์ ์ดํด์ ๊ธฐ๋ฐํ ์คํ์์ค RAG (Retrieval-Augmented Generation) ์์ง์ ๋๋ค. ์ด ์์ง์ ๋๊ท๋ชจ ์ธ์ด ๋ชจ๋ธ(LLM)๊ณผ ๊ฒฐํฉํ์ฌ ์ ํํ ์ง๋ฌธ ์๋ต ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๋ค์ํ ๋ณต์กํ ํ์์ ๋ฐ์ดํฐ์์ ์ ๋ขฐํ ์ ์๋ ์ถ์ฒ๋ฅผ ๋ฐํ์ผ๋ก ํ ์ธ์ฉ์ ํตํด ์ด๋ฅผ ๋ท๋ฐ์นจํฉ๋๋ค. RAGFlow๋ ๊ท๋ชจ์ ์๊ด์์ด ๋ชจ๋ ๊ธฐ์ ์ ์ต์ ํ๋ RAG ์ํฌํ๋ก์ฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๐ฎ ๋ฐ๋ชจ
๋ฐ๋ชจ๋ฅผ https://demo.ragflow.io์์ ์คํํด ๋ณด์ธ์.
๐ฅ ์ ๋ฐ์ดํธ
2024-12-04 ์ง์๋ฒ ์ด์ค์ ๋ํ ํ์ด์ง๋ญํฌ ์ ์๋ฅผ ์ง์ํฉ๋๋ค.
2024-11-22 ์์ด์ ํธ์ ๋ณ์ ์ ์ ๋ฐ ์ฌ์ฉ์ ๊ฐ์ ํ์ต๋๋ค.
2024-11-01 ํ์ฑ๋ ์ฒญํฌ์ ํค์๋ ์ถ์ถ ๋ฐ ๊ด๋ จ ์ง๋ฌธ ์์ฑ์ ์ถ๊ฐํ์ฌ ์ฌํ์จ์ ํฅ์์ํต๋๋ค.
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 Docker ์ด๋ฏธ์ง์ v0.14.1-slim ๋ฒ์ ์ ๋ค์ด๋ก๋ํฉ๋๋ค. ๋ค์ํ RAGFlow ๋ฒ์ ์ ๋ํ ์ค๋ช ์ ๋ค์ ํ๋ฅผ ์ฐธ์กฐํ์ญ์์ค. v0.14.1-slim๊ณผ ๋ค๋ฅธ RAGFlow ๋ฒ์ ์ ๋ค์ด๋ก๋ํ๋ ค๋ฉด, docker/.env ํ์ผ์์ RAGFLOW_IMAGE ๋ณ์๋ฅผ ์ ์ ํ ์ ๋ฐ์ดํธํ ํ docker compose๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ๋ฅผ ์์ํ์ญ์์ค. ์๋ฅผ ๋ค์ด, ์ ์ฒด ๋ฒ์ ์ธ v0.14.1์ ๋ค์ด๋ก๋ํ๋ ค๋ฉด RAGFLOW_IMAGE=infiniflow/ragflow:v0.14.1๋ก ์ค์ ํฉ๋๋ค.
$ cd ragflow $ docker compose -f docker/docker-compose.yml up -d
RAGFlow image tag Image size (GB) Has embedding models? Stable? v0.14.1 โ9 :heavy_check_mark: Stable release v0.14.1-slim โ2 โ Stable release v0.15.0-dev1 โ9 :heavy_check_mark: Unstable beta release v0.15.0-dev1-slim โ2 โ Unstable beta release nightly โ9 :heavy_check_mark: Unstable nightly build nightly-slim โ2 โ Unstable nightly build ์๋ฒ๊ฐ ์์๋ ํ ์๋ฒ ์ํ๋ฅผ ํ์ธํ์ธ์:
$ 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.template ํ์ผ์์ ์ํ๋ LLM ํฉํ ๋ฆฌ๋ฅผ
user_default_llm
์ ์ ํํ๊ณ ,API_KEY
ํ๋๋ฅผ ํด๋น API ํค๋ก ์ ๋ฐ์ดํธํ์ธ์.์์ธํ ๋ด์ฉ์ llm_api_key_setup๋ฅผ ์ฐธ์กฐํ์ธ์.
์ด์ ์ผ๊ฐ ์์๋ฉ๋๋ค!
๐ง ์ค์
์์คํ ์ค์ ๊ณผ ๊ด๋ จํ์ฌ ๋ค์ ํ์ผ๋ค์ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค:
- .env:
SVR_HTTP_PORT
,MYSQL_PASSWORD
,MINIO_PASSWORD
์ ๊ฐ์ ์์คํ ์ ๊ธฐ๋ณธ ์ค์ ์ ํฌํจํฉ๋๋ค. - service_conf.yaml.template: ๋ฐฑ์๋ ์๋น์ค๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
- docker-compose.yml: ์์คํ ์ docker-compose.yml์ ์ฌ์ฉํ์ฌ ์์๋ฉ๋๋ค.
.env ํ์ผ์ ๋ณ๊ฒฝ ์ฌํญ์ด service_conf.yaml.template ํ์ผ์ ๋ด์ฉ๊ณผ ์ผ์นํ๋๋ก ํด์ผ ํฉ๋๋ค.
./docker/README ํ์ผ ./docker/README์ service_conf.yaml.template ํ์ผ์์ ${ENV_VARS}๋ก ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ ์ค์ ๊ณผ ์๋น์ค ๊ตฌ์ฑ์ ๋ํ ์์ธํ ์ค๋ช ์ ์ ๊ณตํฉ๋๋ค.
๊ธฐ๋ณธ 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/
docker build --build-arg LIGHTEN=1 -f Dockerfile -t infiniflow/ragflow:nightly-slim .
๐ง ์์ค ์ฝ๋๋ก Docker ์ด๋ฏธ์ง๋ฅผ ์ปดํ์ผํฉ๋๋ค(์๋ฒ ๋ฉ ๋ชจ๋ธ ํฌํจ)
์ด Docker์ ํฌ๊ธฐ๋ ์ฝ 9GB์ด๋ฉฐ, ์ด๋ฏธ ์๋ฒ ๋ฉ ๋ชจ๋ธ์ ํฌํจํ๊ณ ์์ผ๋ฏ๋ก ์ธ๋ถ ๋ํ ๋ชจ๋ธ ์๋น์ค์๋ง ์์กดํ๋ฉด ๋ฉ๋๋ค.
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
docker build -f Dockerfile -t infiniflow/ragflow:nightly .
๐จ ์์ค ์ฝ๋๋ก ์๋น์ค๋ฅผ ์์ํฉ๋๋ค.
Poetry๋ฅผ ์ค์นํ๊ฑฐ๋ ์ด๋ฏธ ์ค์น๋ ๊ฒฝ์ฐ ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋๋๋ค:
pipx install poetry export POETRY_VIRTUALENVS_CREATE=true POETRY_VIRTUALENVS_IN_PROJECT=true
์์ค ์ฝ๋๋ฅผ ํด๋ก ํ๊ณ Python ์์กด์ฑ์ ์ค์นํฉ๋๋ค:
git clone https://github.com/infiniflow/ragflow.git cd ragflow/ ~/.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
์ ๋ค์ ์ค์ ์ถ๊ฐํ์ฌ conf/service_conf.yaml ์ ์ง์ ๋ ๋ชจ๋ ํธ์คํธ๋ฅผ127.0.0.1
๋ก ํด๊ฒฐํฉ๋๋ค:127.0.0.1 es01 infinity mysql minio redis
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
ํ๋ก ํธ์๋ ์๋น์ค๋ฅผ ์์ํฉ๋๋ค:
npm run dev
๋ค์ ์ธํฐํ์ด์ค๋ ์์คํ ์ด ์ฑ๊ณต์ ์ผ๋ก ์์๋์์์ ๋ํ๋ ๋๋ค:
๐ ๋ฌธ์
๐ ๋ก๋๋งต
RAGFlow ๋ก๋๋งต 2024์ ํ์ธํ์ธ์.
๐ ์ปค๋ฎค๋ํฐ
๐ ์ปจํธ๋ฆฌ๋ทฐ์
RAGFlow๋ ์คํ์์ค ํ์ ์ ํตํด ๋ฐ์ ํฉ๋๋ค. ์ด๋ฌํ ์ ์ ์ ๋ฐํ์ผ๋ก, ์ฐ๋ฆฌ๋ ์ปค๋ฎค๋ํฐ์ ๋ค์ํ ๊ธฐ์ฌ๋ฅผ ํ์ํฉ๋๋ค. ์ฐธ์ฌํ๊ณ ์ถ์ผ์๋ค๋ฉด, ๋จผ์ ๊ฐ์ด๋๋ผ์ธ์ ๊ฒํ ํด ์ฃผ์ธ์.